diff --git a/.eslintrc.js b/.eslintrc.js
index 18802cdf18..29136d5dd0 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -7,10 +7,67 @@ module.exports = {
'prettier',
],
parser: '@typescript-eslint/parser',
- plugins: ['@typescript-eslint', 'detox', 'react', 'lingui'],
+ plugins: [
+ '@typescript-eslint',
+ 'detox',
+ 'react',
+ 'lingui',
+ 'simple-import-sort',
+ 'bsky-internal',
+ ],
rules: {
+ // Temporary until https://github.com/facebook/react-native/pull/43756 gets into a release.
+ 'prettier/prettier': 0,
'react/no-unescaped-entities': 0,
'react-native/no-inline-styles': 0,
+ 'bsky-internal/avoid-unwrapped-text': [
+ 'error',
+ {
+ impliedTextComponents: ['H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'P'],
+ impliedTextProps: [],
+ suggestedTextWrappers: {
+ Button: 'ButtonText',
+ 'ToggleButton.Button': 'ToggleButton.ButtonText',
+ },
+ },
+ ],
+ 'bsky-internal/use-typed-gates': 'error',
+ 'simple-import-sort/imports': [
+ 'warn',
+ {
+ groups: [
+ // Side effect imports.
+ ['^\\u0000'],
+ // Node.js builtins prefixed with `node:`.
+ ['^node:'],
+ // Packages.
+ // Things that start with a letter (or digit or underscore), or `@` followed by a letter.
+ // React/React Native priortized, followed by expo
+ // Followed by all packages excluding unprefixed relative ones
+ [
+ '^(react\\/(.*)$)|^(react$)|^(react-native(.*)$)',
+ '^(expo(.*)$)|^(expo$)',
+ '^(?!(?:alf|components|lib|locale|logger|platform|screens|state|view)(?:$|\\/))@?\\w',
+ ],
+ // Relative imports.
+ // Ideally, anything that starts with a dot or #
+ // due to unprefixed relative imports being used, we whitelist the relative paths we use
+ // (?:$|\\/) matches end of string or /
+ [
+ '^(?:#\\/)?(?:lib|state|logger|platform|locale)(?:$|\\/)',
+ '^(?:#\\/)?view(?:$|\\/)',
+ '^(?:#\\/)?screens(?:$|\\/)',
+ '^(?:#\\/)?alf(?:$|\\/)',
+ '^(?:#\\/)?components(?:$|\\/)',
+ '^#\\/',
+ '^\\.',
+ ],
+ // anything else - hopefully we don't have any of these
+ ['^'],
+ ],
+ },
+ ],
+ 'simple-import-sort/exports': 'warn',
},
ignorePatterns: [
'**/__mocks__/*.ts',
@@ -31,4 +88,8 @@ module.exports = {
settings: {
componentWrapperFunctions: ['observer'],
},
+ parserOptions: {
+ sourceType: 'module',
+ ecmaVersion: 'latest',
+ },
}
diff --git a/.github/workflows/build-and-push-bskyweb-aws.yaml b/.github/workflows/build-and-push-bskyweb-aws.yaml
index fef24f952b..3f60705792 100644
--- a/.github/workflows/build-and-push-bskyweb-aws.yaml
+++ b/.github/workflows/build-and-push-bskyweb-aws.yaml
@@ -3,8 +3,8 @@ on:
push:
branches:
- main
- - traffic-reduction
- - respect-optout-for-embeds
+ - 3p-moderators
+
env:
REGISTRY: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_REGISTRY }}
USERNAME: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_USERNAME }}
diff --git a/.github/workflows/build-submit-android.yml b/.github/workflows/build-submit-android.yml
new file mode 100644
index 0000000000..9a26b82c21
--- /dev/null
+++ b/.github/workflows/build-submit-android.yml
@@ -0,0 +1,117 @@
+---
+name: Build and Submit Android
+
+on:
+ workflow_dispatch:
+ inputs:
+ profile:
+ type: choice
+ description: Build profile to use
+ options:
+ - testflight-android
+ - production
+
+jobs:
+ build:
+ name: Build and Submit Android
+ runs-on: ubuntu-latest
+ steps:
+ - name: Check for EXPO_TOKEN
+ run: >
+ if [ -z "${{ secrets.EXPO_TOKEN }}" ]; then
+ echo "You must provide an EXPO_TOKEN secret linked to this project's Expo account in this repo's secrets. Learn more: https://docs.expo.dev/eas-update/github-actions"
+ exit 1
+ fi
+
+ - name: ⬇️ Checkout
+ uses: actions/checkout@v4
+
+ - name: 🔧 Setup Node
+ uses: actions/setup-node@v4
+ with:
+ node-version-file: .nvmrc
+ cache: yarn
+
+ - name: 🔨 Setup EAS
+ uses: expo/expo-github-action@v8
+ with:
+ expo-version: latest
+ eas-version: latest
+ token: ${{ secrets.EXPO_TOKEN }}
+
+ - name: ⛏️ Setup EAS local builds
+ run: yarn global add eas-cli-local-build-plugin
+
+ - uses: actions/setup-java@v4
+ with:
+ distribution: 'temurin'
+ java-version: '17'
+
+ - name: ⚙️ Install dependencies
+ run: yarn install
+
+ - name: 🔤 Compile translations
+ run: yarn intl:build
+
+ - name: ✏️ Write environment variables
+ run: |
+ export json='${{ secrets.GOOGLE_SERVICES_TOKEN }}'
+ echo "${{ secrets.ENV_TOKEN }}" > .env
+ echo "$json" > google-services.json
+
+ - name: 🏗️ EAS Build
+ run: yarn use-build-number-with-bump eas build -p android --profile ${{ inputs.profile || 'testflight-android' }} --local --output build.aab --non-interactive
+
+ - name: ✍️ Rename Testflight bundle
+ if: ${{ inputs.profile != 'production' }}
+ run: mv build.aab build.apk
+
+ - name: ⏰ Get a timestamp
+ id: timestamp
+ uses: nanzm/get-time-action@master
+ with:
+ format: 'MM-DD-HH-mm-ss'
+
+ - name: 🚀 Upload Production Artifact
+ id: upload-artifact-production
+ if: ${{ inputs.profile == 'production' }}
+ uses: actions/upload-artifact@v4
+ with:
+ retention-days: 30
+ compression-level: 6
+ name: build-${{ steps.timestamp.outputs.time }}.aab
+ path: build.aab
+
+ - name: 🚀 Upload Testflight Artifact
+ id: upload-artifact-testflight
+ if: ${{ inputs.profile != 'production' }}
+ uses: actions/upload-artifact@v4
+ with:
+ retention-days: 30
+ compression-level: 6
+ name: build-${{ steps.timestamp.outputs.time }}.apk
+ path: build.apk
+
+ - name: 🔔 Notify Slack of Production Build
+ if: ${{ inputs.profile == 'production' }}
+ uses: slackapi/slack-github-action@v1.25.0
+ with:
+ payload: |
+ {
+ "text": "Android build is ready for submission. This is a production build! Download the artifact here: ${{ steps.upload-artifact-production.outputs.artifact-url }}"
+ }
+ env:
+ SLACK_WEBHOOK_URL: ${{ secrets.SLACK_CLIENT_ALERT_WEBHOOK }}
+ SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK
+
+ - name: 🔔 Notify Slack of Testflight Build
+ if: ${{ inputs.profile != 'production' }}
+ uses: slackapi/slack-github-action@v1.25.0
+ with:
+ payload: |
+ {
+ "text": "Android build is ready for testing. Download the artifact here: ${{ steps.upload-artifact-testflight.outputs.artifact-url }}"
+ }
+ env:
+ SLACK_WEBHOOK_URL: ${{ secrets.SLACK_CLIENT_ALERT_WEBHOOK }}
+ SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK
diff --git a/.github/workflows/build-submit-ios.yml b/.github/workflows/build-submit-ios.yml
new file mode 100644
index 0000000000..c9752d8621
--- /dev/null
+++ b/.github/workflows/build-submit-ios.yml
@@ -0,0 +1,74 @@
+---
+name: Build and Submit iOS
+
+on:
+ workflow_dispatch:
+ inputs:
+ profile:
+ type: choice
+ description: Build profile to use
+ options:
+ - testflight
+ - production
+
+jobs:
+ build:
+ name: Build and Submit iOS
+ runs-on: macos-14
+ steps:
+ - name: Check for EXPO_TOKEN
+ run: >
+ if [ -z "${{ secrets.EXPO_TOKEN }}" ]; then
+ echo "You must provide an EXPO_TOKEN secret linked to this project's Expo account in this repo's secrets. Learn more: https://docs.expo.dev/eas-update/github-actions"
+ exit 1
+ fi
+
+ - name: ⬇️ Checkout
+ uses: actions/checkout@v4
+
+ - name: 🔧 Setup Node
+ uses: actions/setup-node@v4
+ with:
+ node-version-file: .nvmrc
+ cache: yarn
+
+ - name: 🔨 Setup EAS
+ uses: expo/expo-github-action@v8
+ with:
+ expo-version: latest
+ eas-version: latest
+ token: ${{ secrets.EXPO_TOKEN }}
+
+ - name: ⛏️ Setup EAS local builds
+ run: yarn global add eas-cli-local-build-plugin
+
+ - name: ⚙️ Install dependencies
+ run: yarn install
+
+ - name: ☕️ Setup Cocoapods
+ uses: maxim-lobanov/setup-cocoapods@v1
+ with:
+ version: 1.14.3
+
+ - name: 💾 Cache Pods
+ uses: actions/cache@v3
+ id: pods-cache
+ with:
+ path: ./ios/Pods
+ # We'll use the yarn.lock for our hash since we don't yet have a Podfile.lock. Pod versions will not
+ # change unless the yarn version changes as well.
+ key: ${{ runner.os }}-pods-${{ hashFiles('yarn.lock') }}
+
+ - name: 🔤 Compile translations
+ run: yarn intl:build
+
+ - name: ✏️ Write environment variables
+ run: |
+ echo "${{ secrets.ENV_TOKEN }}" > .env
+ echo "${{ secrets.GOOGLE_SERVICES_TOKEN }}" > google-services.json
+
+ - name: 🏗️ EAS Build
+ run: yarn use-build-number-with-bump eas build -p ios --profile ${{ inputs.profile || 'testflight' }} --local --output build.ipa --non-interactive
+
+ - name: 🚀 Deploy
+ run: eas submit -p ios --non-interactive --path build.ipa
diff --git a/.github/workflows/bundle-deploy-eas-update.yml b/.github/workflows/bundle-deploy-eas-update.yml
new file mode 100644
index 0000000000..2e07335eef
--- /dev/null
+++ b/.github/workflows/bundle-deploy-eas-update.yml
@@ -0,0 +1,315 @@
+---
+name: Bundle and Deploy EAS Update
+
+on:
+ push:
+ branches:
+ - main
+ workflow_dispatch:
+ inputs:
+ channel:
+ type: choice
+ description: Deployment channel to use
+ options:
+ - testflight
+ - production
+ runtimeVersion:
+ type: string
+ description: Runtime version (in x.x.x format) that this update is for
+ required: true
+
+jobs:
+ bundleDeploy:
+ name: Bundle and Deploy EAS Update
+ runs-on: ubuntu-latest
+ concurrency:
+ group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}-deploy
+ cancel-in-progress: true
+ outputs:
+ fingerprint-is-different: ${{ steps.fingerprint-debug.outputs.fingerprint-is-different }}
+
+ steps:
+ - name: Check for EXPO_TOKEN
+ run: >
+ if [ -z "${{ secrets.EXPO_TOKEN }}" ]; then
+ echo "You must provide an EXPO_TOKEN secret linked to this project's Expo account in this repo's secrets. Learn more: https://docs.expo.dev/eas-update/github-actions"
+ exit 1
+ fi
+
+ # Validate the version if one is supplied. This should generally happen if the update is for a production client
+ - name: 🧐 Validate version
+ if: ${{ inputs.runtimeVersion }}
+ run: |
+ if [ -z "${{ inputs.runtimeVersion }}" ]; then
+ [[ "${{ inputs.runtimeVersion }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && echo "Version is valid" || exit 1
+ fi
+
+ - name: ⬇️ Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: ⬇️ Get last successful deployment commit from the cache
+ id: get-base-commit
+ uses: actions/cache@v4
+ with:
+ path: last-successful-commit-hash.txt
+ key: last-successful-deployment-commit-${{ github.ref_name }}
+
+ - name: Add the last successful deployment commit to the output
+ id: last-successful-commit
+ run: echo base-commit=$(cat last-successful-commit-hash.txt) >> "$GITHUB_OUTPUT"
+
+ - name: ⬇️ Fetch commits from base branch
+ if: ${{ github.ref != 'refs/heads/main' }}
+ run: git fetch origin main:main --depth 100
+
+ # This should get the current production release's commit's hash to see if the update is compatible
+ - name: 🕵️ Get the base commit
+ id: base-commit
+ run: |
+ if [ -z "${{ inputs.channel == 'production' }}" ]; then
+ echo base-commit=$(git show-ref -s ${{ inputs.runtimeVersion }}) >> "$GITHUB_OUTPUT"
+ else
+ echo base-commit=${{ steps.last-successful-commit.base-commit }} >> "$GITHUB_OUTPUT"
+ fi
+
+ - name: ✓ Make sure we found a base commit
+ run: |
+ if [ -z "${{ steps.base-commit.outputs.base-commit }}" && ${{ inputs.channel == 'production' }} ]; then
+ echo "Could not find a base commit for this release. Exiting."
+ exit 1
+ fi
+
+ - name: 🔧 Setup Node
+ uses: actions/setup-node@v4
+ with:
+ node-version-file: .nvmrc
+ cache: yarn
+
+ - name: ⚙️ Install Dependencies
+ run: yarn install
+
+ # Run the fingerprint
+ - name: 📷 Check fingerprint
+ id: fingerprint
+ uses: expo/expo-github-action/fingerprint@main
+ with:
+ previous-git-commit: ${{ steps.base-commit.outputs.base-commit }}
+
+ - name: 👀 Debug fingerprint
+ id: fingerprint-debug
+ run: |
+ echo "previousGitCommit=${{ steps.fingerprint.outputs.previous-git-commit }} currentGitCommit=${{ steps.fingerprint.outputs.current-git-commit }}"
+ echo "isPreviousFingerprintEmpty=${{ steps.fingerprint.outputs.previous-fingerprint == '' }}"
+
+ fingerprintDiff='$(echo "${{ steps.fingerprint.outputs.fingerprint-diff }}")'
+
+ if [[ $fingerprintDiff =~ "bareRncliAutolinking" || $fingerprintDiff =~ "expoAutolinkingAndroid" || $fingerprintDiff =~ "expoAutolinkingIos" ]]; then
+ echo fingerprint-is-different="true" >> "$GITHUB_OUTPUT"
+ else
+ echo fingerprint-is-different="false" >> "$GITHUB_OUTPUT"
+ fi
+
+ - name: Lint check
+ run: yarn lint
+
+ - name: Prettier check
+ run: yarn prettier --check .
+
+ - name: Check & compile i18n
+ run: yarn intl:build
+
+ - name: Type check
+ run: yarn typecheck
+
+ - name: 🔨 Setup EAS
+ uses: expo/expo-github-action@v8
+ if: ${{ steps.fingerprint-debug.outputs.fingerprint-is-different == 'false'}}
+ with:
+ expo-version: latest
+ eas-version: latest
+ token: ${{ secrets.EXPO_TOKEN }}
+
+ - name: ⛏️ Setup Expo
+ if: ${{ steps.fingerprint-debug.outputs.fingerprint-is-different == 'false'}}
+ run: yarn global add eas-cli-local-build-plugin
+
+ - name: 🪛 Setup jq
+ if: ${{ steps.fingerprint-debug.outputs.fingerprint-is-different == 'false'}}
+ uses: dcarbone/install-jq-action@v2
+
+ - name: ✏️ Write environment variables
+ if: ${{ steps.fingerprint-debug.outputs.fingerprint-is-different == 'false'}}
+ run: |
+ export json='${{ secrets.GOOGLE_SERVICES_TOKEN }}'
+ echo "${{ secrets.ENV_TOKEN }}" > .env
+ echo "$json" > google-services.json
+
+ - name: 🏗️ Create Bundle
+ if: ${{ steps.fingerprint-debug.outputs.fingerprint-is-different == 'false'}}
+ run: EXPO_PUBLIC_ENV="${{ inputs.channel || 'testflight' }}" yarn export
+
+ - name: 📦 Package Bundle and 🚀 Deploy
+ if: ${{ steps.fingerprint-debug.outputs.fingerprint-is-different == 'false'}}
+ run: yarn use-build-number bash scripts/bundleUpdate.sh
+ env:
+ DENIS_API_KEY: ${{ secrets.DENIS_API_KEY }}
+ RUNTIME_VERSION: ${{ inputs.runtimeVersion }}
+ CHANNEL_NAME: ${{ inputs.channel || 'testflight' }}
+
+ - name: Save successful deployment commit hash
+ run: echo ${{ steps.fingerprint.outputs.current-git-commit }} > last-successful-commit-hash.txt
+
+ # GitHub actions are horrible so let's just copy paste this in
+ buildIfNecessaryIOS:
+ name: Build and Submit iOS
+ runs-on: macos-14
+ concurrency:
+ group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}-build-ios
+ cancel-in-progress: false
+ needs: [bundleDeploy]
+ # Gotta check if its NOT '[]' because any md5 hash in the outputs is detected as a possible secret and won't be
+ # available here
+ if: ${{ inputs.channel != 'production' && needs.bundleDeploy.outputs.fingerprint-is-different == 'true' }}
+ steps:
+ - name: Check for EXPO_TOKEN
+ run: >
+ if [ -z "${{ secrets.EXPO_TOKEN }}" ]; then
+ echo "You must provide an EXPO_TOKEN secret linked to this project's Expo account in this repo's secrets. Learn more: https://docs.expo.dev/eas-update/github-actions"
+ exit 1
+ fi
+
+ - name: ⬇️ Checkout
+ uses: actions/checkout@v4
+
+ - name: 🔧 Setup Node
+ uses: actions/setup-node@v4
+ with:
+ node-version-file: .nvmrc
+ cache: yarn
+
+ - name: 🔨 Setup EAS
+ uses: expo/expo-github-action@v8
+ with:
+ expo-version: latest
+ eas-version: latest
+ token: ${{ secrets.EXPO_TOKEN }}
+
+ - name: ⛏️ Setup EAS local builds
+ run: yarn global add eas-cli-local-build-plugin
+
+ - name: ⚙️ Install dependencies
+ run: yarn install
+
+ - name: ☕️ Setup Cocoapods
+ uses: maxim-lobanov/setup-cocoapods@v1
+ with:
+ version: 1.14.3
+
+ - name: 💾 Cache Pods
+ uses: actions/cache@v3
+ id: pods-cache
+ with:
+ path: ./ios/Pods
+ # We'll use the yarn.lock for our hash since we don't yet have a Podfile.lock. Pod versions will not
+ # change unless the yarn version changes as well.
+ key: ${{ runner.os }}-pods-${{ hashFiles('yarn.lock') }}
+
+ - name: 🔤 Compile translations
+ run: yarn intl:build
+
+ - name: ✏️ Write environment variables
+ run: |
+ echo "${{ secrets.ENV_TOKEN }}" > .env
+ echo "${{ secrets.GOOGLE_SERVICES_TOKEN }}" > google-services.json
+
+ - name: 🏗️ EAS Build
+ run: yarn use-build-number-with-bump eas build -p ios --profile testflight --local --output build.ipa --non-interactive
+
+ - name: 🚀 Deploy
+ run: eas submit -p ios --non-interactive --path build.ipa
+
+ buildIfNecessaryAndroid:
+ name: Build and Submit Android
+ runs-on: ubuntu-latest
+ concurrency:
+ group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}-build-android
+ cancel-in-progress: false
+ needs: [ bundleDeploy ]
+ # Gotta check if its NOT '[]' because any md5 hash in the outputs is detected as a possible secret and won't be
+ # available here
+ if: ${{ inputs.channel != 'production' && needs.bundleDeploy.outputs.fingerprint-is-different == 'true' }}
+
+ steps:
+ - name: Check for EXPO_TOKEN
+ run: >
+ if [ -z "${{ secrets.EXPO_TOKEN }}" ]; then
+ echo "You must provide an EXPO_TOKEN secret linked to this project's Expo account in this repo's secrets. Learn more: https://docs.expo.dev/eas-update/github-actions"
+ exit 1
+ fi
+
+ - name: ⬇️ Checkout
+ uses: actions/checkout@v4
+
+ - name: 🔧 Setup Node
+ uses: actions/setup-node@v4
+ with:
+ node-version-file: .nvmrc
+ cache: yarn
+
+ - name: 🔨 Setup EAS
+ uses: expo/expo-github-action@v8
+ with:
+ expo-version: latest
+ eas-version: latest
+ token: ${{ secrets.EXPO_TOKEN }}
+
+ - name: ⛏️ Setup EAS local builds
+ run: yarn global add eas-cli-local-build-plugin
+
+ - uses: actions/setup-java@v4
+ with:
+ distribution: 'temurin'
+ java-version: '17'
+
+ - name: ⚙️ Install dependencies
+ run: yarn install
+
+ - name: 🔤 Compile translations
+ run: yarn intl:build
+
+ - name: ✏️ Write environment variables
+ run: |
+ export json='${{ secrets.GOOGLE_SERVICES_TOKEN }}'
+ echo "${{ secrets.ENV_TOKEN }}" > .env
+ echo "$json" > google-services.json
+
+ - name: 🏗️ EAS Build
+ run: yarn use-build-number-with-bump eas build -p android --profile testflight-android --local --output build.apk --non-interactive
+
+ - name: ⏰ Get a timestamp
+ id: timestamp
+ uses: nanzm/get-time-action@master
+ with:
+ format: 'MM-DD-HH-mm-ss'
+
+ - name: 🚀 Upload Artifact
+ id: upload-artifact
+ uses: actions/upload-artifact@v4
+ with:
+ retention-days: 30
+ compression-level: 0
+ name: build-${{ steps.timestamp.outputs.time }}.apk
+ path: build.apk
+
+ - name: 🔔 Notify Slack
+ uses: slackapi/slack-github-action@v1.25.0
+ with:
+ payload: |
+ {
+ "text": "Android build is ready for testing. Download the artifact here: ${{ steps.upload-artifact.outputs.artifact-url }}"
+ }
+ env:
+ SLACK_WEBHOOK_URL: ${{ secrets.SLACK_CLIENT_ALERT_WEBHOOK }}
+ SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK
diff --git a/.github/workflows/deploy-nightly-testflight.yml b/.github/workflows/deploy-nightly-testflight.yml
deleted file mode 100644
index e3875899ee..0000000000
--- a/.github/workflows/deploy-nightly-testflight.yml
+++ /dev/null
@@ -1,52 +0,0 @@
-name: Deploy Nightly Testflight Release
-
-on:
- schedule:
- - cron: '0 5 * * *'
-
-jobs:
- build:
- name: Deploy Nightly Testflight Release
- runs-on: ubuntu-latest
- permissions:
- contents: write
-
- steps:
- - name: Check for EXPO_TOKEN
- run: |
- if [ -z "${{ secrets.EXPO_TOKEN }}" ]; then
- echo "You must provide an EXPO_TOKEN secret linked to this project's Expo account in this repo's secrets. Learn more: https://docs.expo.dev/eas-update/github-actions"
- exit 1
- fi
-
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Setup Node
- uses: actions/setup-node@v3
- with:
- node-version: 18.x
- cache: yarn
-
- - name: Setup EAS
- uses: expo/expo-github-action@v8
- with:
- eas-version: latest
- token: ${{ secrets.EXPO_TOKEN }}
-
- - name: Install dependencies
- run: yarn install
-
- - name: Bump build number
- run: yarn bump:ios
-
- - name: EAS build and submit
- run: eas build -p ios --profile production --auto-submit --non-interactive
-
- - name: Commit
- uses: stefanzweifel/git-auto-commit-action@v5
- with:
- commit_message: Nightly iOS Build Bump
- branch: main
- commit_user_name: github-actions[bot]
- commit_user_email: github-actions[bot]@users.noreply.github.com
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 508da536b5..22cc657353 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -24,6 +24,8 @@ jobs:
attempt_delay: 2000
- name: Lint check
run: yarn lint
+ - name: Prettier check
+ run: yarn prettier --check .
- name: Check & compile i18n
run: yarn intl:build
- name: Type check
@@ -32,12 +34,12 @@ jobs:
name: Run tests
runs-on: ubuntu-latest
steps:
- - name: Install node 18
- uses: actions/setup-node@v4
- with:
- node-version: 18
- name: Check out Git repository
uses: actions/checkout@v3
+ - name: Install node
+ uses: actions/setup-node@v4
+ with:
+ node-version-file: .nvmrc
- name: Yarn install
uses: Wandalen/wretry.action@master
with:
diff --git a/.github/workflows/pull-request-commit.yml b/.github/workflows/pull-request-commit.yml
new file mode 100644
index 0000000000..6c796fd7c4
--- /dev/null
+++ b/.github/workflows/pull-request-commit.yml
@@ -0,0 +1,159 @@
+# Credit for fingerprint action https://github.com/expo/expo
+# https://github.com/expo/expo/blob/main/.github/workflows/pr-labeler.yml
+---
+name: PR labeler
+
+on:
+ push:
+ branches: [main]
+ pull_request:
+ types: [opened, synchronize]
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}
+ cancel-in-progress: true
+
+permissions:
+ pull-requests: write
+ actions: write
+ contents: read
+
+jobs:
+ webpack-analyzer:
+ runs-on: ubuntu-22.04
+ if: ${{ github.event.pull_request.head.repo.full_name == github.repository }}
+ steps:
+ - name: ⬇️ Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: 🔧 Setup Node
+ uses: actions/setup-node@v4
+ with:
+ node-version-file: .nvmrc
+ cache: yarn
+
+ - name: Ensure tracking relevant branches and checkout base
+ run: |
+ git checkout ${{ github.head_ref }}
+ git checkout ${{ github.base_ref }}
+
+ - name: Get the base commit
+ id: base-commit
+ run: echo base-commit=$(git log -n 1 ${{ github.base_ref }} --pretty=format:'%H') >> "$GITHUB_OUTPUT"
+
+ - name: Merge PR commit
+ run: |
+ # Have to set a git config for the merge to work
+ git config --global user.email "github-actions[bot]@users.noreply.github.com"
+ git config --global user.name "github-actions[bot]"
+ git merge --no-edit ${{ github.head_ref }}
+ yarn install
+
+ - name: 🔦 Generate stats file for PR
+ run: |
+ yarn generate-webpack-stats-file
+ mv stats.json ../stats-new.json
+
+ - name: ⬇️ Get base stats from cache
+ id: get-base-stats
+ uses: actions/cache@v4
+ with:
+ path: stats-base.json
+ key: stats-base-${{ steps.base-commit.outputs.base-commit }}
+
+ - name: Restore to base commit
+ if: ${{ !steps.get-base-stats.outputs.cache-hit }}
+ run: |
+ git reset HEAD~
+ git restore .
+
+ - name: 🔦 Generate stats file from base commit
+ if: ${{ !steps.get-base-stats.outputs.cache-hit }}
+ run: |
+ yarn install
+ yarn generate-webpack-stats-file
+ mv stats.json stats-base.json
+
+ - name: % Get diff
+ id: get-diff
+ uses: NejcZdovc/bundle-size-diff@v1
+ with:
+ base_path: 'stats-base.json'
+ pr_path: '../stats-new.json'
+ excluded_assets: '(.+).chunk.js|(.+).js.map|(.+).json|(.+).png'
+
+ - name: 💬 Drop a comment
+ uses: marocchino/sticky-pull-request-comment@v2
+ with:
+ header: bundle-diff
+ message: |
+ | Old size | New size | Diff |
+ |----------|----------|-----------------------|
+ | ${{ steps.get-diff.outputs.base_file_string }} | ${{ steps.get-diff.outputs.pr_file_string }} | ${{ steps.get-diff.outputs.diff_file_string }} (${{ steps.get-diff.outputs.percent }}%) |
+ ---
+
+ test-suite-fingerprint:
+ runs-on: ubuntu-22.04
+ if: ${{ github.event.pull_request.head.repo.full_name == github.repository || github.event_name == 'push' }}
+ concurrency: fingerprint-${{ github.event_name != 'pull_request' && 'main' || github.run_id }}
+ steps:
+ - name: ⬇️ Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 100
+
+ - name: ⬇️ Fetch commits from base branch
+ run: git fetch origin main:main --depth 100
+ if: github.event_name == 'pull_request'
+
+ - name: 🔧 Setup Node
+ uses: actions/setup-node@v4
+ with:
+ node-version-file: .nvmrc
+ cache: yarn
+
+ - name: ⚙️ Install Dependencies
+ run: yarn install
+
+ - name: Get the base commit
+ id: base-commit
+ run: echo base-commit=$(git log -n 1 main --pretty=format:'%H') >> "$GITHUB_OUTPUT"
+
+ - name: 📷 Check fingerprint
+ id: fingerprint
+ uses: expo/expo-github-action/fingerprint@main
+ with:
+ previous-git-commit: ${{ steps.base-commit.outputs.base-commit }}
+
+ - name: 👀 Debug fingerprint
+ run: |
+ echo "previousGitCommit=${{ steps.fingerprint.outputs.previous-git-commit }} currentGitCommit=${{ steps.fingerprint.outputs.current-git-commit }}"
+ echo "isPreviousFingerprintEmpty=${{ steps.fingerprint.outputs.previous-fingerprint == '' }}"
+
+ - name: 💬 Drop a comment
+ uses: marocchino/sticky-pull-request-comment@v2
+ if: ${{ github.event_name == 'pull_request' && steps.fingerprint.outputs.fingerprint-diff != '[]' }}
+ with:
+ header: fingerprint-diff
+ message: |
+ The Pull Request introduced fingerprint changes against the base commit: ${{ steps.fingerprint.outputs.previous-git-commit }}
+ Fingerprint diff
+
+ ```json
+ ${{ steps.fingerprint.outputs.fingerprint-diff }}
+ ```
+
+
+
+ ---
+ *Generated by [PR labeler](https://github.com/expo/expo/actions/workflows/pr-labeler.yml) 🤖*
+
+ - name: 💬 Delete comment
+ uses: marocchino/sticky-pull-request-comment@v2
+ if: ${{ github.event_name == 'pull_request' && steps.fingerprint.outputs.fingerprint-diff == '[]' }}
+ with:
+ header: fingerprint-diff
+ delete: true
+
diff --git a/.gitignore b/.gitignore
index f96d0d5ff7..b546152cc2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,7 +18,6 @@ xcuserdata
*.moved-aside
DerivedData
*.hmap
-*.ipa
*.xcuserstate
# Android/IntelliJ
@@ -78,6 +77,7 @@ dist/
*.mobileprovision
*.orig.*
web-build/
+stats.json
# Temporary files created by Metro to check the health of the file watcher
.metro-health-check*
@@ -104,6 +104,14 @@ google-services.json
# Performance results (Flashlight)
.perf/
+# ESLint
+.eslintcache
+
# i18n
src/locale/locales/_build/
src/locale/locales/**/*.js
+
+# local builds
+*.apk
+*.aab
+*.ipa
diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 0000000000..3c032078a4
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+18
diff --git a/.prettierignore b/.prettierignore
index 1a471a497a..abc221def2 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1,12 +1,14 @@
-ios
-android
-src/third-party
-src/app.json
-public
-/bskyweb/templates
-/dist/
-/.watchmanconfig
-/app.json
+# Ignore everything except JS-ey code.
+# Based on https://stackoverflow.com/a/70715829/458193
+*
+!**/*.js
+!**/*.jsx
+!**/*.ts
+!**/*.tsx
+!*/
-web/index.html
-web-build/*
+# More specific ignores go below.
+.expo
+android
+ios
+src/locale/locales
diff --git a/Dockerfile b/Dockerfile
index 47afa61a36..3ad05b6ec6 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -23,7 +23,7 @@ COPY . .
RUN mkdir --parents $NVM_DIR && \
wget \
--output-document=/tmp/nvm-install.sh \
- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh && \
+ https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh && \
bash /tmp/nvm-install.sh
RUN \. "$NVM_DIR/nvm.sh" && \
@@ -31,7 +31,7 @@ RUN \. "$NVM_DIR/nvm.sh" && \
nvm use $NODE_VERSION && \
npm install --global yarn && \
yarn && \
- yarn intl:compile && \
+ yarn intl:build && \
yarn build-web
# DEBUG
diff --git a/README.md b/README.md
index 0cbfe77377..49c4b016ff 100644
--- a/README.md
+++ b/README.md
@@ -65,8 +65,6 @@ If you discover any security issues, please send an email to security@bsky.app.
Bluesky is an open social network built on the AT Protocol, a flexible technology that will never lock developers out of the ecosystems that they help build. With atproto, third-party can be as seamless as first-party through custom feeds, federated services, clients, and more.
-If you're a developer interested in building on atproto, we'd love to email you a Bluesky invite code. Simply share your GitHub (or similar) profile with us via [this form](https://forms.gle/BF21oxVNZiDjDhXF9).
-
## License (MIT)
See [./LICENSE](./LICENSE) for the full license.
diff --git a/__e2e__/mock-server.ts b/__e2e__/mock-server.ts
index 1bf240ccbd..b5f13a87fd 100644
--- a/__e2e__/mock-server.ts
+++ b/__e2e__/mock-server.ts
@@ -1,5 +1,6 @@
import {createServer as createHTTPServer} from 'node:http'
import {parse} from 'node:url'
+
import {createServer, TestPDS} from '../jest/test-pds'
async function main() {
@@ -14,8 +15,7 @@ async function main() {
await server?.close()
console.log('Starting new server')
const inviteRequired = url?.query && 'invite' in url.query
- const phoneRequired = url?.query && 'phone' in url.query
- server = await createServer({inviteRequired, phoneRequired})
+ server = await createServer({inviteRequired})
console.log('Listening at', server.pdsUrl)
if (url?.query) {
if ('users' in url.query) {
diff --git a/__e2e__/tests/curate-lists.test.ts b/__e2e__/tests/curate-lists.test.ts
index f188b154bb..a4deab6c19 100644
--- a/__e2e__/tests/curate-lists.test.ts
+++ b/__e2e__/tests/curate-lists.test.ts
@@ -1,8 +1,9 @@
/* eslint-env detox/detox */
-import {describe, beforeAll, it} from '@jest/globals'
+import {beforeAll, describe, it} from '@jest/globals'
import {expect} from 'detox'
-import {openApp, loginAsAlice, loginAsBob, createServer, sleep} from '../util'
+
+import {createServer, loginAsAlice, loginAsBob, openApp, sleep} from '../util'
describe('Curate lists', () => {
beforeAll(async () => {
@@ -64,7 +65,7 @@ describe('Curate lists', () => {
await element(by.text('Edit list details')).tap()
await expect(element(by.id('createOrEditListModal'))).toBeVisible()
await element(by.id('changeAvatarBtn')).tap()
- await element(by.text('Library')).tap()
+ await element(by.text('Upload from Library')).tap()
await sleep(3e3)
await element(by.id('saveBtn')).tap()
await expect(element(by.id('createOrEditListModal'))).not.toBeVisible()
@@ -81,7 +82,7 @@ describe('Curate lists', () => {
await element(by.text('Edit list details')).tap()
await expect(element(by.id('createOrEditListModal'))).toBeVisible()
await element(by.id('changeAvatarBtn')).tap()
- await element(by.text('Remove')).tap()
+ await element(by.text('Remove Avatar')).tap()
await element(by.id('saveBtn')).tap()
await expect(element(by.id('createOrEditListModal'))).not.toBeVisible()
await expect(element(by.id('userAvatarFallback'))).toExist()
diff --git a/__e2e__/tests/home-screen.test.ts b/__e2e__/tests/home-screen.test.ts
index ce7f1643bd..b594c46978 100644
--- a/__e2e__/tests/home-screen.test.ts
+++ b/__e2e__/tests/home-screen.test.ts
@@ -1,8 +1,9 @@
/* eslint-env detox/detox */
-import {describe, beforeAll, it} from '@jest/globals'
+import {beforeAll, describe, it} from '@jest/globals'
import {expect} from 'detox'
-import {openApp, loginAsAlice, createServer} from '../util'
+
+import {createServer, loginAsAlice, openApp} from '../util'
describe('Home screen', () => {
beforeAll(async () => {
@@ -17,7 +18,7 @@ describe('Home screen', () => {
it('Can go to feeds page using feeds button in tab bar', async () => {
await element(by.id('homeScreenFeedTabs-Feeds ✨')).tap()
- await expect(element(by.text('Discover new feeds'))).toBeVisible()
+ await expect(element(by.text('Discover New Feeds'))).toBeVisible()
})
it('Feeds button disappears after pinning a feed', async () => {
@@ -68,19 +69,16 @@ describe('Home screen', () => {
).not.toExist()
})
- it('Can report posts', async () => {
- const carlaPosts = by.id('feedItem-by-carla.test')
- await element(by.id('postDropdownBtn').withAncestor(carlaPosts))
- .atIndex(0)
- .tap()
- await element(by.text('Report post')).tap()
- await expect(element(by.id('reportModal'))).toBeVisible()
- await element(
- by.id('reportReasonRadios-com.atproto.moderation.defs#reasonSpam'),
- ).tap()
- await element(by.id('sendReportBtn')).tap()
- await expect(element(by.id('reportModal'))).not.toBeVisible()
- })
+ // TODO skipping because the test env PDS isnt setup correctly to handle the report -prf
+ // it('Can report posts', async () => {
+ // const carlaPosts = by.id('feedItem-by-carla.test')
+ // await element(by.id('postDropdownBtn').withAncestor(carlaPosts))
+ // .atIndex(0)
+ // .tap()
+ // await element(by.text('Report post')).tap()
+ // await element(by.id('com.atproto.moderation.defs#reasonSpam')).tap()
+ // await element(by.id('sendReportBtn')).tap()
+ // })
it('Can swipe between feeds', async () => {
await element(by.id('homeScreen')).swipe('left', 'fast', 0.75)
diff --git a/__e2e__/tests/invite-codes.test.ts b/__e2e__/tests/invite-codes.test.skip.ts
similarity index 94%
rename from __e2e__/tests/invite-codes.test.ts
rename to __e2e__/tests/invite-codes.test.skip.ts
index 7eb8d9a3e1..9f00f05255 100644
--- a/__e2e__/tests/invite-codes.test.ts
+++ b/__e2e__/tests/invite-codes.test.skip.ts
@@ -1,8 +1,9 @@
/* eslint-env detox/detox */
-import {describe, beforeAll, it} from '@jest/globals'
+import {beforeAll, describe, it} from '@jest/globals'
import {expect} from 'detox'
-import {openApp, loginAsAlice, createServer} from '../util'
+
+import {createServer, loginAsAlice, openApp} from '../util'
describe('invite-codes', () => {
let service: string
diff --git a/__e2e__/tests/invites-and-text-verification.test.ts b/__e2e__/tests/invites-and-text-verification.test.ts
deleted file mode 100644
index 863b31107b..0000000000
--- a/__e2e__/tests/invites-and-text-verification.test.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-/* eslint-env detox/detox */
-
-import {describe, beforeAll, it} from '@jest/globals'
-import {expect} from 'detox'
-import {openApp, loginAsAlice, createServer} from '../util'
-
-describe('invite-codes', () => {
- let service: string
- let inviteCode = ''
- beforeAll(async () => {
- service = await createServer('?users&invite&phone')
- await openApp({permissions: {notifications: 'YES'}})
- })
-
- it('I can fetch invite codes', async () => {
- await loginAsAlice()
- await element(by.id('e2eOpenInviteCodesModal')).tap()
- await expect(element(by.id('inviteCodesModal'))).toBeVisible()
- const attrs = await element(by.id('inviteCode-0-code')).getAttributes()
- inviteCode = attrs.text
- await element(by.id('closeBtn')).tap()
- await element(by.id('e2eSignOut')).tap()
- })
-
- it('I can create a new account with the invite code', async () => {
- await element(by.id('e2eOpenLoggedOutView')).tap()
- await element(by.id('createAccountButton')).tap()
- await device.takeScreenshot('1- opened create account screen')
- await element(by.id('selectServiceButton')).tap()
- await device.takeScreenshot('2- selected other server')
- await element(by.id('customSelectBtn')).tap()
- await element(by.id('customServerTextInput')).typeText(service)
- await element(by.id('customServerTextInput')).tapReturnKey()
- await element(by.id('doneBtn')).tap()
- await device.takeScreenshot('3- input test server URL')
- await element(by.id('inviteCodeInput')).typeText(inviteCode)
- await element(by.id('emailInput')).typeText('example@test.com')
- await element(by.id('passwordInput')).typeText('hunter2')
- await device.takeScreenshot('4- entered account details')
- await element(by.id('nextBtn')).tap()
- await element(by.id('phoneInput')).typeText('2345551234')
- await element(by.id('requestCodeBtn')).tap()
- await device.takeScreenshot('5- requested code')
- await element(by.id('codeInput')).typeText('000000')
- await device.takeScreenshot('6- entered code')
- await element(by.id('nextBtn')).tap()
- await element(by.id('handleInput')).typeText('e2e-test')
- await device.takeScreenshot('7- entered handle')
- await element(by.id('nextBtn')).tap()
- await expect(element(by.id('onboardingInterests'))).toBeVisible()
- })
-})
diff --git a/__e2e__/tests/profile-screen.test.ts b/__e2e__/tests/profile-screen.test.ts
index 7ff43642f9..7c3207ec83 100644
--- a/__e2e__/tests/profile-screen.test.ts
+++ b/__e2e__/tests/profile-screen.test.ts
@@ -1,8 +1,9 @@
/* eslint-env detox/detox */
-import {describe, beforeAll, it} from '@jest/globals'
+import {beforeAll, describe, it} from '@jest/globals'
import {expect} from 'detox'
-import {openApp, loginAsAlice, createServer, sleep} from '../util'
+
+import {createServer, loginAsAlice, openApp, sleep} from '../util'
describe('Profile screen', () => {
beforeAll(async () => {
@@ -70,10 +71,10 @@ describe('Profile screen', () => {
await element(by.id('profileHeaderEditProfileButton')).tap()
await expect(element(by.id('editProfileModal'))).toBeVisible()
await element(by.id('changeBannerBtn')).tap()
- await element(by.text('Library')).tap()
+ await element(by.text('Upload from Library')).tap()
await sleep(3e3)
await element(by.id('changeAvatarBtn')).tap()
- await element(by.text('Library')).tap()
+ await element(by.text('Upload from Library')).tap()
await sleep(3e3)
await element(by.id('editProfileSaveBtn')).tap()
await expect(element(by.id('editProfileModal'))).not.toBeVisible()
@@ -87,9 +88,9 @@ describe('Profile screen', () => {
await element(by.id('profileHeaderEditProfileButton')).tap()
await expect(element(by.id('editProfileModal'))).toBeVisible()
await element(by.id('changeBannerBtn')).tap()
- await element(by.text('Remove')).tap()
+ await element(by.text('Remove Banner')).tap()
await element(by.id('changeAvatarBtn')).tap()
- await element(by.text('Remove')).tap()
+ await element(by.text('Remove Avatar')).tap()
await element(by.id('editProfileSaveBtn')).tap()
await expect(element(by.id('editProfileModal'))).not.toBeVisible()
await expect(element(by.id('userBannerFallback'))).toExist()
@@ -124,16 +125,17 @@ describe('Profile screen', () => {
await expect(element(by.id('profileHeaderAlert'))).not.toExist()
})
- it('Can report another user', async () => {
- await element(by.id('profileHeaderDropdownBtn')).tap()
- await element(by.text('Report Account')).tap()
- await expect(element(by.id('reportModal'))).toBeVisible()
- await element(
- by.id('reportReasonRadios-com.atproto.moderation.defs#reasonSpam'),
- ).tap()
- await element(by.id('sendReportBtn')).tap()
- await expect(element(by.id('reportModal'))).not.toBeVisible()
- })
+ // TODO skipping because the test env PDS isnt setup correctly to handle the report -prf
+ // it('Can report another user', async () => {
+ // await element(by.id('profileHeaderDropdownBtn')).tap()
+ // await element(by.text('Report Account')).tap()
+ // await expect(element(by.id('reportModal'))).toBeVisible()
+ // await element(
+ // by.id('reportReasonRadios-com.atproto.moderation.defs#reasonSpam'),
+ // ).tap()
+ // await element(by.id('sendReportBtn')).tap()
+ // await expect(element(by.id('reportModal'))).not.toBeVisible()
+ // })
it('Can like posts', async () => {
await element(by.id('postsFeed-flatlist')).swipe(
@@ -179,15 +181,16 @@ describe('Profile screen', () => {
).not.toExist()
})
- it('Can report posts', async () => {
- const posts = by.id('feedItem-by-bob.test')
- await element(by.id('postDropdownBtn').withAncestor(posts)).atIndex(0).tap()
- await element(by.text('Report post')).tap()
- await expect(element(by.id('reportModal'))).toBeVisible()
- await element(
- by.id('reportReasonRadios-com.atproto.moderation.defs#reasonSpam'),
- ).tap()
- await element(by.id('sendReportBtn')).tap()
- await expect(element(by.id('reportModal'))).not.toBeVisible()
- })
+ // TODO skipping because the test env PDS isnt setup correctly to handle the report -prf
+ // it('Can report posts', async () => {
+ // const posts = by.id('feedItem-by-bob.test')
+ // await element(by.id('postDropdownBtn').withAncestor(posts)).atIndex(0).tap()
+ // await element(by.text('Report post')).tap()
+ // await expect(element(by.id('reportModal'))).toBeVisible()
+ // await element(
+ // by.id('reportReasonRadios-com.atproto.moderation.defs#reasonSpam'),
+ // ).tap()
+ // await element(by.id('sendReportBtn')).tap()
+ // await expect(element(by.id('reportModal'))).not.toBeVisible()
+ // })
})
diff --git a/__e2e__/tests/text-verification.test.ts b/__e2e__/tests/text-verification.test.ts
deleted file mode 100644
index 79b14aecaa..0000000000
--- a/__e2e__/tests/text-verification.test.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-/* eslint-env detox/detox */
-
-import {describe, beforeAll, it} from '@jest/globals'
-import {expect} from 'detox'
-import {openApp, createServer} from '../util'
-
-describe('Create account', () => {
- let service: string
- beforeAll(async () => {
- service = await createServer('?phone')
- await openApp({permissions: {notifications: 'YES'}})
- })
-
- it('I can create a new account with text verification', async () => {
- await element(by.id('e2eOpenLoggedOutView')).tap()
-
- await element(by.id('createAccountButton')).tap()
- await device.takeScreenshot('1- opened create account screen')
- await element(by.id('selectServiceButton')).tap()
- await device.takeScreenshot('2- selected other server')
- await element(by.id('customSelectBtn')).tap()
- await element(by.id('customServerTextInput')).typeText(service)
- await element(by.id('customServerTextInput')).tapReturnKey()
- await element(by.id('doneBtn')).tap()
- await device.takeScreenshot('3- input test server URL')
- await element(by.id('emailInput')).typeText('text-verification@test.com')
- await element(by.id('passwordInput')).typeText('hunter2')
- await device.takeScreenshot('4- entered account details')
- await element(by.id('nextBtn')).tap()
-
- await element(by.id('phoneInput')).typeText('8042221111')
- await element(by.id('requestCodeBtn')).tap()
- await device.takeScreenshot('5- requested code')
-
- await element(by.id('codeInput')).typeText('000000')
- await device.takeScreenshot('6- entered code')
- await element(by.id('nextBtn')).tap()
-
- await element(by.id('handleInput')).typeText('text-verification-test')
- await device.takeScreenshot('7- entered handle')
-
- await element(by.id('nextBtn')).tap()
-
- await expect(element(by.id('onboardingInterests'))).toBeVisible()
- })
-
- it('failed text verification correctly goes back to the code input screen', async () => {
- await element(by.id('e2eSignOut')).tap()
- await element(by.id('e2eOpenLoggedOutView')).tap()
-
- await element(by.id('createAccountButton')).tap()
- await device.takeScreenshot('1- opened create account screen')
- await element(by.id('selectServiceButton')).tap()
- await device.takeScreenshot('2- selected other server')
- await element(by.id('customSelectBtn')).tap()
- await element(by.id('customServerTextInput')).typeText(service)
- await element(by.id('customServerTextInput')).tapReturnKey()
- await element(by.id('doneBtn')).tap()
- await device.takeScreenshot('3- input test server URL')
- await element(by.id('emailInput')).typeText('text-verification2@test.com')
- await element(by.id('passwordInput')).typeText('hunter2')
- await device.takeScreenshot('4- entered account details')
- await element(by.id('nextBtn')).tap()
-
- await element(by.id('phoneInput')).typeText('8042221111')
- await element(by.id('requestCodeBtn')).tap()
- await device.takeScreenshot('5- requested code')
-
- await element(by.id('codeInput')).typeText('111111')
- await device.takeScreenshot('6- entered code')
- await element(by.id('nextBtn')).tap()
-
- await element(by.id('handleInput')).typeText('text-verification-test2')
- await device.takeScreenshot('7- entered handle')
-
- await element(by.id('nextBtn')).tap()
-
- await expect(element(by.id('codeInput'))).toBeVisible()
- await device.takeScreenshot('8- got error')
- })
-})
diff --git a/__e2e__/tests/thread-screen.test.ts b/__e2e__/tests/thread-screen.test.ts
index 646c828fd3..b99da11a67 100644
--- a/__e2e__/tests/thread-screen.test.ts
+++ b/__e2e__/tests/thread-screen.test.ts
@@ -1,8 +1,9 @@
/* eslint-env detox/detox */
-import {describe, beforeAll, it} from '@jest/globals'
+import {beforeAll, describe, it} from '@jest/globals'
import {expect} from 'detox'
-import {openApp, loginAsAlice, createServer} from '../util'
+
+import {createServer, loginAsAlice, openApp} from '../util'
describe('Thread screen', () => {
beforeAll(async () => {
@@ -102,27 +103,29 @@ describe('Thread screen', () => {
).not.toExist()
})
- it('Can report the root post', async () => {
- const post = by.id('postThreadItem-by-bob.test')
- await element(by.id('postDropdownBtn').withAncestor(post)).atIndex(0).tap()
- await element(by.text('Report post')).tap()
- await expect(element(by.id('reportModal'))).toBeVisible()
- await element(
- by.id('reportReasonRadios-com.atproto.moderation.defs#reasonSpam'),
- ).tap()
- await element(by.id('sendReportBtn')).tap()
- await expect(element(by.id('reportModal'))).not.toBeVisible()
- })
+ // TODO skipping because the test env PDS isnt setup correctly to handle the report -prf
+ // it('Can report the root post', async () => {
+ // const post = by.id('postThreadItem-by-bob.test')
+ // await element(by.id('postDropdownBtn').withAncestor(post)).atIndex(0).tap()
+ // await element(by.text('Report post')).tap()
+ // await expect(element(by.id('reportModal'))).toBeVisible()
+ // await element(
+ // by.id('reportReasonRadios-com.atproto.moderation.defs#reasonSpam'),
+ // ).tap()
+ // await element(by.id('sendReportBtn')).tap()
+ // await expect(element(by.id('reportModal'))).not.toBeVisible()
+ // })
- it('Can report a reply post', async () => {
- const post = by.id('postThreadItem-by-carla.test')
- await element(by.id('postDropdownBtn').withAncestor(post)).atIndex(0).tap()
- await element(by.text('Report post')).tap()
- await expect(element(by.id('reportModal'))).toBeVisible()
- await element(
- by.id('reportReasonRadios-com.atproto.moderation.defs#reasonSpam'),
- ).tap()
- await element(by.id('sendReportBtn')).tap()
- await expect(element(by.id('reportModal'))).not.toBeVisible()
- })
+ // TODO skipping because the test env PDS isnt setup correctly to handle the report -prf
+ // it('Can report a reply post', async () => {
+ // const post = by.id('postThreadItem-by-carla.test')
+ // await element(by.id('postDropdownBtn').withAncestor(post)).atIndex(0).tap()
+ // await element(by.text('Report post')).tap()
+ // await expect(element(by.id('reportModal'))).toBeVisible()
+ // await element(
+ // by.id('reportReasonRadios-com.atproto.moderation.defs#reasonSpam'),
+ // ).tap()
+ // await element(by.id('sendReportBtn')).tap()
+ // await expect(element(by.id('reportModal'))).not.toBeVisible()
+ // })
})
diff --git a/__tests__/lib/strings/url-helpers.test.ts b/__tests__/lib/strings/url-helpers.test.ts
index 6ac31aeb63..247f5850e2 100644
--- a/__tests__/lib/strings/url-helpers.test.ts
+++ b/__tests__/lib/strings/url-helpers.test.ts
@@ -1,8 +1,9 @@
-import {it, describe, expect} from '@jest/globals'
+import {describe, expect, it} from '@jest/globals'
import {
- linkRequiresWarning,
isPossiblyAUrl,
+ isTrustedUrl,
+ linkRequiresWarning,
splitApexDomain,
} from '../../../src/lib/strings/url-helpers'
@@ -74,6 +75,10 @@ describe('linkRequiresWarning', () => {
// bad uri inputs, default to true
['', '', true],
['example.com', 'example.com', true],
+ ['/profile', 'Username', false],
+ ['#', 'Show More', false],
+ ['https://docs.bsky.app', 'https://docs.bsky.app', false],
+ ['https://bsky.app/compose/intent?text=test', 'Compose a post', false],
]
it.each(cases)(
@@ -139,3 +144,36 @@ describe('splitApexDomain', () => {
},
)
})
+
+describe('isTrustedUrl', () => {
+ const cases = [
+ ['#', true],
+ ['#profile', true],
+ ['/', true],
+ ['/profile', true],
+ ['/profile/', true],
+ ['/profile/bob.test', true],
+ ['https://bsky.app', true],
+ ['https://bsky.app/', true],
+ ['https://bsky.app/profile/bob.test', true],
+ ['https://www.bsky.app', true],
+ ['https://www.bsky.app/', true],
+ ['https://docs.bsky.app', true],
+ ['https://bsky.social', true],
+ ['https://bsky.social/blog', true],
+ ['https://blueskyweb.xyz', true],
+ ['https://blueskyweb.zendesk.com', true],
+ ['http://bsky.app', true],
+ ['http://bsky.social', true],
+ ['http://blueskyweb.xyz', true],
+ ['http://blueskyweb.zendesk.com', true],
+ ['https://google.com', false],
+ ['https://docs.google.com', false],
+ ['https://google.com/#', false],
+ ]
+
+ it.each(cases)('given input uri %p, returns %p', (str, expected) => {
+ const output = isTrustedUrl(str)
+ expect(output).toEqual(expected)
+ })
+})
diff --git a/app.config.js b/app.config.js
index 9814065f4d..9036d5e331 100644
--- a/app.config.js
+++ b/app.config.js
@@ -11,24 +11,23 @@ const DARK_SPLASH_CONFIG = {
resizeMode: 'cover',
}
-module.exports = function () {
+const SPLASH_CONFIG_ANDROID = {
+ backgroundColor: '#0c7cff',
+ image: './assets/splash.png',
+ resizeMode: 'cover',
+}
+const DARK_SPLASH_CONFIG_ANDROID = {
+ backgroundColor: '#0f141b',
+ image: './assets/splash-dark.png',
+ resizeMode: 'cover',
+}
+
+module.exports = function (config) {
/**
* App version number. Should be incremented as part of a release cycle.
*/
const VERSION = pkg.version
- /**
- * iOS build number. Must be incremented for each TestFlight version.
- * WARNING: Always leave this variable on line 24! If it is moved, you need to update ./scripts/bumpIosBuildNumber.sh
- */
- const IOS_BUILD_NUMBER = '7'
-
- /**
- * Android build number. Must be incremented for each release.
- * WARNING: Always leave this variable on line 30! If it is moved, you need to update ./scripts/bumpAndroidBuildNumber.sh
- */
- const ANDROID_VERSION_CODE = 62
-
/**
* Uses built-in Expo env vars
*
@@ -36,11 +35,15 @@ module.exports = function () {
*/
const PLATFORM = process.env.EAS_BUILD_PLATFORM
- /**
- * Additional granularity for the `dist` field
- */
const DIST_BUILD_NUMBER =
- PLATFORM === 'android' ? ANDROID_VERSION_CODE : IOS_BUILD_NUMBER
+ PLATFORM === 'android'
+ ? process.env.BSKY_ANDROID_VERSION_CODE
+ : process.env.BSKY_IOS_BUILD_NUMBER
+
+ const IS_DEV = process.env.EXPO_PUBLIC_ENV === 'development'
+ const IS_TESTFLIGHT = process.env.EXPO_PUBLIC_ENV === 'testflight'
+
+ const UPDATES_CHANNEL = IS_TESTFLIGHT ? 'testflight' : 'production'
return {
expo: {
@@ -57,7 +60,6 @@ module.exports = function () {
userInterfaceStyle: 'automatic',
splash: SPLASH_CONFIG,
ios: {
- buildNumber: IOS_BUILD_NUMBER,
supportsTablet: false,
bundleIdentifier: 'xyz.blueskyweb.app',
config: {
@@ -79,13 +81,15 @@ module.exports = function () {
...SPLASH_CONFIG,
dark: DARK_SPLASH_CONFIG,
},
+ entitlements: {
+ 'com.apple.security.application-groups': 'group.app.bsky',
+ },
},
androidStatusBar: {
- barStyle: 'dark-content',
- backgroundColor: '#ffffff',
+ barStyle: 'light-content',
+ backgroundColor: '#00000000',
},
android: {
- versionCode: ANDROID_VERSION_CODE,
icon: './assets/icon.png',
adaptiveIcon: {
foregroundImage: './assets/icon-android-foreground.png',
@@ -104,23 +108,41 @@ module.exports = function () {
scheme: 'https',
host: 'bsky.app',
},
+ IS_DEV && {
+ scheme: 'http',
+ host: 'localhost:19006',
+ },
],
category: ['BROWSABLE', 'DEFAULT'],
},
],
splash: {
- ...SPLASH_CONFIG,
- dark: DARK_SPLASH_CONFIG,
+ ...SPLASH_CONFIG_ANDROID,
+ dark: DARK_SPLASH_CONFIG_ANDROID,
},
},
web: {
favicon: './assets/favicon.png',
},
updates: {
- enabled: true,
- fallbackToCacheTimeout: 1000,
- url: 'https://u.expo.dev/55bd077a-d905-4184-9c7f-94789ba0f302',
+ url: 'https://updates.bsky.app/manifest',
+ // TODO Eventually we want to enable this for all environments, but for now it will only be used for
+ // TestFlight builds
+ enabled: IS_TESTFLIGHT,
+ fallbackToCacheTimeout: 30000,
+ codeSigningCertificate: IS_TESTFLIGHT
+ ? './code-signing/certificate.pem'
+ : undefined,
+ codeSigningMetadata: IS_TESTFLIGHT
+ ? {
+ keyid: 'main',
+ alg: 'rsa-v1_5-sha256',
+ }
+ : undefined,
+ checkAutomatically: 'NEVER',
+ channel: UPDATES_CHANNEL,
},
+ assetBundlePatterns: ['**/*'],
plugins: [
'expo-localization',
Boolean(process.env.SENTRY_AUTH_TOKEN) && 'sentry-expo',
@@ -129,32 +151,49 @@ module.exports = function () {
{
ios: {
deploymentTarget: '13.4',
+ newArchEnabled: false,
},
android: {
compileSdkVersion: 34,
targetSdkVersion: 34,
buildToolsVersion: '34.0.0',
kotlinVersion: '1.8.0',
+ newArchEnabled: false,
},
},
],
- [
- 'expo-updates',
- {
- username: 'blueskysocial',
- },
- ],
[
'expo-notifications',
{
icon: './assets/icon-android-notification.png',
- color: '#ffffff',
+ color: '#1185fe',
},
],
'./plugins/withAndroidManifestPlugin.js',
+ './plugins/withAndroidManifestFCMIconPlugin.js',
+ './plugins/withAndroidStylesWindowBackgroundPlugin.js',
+ './plugins/withAndroidSplashScreenStatusBarTranslucentPlugin.js',
+ './plugins/shareExtension/withShareExtensions.js',
].filter(Boolean),
extra: {
eas: {
+ build: {
+ experimental: {
+ ios: {
+ appExtensions: [
+ {
+ targetName: 'Share-with-Bluesky',
+ bundleIdentifier: 'xyz.blueskyweb.app.Share-with-Bluesky',
+ entitlements: {
+ 'com.apple.security.application-groups': [
+ 'group.app.bsky',
+ ],
+ },
+ },
+ ],
+ },
+ },
+ },
projectId: '55bd077a-d905-4184-9c7f-94789ba0f302',
},
},
diff --git a/assets/icons/arrowTriangleBottom_stroke2_corner1_rounded.svg b/assets/icons/arrowTriangleBottom_stroke2_corner1_rounded.svg
new file mode 100644
index 0000000000..f40546f7cd
--- /dev/null
+++ b/assets/icons/arrowTriangleBottom_stroke2_corner1_rounded.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/bars3_stroke2_corner0_rounded.svg b/assets/icons/bars3_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..cbcb531a6e
--- /dev/null
+++ b/assets/icons/bars3_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/bubbleQuestion_stroke2_corner0_rounded.svg b/assets/icons/bubbleQuestion_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..0bfcc48a0e
--- /dev/null
+++ b/assets/icons/bubbleQuestion_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/calendar_stroke2_corner0_rounded.svg b/assets/icons/calendar_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..703f389dba
--- /dev/null
+++ b/assets/icons/calendar_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/camera_filled_stroke2_corner0_rounded.svg b/assets/icons/camera_filled_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..fa0101cf0d
--- /dev/null
+++ b/assets/icons/camera_filled_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/camera_stroke2_corner0_rounded.svg b/assets/icons/camera_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..ce0c29ae50
--- /dev/null
+++ b/assets/icons/camera_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/checkThick_stroke2_corner0_rounded.svg b/assets/icons/checkThick_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..54af3e8598
--- /dev/null
+++ b/assets/icons/checkThick_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/chevronBottom_stroke2_corner0_rounded.svg b/assets/icons/chevronBottom_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..705c1c5139
--- /dev/null
+++ b/assets/icons/chevronBottom_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/chevronTop_stroke2_corner0_rounded.svg b/assets/icons/chevronTop_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..da94ba911f
--- /dev/null
+++ b/assets/icons/chevronTop_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/circleBanSign_stroke2_corner0_rounded.svg b/assets/icons/circleBanSign_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..73251477fa
--- /dev/null
+++ b/assets/icons/circleBanSign_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/clipboard_stroke2_corner2_rounded.svg b/assets/icons/clipboard_stroke2_corner2_rounded.svg
new file mode 100644
index 0000000000..f403cfb929
--- /dev/null
+++ b/assets/icons/clipboard_stroke2_corner2_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/dotGrid1x3Horizontal_stroke2_corner2_rounded.svg b/assets/icons/dotGrid1x3Horizontal_stroke2_corner2_rounded.svg
new file mode 100644
index 0000000000..c3b456b100
--- /dev/null
+++ b/assets/icons/dotGrid1x3Horizontal_stroke2_corner2_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/envelope_stroke2_corner0_rounded.svg b/assets/icons/envelope_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..c3ab45980b
--- /dev/null
+++ b/assets/icons/envelope_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/filter_stroke2_corner0_rounded.svg b/assets/icons/filter_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..1fbcfc5711
--- /dev/null
+++ b/assets/icons/filter_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/flag_stroke2_corner0_rounded.svg b/assets/icons/flag_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..9f9cc5cdd1
--- /dev/null
+++ b/assets/icons/flag_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/group3_stroke2_corner0_rounded.svg b/assets/icons/group3_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..2a8f43a8a4
--- /dev/null
+++ b/assets/icons/group3_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/heart2_filled_stroke2_corner0_rounded.svg b/assets/icons/heart2_filled_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..1dfefb4c99
--- /dev/null
+++ b/assets/icons/heart2_filled_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/heart2_stroke2_corner0_rounded.svg b/assets/icons/heart2_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..5b3da8e00e
--- /dev/null
+++ b/assets/icons/heart2_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/lock_stroke2_corner0_rounded.svg b/assets/icons/lock_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..8b094ba5eb
--- /dev/null
+++ b/assets/icons/lock_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/magnifyingGlass2_stroke2_corner0_rounded.svg b/assets/icons/magnifyingGlass2_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..2759aaf2cc
--- /dev/null
+++ b/assets/icons/magnifyingGlass2_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/mute_stroke2_corner0_rounded.svg b/assets/icons/mute_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..8ebecb3920
--- /dev/null
+++ b/assets/icons/mute_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/pageText_stroke2_corner0_rounded.svg b/assets/icons/pageText_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..826a36cd7e
--- /dev/null
+++ b/assets/icons/pageText_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/pencilLine_stroke2_corner0_rounded.svg b/assets/icons/pencilLine_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..c58bef9fa2
--- /dev/null
+++ b/assets/icons/pencilLine_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/peopleRemove2_stroke2_corner0_rounded.svg b/assets/icons/peopleRemove2_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..2e798cbe29
--- /dev/null
+++ b/assets/icons/peopleRemove2_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/personCheck_stroke2_corner0_rounded.svg b/assets/icons/personCheck_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..b3231c2780
--- /dev/null
+++ b/assets/icons/personCheck_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/personX_stroke2_corner0_rounded.svg b/assets/icons/personX_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..073015bc54
--- /dev/null
+++ b/assets/icons/personX_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/person_stroke2_corner0_rounded.svg b/assets/icons/person_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..a23ad76071
--- /dev/null
+++ b/assets/icons/person_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/raisingHand4Finger_stroke2_corner0_rounded.svg b/assets/icons/raisingHand4Finger_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..aed3d9e7ec
--- /dev/null
+++ b/assets/icons/raisingHand4Finger_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/settingsGear2_stroke2_corner0_rounded.svg b/assets/icons/settingsGear2_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..de8a579194
--- /dev/null
+++ b/assets/icons/settingsGear2_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/shield_stroke2_corner0_rounded.svg b/assets/icons/shield_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..c4ef98e5ad
--- /dev/null
+++ b/assets/icons/shield_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/speakerVolumeFull_stroke2_corner0_rounded.svg b/assets/icons/speakerVolumeFull_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..81357a12e3
--- /dev/null
+++ b/assets/icons/speakerVolumeFull_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/squareArrowTopRight_stroke2_corner0_rounded.svg b/assets/icons/squareArrowTopRight_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..1407a1d6fe
--- /dev/null
+++ b/assets/icons/squareArrowTopRight_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/squareBehindSquare4_stroke2_corner0_rounded.svg b/assets/icons/squareBehindSquare4_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..3fa7e5d390
--- /dev/null
+++ b/assets/icons/squareBehindSquare4_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/streamingLive_stroke2_corner0_rounded.svg b/assets/icons/streamingLive_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..b6cdd34d77
--- /dev/null
+++ b/assets/icons/streamingLive_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/ticket_stroke2_corner0_rounded.svg b/assets/icons/ticket_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..a45a90ae5f
--- /dev/null
+++ b/assets/icons/ticket_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/trash_stroke2_corner0_rounded.svg b/assets/icons/trash_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..d4b32f81fe
--- /dev/null
+++ b/assets/icons/trash_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/triangleExclamation_stroke2_corner2_rounded.svg b/assets/icons/triangleExclamation_stroke2_corner2_rounded.svg
new file mode 100644
index 0000000000..aa56404457
--- /dev/null
+++ b/assets/icons/triangleExclamation_stroke2_corner2_rounded.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/warning_stroke2_corner0_rounded.svg b/assets/icons/warning_stroke2_corner0_rounded.svg
new file mode 100644
index 0000000000..d5b6f13d5f
--- /dev/null
+++ b/assets/icons/warning_stroke2_corner0_rounded.svg
@@ -0,0 +1 @@
+
diff --git a/bskyweb/README.md b/bskyweb/README.md
index c8efe04482..640c30f4ad 100644
--- a/bskyweb/README.md
+++ b/bskyweb/README.md
@@ -6,9 +6,9 @@ To build the SPA bundle (`bundle.web.js`), first get a JavaScript development
environment set up. Either follow the top-level README, or something quick
like:
- # install nodejs 18 (specifically)
- nvm install 18
- nvm use 18
+ # install nodejs
+ nvm install
+ nvm use
npm install --global yarn
# setup tools and deps (in top level of this repo)
diff --git a/bskyweb/cmd/bskyweb/mailmodo.go b/bskyweb/cmd/bskyweb/mailmodo.go
deleted file mode 100644
index e892971f9c..0000000000
--- a/bskyweb/cmd/bskyweb/mailmodo.go
+++ /dev/null
@@ -1,70 +0,0 @@
-package main
-
-import (
- "bytes"
- "context"
- "crypto/sha256"
- "encoding/json"
- "fmt"
- "net/http"
- "time"
-)
-
-type Mailmodo struct {
- httpClient *http.Client
- APIKey string
- BaseURL string
- ListName string
-}
-
-func NewMailmodo(apiKey, listName string) *Mailmodo {
- return &Mailmodo{
- APIKey: apiKey,
- BaseURL: "https://api.mailmodo.com/api/v1",
- httpClient: &http.Client{},
- ListName: listName,
- }
-}
-
-func (m *Mailmodo) request(ctx context.Context, httpMethod string, apiMethod string, data any) error {
- endpoint := fmt.Sprintf("%s/%s", m.BaseURL, apiMethod)
- js, err := json.Marshal(data)
- if err != nil {
- return fmt.Errorf("Mailmodo JSON encoding failed: %w", err)
- }
- req, err := http.NewRequestWithContext(ctx, httpMethod, endpoint, bytes.NewBuffer(js))
- if err != nil {
- return fmt.Errorf("Mailmodo HTTP creating request %s %s failed: %w", httpMethod, apiMethod, err)
- }
- req.Header.Set("mmApiKey", m.APIKey)
- req.Header.Set("Content-Type", "application/json")
-
- res, err := m.httpClient.Do(req)
- if err != nil {
- return fmt.Errorf("Mailmodo HTTP making request %s %s failed: %w", httpMethod, apiMethod, err)
- }
- defer res.Body.Close()
-
- status := struct {
- Success bool `json:"success"`
- Message string `json:"message"`
- }{}
- if err := json.NewDecoder(res.Body).Decode(&status); err != nil {
- return fmt.Errorf("Mailmodo HTTP parsing response %s %s failed: %w", httpMethod, apiMethod, err)
- }
- if !status.Success {
- return fmt.Errorf("Mailmodo API response %s %s failed: %s", httpMethod, apiMethod, status.Message)
- }
- return nil
-}
-
-func (m *Mailmodo) AddToList(ctx context.Context, email string) error {
- return m.request(ctx, "POST", "addToList", map[string]any{
- "listName": m.ListName,
- "email": email,
- "data": map[string]any{
- "email_hashed": fmt.Sprintf("%x", sha256.Sum256([]byte(email))),
- },
- "created_at": time.Now().UTC().Format(time.RFC3339),
- })
-}
diff --git a/bskyweb/cmd/bskyweb/main.go b/bskyweb/cmd/bskyweb/main.go
index a2952cae2b..5185ff573a 100644
--- a/bskyweb/cmd/bskyweb/main.go
+++ b/bskyweb/cmd/bskyweb/main.go
@@ -40,18 +40,6 @@ func run(args []string) {
// retain old PDS env var for easy transition
EnvVars: []string{"ATP_APPVIEW_HOST", "ATP_PDS_HOST"},
},
- &cli.StringFlag{
- Name: "mailmodo-api-key",
- Usage: "Mailmodo API key",
- Required: false,
- EnvVars: []string{"MAILMODO_API_KEY"},
- },
- &cli.StringFlag{
- Name: "mailmodo-list-name",
- Usage: "Mailmodo contact list to add email addresses to",
- Required: false,
- EnvVars: []string{"MAILMODO_LIST_NAME"},
- },
&cli.StringFlag{
Name: "http-address",
Usage: "Specify the local IP/port to bind to",
diff --git a/bskyweb/cmd/bskyweb/server.go b/bskyweb/cmd/bskyweb/server.go
index 76b7bcc06b..54a3925c6d 100644
--- a/bskyweb/cmd/bskyweb/server.go
+++ b/bskyweb/cmd/bskyweb/server.go
@@ -2,11 +2,9 @@ package main
import (
"context"
- "encoding/json"
"errors"
"fmt"
"io/fs"
- "io/ioutil"
"net/http"
"os"
"os/signal"
@@ -29,25 +27,19 @@ import (
)
type Server struct {
- echo *echo.Echo
- httpd *http.Server
- mailmodo *Mailmodo
- xrpcc *xrpc.Client
+ echo *echo.Echo
+ httpd *http.Server
+ xrpcc *xrpc.Client
}
func serve(cctx *cli.Context) error {
debug := cctx.Bool("debug")
httpAddress := cctx.String("http-address")
appviewHost := cctx.String("appview-host")
- mailmodoAPIKey := cctx.String("mailmodo-api-key")
- mailmodoListName := cctx.String("mailmodo-list-name")
// Echo
e := echo.New()
- // Mailmodo client.
- mailmodo := NewMailmodo(mailmodoAPIKey, mailmodoListName)
-
// create a new session (no auth)
xrpcc := &xrpc.Client{
Client: cliutil.NewHttpClient(),
@@ -77,9 +69,8 @@ func serve(cctx *cli.Context) error {
// server
//
server := &Server{
- echo: e,
- mailmodo: mailmodo,
- xrpcc: xrpcc,
+ echo: e,
+ xrpcc: xrpcc,
}
// Create the HTTP server.
@@ -180,6 +171,7 @@ func serve(cctx *cli.Context) error {
e.GET("/", server.WebHome)
// generic routes
+ e.GET("/hashtag/:tag", server.WebGeneric)
e.GET("/search", server.WebGeneric)
e.GET("/feeds", server.WebGeneric)
e.GET("/notifications", server.WebGeneric)
@@ -191,17 +183,19 @@ func serve(cctx *cli.Context) error {
e.GET("/settings", server.WebGeneric)
e.GET("/settings/language", server.WebGeneric)
e.GET("/settings/app-passwords", server.WebGeneric)
- e.GET("/settings/home-feed", server.WebGeneric)
+ e.GET("/settings/following-feed", server.WebGeneric)
e.GET("/settings/saved-feeds", server.WebGeneric)
e.GET("/settings/threads", server.WebGeneric)
e.GET("/settings/external-embeds", server.WebGeneric)
e.GET("/sys/debug", server.WebGeneric)
+ e.GET("/sys/debug-mod", server.WebGeneric)
e.GET("/sys/log", server.WebGeneric)
e.GET("/support", server.WebGeneric)
e.GET("/support/privacy", server.WebGeneric)
e.GET("/support/tos", server.WebGeneric)
e.GET("/support/community-guidelines", server.WebGeneric)
e.GET("/support/copyright", server.WebGeneric)
+ e.GET("/intent/compose", server.WebGeneric)
// profile endpoints; only first populates info
e.GET("/profile/:handleOrDID", server.WebProfile)
@@ -210,6 +204,7 @@ func serve(cctx *cli.Context) error {
e.GET("/profile/:handleOrDID/lists/:rkey", server.WebGeneric)
e.GET("/profile/:handleOrDID/feed/:rkey", server.WebGeneric)
e.GET("/profile/:handleOrDID/feed/:rkey/liked-by", server.WebGeneric)
+ e.GET("/profile/:handleOrDID/labeler/liked-by", server.WebGeneric)
// profile RSS feed (DID not handle)
e.GET("/profile/:ident/rss", server.WebProfileRSS)
@@ -219,9 +214,6 @@ func serve(cctx *cli.Context) error {
e.GET("/profile/:handleOrDID/post/:rkey/liked-by", server.WebGeneric)
e.GET("/profile/:handleOrDID/post/:rkey/reposted-by", server.WebGeneric)
- // Mailmodo
- e.POST("/api/waitlist", server.apiWaitlist)
-
// Start the server.
log.Infof("starting server address=%s", httpAddress)
go func() {
@@ -396,36 +388,3 @@ func (srv *Server) WebProfile(c echo.Context) error {
data["requestHost"] = req.Host
return c.Render(http.StatusOK, "profile.html", data)
}
-
-func (srv *Server) apiWaitlist(c echo.Context) error {
- type jsonError struct {
- Error string `json:"error"`
- }
-
- // Read the API request.
- type apiRequest struct {
- Email string `json:"email"`
- }
-
- bodyReader := http.MaxBytesReader(c.Response(), c.Request().Body, 16*1024)
- payload, err := ioutil.ReadAll(bodyReader)
- if err != nil {
- return err
- }
- var req apiRequest
- if err := json.Unmarshal(payload, &req); err != nil {
- return c.JSON(http.StatusBadRequest, jsonError{Error: "Invalid API request"})
- }
-
- if req.Email == "" {
- return c.JSON(http.StatusBadRequest, jsonError{Error: "Please enter a valid email address."})
- }
-
- if err := srv.mailmodo.AddToList(c.Request().Context(), req.Email); err != nil {
- log.Errorf("adding email to waitlist failed: %s", err)
- return c.JSON(http.StatusBadRequest, jsonError{
- Error: "Storing email in waitlist failed. Please enter a valid email address.",
- })
- }
- return c.JSON(http.StatusOK, map[string]bool{"success": true})
-}
diff --git a/bskyweb/static/iframe/youtube.html b/bskyweb/static/iframe/youtube.html
index f2ada2ec55..4b74d6fcd9 100644
--- a/bskyweb/static/iframe/youtube.html
+++ b/bskyweb/static/iframe/youtube.html
@@ -5,16 +5,14 @@
}
.container {
position: relative;
- width: 100%;
- height: 0;
- padding-bottom: 56.25%;
+ overflow: hidden;
+ width: 100vw;
+ height: 100vh;
}
.video {
position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
+ width: 100vw;
+ height: 100vh;
}
diff --git a/bskyweb/templates/base.html b/bskyweb/templates/base.html
index a2d81fc96a..34e5901069 100644
--- a/bskyweb/templates/base.html
+++ b/bskyweb/templates/base.html
@@ -43,6 +43,15 @@
height: calc(100% + env(safe-area-inset-top));
scrollbar-gutter: stable both-edges;
}
+ html, body {
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Liberation Sans", Helvetica, Arial, sans-serif;
+ }
+
+ /* Buttons and inputs have a font set by UA, so we'll have to reset that */
+ button, input, textarea {
+ font: inherit;
+ line-height: inherit;
+ }
/* Color theming */
/* Default will always be white */
@@ -132,7 +141,7 @@
/* ProseMirror */
.ProseMirror {
- font: 18px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
+ font: 18px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Liberation Sans", Helvetica, Arial, sans-serif;
min-height: 140px;
}
.ProseMirror-dark {
@@ -205,16 +214,38 @@
[data-tooltip]:hover::before {
display:block;
}
+
+ /* NativeDropdown component */
+ .radix-dropdown-item:focus,
+ .nativeDropdown-item:focus {
+ outline: none;
+ }
+
+ /* Spinner component */
+ @keyframes rotate {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+ }
+ .rotate-500ms {
+ position: absolute;
+ inset:0;
+ animation: rotate 500ms linear infinite;
+ }
{% include "scripts.html" %}
-
+
+
{% block html_head_extra -%}{%- endblock %}
diff --git a/code-signing/certificate.pem b/code-signing/certificate.pem
new file mode 100644
index 0000000000..bfc5cdbde8
--- /dev/null
+++ b/code-signing/certificate.pem
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC0TCCAbmgAwIBAgIJcMN2yt5KNDqTMA0GCSqGSIb3DQEBCwUAMBIxEDAOBgNV
+BAMTB0JsdWVza3kwHhcNMjQwMzE0MDA1OTU4WhcNMzQwMzE0MDA1OTU4WjASMRAw
+DgYDVQQDEwdCbHVlc2t5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+izSAWEc3wRoa3eTBEh/kE9pH0d6jhEGw9GrYfei60MHT1pSq2cTdyUM1yUZchAeW
+gFFtqFxX0pfIZQyMlIZbjkaOxOqzWhB0aCsxngnhbSahFwRxkVwTAuonhqIpaLBL
+hrCCCQ2IfZUpy8QeasqlTlmvmijuCC34fXxJlxNcj8SqzIZi+civ7U5PMPfIMMnD
+tCDIBy1vxMk57m25X2ikcWUFW64qNVLkFAL36xEnmFTL4Ivqpz23gUcUIe1zbesY
+jAgDtlwnAE7mU3oagCUDcSuOveT4POhT35Xp3Y/07I68kmXtrPxwd5k0L0zbisEm
+poKZ87E2X29BitihicMpBwIDAQABoyowKDAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0l
+AQH/BAwwCgYIKwYBBQUHAwMwDQYJKoZIhvcNAQELBQADggEBAED1gdMF0yr8Gy87
+RgyaeVpPySwSsO0selmXXrcmOWgiPA05lubyhFEa4P5kdzBEByG2MT+pJkjGYpvK
+XRnqXM5VvdS2RhYYFH0cFOIUqBKwCnzViCMuGQeoGUx4oPcKFS0PQ1WjW2d4pS75
+51GBfB6LOepsCHUG0A9XEk7EAyUWc4M2ITCJsTtJh8CVn2pTks2q14ETDs86YQv4
+peDaJv8nhIe8oQkeGn2o/P/ctkwJg/uBydQUsWgjjGTQZTilVjGTW1mwDr9FucAE
+d5gKIk4rtR/3Zd/NDdqp8PrkoWeVM7Hwr789/mpUOeqa/j7YNkDYQh7x+M/odd1D
+KY0bQEQ=
+-----END CERTIFICATE-----
\ No newline at end of file
diff --git a/eas.json b/eas.json
index 75254d293e..ed647dbb9c 100644
--- a/eas.json
+++ b/eas.json
@@ -1,7 +1,8 @@
{
"cli": {
"version": ">= 3.8.1",
- "promptToConfigurePushNotifications": false
+ "promptToConfigurePushNotifications": false,
+ "appVersionSource": "remote"
},
"build": {
"base": {
@@ -15,22 +16,62 @@
"ios": {
"simulator": true,
"resourceClass": "large"
+ },
+ "env": {
+ "EXPO_PUBLIC_ENV": "production"
}
},
"preview": {
"extends": "base",
"distribution": "internal",
- "channel": "preview",
+ "channel": "production",
"ios": {
"resourceClass": "large"
+ },
+ "env": {
+ "EXPO_PUBLIC_ENV": "production"
}
},
"production": {
"extends": "base",
"ios": {
- "resourceClass": "large"
+ "resourceClass": "large",
+ "autoIncrement": true
+ },
+ "android": {
+ "autoIncrement": true
+ },
+ "channel": "production",
+ "env": {
+ "EXPO_PUBLIC_ENV": "production"
+ }
+ },
+ "testflight": {
+ "extends": "base",
+ "ios": {
+ "autoIncrement": true
},
- "channel": "production"
+ "android": {
+ "autoIncrement": true
+ },
+ "channel": "testflight",
+ "env": {
+ "EXPO_PUBLIC_ENV": "testflight"
+ }
+ },
+ "testflight-android": {
+ "extends": "base",
+ "distribution": "internal",
+ "ios": {
+ "autoIncrement": true
+ },
+ "android": {
+ "autoIncrement": true
+ },
+ "channel": "testflight",
+ "env": {
+ "EXPO_PUBLIC_ENV": "testflight"
+ }
}
},
"submit": {
diff --git a/eslint/__tests__/avoid-unwrapped-text.test.js b/eslint/__tests__/avoid-unwrapped-text.test.js
new file mode 100644
index 0000000000..a6762b8fd7
--- /dev/null
+++ b/eslint/__tests__/avoid-unwrapped-text.test.js
@@ -0,0 +1,825 @@
+const {RuleTester} = require('eslint')
+const avoidUnwrappedText = require('../avoid-unwrapped-text')
+
+const ruleTester = new RuleTester({
+ parser: require.resolve('@typescript-eslint/parser'),
+ parserOptions: {
+ ecmaFeatures: {
+ jsx: true,
+ },
+ ecmaVersion: 6,
+ sourceType: 'module',
+ },
+})
+
+describe('avoid-unwrapped-text', () => {
+ const tests = {
+ valid: [
+ {
+ code: `
+
+ foo
+
+ `,
+ },
+
+ {
+ code: `
+
+
+ foo
+
+
+ `,
+ },
+
+ {
+ code: `
+
+ <>
+ foo
+ >
+
+ `,
+ },
+
+ {
+ code: `
+
+ {foo && foo}
+
+ `,
+ },
+
+ {
+ code: `
+
+ {foo ? foo : bar}
+
+ `,
+ },
+
+ {
+ code: `
+
+
+ foo
+
+
+ `,
+ },
+
+ {
+ code: `
+
+ {foo && foo}
+
+ `,
+ },
+
+ {
+ code: `
+
+ {foo ? foo : bar}
+
+ `,
+ },
+
+ {
+ code: `
+
+ foo
+
+ `,
+ },
+
+ {
+ code: `
+
+
+ foo
+
+
+ `,
+ },
+
+ {
+ code: `
+
+ {bar}
+
+ `,
+ },
+
+ {
+ code: `
+
+ {bar}
+
+ `,
+ },
+
+ {
+ code: `
+
+ foo {bar}
+
+ `,
+ },
+
+ {
+ code: `
+
+
+ foo
+
+
+ `,
+ },
+
+ {
+ code: `
+
+
+ {bar}
+
+
+ `,
+ },
+
+ {
+ code: `
+
+
+ foo {bar}
+
+
+ `,
+ },
+
+ {
+ code: `
+
+
+ foo
+
+
+ `,
+ },
+
+ {
+ code: `
+foo
+}>
+
+
+ `,
+ },
+
+ {
+ code: `
+foo
+}>
+
+
+ `,
+ },
+
+ {
+ code: `
+foo : bar
+}>
+
+
+ `,
+ },
+
+ {
+ code: `
+foo
+}>
+
+
+ `,
+ },
+
+ {
+ code: `
+foo
+}>
+
+
+ `,
+ },
+
+ {
+ code: `
+foo
+}>
+
+
+ `,
+ },
+
+ {
+ code: `
+foo
+}>
+
+
+ `,
+ },
+
+ {
+ code: `
+foo : bar
+}>
+
+
+ `,
+ },
+
+ {
+ code: `
+function Stuff() {
+ return foo
+}
+ `,
+ },
+
+ {
+ code: `
+function Stuff({ foo }) {
+ return {foo}
+}
+ `,
+ },
+
+ {
+ code: `
+function MyText() {
+ return foo
+}
+ `,
+ },
+
+ {
+ code: `
+function MyText({ foo }) {
+ if (foo) {
+ return foo
+ }
+ return foo
+}
+ `,
+ },
+
+ {
+ code: `
+
+ {'foo'}
+
+ `,
+ },
+
+ {
+ code: `
+
+ {foo + 'foo'}
+
+ `,
+ },
+
+ {
+ code: `
+
+ {'foo'}
+
+ `,
+ },
+
+ {
+ code: `
+
+ {foo['bar'] && }
+
+ `,
+ },
+
+ {
+ code: `
+
+ {(foo === 'bar') && }
+
+ `,
+ },
+
+ {
+ code: `
+
+ {(foo !== 'bar') && }
+
+ `,
+ },
+
+ {
+ code: `
+
+ {\`foo\`}
+
+ `,
+ },
+
+ {
+ code: `
+
+ {\`foo\`}
+
+ `,
+ },
+
+ {
+ code: `
+
+ {_(msg\`foo\`)}
+
+ `,
+ },
+
+ {
+ code: `
+
+ {_(msg\`foo\`)}
+
+ `,
+ },
+
+ {
+ code: `
+
+
+
+
+
+ `,
+ },
+
+ {
+ code: `
+
+ stuff('foo')}>
+
+
+
+ `,
+ },
+
+ {
+ code: `
+
+ {renderItem('foo')}
+
+ `,
+ },
+
+ {
+ code: `
+
+ {foo === 'foo' && }
+
+ `,
+ },
+
+ {
+ code: `
+
+ {foo['foo'] && }
+
+ `,
+ },
+
+ {
+ code: `
+
+ {check('foo') && }
+
+ `,
+ },
+
+ {
+ code: `
+
+ {foo.bar && }
+
+ `,
+ },
+
+ {
+ code: `
+
+ {renderItem('foo')}
+
+ `,
+ },
+
+ {
+ code: `
+
+ {null}
+
+ `,
+ },
+
+ {
+ code: `
+
+ {null}
+
+ `,
+ },
+ ],
+
+ invalid: [
+ {
+ code: `
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+ foo
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+ <>
+ foo
+ >
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+
+ foo
+
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+ {foo && foo}
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+ {foo ? foo : bar}
+
+ `,
+ errors: 2,
+ },
+
+ {
+ code: `
+
+
+ foo
+
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+ foo {bar}
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+
+ foo
+
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+
+ foo
+
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+foo
+}>
+
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+foo
+}>
+
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+foo : bar
+}>
+
+
+ `,
+ errors: 2,
+ },
+
+ {
+ code: `
+foo
+}>
+
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+function MyText() {
+ return
+}
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+function MyText({ foo }) {
+ return {foo}
+}
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+function MyText({ foo }) {
+ if (foo) {
+ return {foo}
+ }
+ return foo
+}
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+ {'foo'}
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+ {foo && 'foo'}
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+ {'foo'}
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+ {foo && {'foo'}}
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+ {10}
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+ {10}
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+ {foo + 10}
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+ {\`foo\`}
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+ {\`foo\`}
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+ {foo + \`foo\`}
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+ {_(msg\`foo\`)}
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+ {foo + _(msg\`foo\`)}
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+ {_(msg\`foo\`)}
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+ {foo + _(msg\`foo\`)}
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+ foo
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+ foo
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+ {foo}
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+
+ {'foo'}
+
+ `,
+ errors: 1,
+ },
+
+ {
+ code: `
+foo
+}>
+
+
+ `,
+ errors: 1,
+ },
+ ],
+ }
+
+ // For easier local testing
+ if (!process.env.CI) {
+ let only = []
+ let skipped = []
+ ;[...tests.valid, ...tests.invalid].forEach(t => {
+ if (t.skip) {
+ delete t.skip
+ skipped.push(t)
+ }
+ if (t.only) {
+ delete t.only
+ only.push(t)
+ }
+ })
+ const predicate = t => {
+ if (only.length > 0) {
+ return only.indexOf(t) !== -1
+ }
+ if (skipped.length > 0) {
+ return skipped.indexOf(t) === -1
+ }
+ return true
+ }
+ tests.valid = tests.valid.filter(predicate)
+ tests.invalid = tests.invalid.filter(predicate)
+ }
+ ruleTester.run('avoid-unwrapped-text', avoidUnwrappedText, tests)
+})
diff --git a/eslint/avoid-unwrapped-text.js b/eslint/avoid-unwrapped-text.js
new file mode 100644
index 0000000000..eef31f7951
--- /dev/null
+++ b/eslint/avoid-unwrapped-text.js
@@ -0,0 +1,331 @@
+'use strict'
+
+// Partially based on eslint-plugin-react-native.
+// Portions of code by Alex Zhukov, MIT license.
+
+function hasOnlyLineBreak(value) {
+ return /^[\r\n\t\f\v]+$/.test(value.replace(/ /g, ''))
+}
+
+function getTagName(node) {
+ const reversedIdentifiers = []
+ if (
+ node.type === 'JSXElement' &&
+ node.openingElement.type === 'JSXOpeningElement'
+ ) {
+ let object = node.openingElement.name
+ while (object.type === 'JSXMemberExpression') {
+ if (object.property.type === 'JSXIdentifier') {
+ reversedIdentifiers.push(object.property.name)
+ }
+ object = object.object
+ }
+
+ if (object.type === 'JSXIdentifier') {
+ reversedIdentifiers.push(object.name)
+ }
+ }
+
+ return reversedIdentifiers.reverse().join('.')
+}
+
+exports.create = function create(context) {
+ const options = context.options[0] || {}
+ const impliedTextProps = options.impliedTextProps ?? []
+ const impliedTextComponents = options.impliedTextComponents ?? []
+ const suggestedTextWrappers = options.suggestedTextWrappers ?? {}
+ const textProps = [...impliedTextProps]
+ const textComponents = ['Text', ...impliedTextComponents]
+
+ function isTextComponent(tagName) {
+ return textComponents.includes(tagName) || tagName.endsWith('Text')
+ }
+
+ return {
+ JSXText(node) {
+ if (typeof node.value !== 'string' || hasOnlyLineBreak(node.value)) {
+ return
+ }
+ let parent = node.parent
+ while (parent) {
+ if (parent.type === 'JSXElement') {
+ const tagName = getTagName(parent)
+ if (isTextComponent(tagName)) {
+ // We're good.
+ return
+ }
+ if (tagName === 'Trans') {
+ // Exit and rely on the traversal for JSXElement (code below).
+ // TODO: Maybe validate that it's present.
+ return
+ }
+ const suggestedWrapper = suggestedTextWrappers[tagName]
+ let message = `Wrap this string in <${suggestedWrapper ?? 'Text'}>.`
+ if (tagName !== 'View' && !suggestedWrapper) {
+ message +=
+ ' If <' +
+ tagName +
+ '> is guaranteed to render , ' +
+ 'rename it to <' +
+ tagName +
+ 'Text> or add it to impliedTextComponents.'
+ }
+ context.report({
+ node,
+ message,
+ })
+ return
+ }
+
+ if (
+ parent.type === 'JSXAttribute' &&
+ parent.name.type === 'JSXIdentifier' &&
+ parent.parent.type === 'JSXOpeningElement' &&
+ parent.parent.parent.type === 'JSXElement'
+ ) {
+ const tagName = getTagName(parent.parent.parent)
+ const propName = parent.name.name
+ if (
+ textProps.includes(tagName + ' ' + propName) ||
+ propName === 'text' ||
+ propName.endsWith('Text')
+ ) {
+ // We're good.
+ return
+ }
+ const message =
+ 'Wrap this string in .' +
+ ' If `' +
+ propName +
+ '` is guaranteed to be wrapped in , ' +
+ 'rename it to `' +
+ propName +
+ 'Text' +
+ '` or add it to impliedTextProps.'
+ context.report({
+ node,
+ message,
+ })
+ return
+ }
+
+ parent = parent.parent
+ continue
+ }
+ },
+ Literal(node) {
+ if (typeof node.value !== 'string' && typeof node.value !== 'number') {
+ return
+ }
+ let parent = node.parent
+ while (parent) {
+ if (parent.type === 'JSXElement') {
+ const tagName = getTagName(parent)
+ if (isTextComponent(tagName)) {
+ // We're good.
+ return
+ }
+ if (tagName === 'Trans') {
+ // Exit and rely on the traversal for JSXElement (code below).
+ // TODO: Maybe validate that it's present.
+ return
+ }
+ const suggestedWrapper = suggestedTextWrappers[tagName]
+ let message = `Wrap this string in <${suggestedWrapper ?? 'Text'}>.`
+ if (tagName !== 'View' && !suggestedWrapper) {
+ message +=
+ ' If <' +
+ tagName +
+ '> is guaranteed to render , ' +
+ 'rename it to <' +
+ tagName +
+ 'Text> or add it to impliedTextComponents.'
+ }
+ context.report({
+ node,
+ message,
+ })
+ return
+ }
+
+ if (parent.type === 'BinaryExpression' && parent.operator === '+') {
+ parent = parent.parent
+ continue
+ }
+
+ if (
+ parent.type === 'JSXExpressionContainer' ||
+ parent.type === 'LogicalExpression'
+ ) {
+ parent = parent.parent
+ continue
+ }
+
+ // Be conservative for other types.
+ return
+ }
+ },
+ TemplateLiteral(node) {
+ let parent = node.parent
+ while (parent) {
+ if (parent.type === 'JSXElement') {
+ const tagName = getTagName(parent)
+ if (isTextComponent(tagName)) {
+ // We're good.
+ return
+ }
+ if (tagName === 'Trans') {
+ // Exit and rely on the traversal for JSXElement (code below).
+ // TODO: Maybe validate that it's present.
+ return
+ }
+ const suggestedWrapper = suggestedTextWrappers[tagName]
+ let message = `Wrap this string in <${suggestedWrapper ?? 'Text'}>.`
+ if (tagName !== 'View' && !suggestedWrapper) {
+ message +=
+ ' If <' +
+ tagName +
+ '> is guaranteed to render , ' +
+ 'rename it to <' +
+ tagName +
+ 'Text> or add it to impliedTextComponents.'
+ }
+ context.report({
+ node,
+ message,
+ })
+ return
+ }
+
+ if (
+ parent.type === 'CallExpression' &&
+ parent.callee.type === 'Identifier' &&
+ parent.callee.name === '_'
+ ) {
+ // This is a user-facing string, keep going up.
+ parent = parent.parent
+ continue
+ }
+
+ if (parent.type === 'BinaryExpression' && parent.operator === '+') {
+ parent = parent.parent
+ continue
+ }
+
+ if (
+ parent.type === 'JSXExpressionContainer' ||
+ parent.type === 'LogicalExpression' ||
+ parent.type === 'TaggedTemplateExpression'
+ ) {
+ parent = parent.parent
+ continue
+ }
+
+ // Be conservative for other types.
+ return
+ }
+ },
+ JSXElement(node) {
+ if (getTagName(node) !== 'Trans') {
+ return
+ }
+ let parent = node.parent
+ while (parent) {
+ if (parent.type === 'JSXElement') {
+ const tagName = getTagName(parent)
+ if (isTextComponent(tagName)) {
+ // We're good.
+ return
+ }
+ if (tagName === 'Trans') {
+ // Exit and rely on the traversal for this JSXElement.
+ // TODO: Should nested even be allowed?
+ return
+ }
+ const suggestedWrapper = suggestedTextWrappers[tagName]
+ let message = `Wrap this in <${suggestedWrapper ?? 'Text'}>.`
+ if (tagName !== 'View' && !suggestedWrapper) {
+ message +=
+ ' If <' +
+ tagName +
+ '> is guaranteed to render , ' +
+ 'rename it to <' +
+ tagName +
+ 'Text> or add it to impliedTextComponents.'
+ }
+ context.report({
+ node,
+ message,
+ })
+ return
+ }
+
+ if (
+ parent.type === 'JSXAttribute' &&
+ parent.name.type === 'JSXIdentifier' &&
+ parent.parent.type === 'JSXOpeningElement' &&
+ parent.parent.parent.type === 'JSXElement'
+ ) {
+ const tagName = getTagName(parent.parent.parent)
+ const propName = parent.name.name
+ if (
+ textProps.includes(tagName + ' ' + propName) ||
+ propName === 'text' ||
+ propName.endsWith('Text')
+ ) {
+ // We're good.
+ return
+ }
+ const message =
+ 'Wrap this in .' +
+ ' If `' +
+ propName +
+ '` is guaranteed to be wrapped in , ' +
+ 'rename it to `' +
+ propName +
+ 'Text' +
+ '` or add it to impliedTextProps.'
+ context.report({
+ node,
+ message,
+ })
+ return
+ }
+
+ parent = parent.parent
+ continue
+ }
+ },
+ ReturnStatement(node) {
+ let fnScope = context.getScope()
+ while (fnScope && fnScope.type !== 'function') {
+ fnScope = fnScope.upper
+ }
+ if (!fnScope) {
+ return
+ }
+ const fn = fnScope.block
+ if (!fn.id || fn.id.type !== 'Identifier' || !fn.id.name) {
+ return
+ }
+ if (!/^[A-Z]\w*Text$/.test(fn.id.name)) {
+ return
+ }
+ if (!node.argument || node.argument.type !== 'JSXElement') {
+ return
+ }
+ const openingEl = node.argument.openingElement
+ if (openingEl.name.type !== 'JSXIdentifier') {
+ return
+ }
+ const returnedComponentName = openingEl.name.name
+ if (!isTextComponent(returnedComponentName)) {
+ context.report({
+ node,
+ message:
+ 'Components ending with *Text must return or .',
+ })
+ }
+ },
+ }
+}
diff --git a/eslint/index.js b/eslint/index.js
new file mode 100644
index 0000000000..bb31a942d1
--- /dev/null
+++ b/eslint/index.js
@@ -0,0 +1,8 @@
+'use strict'
+
+module.exports = {
+ rules: {
+ 'avoid-unwrapped-text': require('./avoid-unwrapped-text'),
+ 'use-typed-gates': require('./use-typed-gates'),
+ },
+}
diff --git a/eslint/use-typed-gates.js b/eslint/use-typed-gates.js
new file mode 100644
index 0000000000..6c0331afee
--- /dev/null
+++ b/eslint/use-typed-gates.js
@@ -0,0 +1,30 @@
+'use strict'
+
+exports.create = function create(context) {
+ return {
+ ImportSpecifier(node) {
+ if (
+ !node.local ||
+ node.local.type !== 'Identifier' ||
+ node.local.name !== 'useGate'
+ ) {
+ return
+ }
+ if (
+ node.parent.type !== 'ImportDeclaration' ||
+ !node.parent.source ||
+ node.parent.source.type !== 'Literal'
+ ) {
+ return
+ }
+ const source = node.parent.source.value
+ if (source.startsWith('statsig') || source.startsWith('@statsig')) {
+ context.report({
+ node,
+ message:
+ "Use useGate() from '#/lib/statsig/statsig' instead of the one on npm.",
+ })
+ }
+ },
+ }
+}
diff --git a/index.web.js b/index.web.js
index 4dee831cda..543ce34dd5 100644
--- a/index.web.js
+++ b/index.web.js
@@ -1,5 +1,8 @@
+import '#/platform/markBundleStartTime'
import '#/platform/polyfills'
+
import {registerRootComponent} from 'expo'
+
import {doPolyfill} from '#/lib/api/api-polyfill'
import App from '#/App'
diff --git a/jest/jestSetup.js b/jest/jestSetup.js
index d8cee9bfda..da28a886dc 100644
--- a/jest/jestSetup.js
+++ b/jest/jestSetup.js
@@ -1,10 +1,10 @@
/* global jest */
-import {configure} from '@testing-library/react-native'
import 'react-native-gesture-handler/jestSetup'
-
// IMPORTANT: this is what's used in the native runtime
import 'react-native-url-polyfill/auto'
+import {configure} from '@testing-library/react-native'
+
configure({asyncUtilTimeout: 20000})
jest.mock('@react-native-async-storage/async-storage', () =>
@@ -88,3 +88,5 @@ jest.mock('sentry-expo', () => ({
ReactNavigationInstrumentation: jest.fn(),
},
}))
+
+jest.mock('crypto', () => ({}))
diff --git a/jest/test-pds.ts b/jest/test-pds.ts
index 51d9643947..1c52d944c6 100644
--- a/jest/test-pds.ts
+++ b/jest/test-pds.ts
@@ -1,8 +1,8 @@
+import {AtUri, BskyAgent} from '@atproto/api'
+import {TestBsky, TestNetwork} from '@atproto/dev-env'
+import fs from 'fs'
import net from 'net'
import path from 'path'
-import fs from 'fs'
-import {TestNetwork, TestPds} from '@atproto/dev-env'
-import {AtUri, BskyAgent} from '@atproto/api'
export interface TestUser {
email: string
@@ -55,12 +55,8 @@ class StringIdGenerator {
const ids = new StringIdGenerator()
export async function createServer(
- {
- inviteRequired,
- phoneRequired,
- }: {inviteRequired: boolean; phoneRequired: boolean} = {
+ {inviteRequired}: {inviteRequired: boolean} = {
inviteRequired: false,
- phoneRequired: false,
},
): Promise {
const port = 3000
@@ -69,22 +65,11 @@ export async function createServer(
const pdsUrl = `http://localhost:${port}`
const id = ids.next()
- const phoneParams = phoneRequired
- ? {
- phoneVerificationRequired: true,
- twilioAccountSid: 'ACXXXXXXX',
- twilioAuthToken: 'AUTH',
- twilioServiceSid: 'VAXXXXXXXX',
- }
- : {}
-
const testNet = await TestNetwork.create({
pds: {
port,
hostname: 'localhost',
- dbPostgresSchema: `pds_${id}`,
inviteRequired,
- ...phoneParams,
},
bsky: {
dbPostgresSchema: `bsky_${id}`,
@@ -93,7 +78,33 @@ export async function createServer(
},
plc: {port: port2},
})
- mockTwilio(testNet.pds)
+
+ // add the test mod authority
+ const agent = new BskyAgent({service: pdsUrl})
+ const res = await agent.api.com.atproto.server.createAccount({
+ email: 'mod-authority@test.com',
+ handle: 'mod-authority.test',
+ password: 'hunter2',
+ })
+ agent.api.setHeader('Authorization', `Bearer ${res.data.accessJwt}`)
+ await agent.api.app.bsky.actor.profile.create(
+ {repo: res.data.did},
+ {
+ displayName: 'Dev-env Moderation',
+ description: `The pretend version of mod.bsky.app`,
+ },
+ )
+
+ await agent.api.app.bsky.labeler.service.create(
+ {repo: res.data.did, rkey: 'self'},
+ {
+ policies: {
+ labelValues: ['!hide', '!warn'],
+ labelValueDefinitions: [],
+ },
+ createdAt: new Date().toISOString(),
+ },
+ )
const pic = fs.readFileSync(
path.join(__dirname, '..', 'assets', 'default-avatar.png'),
@@ -151,7 +162,7 @@ class Mocker {
const inviteRes = await agent.api.com.atproto.server.createInviteCode(
{useCount: 1},
{
- headers: this.pds.adminAuthHeaders('admin'),
+ headers: this.pds.adminAuthHeaders(),
encoding: 'application/json',
},
)
@@ -162,8 +173,6 @@ class Mocker {
email,
handle: name + '.test',
password: 'hunter2',
- verificationPhone: '1234567890',
- verificationCode: '000000',
})
await agent.upsertProfile(async () => {
const blob = await agent.uploadBlob(this.pic, {
@@ -328,7 +337,7 @@ class Mocker {
await agent.api.com.atproto.server.createInviteCode(
{useCount: 1, forAccount},
{
- headers: this.pds.adminAuthHeaders('admin'),
+ headers: this.pds.adminAuthHeaders(),
encoding: 'application/json',
},
)
@@ -343,18 +352,11 @@ class Mocker {
if (!ctx) {
throw new Error('Invalid appview')
}
- const labelSrvc = ctx.services.label(ctx.db.getPrimary())
- await labelSrvc.createLabels([
- {
- // @ts-ignore
- src: ctx.cfg.labelerDid,
- uri: did,
- cid: '',
- val: label,
- neg: false,
- cts: new Date().toISOString(),
- },
- ])
+ await createLabel(this.bsky, {
+ uri: did,
+ cid: '',
+ val: label,
+ })
}
async labelProfile(label: string, user: string) {
@@ -373,18 +375,11 @@ class Mocker {
if (!ctx) {
throw new Error('Invalid appview')
}
- const labelSrvc = ctx.services.label(ctx.db.getPrimary())
- await labelSrvc.createLabels([
- {
- // @ts-ignore
- src: ctx.cfg.labelerDid,
- uri: profile.uri,
- cid: profile.cid,
- val: label,
- neg: false,
- cts: new Date().toISOString(),
- },
- ])
+ await createLabel(this.bsky, {
+ uri: profile.uri,
+ cid: profile.cid,
+ val: label,
+ })
}
async labelPost(label: string, {uri, cid}: {uri: string; cid: string}) {
@@ -392,18 +387,11 @@ class Mocker {
if (!ctx) {
throw new Error('Invalid appview')
}
- const labelSrvc = ctx.services.label(ctx.db.getPrimary())
- await labelSrvc.createLabels([
- {
- // @ts-ignore
- src: ctx.cfg.labelerDid,
- uri,
- cid,
- val: label,
- neg: false,
- cts: new Date().toISOString(),
- },
- ])
+ await createLabel(this.bsky, {
+ uri,
+ cid,
+ val: label,
+ })
}
async createMuteList(user: string, name: string): Promise {
@@ -454,14 +442,19 @@ async function getPort(start = 3000) {
throw new Error('Unable to find an available port')
}
-export const mockTwilio = (pds: TestPds) => {
- if (!pds.ctx.twilio) return
-
- pds.ctx.twilio.sendCode = async (_number: string) => {
- // do nothing
- }
-
- pds.ctx.twilio.verifyCode = async (_number: string, code: string) => {
- return code === '000000'
- }
+const createLabel = async (
+ bsky: TestBsky,
+ opts: {uri: string; cid: string; val: string},
+) => {
+ await bsky.db.db
+ .insertInto('label')
+ .values({
+ uri: opts.uri,
+ cid: opts.cid,
+ val: opts.val,
+ cts: new Date().toISOString(),
+ neg: false,
+ src: 'did:example:labeler',
+ })
+ .execute()
}
diff --git a/lingui.config.js b/lingui.config.js
index 3916df5e62..14a94b5ded 100644
--- a/lingui.config.js
+++ b/lingui.config.js
@@ -2,18 +2,22 @@
module.exports = {
locales: [
'en',
+ 'ca',
'de',
'es',
+ 'fi',
'fr',
+ 'ga',
'hi',
'id',
+ 'it',
'ja',
'ko',
'pt-BR',
+ 'tr',
'uk',
- 'ca',
'zh-CN',
- 'it',
+ 'zh-TW',
],
catalogs: [
{
diff --git a/modules/Share-with-Bluesky/Info.plist b/modules/Share-with-Bluesky/Info.plist
new file mode 100644
index 0000000000..90fe923455
--- /dev/null
+++ b/modules/Share-with-Bluesky/Info.plist
@@ -0,0 +1,41 @@
+
+
+
+
+ NSExtension
+
+ NSExtensionPrincipalClass
+ $(PRODUCT_MODULE_NAME).ShareViewController
+ NSExtensionAttributes
+
+ NSExtensionActivationRule
+
+ NSExtensionActivationSupportsText
+
+ NSExtensionActivationSupportsWebURLWithMaxCount
+ 1
+ NSExtensionActivationSupportsImageWithMaxCount
+ 10
+
+
+ NSExtensionPointIdentifier
+ com.apple.share-services
+
+ MainAppScheme
+ bluesky
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundleDisplayName
+ Extension
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleVersion
+ $(CURRENT_PROJECT_VERSION)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundlePackageType
+ $(PRODUCT_BUNDLE_PACKAGE_TYPE)
+ CFBundleShortVersionString
+ $(MARKETING_VERSION)
+
+
diff --git a/modules/Share-with-Bluesky/Share-with-Bluesky.entitlements b/modules/Share-with-Bluesky/Share-with-Bluesky.entitlements
new file mode 100644
index 0000000000..d2253d31f8
--- /dev/null
+++ b/modules/Share-with-Bluesky/Share-with-Bluesky.entitlements
@@ -0,0 +1,10 @@
+
+
+
+
+ com.apple.security.application-groups
+
+ group.app.bsky
+
+
+
diff --git a/modules/Share-with-Bluesky/ShareViewController.swift b/modules/Share-with-Bluesky/ShareViewController.swift
new file mode 100644
index 0000000000..4c1d635ce3
--- /dev/null
+++ b/modules/Share-with-Bluesky/ShareViewController.swift
@@ -0,0 +1,153 @@
+import UIKit
+
+class ShareViewController: UIViewController {
+ // This allows other forks to use this extension while also changing their
+ // scheme.
+ let appScheme = Bundle.main.object(forInfoDictionaryKey: "MainAppScheme") as? String ?? "bluesky"
+
+ //
+ override func viewDidAppear(_ animated: Bool) {
+ super.viewDidAppear(animated)
+
+ guard let extensionItem = extensionContext?.inputItems.first as? NSExtensionItem,
+ let attachments = extensionItem.attachments,
+ let firstAttachment = extensionItem.attachments?.first
+ else {
+ self.completeRequest()
+ return
+ }
+
+ Task {
+ if firstAttachment.hasItemConformingToTypeIdentifier("public.text") {
+ await self.handleText(item: firstAttachment)
+ } else if firstAttachment.hasItemConformingToTypeIdentifier("public.url") {
+ await self.handleUrl(item: firstAttachment)
+ } else if firstAttachment.hasItemConformingToTypeIdentifier("public.image") {
+ await self.handleImages(items: attachments)
+ } else {
+ self.completeRequest()
+ }
+ }
+ }
+
+ private func handleText(item: NSItemProvider) async -> Void {
+ do {
+ if let data = try await item.loadItem(forTypeIdentifier: "public.text") as? String {
+ if let encoded = data.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed),
+ let url = URL(string: "\(self.appScheme)://intent/compose?text=\(encoded)")
+ {
+ _ = self.openURL(url)
+ }
+ }
+ self.completeRequest()
+ } catch {
+ self.completeRequest()
+ }
+ }
+
+ private func handleUrl(item: NSItemProvider) async -> Void {
+ do {
+ if let data = try await item.loadItem(forTypeIdentifier: "public.url") as? URL {
+ if let encoded = data.absoluteString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed),
+ let url = URL(string: "\(self.appScheme)://intent/compose?text=\(encoded)")
+ {
+ _ = self.openURL(url)
+ }
+ }
+ self.completeRequest()
+ } catch {
+ self.completeRequest()
+ }
+ }
+
+ private func handleImages(items: [NSItemProvider]) async -> Void {
+ let firstFourItems: [NSItemProvider]
+ if items.count < 4 {
+ firstFourItems = items
+ } else {
+ firstFourItems = Array(items[0...3])
+ }
+
+ var valid = true
+ var imageUris = ""
+
+ for (index, item) in firstFourItems.enumerated() {
+ var imageUriInfo: String? = nil
+
+ do {
+ if let dataUri = try await item.loadItem(forTypeIdentifier: "public.image") as? URL {
+ // We need to duplicate this image, since we don't have access to the outgoing temp directory
+ // We also will get the image dimensions here, sinze RN makes it difficult to get those dimensions for local files
+ let data = try Data(contentsOf: dataUri)
+ let image = UIImage(data: data)
+ imageUriInfo = self.saveImageWithInfo(image)
+ } else if let image = try await item.loadItem(forTypeIdentifier: "public.image") as? UIImage {
+ imageUriInfo = self.saveImageWithInfo(image)
+ }
+ } catch {
+ valid = false
+ }
+
+ if let imageUriInfo = imageUriInfo {
+ imageUris.append(imageUriInfo)
+ if index < items.count - 1 {
+ imageUris.append(",")
+ }
+ } else {
+ valid = false
+ }
+ }
+
+ if valid,
+ let encoded = imageUris.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed),
+ let url = URL(string: "\(self.appScheme)://intent/compose?imageUris=\(encoded)")
+ {
+ _ = self.openURL(url)
+ }
+
+ self.completeRequest()
+ }
+
+ private func saveImageWithInfo(_ image: UIImage?) -> String? {
+ guard let image = image else {
+ return nil
+ }
+
+ do {
+ // Saving this file to the bundle group's directory lets us access it from
+ // inside of the app. Otherwise, we wouldn't have access even though the
+ // extension does.
+ if let dir = FileManager()
+ .containerURL(
+ forSecurityApplicationGroupIdentifier: "group.app.bsky")
+ {
+ let filePath = "\(dir.absoluteString)\(ProcessInfo.processInfo.globallyUniqueString).jpeg"
+
+ if let newUri = URL(string: filePath),
+ let jpegData = image.jpegData(compressionQuality: 1)
+ {
+ try jpegData.write(to: newUri)
+ return "\(newUri.absoluteString)|\(image.size.width)|\(image.size.height)"
+ }
+ }
+ return nil
+ } catch {
+ return nil
+ }
+ }
+
+ private func completeRequest() -> Void {
+ self.extensionContext?.completeRequest(returningItems: nil)
+ }
+
+ @objc func openURL(_ url: URL) -> Bool {
+ var responder: UIResponder? = self
+ while responder != nil {
+ if let application = responder as? UIApplication {
+ return application.perform(#selector(openURL(_:)), with: url) != nil
+ }
+ responder = responder?.next
+ }
+ return false
+ }
+}
diff --git a/modules/expo-receive-android-intents/README.md b/modules/expo-receive-android-intents/README.md
new file mode 100644
index 0000000000..7e8506860c
--- /dev/null
+++ b/modules/expo-receive-android-intents/README.md
@@ -0,0 +1,8 @@
+# Expo Receive Android Intents
+
+This module handles incoming intents on Android. Handled intents are `text/plain` and `image/*` (single or multiple).
+The module handles saving images to the app's filesystem for access within the app, limiting the selection of images
+to a max of four, and handling intent types. No JS code is required for this module, and it is no-op on non-android
+platforms.
+
+No installation is required. Gradle will automatically add this module on build.
diff --git a/modules/expo-receive-android-intents/android/.gitignore b/modules/expo-receive-android-intents/android/.gitignore
new file mode 100644
index 0000000000..877b87e9a5
--- /dev/null
+++ b/modules/expo-receive-android-intents/android/.gitignore
@@ -0,0 +1,15 @@
+# OSX
+#
+.DS_Store
+
+# Android/IntelliJ
+#
+build/
+.idea
+.gradle
+local.properties
+*.iml
+*.hprof
+
+# Bundle artifacts
+*.jsbundle
diff --git a/modules/expo-receive-android-intents/android/build.gradle b/modules/expo-receive-android-intents/android/build.gradle
new file mode 100644
index 0000000000..3712dda40f
--- /dev/null
+++ b/modules/expo-receive-android-intents/android/build.gradle
@@ -0,0 +1,92 @@
+apply plugin: 'com.android.library'
+apply plugin: 'kotlin-android'
+apply plugin: 'maven-publish'
+
+group = 'xyz.blueskyweb.app.exporeceiveandroidintents'
+version = '0.4.1'
+
+buildscript {
+ def expoModulesCorePlugin = new File(project(":expo-modules-core").projectDir.absolutePath, "ExpoModulesCorePlugin.gradle")
+ if (expoModulesCorePlugin.exists()) {
+ apply from: expoModulesCorePlugin
+ applyKotlinExpoModulesCorePlugin()
+ }
+
+ // Simple helper that allows the root project to override versions declared by this library.
+ ext.safeExtGet = { prop, fallback ->
+ rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
+ }
+
+ // Ensures backward compatibility
+ ext.getKotlinVersion = {
+ if (ext.has("kotlinVersion")) {
+ ext.kotlinVersion()
+ } else {
+ ext.safeExtGet("kotlinVersion", "1.8.10")
+ }
+ }
+
+ repositories {
+ mavenCentral()
+ }
+
+ dependencies {
+ classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${getKotlinVersion()}")
+ }
+}
+
+afterEvaluate {
+ publishing {
+ publications {
+ release(MavenPublication) {
+ from components.release
+ }
+ }
+ repositories {
+ maven {
+ url = mavenLocal().url
+ }
+ }
+ }
+}
+
+android {
+ compileSdkVersion safeExtGet("compileSdkVersion", 33)
+
+ def agpVersion = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION
+ if (agpVersion.tokenize('.')[0].toInteger() < 8) {
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_11
+ targetCompatibility JavaVersion.VERSION_11
+ }
+
+ kotlinOptions {
+ jvmTarget = JavaVersion.VERSION_11.majorVersion
+ }
+ }
+
+ namespace "xyz.blueskyweb.app.exporeceiveandroidintents"
+ defaultConfig {
+ minSdkVersion safeExtGet("minSdkVersion", 21)
+ targetSdkVersion safeExtGet("targetSdkVersion", 34)
+ versionCode 1
+ versionName "0.4.1"
+ }
+ lintOptions {
+ abortOnError false
+ }
+ publishing {
+ singleVariant("release") {
+ withSourcesJar()
+ }
+ }
+}
+
+repositories {
+ mavenCentral()
+}
+
+dependencies {
+ implementation project(':expo-modules-core')
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${getKotlinVersion()}"
+}
diff --git a/modules/expo-receive-android-intents/android/src/main/AndroidManifest.xml b/modules/expo-receive-android-intents/android/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..bdae66c8f5
--- /dev/null
+++ b/modules/expo-receive-android-intents/android/src/main/AndroidManifest.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/modules/expo-receive-android-intents/android/src/main/java/xyz/blueskyweb/app/exporeceiveandroidintents/ExpoReceiveAndroidIntentsModule.kt b/modules/expo-receive-android-intents/android/src/main/java/xyz/blueskyweb/app/exporeceiveandroidintents/ExpoReceiveAndroidIntentsModule.kt
new file mode 100644
index 0000000000..c2e17fb80a
--- /dev/null
+++ b/modules/expo-receive-android-intents/android/src/main/java/xyz/blueskyweb/app/exporeceiveandroidintents/ExpoReceiveAndroidIntentsModule.kt
@@ -0,0 +1,119 @@
+package xyz.blueskyweb.app.exporeceiveandroidintents
+
+import android.content.Intent
+import android.graphics.Bitmap
+import android.net.Uri
+import android.os.Build
+import android.provider.MediaStore
+import androidx.core.net.toUri
+import expo.modules.kotlin.modules.Module
+import expo.modules.kotlin.modules.ModuleDefinition
+import java.io.File
+import java.io.FileOutputStream
+import java.net.URLEncoder
+
+class ExpoReceiveAndroidIntentsModule : Module() {
+ override fun definition() = ModuleDefinition {
+ Name("ExpoReceiveAndroidIntents")
+
+ OnNewIntent {
+ handleIntent(it)
+ }
+ }
+
+ private fun handleIntent(intent: Intent?) {
+ if(appContext.currentActivity == null || intent == null) return
+
+ if (intent.action == Intent.ACTION_SEND) {
+ if (intent.type == "text/plain") {
+ handleTextIntent(intent)
+ } else if (intent.type.toString().startsWith("image/")) {
+ handleImageIntent(intent)
+ }
+ } else if (intent.action == Intent.ACTION_SEND_MULTIPLE) {
+ if (intent.type.toString().startsWith("image/")) {
+ handleImagesIntent(intent)
+ }
+ }
+ }
+
+ private fun handleTextIntent(intent: Intent) {
+ intent.getStringExtra(Intent.EXTRA_TEXT)?.let {
+ val encoded = URLEncoder.encode(it, "UTF-8")
+ "bluesky://intent/compose?text=${encoded}".toUri().let { uri ->
+ val newIntent = Intent(Intent.ACTION_VIEW, uri)
+ appContext.currentActivity?.startActivity(newIntent)
+ }
+ }
+ }
+
+ private fun handleImageIntent(intent: Intent) {
+ val uri = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ intent.getParcelableExtra(Intent.EXTRA_STREAM, Uri::class.java)
+ } else {
+ intent.getParcelableExtra(Intent.EXTRA_STREAM)
+ }
+ if (uri == null) return
+
+ handleImageIntents(listOf(uri))
+ }
+
+ private fun handleImagesIntent(intent: Intent) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM, Uri::class.java)?.let {
+ handleImageIntents(it.filterIsInstance().take(4))
+ }
+ } else {
+ intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM)?.let {
+ handleImageIntents(it.filterIsInstance().take(4))
+ }
+ }
+ }
+
+ private fun handleImageIntents(uris: List) {
+ var allParams = ""
+
+ uris.forEachIndexed { index, uri ->
+ val info = getImageInfo(uri)
+ val params = buildUriData(info)
+ allParams = "${allParams}${params}"
+
+ if (index < uris.count() - 1) {
+ allParams = "${allParams},"
+ }
+ }
+
+ val encoded = URLEncoder.encode(allParams, "UTF-8")
+
+ "bluesky://intent/compose?imageUris=${encoded}".toUri().let {
+ val newIntent = Intent(Intent.ACTION_VIEW, it)
+ appContext.currentActivity?.startActivity(newIntent)
+ }
+ }
+
+ private fun getImageInfo(uri: Uri): Map {
+ val bitmap = MediaStore.Images.Media.getBitmap(appContext.currentActivity?.contentResolver, uri)
+ // We have to save this so that we can access it later when uploading the image.
+ // createTempFile will automatically place a unique string between "img" and "temp.jpeg"
+ val file = File.createTempFile("img", "temp.jpeg", appContext.currentActivity?.cacheDir)
+ val out = FileOutputStream(file)
+ bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out)
+ out.flush()
+ out.close()
+
+ return mapOf(
+ "width" to bitmap.width,
+ "height" to bitmap.height,
+ "path" to file.path.toString()
+ )
+ }
+
+ // We will pas the width and height to the app here, since getting measurements
+ // on the RN side is a bit more involved, and we already have them here anyway.
+ private fun buildUriData(info: Map): String {
+ val path = info.getValue("path")
+ val width = info.getValue("width")
+ val height = info.getValue("height")
+ return "file://${path}|${width}|${height}"
+ }
+}
diff --git a/modules/expo-receive-android-intents/expo-module.config.json b/modules/expo-receive-android-intents/expo-module.config.json
new file mode 100644
index 0000000000..8f01fb6c9f
--- /dev/null
+++ b/modules/expo-receive-android-intents/expo-module.config.json
@@ -0,0 +1,6 @@
+{
+ "platforms": ["android"],
+ "android": {
+ "modules": ["xyz.blueskyweb.app.exporeceiveandroidintents.ExpoReceiveAndroidIntentsModule"]
+ }
+}
diff --git a/modules/expo-scroll-forwarder/expo-module.config.json b/modules/expo-scroll-forwarder/expo-module.config.json
new file mode 100644
index 0000000000..1fd49f79b7
--- /dev/null
+++ b/modules/expo-scroll-forwarder/expo-module.config.json
@@ -0,0 +1,6 @@
+{
+ "platforms": ["ios"],
+ "ios": {
+ "modules": ["ExpoScrollForwarderModule"]
+ }
+}
diff --git a/modules/expo-scroll-forwarder/index.ts b/modules/expo-scroll-forwarder/index.ts
new file mode 100644
index 0000000000..a4ad4b8506
--- /dev/null
+++ b/modules/expo-scroll-forwarder/index.ts
@@ -0,0 +1 @@
+export {ExpoScrollForwarderView} from './src/ExpoScrollForwarderView'
diff --git a/modules/expo-scroll-forwarder/ios/ExpoScrollForwarder.podspec b/modules/expo-scroll-forwarder/ios/ExpoScrollForwarder.podspec
new file mode 100644
index 0000000000..78ca9812e4
--- /dev/null
+++ b/modules/expo-scroll-forwarder/ios/ExpoScrollForwarder.podspec
@@ -0,0 +1,21 @@
+Pod::Spec.new do |s|
+ s.name = 'ExpoScrollForwarder'
+ s.version = '1.0.0'
+ s.summary = 'Forward scroll gesture from UIView to UIScrollView'
+ s.description = 'Forward scroll gesture from UIView to UIScrollView'
+ s.author = 'bluesky-social'
+ s.homepage = 'https://github.com/bluesky-social/social-app'
+ s.platforms = { :ios => '13.4', :tvos => '13.4' }
+ s.source = { git: '' }
+ s.static_framework = true
+
+ s.dependency 'ExpoModulesCore'
+
+ # Swift/Objective-C compatibility
+ s.pod_target_xcconfig = {
+ 'DEFINES_MODULE' => 'YES',
+ 'SWIFT_COMPILATION_MODE' => 'wholemodule'
+ }
+
+ s.source_files = "**/*.{h,m,mm,swift,hpp,cpp}"
+end
diff --git a/modules/expo-scroll-forwarder/ios/ExpoScrollForwarderModule.swift b/modules/expo-scroll-forwarder/ios/ExpoScrollForwarderModule.swift
new file mode 100644
index 0000000000..c4ecc788e5
--- /dev/null
+++ b/modules/expo-scroll-forwarder/ios/ExpoScrollForwarderModule.swift
@@ -0,0 +1,13 @@
+import ExpoModulesCore
+
+public class ExpoScrollForwarderModule: Module {
+ public func definition() -> ModuleDefinition {
+ Name("ExpoScrollForwarder")
+
+ View(ExpoScrollForwarderView.self) {
+ Prop("scrollViewTag") { (view: ExpoScrollForwarderView, prop: Int) in
+ view.scrollViewTag = prop
+ }
+ }
+ }
+}
diff --git a/modules/expo-scroll-forwarder/ios/ExpoScrollForwarderView.swift b/modules/expo-scroll-forwarder/ios/ExpoScrollForwarderView.swift
new file mode 100644
index 0000000000..9c0e2f8728
--- /dev/null
+++ b/modules/expo-scroll-forwarder/ios/ExpoScrollForwarderView.swift
@@ -0,0 +1,215 @@
+import ExpoModulesCore
+
+// This view will be used as a native component. Make sure to inherit from `ExpoView`
+// to apply the proper styling (e.g. border radius and shadows).
+class ExpoScrollForwarderView: ExpoView, UIGestureRecognizerDelegate {
+ var scrollViewTag: Int? {
+ didSet {
+ self.tryFindScrollView()
+ }
+ }
+
+ private var rctScrollView: RCTScrollView?
+ private var rctRefreshCtrl: RCTRefreshControl?
+ private var cancelGestureRecognizers: [UIGestureRecognizer]?
+ private var animTimer: Timer?
+ private var initialOffset: CGFloat = 0.0
+ private var didImpact: Bool = false
+
+ required init(appContext: AppContext? = nil) {
+ super.init(appContext: appContext)
+
+ let pg = UIPanGestureRecognizer(target: self, action: #selector(callOnPan(_:)))
+ pg.delegate = self
+ self.addGestureRecognizer(pg)
+
+ let tg = UITapGestureRecognizer(target: self, action: #selector(callOnPress(_:)))
+ tg.isEnabled = false
+ tg.delegate = self
+
+ let lpg = UILongPressGestureRecognizer(target: self, action: #selector(callOnPress(_:)))
+ lpg.minimumPressDuration = 0.01
+ lpg.isEnabled = false
+ lpg.delegate = self
+
+ self.cancelGestureRecognizers = [lpg, tg]
+ }
+
+
+ // We don't want to recognize the scroll pan gesture and the swipe back gesture together
+ func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
+ if gestureRecognizer is UIPanGestureRecognizer, otherGestureRecognizer is UIPanGestureRecognizer {
+ return false
+ }
+
+ return true
+ }
+
+ // We only want the "scroll" gesture to happen whenever the pan is vertical, otherwise it will
+ // interfere with the native swipe back gesture.
+ override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
+ guard let gestureRecognizer = gestureRecognizer as? UIPanGestureRecognizer else {
+ return true
+ }
+
+ let velocity = gestureRecognizer.velocity(in: self)
+ return abs(velocity.y) > abs(velocity.x)
+ }
+
+ // This will be used to cancel the scroll animation whenever we tap inside of the header. We don't need another
+ // recognizer for this one.
+ override func touchesBegan(_ touches: Set, with event: UIEvent?) {
+ self.stopTimer()
+ }
+
+ // This will be used to cancel the animation whenever we press inside of the scroll view. We don't want to change
+ // the scroll view gesture's delegate, so we add an additional recognizer to detect this.
+ @IBAction func callOnPress(_ sender: UITapGestureRecognizer) -> Void {
+ self.stopTimer()
+ }
+
+ @IBAction func callOnPan(_ sender: UIPanGestureRecognizer) -> Void {
+ guard let rctsv = self.rctScrollView, let sv = rctsv.scrollView else {
+ return
+ }
+
+ let translation = sender.translation(in: self).y
+
+ if sender.state == .began {
+ if sv.contentOffset.y < 0 {
+ sv.contentOffset.y = 0
+ }
+
+ self.initialOffset = sv.contentOffset.y
+ }
+
+ if sender.state == .changed {
+ sv.contentOffset.y = self.dampenOffset(-translation + self.initialOffset)
+
+ if sv.contentOffset.y <= -130, !didImpact {
+ let generator = UIImpactFeedbackGenerator(style: .light)
+ generator.impactOccurred()
+
+ self.didImpact = true
+ }
+ }
+
+ if sender.state == .ended {
+ let velocity = sender.velocity(in: self).y
+ self.didImpact = false
+
+ if sv.contentOffset.y <= -130 {
+ self.rctRefreshCtrl?.forwarderBeginRefreshing()
+ return
+ }
+
+ // A check for a velocity under 250 prevents animations from occurring when they wouldn't in a normal
+ // scroll view
+ if abs(velocity) < 250, sv.contentOffset.y >= 0 {
+ return
+ }
+
+ self.startDecayAnimation(translation, velocity)
+ }
+ }
+
+ func startDecayAnimation(_ translation: CGFloat, _ velocity: CGFloat) {
+ guard let sv = self.rctScrollView?.scrollView else {
+ return
+ }
+
+ var velocity = velocity
+
+ self.enableCancelGestureRecognizers()
+
+ if velocity > 0 {
+ velocity = min(velocity, 5000)
+ } else {
+ velocity = max(velocity, -5000)
+ }
+
+ var animTranslation = -translation
+ self.animTimer = Timer.scheduledTimer(withTimeInterval: 1.0 / 120, repeats: true) { timer in
+ velocity *= 0.9875
+ animTranslation = (-velocity / 120) + animTranslation
+
+ let nextOffset = self.dampenOffset(animTranslation + self.initialOffset)
+
+ if nextOffset <= 0 {
+ if self.initialOffset <= 1 {
+ self.scrollToOffset(0)
+ } else {
+ sv.contentOffset.y = 0
+ }
+
+ self.stopTimer()
+ return
+ } else {
+ sv.contentOffset.y = nextOffset
+ }
+
+ if abs(velocity) < 5 {
+ self.stopTimer()
+ }
+ }
+ }
+
+ func dampenOffset(_ offset: CGFloat) -> CGFloat {
+ if offset < 0 {
+ return offset - (offset * 0.55)
+ }
+
+ return offset
+ }
+
+ func tryFindScrollView() {
+ guard let scrollViewTag = scrollViewTag else {
+ return
+ }
+
+ // Before we switch to a different scrollview, we always want to remove the cancel gesture recognizer.
+ // Otherwise we might end up with duplicates when we switch back to that scrollview.
+ self.removeCancelGestureRecognizers()
+
+ self.rctScrollView = self.appContext?
+ .findView(withTag: scrollViewTag, ofType: RCTScrollView.self)
+ self.rctRefreshCtrl = self.rctScrollView?.scrollView.refreshControl as? RCTRefreshControl
+
+ self.addCancelGestureRecognizers()
+ }
+
+ func addCancelGestureRecognizers() {
+ self.cancelGestureRecognizers?.forEach { r in
+ self.rctScrollView?.scrollView?.addGestureRecognizer(r)
+ }
+ }
+
+ func removeCancelGestureRecognizers() {
+ self.cancelGestureRecognizers?.forEach { r in
+ self.rctScrollView?.scrollView?.removeGestureRecognizer(r)
+ }
+ }
+
+
+ func enableCancelGestureRecognizers() {
+ self.cancelGestureRecognizers?.forEach { r in
+ r.isEnabled = true
+ }
+ }
+
+ func disableCancelGestureRecognizers() {
+ self.cancelGestureRecognizers?.forEach { r in
+ r.isEnabled = false
+ }
+ }
+
+ func scrollToOffset(_ offset: Int, animated: Bool = true) -> Void {
+ self.rctScrollView?.scroll(toOffset: CGPoint(x: 0, y: offset), animated: animated)
+ }
+
+ func stopTimer() -> Void {
+ self.disableCancelGestureRecognizers()
+ self.animTimer?.invalidate()
+ self.animTimer = nil
+ }
+}
diff --git a/modules/expo-scroll-forwarder/src/ExpoScrollForwarder.types.ts b/modules/expo-scroll-forwarder/src/ExpoScrollForwarder.types.ts
new file mode 100644
index 0000000000..26b9e7553a
--- /dev/null
+++ b/modules/expo-scroll-forwarder/src/ExpoScrollForwarder.types.ts
@@ -0,0 +1,6 @@
+import React from 'react'
+
+export interface ExpoScrollForwarderViewProps {
+ scrollViewTag: number | null
+ children: React.ReactNode
+}
diff --git a/modules/expo-scroll-forwarder/src/ExpoScrollForwarderView.ios.tsx b/modules/expo-scroll-forwarder/src/ExpoScrollForwarderView.ios.tsx
new file mode 100644
index 0000000000..21a2b9fb26
--- /dev/null
+++ b/modules/expo-scroll-forwarder/src/ExpoScrollForwarderView.ios.tsx
@@ -0,0 +1,14 @@
+import * as React from 'react'
+import {requireNativeViewManager} from 'expo-modules-core'
+
+import {ExpoScrollForwarderViewProps} from './ExpoScrollForwarder.types'
+
+const NativeView: React.ComponentType =
+ requireNativeViewManager('ExpoScrollForwarder')
+
+export function ExpoScrollForwarderView({
+ children,
+ ...rest
+}: ExpoScrollForwarderViewProps) {
+ return {children}
+}
diff --git a/modules/expo-scroll-forwarder/src/ExpoScrollForwarderView.tsx b/modules/expo-scroll-forwarder/src/ExpoScrollForwarderView.tsx
new file mode 100644
index 0000000000..7eb52b78bd
--- /dev/null
+++ b/modules/expo-scroll-forwarder/src/ExpoScrollForwarderView.tsx
@@ -0,0 +1,8 @@
+import React from 'react'
+
+import {ExpoScrollForwarderViewProps} from './ExpoScrollForwarder.types'
+export function ExpoScrollForwarderView({
+ children,
+}: React.PropsWithChildren) {
+ return children
+}
diff --git a/modules/react-native-ui-text-view/README.md b/modules/react-native-ui-text-view/README.md
deleted file mode 100644
index b19ac89670..0000000000
--- a/modules/react-native-ui-text-view/README.md
+++ /dev/null
@@ -1,61 +0,0 @@
-# React Native UITextView
-
-Drop in replacement for `` that renders a `UITextView`, support selection and native translation features on iOS.
-
-## Installation
-
-In this project, no installation is required. The pod will be installed automatically during a `pod install`.
-
-In another project, clone the repo and copy the `modules/react-native-ui-text-view` directory to your own project
-directory. Afterward, run `pod install`.
-
-## Usage
-
-Replace the outermost `` with ``. Styles and press events should be handled the same way they would
-with ``. Both `` and `` are supported as children of the root ``.
-
-## Technical
-
-React Native's `Text` component allows for "infinite" nesting of further `Text` components. To make a true "drop-in",
-we want to do the same thing.
-
-To achieve this, we first need to handle determining if we are dealing with an ancestor or root `UITextView` component.
-We can implement similar logic to the `Text` component [see Text.js](https://github.com/facebook/react-native/blob/7f2529de7bc9ab1617eaf571e950d0717c3102a6/packages/react-native/Libraries/Text/Text.js).
-
-We create a context that contains a boolean to tell us if we have already rendered the root `UITextView`. We also store
-the root styles so that we can apply those styles if the ancestor `UITextView`s have not overwritten those styles.
-
-All of our children are placed into `RNUITextView`, which is the main native view that will display the iOS `UITextView`.
-
-We next map each child into the view. We have to be careful here to check if the child's `children` prop is a string. If
-it is, that means we have encountered what was once an RN `Text` component. RN doesn't let us pass plain text as
-children outside of `Text`, so we instead just pass the text into the `text` prop on `RNUITextViewChild`. We continue
-down the tree, until we run out of children.
-
-On the native side, we make use of the shadow view to calculate text container dimensions before the views are mounted.
-We cannot simply set the `UITextView` text first, since React will not have properly measured the layout before this
-occurs.
-
-
-As for `Text` props, the following props are implemented:
-
-- All accessibility props
-- `allowFontScaling`
-- `adjustsFontSizeToFit`
-- `ellipsizeMode`
-- `numberOfLines`
-- `onLayout`
-- `onPress`
-- `onTextLayout`
-- `selectable`
-
-All `ViewStyle` props will apply to the root `UITextView`. Individual children will respect these `TextStyle` styles:
-
-- `color`
-- `fontSize`
-- `fontStyle`
-- `fontWeight`
-- `fontVariant`
-- `letterSpacing`
-- `lineHeight`
-- `textDecorationLine`
diff --git a/modules/react-native-ui-text-view/ios/RNUITextView-Bridging-Header.h b/modules/react-native-ui-text-view/ios/RNUITextView-Bridging-Header.h
deleted file mode 100644
index e669b47eb2..0000000000
--- a/modules/react-native-ui-text-view/ios/RNUITextView-Bridging-Header.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#import
-#import
-#import
diff --git a/modules/react-native-ui-text-view/ios/RNUITextView.swift b/modules/react-native-ui-text-view/ios/RNUITextView.swift
deleted file mode 100644
index 9c21d45b5e..0000000000
--- a/modules/react-native-ui-text-view/ios/RNUITextView.swift
+++ /dev/null
@@ -1,141 +0,0 @@
-class RNUITextView: UIView {
- var textView: UITextView
-
- @objc var numberOfLines: Int = 0 {
- didSet {
- textView.textContainer.maximumNumberOfLines = numberOfLines
- }
- }
- @objc var selectable: Bool = true {
- didSet {
- textView.isSelectable = selectable
- }
- }
- @objc var ellipsizeMode: String = "tail" {
- didSet {
- textView.textContainer.lineBreakMode = self.getLineBreakMode()
- }
- }
- @objc var onTextLayout: RCTDirectEventBlock?
-
- override init(frame: CGRect) {
- if #available(iOS 16.0, *) {
- textView = UITextView(usingTextLayoutManager: false)
- } else {
- textView = UITextView()
- }
-
- // Disable scrolling
- textView.isScrollEnabled = false
- // Remove all the padding
- textView.textContainerInset = .zero
- textView.textContainer.lineFragmentPadding = 0
-
- // Remove other properties
- textView.isEditable = false
- textView.backgroundColor = .clear
-
- // Init
- super.init(frame: frame)
- self.clipsToBounds = true
-
- // Add the view
- addSubview(textView)
-
- let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(callOnPress(_:)))
- tapGestureRecognizer.isEnabled = true
- textView.addGestureRecognizer(tapGestureRecognizer)
- }
-
- required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
-
- // Resolves some animation issues
- override func reactSetFrame(_ frame: CGRect) {
- UIView.performWithoutAnimation {
- super.reactSetFrame(frame)
- }
- }
-
- func setText(string: NSAttributedString, size: CGSize, numberOfLines: Int) -> Void {
- self.textView.frame.size = size
- self.textView.textContainer.maximumNumberOfLines = numberOfLines
- self.textView.attributedText = string
- self.textView.selectedTextRange = nil
-
- if let onTextLayout = self.onTextLayout {
- var lines: [String] = []
- textView.layoutManager.enumerateLineFragments(
- forGlyphRange: NSRange(location: 0, length: textView.attributedText.length))
- { (rect, usedRect, textContainer, glyphRange, stop) in
- let characterRange = self.textView.layoutManager.characterRange(forGlyphRange: glyphRange, actualGlyphRange: nil)
- let line = (self.textView.text as NSString).substring(with: characterRange)
- lines.append(line)
- }
-
- onTextLayout([
- "lines": lines
- ])
- }
- }
-
- @IBAction func callOnPress(_ sender: UITapGestureRecognizer) -> Void {
- // If we find a child, then call onPress
- if let child = getPressed(sender) {
- if textView.selectedTextRange == nil, let onPress = child.onPress {
- onPress(["": ""])
- } else {
- // Clear the selected text range if we are not pressing on a link
- textView.selectedTextRange = nil
- }
- }
- }
-
- // Try to get the pressed segment
- func getPressed(_ sender: UITapGestureRecognizer) -> RNUITextViewChild? {
- let layoutManager = textView.layoutManager
- var location = sender.location(in: textView)
-
- // Remove the padding
- location.x -= textView.textContainerInset.left
- location.y -= textView.textContainerInset.top
-
- // Get the index of the char
- let charIndex = layoutManager.characterIndex(
- for: location,
- in: textView.textContainer,
- fractionOfDistanceBetweenInsertionPoints: nil
- )
-
- for child in self.reactSubviews() {
- if let child = child as? RNUITextViewChild, let childText = child.text {
- let fullText = self.textView.attributedText.string
- let range = fullText.range(of: childText)
-
- if let lowerBound = range?.lowerBound, let upperBound = range?.upperBound {
- if charIndex >= lowerBound.utf16Offset(in: fullText) && charIndex <= upperBound.utf16Offset(in: fullText) {
- return child
- }
- }
- }
- }
-
- return nil
- }
-
- func getLineBreakMode() -> NSLineBreakMode {
- switch self.ellipsizeMode {
- case "head":
- return .byTruncatingHead
- case "middle":
- return .byTruncatingMiddle
- case "tail":
- return .byTruncatingTail
- case "clip":
- return .byClipping
- default:
- return .byTruncatingTail
- }
- }
-}
diff --git a/modules/react-native-ui-text-view/ios/RNUITextViewChild.swift b/modules/react-native-ui-text-view/ios/RNUITextViewChild.swift
deleted file mode 100644
index c341c46e44..0000000000
--- a/modules/react-native-ui-text-view/ios/RNUITextViewChild.swift
+++ /dev/null
@@ -1,4 +0,0 @@
-class RNUITextViewChild: UIView {
- @objc var text: String?
- @objc var onPress: RCTDirectEventBlock?
-}
diff --git a/modules/react-native-ui-text-view/ios/RNUITextViewChildShadow.swift b/modules/react-native-ui-text-view/ios/RNUITextViewChildShadow.swift
deleted file mode 100644
index 09119a369b..0000000000
--- a/modules/react-native-ui-text-view/ios/RNUITextViewChildShadow.swift
+++ /dev/null
@@ -1,56 +0,0 @@
-// We want all of our props to be available in the child's shadow view so we
-// can create the attributed text before mount and calculate the needed size
-// for the view.
-class RNUITextViewChildShadow: RCTShadowView {
- @objc var text: String = ""
- @objc var color: UIColor = .black
- @objc var fontSize: CGFloat = 16.0
- @objc var fontStyle: String = "normal"
- @objc var fontWeight: String = "normal"
- @objc var letterSpacing: CGFloat = 0.0
- @objc var lineHeight: CGFloat = 0.0
- @objc var pointerEvents: NSString?
-
- override func isYogaLeafNode() -> Bool {
- return true
- }
-
- override func didSetProps(_ changedProps: [String]!) {
- guard let superview = self.superview as? RNUITextViewShadow else {
- return
- }
-
- if !YGNodeIsDirty(superview.yogaNode) {
- superview.setAttributedText()
- }
- }
-
- func getFontWeight() -> UIFont.Weight {
- switch self.fontWeight {
- case "bold":
- return .bold
- case "normal":
- return .regular
- case "100":
- return .ultraLight
- case "200":
- return .ultraLight
- case "300":
- return .light
- case "400":
- return .regular
- case "500":
- return .medium
- case "600":
- return .semibold
- case "700":
- return .semibold
- case "800":
- return .bold
- case "900":
- return .heavy
- default:
- return .regular
- }
- }
-}
diff --git a/modules/react-native-ui-text-view/ios/RNUITextViewManager.m b/modules/react-native-ui-text-view/ios/RNUITextViewManager.m
deleted file mode 100644
index 9a6f0285cb..0000000000
--- a/modules/react-native-ui-text-view/ios/RNUITextViewManager.m
+++ /dev/null
@@ -1,25 +0,0 @@
-#import
-
-@interface RCT_EXTERN_MODULE(RNUITextViewManager, RCTViewManager)
-RCT_REMAP_SHADOW_PROPERTY(numberOfLines, numberOfLines, NSInteger)
-RCT_REMAP_SHADOW_PROPERTY(allowsFontScaling, allowsFontScaling, BOOL)
-
-RCT_EXPORT_VIEW_PROPERTY(onTextLayout, RCTDirectEventBlock)
-RCT_EXPORT_VIEW_PROPERTY(ellipsizeMode, NSString)
-RCT_EXPORT_VIEW_PROPERTY(selectable, BOOL)
-
-@end
-
-@interface RCT_EXTERN_MODULE(RNUITextViewChildManager, RCTViewManager)
-RCT_REMAP_SHADOW_PROPERTY(text, text, NSString)
-RCT_REMAP_SHADOW_PROPERTY(color, color, UIColor)
-RCT_REMAP_SHADOW_PROPERTY(fontSize, fontSize, CGFloat)
-RCT_REMAP_SHADOW_PROPERTY(fontStyle, fontStyle, NSString)
-RCT_REMAP_SHADOW_PROPERTY(fontWeight, fontWeight, NSString)
-RCT_REMAP_SHADOW_PROPERTY(letterSpacing, letterSpacing, CGFloat)
-RCT_REMAP_SHADOW_PROPERTY(lineHeight, lineHeight, CGFloat)
-RCT_REMAP_SHADOW_PROPERTY(pointerEvents, pointerEvents, NSString)
-
-RCT_EXPORT_VIEW_PROPERTY(text, NSString)
-RCT_EXPORT_VIEW_PROPERTY(onPress, RCTBubblingEventBlock)
-@end
diff --git a/modules/react-native-ui-text-view/ios/RNUITextViewManager.swift b/modules/react-native-ui-text-view/ios/RNUITextViewManager.swift
deleted file mode 100644
index 297bcbbb26..0000000000
--- a/modules/react-native-ui-text-view/ios/RNUITextViewManager.swift
+++ /dev/null
@@ -1,30 +0,0 @@
-@objc(RNUITextViewManager)
-class RNUITextViewManager: RCTViewManager {
- override func view() -> (RNUITextView) {
- return RNUITextView()
- }
-
- @objc override static func requiresMainQueueSetup() -> Bool {
- return true
- }
-
- override func shadowView() -> RCTShadowView {
- // Pass the bridge to the shadow view
- return RNUITextViewShadow(bridge: self.bridge)
- }
-}
-
-@objc(RNUITextViewChildManager)
-class RNUITextViewChildManager: RCTViewManager {
- override func view() -> (RNUITextViewChild) {
- return RNUITextViewChild()
- }
-
- @objc override static func requiresMainQueueSetup() -> Bool {
- return true
- }
-
- override func shadowView() -> RCTShadowView {
- return RNUITextViewChildShadow()
- }
-}
diff --git a/modules/react-native-ui-text-view/ios/RNUITextViewShadow.swift b/modules/react-native-ui-text-view/ios/RNUITextViewShadow.swift
deleted file mode 100644
index 4f3eda43c9..0000000000
--- a/modules/react-native-ui-text-view/ios/RNUITextViewShadow.swift
+++ /dev/null
@@ -1,147 +0,0 @@
-class RNUITextViewShadow: RCTShadowView {
- // Props
- @objc var numberOfLines: Int = 0 {
- didSet {
- if !YGNodeIsDirty(self.yogaNode) {
- self.setAttributedText()
- }
- }
- }
- @objc var allowsFontScaling: Bool = true
-
- var attributedText: NSAttributedString = NSAttributedString()
- var frameSize: CGSize = CGSize()
-
- var lineHeight: CGFloat = 0
-
- var bridge: RCTBridge
-
- init(bridge: RCTBridge) {
- self.bridge = bridge
- super.init()
-
- // We need to set a custom measure func here to calculate the height correctly
- YGNodeSetMeasureFunc(self.yogaNode) { node, width, widthMode, height, heightMode in
- // Get the shadowview and determine the needed size to set
- let shadowView = Unmanaged.fromOpaque(YGNodeGetContext(node)).takeUnretainedValue()
- return shadowView.getNeededSize(maxWidth: width)
- }
-
- // Subscribe to ynamic type size changes
- NotificationCenter.default.addObserver(
- self,
- selector: #selector(preferredContentSizeChanged(_:)),
- name: UIContentSizeCategory.didChangeNotification,
- object: nil
- )
- }
-
- @objc func preferredContentSizeChanged(_ notification: Notification) {
- self.setAttributedText()
- }
-
- // Tell yoga not to use flexbox
- override func isYogaLeafNode() -> Bool {
- return true
- }
-
- // We only need to insert text children
- override func insertReactSubview(_ subview: RCTShadowView!, at atIndex: Int) {
- if subview.isKind(of: RNUITextViewChildShadow.self) {
- super.insertReactSubview(subview, at: atIndex)
- }
- }
-
- // Whenever the subvies update, set the text
- override func didUpdateReactSubviews() {
- self.setAttributedText()
- }
-
- // Whenever we layout, update the UI
- override func layoutSubviews(with layoutContext: RCTLayoutContext) {
- // Don't do anything if the layout is dirty
- if(YGNodeIsDirty(self.yogaNode)) {
- return
- }
-
- // Update the text
- self.bridge.uiManager.addUIBlock { uiManager, viewRegistry in
- guard let textView = viewRegistry?[self.reactTag] as? RNUITextView else {
- return
- }
- textView.setText(string: self.attributedText, size: self.frameSize, numberOfLines: self.numberOfLines)
- }
- }
-
- override func dirtyLayout() {
- super.dirtyLayout()
- YGNodeMarkDirty(self.yogaNode)
- }
-
- // Update the attributed text whenever changes are made to the subviews.
- func setAttributedText() -> Void {
- // Create an attributed string to store each of the segments
- let finalAttributedString = NSMutableAttributedString()
-
- self.reactSubviews().forEach { child in
- guard let child = child as? RNUITextViewChildShadow else {
- return
- }
- let scaledFontSize = self.allowsFontScaling ?
- UIFontMetrics.default.scaledValue(for: child.fontSize) : child.fontSize
- let font = UIFont.systemFont(ofSize: scaledFontSize, weight: child.getFontWeight())
-
- // Set some generic attributes that don't need ranges
- let attributes: [NSAttributedString.Key:Any] = [
- .font: font,
- .foregroundColor: child.color,
- ]
-
- // Create the attributed string with the generic attributes
- let string = NSMutableAttributedString(string: child.text, attributes: attributes)
-
- // Set the paragraph style attributes if necessary
- let paragraphStyle = NSMutableParagraphStyle()
- if child.lineHeight != 0.0 {
- paragraphStyle.minimumLineHeight = child.lineHeight
- paragraphStyle.maximumLineHeight = child.lineHeight
- string.addAttribute(
- NSAttributedString.Key.paragraphStyle,
- value: paragraphStyle,
- range: NSMakeRange(0, string.length)
- )
-
- // Store that height
- self.lineHeight = child.lineHeight
- } else {
- self.lineHeight = font.lineHeight
- }
-
- finalAttributedString.append(string)
- }
-
- self.attributedText = finalAttributedString
- self.dirtyLayout()
- }
-
- // Create a YGSize based on the max width
- func getNeededSize(maxWidth: Float) -> YGSize {
- // Create the max size and figure out the size of the entire text
- let maxSize = CGSize(width: CGFloat(maxWidth), height: CGFloat(MAXFLOAT))
- let textSize = self.attributedText.boundingRect(with: maxSize, options: .usesLineFragmentOrigin, context: nil)
-
- // Figure out how many total lines there are
- let totalLines = Int(ceil(textSize.height / self.lineHeight))
-
- // Default to the text size
- var neededSize: CGSize = textSize.size
-
- // If the total lines > max number, return size with the max
- if self.numberOfLines != 0, totalLines > self.numberOfLines {
- neededSize = CGSize(width: CGFloat(maxWidth), height: CGFloat(CGFloat(self.numberOfLines) * self.lineHeight))
- }
-
- self.frameSize = neededSize
- return YGSize(width: Float(neededSize.width), height: Float(neededSize.height))
- }
-}
diff --git a/modules/react-native-ui-text-view/package.json b/modules/react-native-ui-text-view/package.json
deleted file mode 100644
index 184a9014e8..0000000000
--- a/modules/react-native-ui-text-view/package.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "name": "react-native-ui-text-view",
- "version": "0.1.0",
- "description": "UITextView in React Native on iOS",
- "main": "src/index",
- "author": "haileyok",
- "license": "MIT",
- "homepage": "https://github.com/bluesky-social/social-app/modules/react-native-ui-text-view"
-}
diff --git a/modules/react-native-ui-text-view/react-native-ui-text-view.podspec b/modules/react-native-ui-text-view/react-native-ui-text-view.podspec
deleted file mode 100644
index 1e0dee93f8..0000000000
--- a/modules/react-native-ui-text-view/react-native-ui-text-view.podspec
+++ /dev/null
@@ -1,42 +0,0 @@
-require "json"
-
-package = JSON.parse(File.read(File.join(__dir__, "package.json")))
-folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32'
-
-Pod::Spec.new do |s|
- s.name = "react-native-ui-text-view"
- s.version = package["version"]
- s.summary = package["description"]
- s.homepage = package["homepage"]
- s.license = package["license"]
- s.authors = package["author"]
-
- s.platforms = { :ios => "11.0" }
- s.source = { :git => ".git", :tag => "#{s.version}" }
-
- s.source_files = "ios/**/*.{h,m,mm,swift}"
-
- # Use install_modules_dependencies helper to install the dependencies if React Native version >=0.71.0.
- # See https://github.com/facebook/react-native/blob/febf6b7f33fdb4904669f99d795eba4c0f95d7bf/scripts/cocoapods/new_architecture.rb#L79.
- if respond_to?(:install_modules_dependencies, true)
- install_modules_dependencies(s)
- else
- s.dependency "React-Core"
-
- # Don't install the dependencies when we run `pod install` in the old architecture.
- if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then
- s.compiler_flags = folly_compiler_flags + " -DRCT_NEW_ARCH_ENABLED=1"
- s.pod_target_xcconfig = {
- "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"",
- "OTHER_CPLUSPLUSFLAGS" => "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1",
- "CLANG_CXX_LANGUAGE_STANDARD" => "c++17"
- }
- s.dependency "React-RCTFabric"
- s.dependency "React-Codegen"
- s.dependency "RCT-Folly"
- s.dependency "RCTRequired"
- s.dependency "RCTTypeSafety"
- s.dependency "ReactCommon/turbomodule/core"
- end
- end
-end
diff --git a/modules/react-native-ui-text-view/src/UITextView.tsx b/modules/react-native-ui-text-view/src/UITextView.tsx
deleted file mode 100644
index bbb45dccc6..0000000000
--- a/modules/react-native-ui-text-view/src/UITextView.tsx
+++ /dev/null
@@ -1,76 +0,0 @@
-import React from 'react'
-import {Platform, StyleSheet, TextProps, ViewStyle} from 'react-native'
-import {RNUITextView, RNUITextViewChild} from './index'
-
-const TextAncestorContext = React.createContext<[boolean, ViewStyle]>([
- false,
- StyleSheet.create({}),
-])
-const useTextAncestorContext = () => React.useContext(TextAncestorContext)
-
-const textDefaults: TextProps = {
- allowFontScaling: true,
- selectable: true,
-}
-
-export function UITextView({style, children, ...rest}: TextProps) {
- const [isAncestor, rootStyle] = useTextAncestorContext()
-
- // Flatten the styles, and apply the root styles when needed
- const flattenedStyle = React.useMemo(
- () => StyleSheet.flatten([rootStyle, style]),
- [rootStyle, style],
- )
-
- if (Platform.OS !== 'ios') {
- throw new Error('UITextView is only available on iOS')
- }
-
- if (!isAncestor) {
- return (
-
-
- {React.Children.toArray(children).map((c, index) => {
- if (React.isValidElement(c)) {
- return c
- } else if (typeof c === 'string') {
- return (
-
- )
- }
- })}
-
-
- )
- } else {
- return (
- <>
- {React.Children.toArray(children).map((c, index) => {
- if (React.isValidElement(c)) {
- return c
- } else if (typeof c === 'string') {
- return (
-
- )
- }
- })}
- >
- )
- }
-}
diff --git a/modules/react-native-ui-text-view/src/index.tsx b/modules/react-native-ui-text-view/src/index.tsx
deleted file mode 100644
index d5bde136f7..0000000000
--- a/modules/react-native-ui-text-view/src/index.tsx
+++ /dev/null
@@ -1,42 +0,0 @@
-import {
- requireNativeComponent,
- UIManager,
- Platform,
- type ViewStyle,
- TextProps,
-} from 'react-native'
-
-const LINKING_ERROR =
- `The package 'react-native-ui-text-view' doesn't seem to be linked. Make sure: \n\n` +
- Platform.select({ios: "- You have run 'pod install'\n", default: ''}) +
- '- You rebuilt the app after installing the package\n' +
- '- You are not using Expo Go\n'
-
-export interface RNUITextViewProps extends TextProps {
- children: React.ReactNode
- style: ViewStyle[]
-}
-
-export interface RNUITextViewChildProps extends TextProps {
- text: string
- onTextPress?: (...args: any[]) => void
- onTextLongPress?: (...args: any[]) => void
-}
-
-export const RNUITextView =
- UIManager.getViewManagerConfig &&
- UIManager.getViewManagerConfig('RNUITextView') != null
- ? requireNativeComponent('RNUITextView')
- : () => {
- throw new Error(LINKING_ERROR)
- }
-
-export const RNUITextViewChild =
- UIManager.getViewManagerConfig &&
- UIManager.getViewManagerConfig('RNUITextViewChild') != null
- ? requireNativeComponent('RNUITextViewChild')
- : () => {
- throw new Error(LINKING_ERROR)
- }
-
-export * from './UITextView'
diff --git a/package.json b/package.json
index 70aa4e876c..b828772842 100644
--- a/package.json
+++ b/package.json
@@ -1,10 +1,11 @@
{
"name": "bsky.app",
- "version": "1.68.0",
+ "version": "1.77.0",
"private": true,
"engines": {
"node": ">=18"
},
+ "packageManager": "yarn@1.22.19",
"scripts": {
"prepare": "is-ci || husky install",
"postinstall": "patch-package && yarn intl:compile",
@@ -12,8 +13,13 @@
"android": "expo run:android",
"ios": "expo run:ios",
"web": "expo start --web",
+ "use-build-number": "./scripts/useBuildNumberEnv.sh",
+ "use-build-number-with-bump": "./scripts/useBuildNumberEnvWithBump.sh",
"build-web": "expo export:web && node ./scripts/post-web-build.js && cp -v ./web-build/static/js/*.* ./bskyweb/static/js/",
- "build-all": "yarn intl:build && eas build --platform all",
+ "build-all": "yarn intl:build && yarn use-build-number-with-bump eas build --platform all",
+ "build-ios": "yarn use-build-number-with-bump eas build -p ios",
+ "build-android": "yarn use-build-number-with-bump eas build -p android",
+ "build": "yarn use-build-number-with-bump eas build",
"start": "expo start --dev-client",
"start:prod": "expo start --dev-client --no-dev --minify",
"clean-cache": "rm -rf node_modules/.cache/babel-loader/*",
@@ -21,7 +27,7 @@
"test-watch": "NODE_ENV=test jest --watchAll",
"test-ci": "NODE_ENV=test jest --ci --forceExit --reporters=default --reporters=jest-junit",
"test-coverage": "NODE_ENV=test jest --coverage",
- "lint": "eslint ./src --ext .js,.jsx,.ts,.tsx",
+ "lint": "eslint --cache --ext .js,.jsx,.ts,.tsx src",
"typecheck": "tsc --project ./tsconfig.check.json",
"e2e:mock-server": "./jest/dev-infra/with-test-redis-and-db.sh ts-node --project tsconfig.e2e.json __e2e__/mock-server.ts",
"e2e:metro": "NODE_ENV=test RN_SRC_EXT=e2e.ts,e2e.tsx expo run:ios",
@@ -29,22 +35,24 @@
"e2e:run": "NODE_ENV=test detox test --configuration ios.sim.debug --take-screenshots all",
"perf:test": "NODE_ENV=test maestro test",
"perf:test:run": "NODE_ENV=test maestro test __e2e__/maestro/scroll.yaml",
- "perf:test:measure": "NODE_ENV=test flashlight test --bundleId xyz.blueskyweb.app --testCommand 'yarn perf:test' --duration 150000 --resultsFilePath .perf/results.json",
+ "perf:test:measure": "NODE_ENV=test flashlight test --bundleId xyz.blueskyweb.app --testCommand \"yarn perf:test\" --duration 150000 --resultsFilePath .perf/results.json",
"perf:test:results": "NODE_ENV=test flashlight report .perf/results.json",
"perf:measure": "NODE_ENV=test flashlight measure",
- "intl:build": "yarn intl:check && yarn intl:compile",
- "intl:check": "yarn intl:extract && git diff-index -G'(^[^\\*# /])|(^#\\w)|(^\\s+[^\\*#/])' HEAD || (echo '\n⚠️ i18n detected un-extracted translations\n' && exit 1)",
+ "intl:build": "yarn intl:extract && yarn intl:compile",
"intl:extract": "lingui extract",
"intl:compile": "lingui compile",
"nuke": "rm -rf ./node_modules && rm -rf ./ios && rm -rf ./android",
- "bump": "./scripts/bumpIosBuildNumber.sh && ./scripts/bumpAndroidBuildNumber.sh",
- "bump:ios": "./scripts/bumpIosBuildNumber.sh",
- "bump:android": "./scripts/bumpAndroidBuildNumber.sh"
+ "update-extensions": "bash scripts/updateExtensions.sh",
+ "export": "npx expo export",
+ "make-deploy-bundle": "bash scripts/bundleUpdate.sh",
+ "generate-webpack-stats-file": "EXPO_PUBLIC_GENERATE_STATS=1 yarn build-web",
+ "open-analyzer": "EXPO_PUBLIC_OPEN_ANALYZER=1 yarn build-web"
},
"dependencies": {
- "@atproto/api": "^0.9.5",
+ "@atproto/api": "^0.12.2",
"@bam.tech/react-native-image-resizer": "^3.0.4",
"@braintree/sanitize-url": "^6.0.2",
+ "@discord/bottom-sheet": "https://github.com/bluesky-social/react-native-bottom-sheet.git#discord-fork-4.6.1",
"@emoji-mart/react": "^1.1.1",
"@expo/html-elements": "^0.4.2",
"@expo/webpack-config": "^19.0.0",
@@ -54,15 +62,11 @@
"@fortawesome/free-regular-svg-icons": "^6.1.1",
"@fortawesome/free-solid-svg-icons": "^6.1.1",
"@fortawesome/react-native-fontawesome": "^0.3.0",
- "@gorhom/bottom-sheet": "^4.5.1",
"@lingui/react": "^4.5.0",
"@mattermost/react-native-paste-input": "^0.6.4",
"@miblanchard/react-native-slider": "^2.3.1",
- "@react-native-async-storage/async-storage": "1.21.0",
- "@react-native-camera-roll/camera-roll": "^5.2.2",
- "@react-native-clipboard/clipboard": "^1.10.0",
- "@react-native-community/blur": "^4.3.0",
- "@react-native-community/datetimepicker": "7.6.1",
+ "@radix-ui/react-dropdown-menu": "^2.0.6",
+ "@react-native-async-storage/async-storage": "1.23.1",
"@react-native-masked-view/masked-view": "0.3.0",
"@react-native-menu/menu": "^0.8.0",
"@react-native-picker/picker": "2.6.1",
@@ -76,7 +80,9 @@
"@segment/sovran-react-native": "^0.4.5",
"@sentry/react-native": "5.5.0",
"@tamagui/focus-scope": "^1.84.1",
+ "@tanstack/query-async-storage-persister": "^5.25.0",
"@tanstack/react-query": "^5.8.1",
+ "@tanstack/react-query-persist-client": "^5.25.0",
"@tiptap/core": "^2.0.0-beta.220",
"@tiptap/extension-document": "^2.0.0-beta.220",
"@tiptap/extension-hard-break": "^2.0.3",
@@ -89,6 +95,7 @@
"@tiptap/pm": "^2.0.0-beta.220",
"@tiptap/react": "^2.0.0-beta.220",
"@tiptap/suggestion": "^2.0.0-beta.220",
+ "@types/invariant": "^2.2.37",
"@types/node": "^18.16.2",
"@zxing/text-encoding": "^0.9.0",
"array.prototype.findlast": "^1.2.3",
@@ -100,32 +107,35 @@
"email-validator": "^2.0.4",
"emoji-mart": "^5.5.2",
"eventemitter3": "^5.0.1",
- "expo": "^50.0.0-preview.10",
- "expo-application": "~5.8.2",
- "expo-build-properties": "^0.11.0",
- "expo-camera": "~14.0.1",
- "expo-constants": "~15.4.3",
- "expo-dev-client": "~3.3.5",
- "expo-device": "~5.9.2",
- "expo-image": "~1.10.3",
+ "expo": "^50.0.8",
+ "expo-application": "^5.8.3",
+ "expo-build-properties": "^0.11.1",
+ "expo-camera": "~14.0.4",
+ "expo-clipboard": "^5.0.1",
+ "expo-constants": "~15.4.5",
+ "expo-dev-client": "~3.3.8",
+ "expo-device": "~5.9.3",
+ "expo-haptics": "^12.8.1",
+ "expo-image": "~1.10.6",
"expo-image-manipulator": "^11.8.0",
"expo-image-picker": "~14.7.1",
- "expo-localization": "~14.8.2",
+ "expo-linear-gradient": "^12.7.2",
+ "expo-linking": "^6.2.2",
+ "expo-localization": "~14.8.3",
"expo-media-library": "~15.9.1",
- "expo-notifications": "~0.27.3",
+ "expo-notifications": "~0.27.6",
"expo-sharing": "^11.10.0",
- "expo-splash-screen": "~0.26.2",
+ "expo-splash-screen": "~0.26.4",
"expo-status-bar": "~1.11.1",
"expo-system-ui": "~2.9.3",
- "expo-task-manager": "~11.7.0",
- "expo-updates": "~0.24.7",
- "expo-web-browser": "~12.8.1",
+ "expo-task-manager": "~11.7.2",
+ "expo-updates": "~0.24.10",
+ "expo-web-browser": "~12.8.2",
"fast-text-encoding": "^1.0.6",
"history": "^5.3.0",
"js-sha256": "^0.9.0",
"jwt-decode": "^4.0.0",
"lande": "^1.0.10",
- "libphonenumber-js": "^1.10.53",
"lodash.chunk": "^4.2.0",
"lodash.debounce": "^4.0.8",
"lodash.isequal": "^4.5.0",
@@ -135,29 +145,26 @@
"lodash.samplesize": "^4.2.0",
"lodash.set": "^4.3.2",
"lodash.shuffle": "^4.2.0",
- "lru_map": "^0.4.1",
"mobx": "^6.6.1",
"mobx-react-lite": "^3.4.0",
"mobx-utils": "^6.0.6",
- "nanoid": "^5.0.2",
+ "nanoid": "^5.0.5",
"normalize-url": "^8.0.0",
"patch-package": "^6.5.1",
"postinstall-postinstall": "^2.1.0",
"psl": "^1.9.0",
"react": "18.2.0",
"react-avatar-editor": "^13.0.0",
- "react-circular-progressbar": "^2.1.0",
"react-dom": "^18.2.0",
+ "react-keyed-flatten-children": "^3.0.0",
"react-native": "0.73.2",
- "react-native-appstate-hook": "^1.0.6",
+ "react-native-date-picker": "^4.4.0",
"react-native-drawer-layout": "^4.0.0-alpha.3",
"react-native-fs": "^2.20.0",
"react-native-gesture-handler": "~2.14.0",
- "react-native-get-random-values": "~1.8.0",
- "react-native-haptic-feedback": "^1.14.0",
+ "react-native-get-random-values": "~1.11.0",
"react-native-image-crop-picker": "^0.38.1",
"react-native-ios-context-menu": "^1.15.3",
- "react-native-linear-gradient": "^2.6.2",
"react-native-pager-view": "6.2.3",
"react-native-picker-select": "^8.1.0",
"react-native-progress": "bluesky-social/react-native-progress",
@@ -166,25 +173,23 @@
"react-native-safe-area-context": "4.8.2",
"react-native-screens": "~3.29.0",
"react-native-svg": "14.1.0",
- "react-native-ui-text-view": "link:./modules/react-native-ui-text-view",
+ "react-native-uitextview": "^1.1.6",
"react-native-url-polyfill": "^1.3.0",
"react-native-uuid": "^2.0.1",
- "react-native-version-number": "^0.3.6",
"react-native-web": "~0.19.6",
- "react-native-web-linear-gradient": "^1.1.2",
"react-native-web-webview": "^1.0.2",
"react-native-webview": "13.6.4",
"react-responsive": "^9.0.2",
"rn-fetch-blob": "^0.12.0",
"sentry-expo": "~7.0.1",
+ "statsig-react-native-expo": "^4.6.1",
"tippy.js": "^6.3.7",
"tlds": "^1.234.0",
- "use-deep-compare": "^1.1.0",
"zeego": "^1.6.2",
"zod": "^3.20.2"
},
"devDependencies": {
- "@atproto/dev-env": "^0.2.28",
+ "@atproto/dev-env": "^0.3.4",
"@babel/core": "^7.23.2",
"@babel/preset-env": "^7.20.0",
"@babel/runtime": "^7.20.0",
@@ -225,11 +230,13 @@
"babel-preset-expo": "^10.0.0",
"detox": "^20.14.8",
"eslint": "^8.19.0",
+ "eslint-plugin-bsky-internal": "link:./eslint",
"eslint-plugin-detox": "^1.0.0",
"eslint-plugin-ft-flow": "^2.0.3",
"eslint-plugin-lingui": "^0.2.0",
"eslint-plugin-react": "^7.33.2",
"eslint-plugin-react-native-a11y": "^3.3.0",
+ "eslint-plugin-simple-import-sort": "^12.0.0",
"html-webpack-plugin": "^5.5.0",
"husky": "^8.0.3",
"is-ci": "^3.0.1",
@@ -247,6 +254,7 @@
"typescript": "^5.3.3",
"url-loader": "^4.1.1",
"webpack": "^5.75.0",
+ "webpack-bundle-analyzer": "^4.10.1",
"webpack-cli": "^5.0.1",
"webpack-dev-server": "^4.11.1"
},
@@ -304,6 +312,9 @@
]
},
"lint-staged": {
- "*{.js,.jsx,.ts,.tsx}": "yarn eslint --fix"
+ "*{.js,.jsx,.ts,.tsx}": [
+ "eslint --cache --fix",
+ "prettier --cache --write --ignore-unknown"
+ ]
}
}
diff --git a/patches/@mattermost+react-native-paste-input+0.6.4.patch b/patches/@mattermost+react-native-paste-input+0.6.4.patch
index 849cbaa85b..08413846ff 100644
--- a/patches/@mattermost+react-native-paste-input+0.6.4.patch
+++ b/patches/@mattermost+react-native-paste-input+0.6.4.patch
@@ -3594,3 +3594,19 @@ index 19b61ff..04a9951 100644
PasteInput_compileSdkVersion=30
PasteInput_buildToolsVersion=30.0.2
PasteInput_targetSdkVersion=30
+diff --git a/node_modules/@mattermost/react-native-paste-input/ios/PasteInputView.m b/node_modules/@mattermost/react-native-paste-input/ios/PasteInputView.m
+index e916023..0564d97 100644
+--- a/node_modules/@mattermost/react-native-paste-input/ios/PasteInputView.m
++++ b/node_modules/@mattermost/react-native-paste-input/ios/PasteInputView.m
+@@ -22,6 +22,11 @@ - (instancetype)initWithBridge:(RCTBridge *)bridge
+ _backedTextInputView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
+ _backedTextInputView.textInputDelegate = self;
+
++ // Disable inline predictions to prevent jank in the composer
++ if (@available(iOS 17.0, *)) {
++ _backedTextInputView.inlinePredictionType = UITextInlinePredictionTypeNo;
++ }
++
+ [self addSubview:_backedTextInputView];
+ }
+
diff --git a/patches/@react-navigation+native+6.1.7.patch b/patches/@react-navigation+native+6.1.7.patch
new file mode 100644
index 0000000000..b604e2c1aa
--- /dev/null
+++ b/patches/@react-navigation+native+6.1.7.patch
@@ -0,0 +1,56 @@
+diff --git a/node_modules/@react-navigation/native/lib/commonjs/useLinking.js b/node_modules/@react-navigation/native/lib/commonjs/useLinking.js
+index ef4f368..2b0da35 100644
+--- a/node_modules/@react-navigation/native/lib/commonjs/useLinking.js
++++ b/node_modules/@react-navigation/native/lib/commonjs/useLinking.js
+@@ -273,8 +273,12 @@ function useLinking(ref, _ref) {
+ });
+ const currentIndex = history.index;
+ try {
+- if (nextIndex !== -1 && nextIndex < currentIndex) {
+- // An existing entry for this path exists and it's less than current index, go back to that
++ if (
++ nextIndex !== -1 &&
++ nextIndex < currentIndex &&
++ // We should only go back if the entry exists and it's less than current index
++ history.get(nextIndex - currentIndex)
++ ) { // An existing entry for this path exists and it's less than current index, go back to that
+ await history.go(nextIndex - currentIndex);
+ } else {
+ // We couldn't find an existing entry to go back to, so we'll go back by the delta
+diff --git a/node_modules/@react-navigation/native/lib/module/useLinking.js b/node_modules/@react-navigation/native/lib/module/useLinking.js
+index 62a3b43..11a5a28 100644
+--- a/node_modules/@react-navigation/native/lib/module/useLinking.js
++++ b/node_modules/@react-navigation/native/lib/module/useLinking.js
+@@ -264,8 +264,12 @@ export default function useLinking(ref, _ref) {
+ });
+ const currentIndex = history.index;
+ try {
+- if (nextIndex !== -1 && nextIndex < currentIndex) {
+- // An existing entry for this path exists and it's less than current index, go back to that
++ if (
++ nextIndex !== -1 &&
++ nextIndex < currentIndex &&
++ // We should only go back if the entry exists and it's less than current index
++ history.get(nextIndex - currentIndex)
++ ) { // An existing entry for this path exists and it's less than current index, go back to that
+ await history.go(nextIndex - currentIndex);
+ } else {
+ // We couldn't find an existing entry to go back to, so we'll go back by the delta
+diff --git a/node_modules/@react-navigation/native/src/useLinking.tsx b/node_modules/@react-navigation/native/src/useLinking.tsx
+index 3db40b7..9ba4ecd 100644
+--- a/node_modules/@react-navigation/native/src/useLinking.tsx
++++ b/node_modules/@react-navigation/native/src/useLinking.tsx
+@@ -381,7 +381,12 @@ export default function useLinking(
+ const currentIndex = history.index;
+
+ try {
+- if (nextIndex !== -1 && nextIndex < currentIndex) {
++ if (
++ nextIndex !== -1 &&
++ nextIndex < currentIndex &&
++ // We should only go back if the entry exists and it's less than current index
++ history.get(nextIndex - currentIndex)
++ ) {
+ // An existing entry for this path exists and it's less than current index, go back to that
+ await history.go(nextIndex - currentIndex);
+ } else {
diff --git a/patches/@react-navigation+native+6.1.7.patch.md b/patches/@react-navigation+native+6.1.7.patch.md
new file mode 100644
index 0000000000..60b0d4e140
--- /dev/null
+++ b/patches/@react-navigation+native+6.1.7.patch.md
@@ -0,0 +1,5 @@
+# React Navigation history bug patch
+
+This patches react-navigation to fix the issues in https://github.com/bluesky-social/social-app/issues/710.
+
+This is based on the PR found at https://github.com/react-navigation/react-navigation/pull/11833
diff --git a/patches/expo-haptics+12.8.1.md b/patches/expo-haptics+12.8.1.md
new file mode 100644
index 0000000000..afa7395bc0
--- /dev/null
+++ b/patches/expo-haptics+12.8.1.md
@@ -0,0 +1,11 @@
+# Expo Haptics Patch
+
+Whenever we migrated to Expo Haptics, there was a difference between how the previous and new libraries handled the
+Android implementation of an iOS "light" haptic. The previous library used the `Vibration` API solely, which does not
+have any configuration for intensity of vibration. The `Vibration` API has also been deprecated since SDK 26. See:
+https://github.com/mkuczera/react-native-haptic-feedback/blob/master/android/src/main/java/com/mkuczera/vibrateFactory/VibrateWithDuration.java
+
+Expo Haptics is using `VibrationManager` API on SDK >= 31. See: https://github.com/expo/expo/blob/main/packages/expo-haptics/android/src/main/java/expo/modules/haptics/HapticsModule.kt#L19
+The timing and intensity of their haptic configurations though differs greatly from the original implementation. This
+patch uses the new `VibrationManager` API to create the same vibration that would have been seen in the deprecated
+`Vibration` API.
diff --git a/patches/expo-haptics+12.8.1.patch b/patches/expo-haptics+12.8.1.patch
new file mode 100644
index 0000000000..a95b56f3be
--- /dev/null
+++ b/patches/expo-haptics+12.8.1.patch
@@ -0,0 +1,13 @@
+diff --git a/node_modules/expo-haptics/android/src/main/java/expo/modules/haptics/HapticsModule.kt b/node_modules/expo-haptics/android/src/main/java/expo/modules/haptics/HapticsModule.kt
+index 26c52af..b949a4c 100644
+--- a/node_modules/expo-haptics/android/src/main/java/expo/modules/haptics/HapticsModule.kt
++++ b/node_modules/expo-haptics/android/src/main/java/expo/modules/haptics/HapticsModule.kt
+@@ -42,7 +42,7 @@ class HapticsModule : Module() {
+
+ private fun vibrate(type: HapticsVibrationType) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+- vibrator.vibrate(VibrationEffect.createWaveform(type.timings, type.amplitudes, -1))
++ vibrator.vibrate(VibrationEffect.createWaveform(type.oldSDKPattern, intArrayOf(0, 100), -1))
+ } else {
+ @Suppress("DEPRECATION")
+ vibrator.vibrate(type.oldSDKPattern, -1)
diff --git a/patches/expo-image-picker+14.7.1.patch b/patches/expo-image-picker+14.7.1.patch
index 2d37a182a8..046eb4f4f3 100644
--- a/patches/expo-image-picker+14.7.1.patch
+++ b/patches/expo-image-picker+14.7.1.patch
@@ -1,8 +1,56 @@
+diff --git a/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt b/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt
+index 3f50f8c..ee47fa1 100644
+--- a/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt
++++ b/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt
+@@ -33,7 +33,9 @@ import kotlin.coroutines.resumeWithException
+ // TODO(@bbarthec): rename to ExpoImagePicker
+ private const val moduleName = "ExponentImagePicker"
+
++
+ class ImagePickerModule : Module() {
++ private var isPickerOpen = false
+
+ override fun definition() = ModuleDefinition {
+ Name(moduleName)
+@@ -129,6 +131,11 @@ class ImagePickerModule : Module() {
+ options: ImagePickerOptions
+ ): Any {
+ return try {
++ if(isPickerOpen) {
++ return ImagePickerResponse(canceled = true)
++ }
++
++ isPickerOpen = true
+ var result = launchPicker(pickerLauncher)
+ if (
+ !options.allowsMultipleSelection &&
+@@ -143,6 +150,8 @@ class ImagePickerModule : Module() {
+ mediaHandler.readExtras(result.data, options)
+ } catch (cause: OperationCanceledException) {
+ return ImagePickerResponse(canceled = true)
++ } finally {
++ isPickerOpen = false
+ }
+ }
+
diff --git a/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/contracts/ImageLibraryContract.kt b/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/contracts/ImageLibraryContract.kt
-index ff15c91..41aaf12 100644
+index ff15c91..9763012 100644
--- a/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/contracts/ImageLibraryContract.kt
+++ b/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/contracts/ImageLibraryContract.kt
-@@ -26,51 +26,26 @@ import java.io.Serializable
+@@ -5,12 +5,7 @@ import android.content.ContentResolver
+ import android.content.Context
+ import android.content.Intent
+ import android.net.Uri
+-import androidx.activity.result.PickVisualMediaRequest
+-import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia
+-import androidx.activity.result.contract.ActivityResultContracts.PickMultipleVisualMedia
+ import expo.modules.imagepicker.ImagePickerOptions
+-import expo.modules.imagepicker.MediaTypes
+-import expo.modules.imagepicker.UNLIMITED_SELECTION
+ import expo.modules.imagepicker.getAllDataUris
+ import expo.modules.imagepicker.toMediaType
+ import expo.modules.kotlin.activityresult.AppContextActivityResultContract
+@@ -26,51 +21,26 @@ import java.io.Serializable
* @see [androidx.activity.result.contract.ActivityResultContracts.GetMultipleContents]
*/
internal class ImageLibraryContract(
@@ -12,7 +60,7 @@ index ff15c91..41aaf12 100644
private val contentResolver: ContentResolver
get() = appContextProvider.appContext.reactContext?.contentResolver
?: throw Exceptions.ReactContextLost()
-
+
override fun createIntent(context: Context, input: ImageLibraryContractOptions): Intent {
- val request = PickVisualMediaRequest.Builder()
- .setMediaType(
@@ -34,7 +82,7 @@ index ff15c91..41aaf12 100644
+ val intent = Intent(Intent.ACTION_GET_CONTENT)
+ .addCategory(Intent.CATEGORY_OPENABLE)
+ .setType("image/*")
-
+
if (input.options.allowsMultipleSelection) {
- val selectionLimit = input.options.selectionLimit
-
@@ -45,7 +93,7 @@ index ff15c91..41aaf12 100644
+ if(input.options.selectionLimit == 1) {
+ return intent
}
-
+
- if (selectionLimit > 1) {
- return PickMultipleVisualMedia(selectionLimit).createIntent(context, request)
- }
@@ -56,9 +104,9 @@ index ff15c91..41aaf12 100644
- }
+ intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
}
-
+
- return PickVisualMedia().createIntent(context, request)
+ return intent
}
-
+
override fun parseResult(input: ImageLibraryContractOptions, resultCode: Int, intent: Intent?) =
diff --git a/patches/expo-updates+0.24.7.patch b/patches/expo-updates+0.24.7.patch
new file mode 100644
index 0000000000..603ae32ef8
--- /dev/null
+++ b/patches/expo-updates+0.24.7.patch
@@ -0,0 +1,26 @@
+diff --git a/node_modules/expo-updates/ios/EXUpdates/Update/NewUpdate.swift b/node_modules/expo-updates/ios/EXUpdates/Update/NewUpdate.swift
+index 189a5f5..8d5b8e6 100644
+--- a/node_modules/expo-updates/ios/EXUpdates/Update/NewUpdate.swift
++++ b/node_modules/expo-updates/ios/EXUpdates/Update/NewUpdate.swift
+@@ -68,13 +68,20 @@ public final class NewUpdate: Update {
+ processedAssets.append(asset)
+ }
+
++ // Instead of relying on various hacks to get the correct format for the specific
++ // platform on the backend, we can just add this little patch..
++ let dateFormatter = DateFormatter()
++ dateFormatter.locale = Locale(identifier: "en_US_POSIX")
++ dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
++ let date = dateFormatter.date(from:commitTime) ?? RCTConvert.nsDate(commitTime)!
++
+ return Update(
+ manifest: manifest,
+ config: config,
+ database: database,
+ updateId: uuid,
+ scopeKey: config.scopeKey,
+- commitTime: RCTConvert.nsDate(commitTime),
++ commitTime: date,
+ runtimeVersion: runtimeVersion,
+ keep: true,
+ status: UpdateStatus.StatusPending,
diff --git a/patches/expo-updates+0.24.7.patch.md b/patches/expo-updates+0.24.7.patch.md
new file mode 100644
index 0000000000..8a8848127e
--- /dev/null
+++ b/patches/expo-updates+0.24.7.patch.md
@@ -0,0 +1,7 @@
+# Expo-Updates Patch
+
+This is a small patch to convert timestamp formats that are returned from the backend. Instead of relying on the
+backend to return the correct format for a specific format (the format required on Android is not the same as on iOS)
+we can just add this conversion in.
+
+Don't remove unless we make changes on the backend to support both platforms.
\ No newline at end of file
diff --git a/patches/react-native+0.73.2.patch b/patches/react-native+0.73.2.patch
index 8f100169e5..db8b7da2d2 100644
--- a/patches/react-native+0.73.2.patch
+++ b/patches/react-native+0.73.2.patch
@@ -1,92 +1,69 @@
-diff --git a/node_modules/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.mm b/node_modules/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.mm
-index 9dca6a5..090bda5 100644
---- a/node_modules/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.mm
-+++ b/node_modules/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.mm
-@@ -266,11 +266,10 @@ - (void)textViewDidChange:(__unused UITextView *)textView
-
- - (void)textViewDidChangeSelection:(__unused UITextView *)textView
- {
-- if (_lastStringStateWasUpdatedWith && ![_lastStringStateWasUpdatedWith isEqual:_backedTextInputView.attributedText]) {
-+ if (![_lastStringStateWasUpdatedWith isEqual:_backedTextInputView.attributedText]) {
- [self textViewDidChange:_backedTextInputView];
- _ignoreNextTextInputCall = YES;
- }
-- _lastStringStateWasUpdatedWith = _backedTextInputView.attributedText;
- [self textViewProbablyDidChangeSelection];
- }
-
-diff --git a/node_modules/react-native/Libraries/Text/TextInput/RCTBaseTextInputShadowView.mm b/node_modules/react-native/Libraries/Text/TextInput/RCTBaseTextInputShadowView.mm
-index 1f06b79..ab458f3 100644
---- a/node_modules/react-native/Libraries/Text/TextInput/RCTBaseTextInputShadowView.mm
-+++ b/node_modules/react-native/Libraries/Text/TextInput/RCTBaseTextInputShadowView.mm
-@@ -87,7 +87,7 @@ - (void)invalidateContentSize
- return;
- }
-
-- CGSize maximumSize = self.layoutMetrics.frame.size;
-+ CGSize maximumSize = self.layoutMetrics.contentFrame.size;
-
- if (_maximumNumberOfLines == 1) {
- maximumSize.width = CGFLOAT_MAX;
-@@ -158,6 +158,8 @@ - (void)uiManagerWillPerformMounting
- [attributedText insertAttributedString:propertyAttributedText atIndex:0];
- }
-
-+ [self postprocessAttributedText:attributedText];
-+
- NSAttributedString *newAttributedText;
- if (![_previousAttributedText isEqualToAttributedString:attributedText]) {
- // We have to follow `set prop` pattern:
-@@ -191,6 +193,52 @@ - (void)uiManagerWillPerformMounting
- }];
- }
-
-+- (void)postprocessAttributedText:(NSMutableAttributedString *)attributedText
-+{
-+ __block CGFloat maximumLineHeight = 0;
+diff --git a/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.h b/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.h
+index e9b330f..1ecdf0a 100644
+--- a/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.h
++++ b/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.h
+@@ -16,4 +16,6 @@
+ @property (nonatomic, copy) RCTDirectEventBlock onRefresh;
+ @property (nonatomic, weak) UIScrollView *scrollView;
+
++- (void)forwarderBeginRefreshing;
+
-+ [attributedText enumerateAttribute:NSParagraphStyleAttributeName
-+ inRange:NSMakeRange(0, attributedText.length)
-+ options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired
-+ usingBlock:^(NSParagraphStyle *paragraphStyle, __unused NSRange range, __unused BOOL *stop) {
-+ if (!paragraphStyle) {
-+ return;
+ @end
+diff --git a/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.m b/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.m
+index b09e653..4c32b31 100644
+--- a/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.m
++++ b/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.m
+@@ -198,9 +198,53 @@ - (void)refreshControlValueChanged
+ [self setCurrentRefreshingState:super.refreshing];
+ _refreshingProgrammatically = NO;
+
++ if (@available(iOS 17.4, *)) {
++ if (_currentRefreshingState) {
++ UIImpactFeedbackGenerator *feedbackGenerator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleLight];
++ [feedbackGenerator prepare];
++ [feedbackGenerator impactOccurred];
+ }
++ }
+
-+ maximumLineHeight = MAX(paragraphStyle.maximumLineHeight, maximumLineHeight);
-+ }];
-+
-+ if (maximumLineHeight == 0) {
-+ // `lineHeight` was not specified, nothing to do.
+ if (_onRefresh) {
+ _onRefresh(nil);
+ }
+ }
+
++/*
++ This method is used by Bluesky's ExpoScrollForwarder. This allows other React Native
++ libraries to perform a refresh of a scrollview and access the refresh control's onRefresh
++ function.
++ */
++- (void)forwarderBeginRefreshing
++{
++ _refreshingProgrammatically = NO;
++
++ [self sizeToFit];
++
++ if (!self.scrollView) {
+ return;
+ }
-+
-+ __block CGFloat maximumFontLineHeight = 0;
-+
-+ [attributedText enumerateAttribute:NSFontAttributeName
-+ inRange:NSMakeRange(0, attributedText.length)
-+ options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired
-+ usingBlock:^(UIFont *font, NSRange range, __unused BOOL *stop) {
-+ if (!font) {
-+ return;
++
++ UIScrollView *scrollView = (UIScrollView *)self.scrollView;
++
++ [UIView animateWithDuration:0.3
++ delay:0
++ options:UIViewAnimationOptionBeginFromCurrentState
++ animations:^(void) {
++ // Whenever we call this method, the scrollview will always be at a position of
++ // -130 or less. Scrolling back to -65 simulates the default behavior of RCTRefreshControl
++ [scrollView setContentOffset:CGPointMake(0, -65)];
+ }
-+
-+ if (maximumFontLineHeight <= font.lineHeight) {
-+ maximumFontLineHeight = font.lineHeight;
++ completion:^(__unused BOOL finished) {
++ [super beginRefreshing];
++ [self setCurrentRefreshingState:super.refreshing];
++
++ if (self->_onRefresh) {
++ self->_onRefresh(nil);
++ }
+ }
-+ }];
-+
-+ if (maximumLineHeight < maximumFontLineHeight) {
-+ return;
-+ }
-+
-+ CGFloat baseLineOffset = maximumLineHeight / 2.0 - maximumFontLineHeight / 2.0;
-+
-+ [attributedText addAttribute:NSBaselineOffsetAttributeName
-+ value:@(baseLineOffset)
-+ range:NSMakeRange(0, attributedText.length)];
++ ];
+}
+
- #pragma mark -
-
- - (NSAttributedString *)measurableAttributedText
+ @end
diff --git a/patches/react-native+0.73.2.patch.md b/patches/react-native+0.73.2.patch.md
index 3d32751636..9c93aee5cb 100644
--- a/patches/react-native+0.73.2.patch.md
+++ b/patches/react-native+0.73.2.patch.md
@@ -1,5 +1,13 @@
-# TextInput Patch
+# ***This second part of this patch is load bearing, do not remove.***
-Patching `RCTBaseTextShadowInput.mm` from https://github.com/facebook/react-native/pull/38359. This fixes some text
-getting cut off inside the composer. This was merged in December, so we should be able to remove this patch when RN
-ships the next release.
+## RefreshControl Patch - iOS 17.4 Haptic Regression
+
+Patching `RCTRefreshControl.mm` temporarily to play an impact haptic on refresh when using iOS 17.4 or higher. Since
+17.4, there has been a regression somewhere causing haptics to not play on iOS on refresh. Should monitor for an update
+in the RN repo: https://github.com/facebook/react-native/issues/43388
+
+## RefreshControl Path - ScrollForwarder
+
+Patching `RCTRefreshControl.m` and `RCTRefreshControl.h` to add a new `forwarderBeginRefreshing` method to the class.
+This method is used by `ExpoScrollForwarder` to initiate a refresh of the underlying `UIScrollView` from inside that
+module.
diff --git a/plugins/shareExtension/README.md b/plugins/shareExtension/README.md
new file mode 100644
index 0000000000..2b57e624ae
--- /dev/null
+++ b/plugins/shareExtension/README.md
@@ -0,0 +1,22 @@
+# Share extension plugin for Expo
+
+This plugin handles moving the necessary files into their respective iOS and Android targets and updating the build
+phases, plists, manifests, etc.
+
+## Steps
+
+### ios
+
+1. Update entitlements
+2. Set the app group to group.
+3. Add the extension plist
+4. Add the view controller
+5. Update the xcode project's build phases
+
+### android
+
+1. Update the manifest with the intents the app can receive
+
+## Credits
+
+Adapted from https://github.com/andrew-levy/react-native-safari-extension and https://github.com/timedtext/expo-config-plugin-ios-share-extension/blob/master/src/withShareExtensionXcodeTarget.ts
diff --git a/plugins/shareExtension/withAppEntitlements.js b/plugins/shareExtension/withAppEntitlements.js
new file mode 100644
index 0000000000..4ce81ea611
--- /dev/null
+++ b/plugins/shareExtension/withAppEntitlements.js
@@ -0,0 +1,13 @@
+const {withEntitlementsPlist} = require('@expo/config-plugins')
+
+const withAppEntitlements = config => {
+ // eslint-disable-next-line no-shadow
+ return withEntitlementsPlist(config, async config => {
+ config.modResults['com.apple.security.application-groups'] = [
+ `group.app.bsky`,
+ ]
+ return config
+ })
+}
+
+module.exports = {withAppEntitlements}
diff --git a/plugins/shareExtension/withExtensionEntitlements.js b/plugins/shareExtension/withExtensionEntitlements.js
new file mode 100644
index 0000000000..7bee79d1a6
--- /dev/null
+++ b/plugins/shareExtension/withExtensionEntitlements.js
@@ -0,0 +1,31 @@
+const {withInfoPlist} = require('@expo/config-plugins')
+const plist = require('@expo/plist')
+const path = require('path')
+const fs = require('fs')
+
+const withExtensionEntitlements = (config, {extensionName}) => {
+ // eslint-disable-next-line no-shadow
+ return withInfoPlist(config, config => {
+ const extensionEntitlementsPath = path.join(
+ config.modRequest.platformProjectRoot,
+ extensionName,
+ `${extensionName}.entitlements`,
+ )
+
+ const shareExtensionEntitlements = {
+ 'com.apple.security.application-groups': [`group.app.bsky`],
+ }
+
+ fs.mkdirSync(path.dirname(extensionEntitlementsPath), {
+ recursive: true,
+ })
+ fs.writeFileSync(
+ extensionEntitlementsPath,
+ plist.default.build(shareExtensionEntitlements),
+ )
+
+ return config
+ })
+}
+
+module.exports = {withExtensionEntitlements}
diff --git a/plugins/shareExtension/withExtensionInfoPlist.js b/plugins/shareExtension/withExtensionInfoPlist.js
new file mode 100644
index 0000000000..9afc4d5f92
--- /dev/null
+++ b/plugins/shareExtension/withExtensionInfoPlist.js
@@ -0,0 +1,39 @@
+const {withInfoPlist} = require('@expo/config-plugins')
+const plist = require('@expo/plist')
+const path = require('path')
+const fs = require('fs')
+
+const withExtensionInfoPlist = (config, {extensionName}) => {
+ // eslint-disable-next-line no-shadow
+ return withInfoPlist(config, config => {
+ const plistPath = path.join(
+ config.modRequest.projectRoot,
+ 'modules',
+ extensionName,
+ 'Info.plist',
+ )
+ const targetPath = path.join(
+ config.modRequest.platformProjectRoot,
+ extensionName,
+ 'Info.plist',
+ )
+
+ const extPlist = plist.default.parse(fs.readFileSync(plistPath).toString())
+
+ extPlist.MainAppScheme = config.scheme
+ extPlist.CFBundleName = '$(PRODUCT_NAME)'
+ extPlist.CFBundleDisplayName = 'Extension'
+ extPlist.CFBundleIdentifier = '$(PRODUCT_BUNDLE_IDENTIFIER)'
+ extPlist.CFBundleVersion = '$(CURRENT_PROJECT_VERSION)'
+ extPlist.CFBundleExecutable = '$(EXECUTABLE_NAME)'
+ extPlist.CFBundlePackageType = '$(PRODUCT_BUNDLE_PACKAGE_TYPE)'
+ extPlist.CFBundleShortVersionString = '$(MARKETING_VERSION)'
+
+ fs.mkdirSync(path.dirname(targetPath), {recursive: true})
+ fs.writeFileSync(targetPath, plist.default.build(extPlist))
+
+ return config
+ })
+}
+
+module.exports = {withExtensionInfoPlist}
diff --git a/plugins/shareExtension/withExtensionViewController.js b/plugins/shareExtension/withExtensionViewController.js
new file mode 100644
index 0000000000..cd29bea7da
--- /dev/null
+++ b/plugins/shareExtension/withExtensionViewController.js
@@ -0,0 +1,31 @@
+const {withXcodeProject} = require('@expo/config-plugins')
+const path = require('path')
+const fs = require('fs')
+
+const withExtensionViewController = (
+ config,
+ {controllerName, extensionName},
+) => {
+ // eslint-disable-next-line no-shadow
+ return withXcodeProject(config, config => {
+ const controllerPath = path.join(
+ config.modRequest.projectRoot,
+ 'modules',
+ extensionName,
+ `${controllerName}.swift`,
+ )
+
+ const targetPath = path.join(
+ config.modRequest.platformProjectRoot,
+ extensionName,
+ `${controllerName}.swift`,
+ )
+
+ fs.mkdirSync(path.dirname(targetPath), {recursive: true})
+ fs.copyFileSync(controllerPath, targetPath)
+
+ return config
+ })
+}
+
+module.exports = {withExtensionViewController}
diff --git a/plugins/shareExtension/withIntentFilters.js b/plugins/shareExtension/withIntentFilters.js
new file mode 100644
index 0000000000..605fcfd052
--- /dev/null
+++ b/plugins/shareExtension/withIntentFilters.js
@@ -0,0 +1,89 @@
+const {withAndroidManifest} = require('@expo/config-plugins')
+
+const withIntentFilters = config => {
+ // eslint-disable-next-line no-shadow
+ return withAndroidManifest(config, config => {
+ const intents = [
+ {
+ action: [
+ {
+ $: {
+ 'android:name': 'android.intent.action.SEND',
+ },
+ },
+ ],
+ category: [
+ {
+ $: {
+ 'android:name': 'android.intent.category.DEFAULT',
+ },
+ },
+ ],
+ data: [
+ {
+ $: {
+ 'android:mimeType': 'image/*',
+ },
+ },
+ ],
+ },
+ {
+ action: [
+ {
+ $: {
+ 'android:name': 'android.intent.action.SEND',
+ },
+ },
+ ],
+ category: [
+ {
+ $: {
+ 'android:name': 'android.intent.category.DEFAULT',
+ },
+ },
+ ],
+ data: [
+ {
+ $: {
+ 'android:mimeType': 'text/plain',
+ },
+ },
+ ],
+ },
+ {
+ action: [
+ {
+ $: {
+ 'android:name': 'android.intent.action.SEND_MULTIPLE',
+ },
+ },
+ ],
+ category: [
+ {
+ $: {
+ 'android:name': 'android.intent.category.DEFAULT',
+ },
+ },
+ ],
+ data: [
+ {
+ $: {
+ 'android:mimeType': 'image/*',
+ },
+ },
+ ],
+ },
+ ]
+
+ const intentFilter =
+ config.modResults.manifest.application?.[0].activity?.[0]['intent-filter']
+
+ if (intentFilter) {
+ intentFilter.push(...intents)
+ }
+
+ return config
+ })
+}
+
+module.exports = {withIntentFilters}
diff --git a/plugins/shareExtension/withShareExtensions.js b/plugins/shareExtension/withShareExtensions.js
new file mode 100644
index 0000000000..55a26c75eb
--- /dev/null
+++ b/plugins/shareExtension/withShareExtensions.js
@@ -0,0 +1,47 @@
+const {withPlugins} = require('@expo/config-plugins')
+const {withAppEntitlements} = require('./withAppEntitlements')
+const {withXcodeTarget} = require('./withXcodeTarget')
+const {withExtensionEntitlements} = require('./withExtensionEntitlements')
+const {withExtensionInfoPlist} = require('./withExtensionInfoPlist')
+const {withExtensionViewController} = require('./withExtensionViewController')
+const {withIntentFilters} = require('./withIntentFilters')
+
+const SHARE_EXTENSION_NAME = 'Share-with-Bluesky'
+const SHARE_EXTENSION_CONTROLLER_NAME = 'ShareViewController'
+
+const withShareExtensions = config => {
+ return withPlugins(config, [
+ // IOS
+ withAppEntitlements,
+ [
+ withExtensionEntitlements,
+ {
+ extensionName: SHARE_EXTENSION_NAME,
+ },
+ ],
+ [
+ withExtensionInfoPlist,
+ {
+ extensionName: SHARE_EXTENSION_NAME,
+ },
+ ],
+ [
+ withExtensionViewController,
+ {
+ extensionName: SHARE_EXTENSION_NAME,
+ controllerName: SHARE_EXTENSION_CONTROLLER_NAME,
+ },
+ ],
+ [
+ withXcodeTarget,
+ {
+ extensionName: SHARE_EXTENSION_NAME,
+ controllerName: SHARE_EXTENSION_CONTROLLER_NAME,
+ },
+ ],
+ // Android
+ withIntentFilters,
+ ])
+}
+
+module.exports = withShareExtensions
diff --git a/plugins/shareExtension/withXcodeTarget.js b/plugins/shareExtension/withXcodeTarget.js
new file mode 100644
index 0000000000..ce70b392d4
--- /dev/null
+++ b/plugins/shareExtension/withXcodeTarget.js
@@ -0,0 +1,63 @@
+const {withXcodeProject} = require('@expo/config-plugins')
+
+const withXcodeTarget = (config, {extensionName, controllerName}) => {
+ // eslint-disable-next-line no-shadow
+ return withXcodeProject(config, config => {
+ const pbxProject = config.modResults
+
+ const target = pbxProject.addTarget(
+ extensionName,
+ 'app_extension',
+ extensionName,
+ )
+ pbxProject.addBuildPhase([], 'PBXSourcesBuildPhase', 'Sources', target.uuid)
+ pbxProject.addBuildPhase(
+ [],
+ 'PBXResourcesBuildPhase',
+ 'Resources',
+ target.uuid,
+ )
+ const pbxGroupKey = pbxProject.pbxCreateGroup(extensionName, extensionName)
+ pbxProject.addFile(`${extensionName}/Info.plist`, pbxGroupKey)
+ pbxProject.addSourceFile(
+ `${extensionName}/${controllerName}.swift`,
+ {target: target.uuid},
+ pbxGroupKey,
+ )
+
+ var configurations = pbxProject.pbxXCBuildConfigurationSection()
+ for (var key in configurations) {
+ if (typeof configurations[key].buildSettings !== 'undefined') {
+ var buildSettingsObj = configurations[key].buildSettings
+ if (
+ typeof buildSettingsObj.PRODUCT_NAME !== 'undefined' &&
+ buildSettingsObj.PRODUCT_NAME === `"${extensionName}"`
+ ) {
+ buildSettingsObj.CLANG_ENABLE_MODULES = 'YES'
+ buildSettingsObj.INFOPLIST_FILE = `"${extensionName}/Info.plist"`
+ buildSettingsObj.CODE_SIGN_ENTITLEMENTS = `"${extensionName}/${extensionName}.entitlements"`
+ buildSettingsObj.CODE_SIGN_STYLE = 'Automatic'
+ buildSettingsObj.CURRENT_PROJECT_VERSION = `"${config.ios?.buildNumber}"`
+ buildSettingsObj.GENERATE_INFOPLIST_FILE = 'YES'
+ buildSettingsObj.MARKETING_VERSION = `"${config.version}"`
+ buildSettingsObj.PRODUCT_BUNDLE_IDENTIFIER = `"${config.ios?.bundleIdentifier}.${extensionName}"`
+ buildSettingsObj.SWIFT_EMIT_LOC_STRINGS = 'YES'
+ buildSettingsObj.SWIFT_VERSION = '5.0'
+ buildSettingsObj.TARGETED_DEVICE_FAMILY = `"1,2"`
+ buildSettingsObj.DEVELOPMENT_TEAM = 'B3LX46C5HS'
+ }
+ }
+ }
+
+ pbxProject.addTargetAttribute(
+ 'DevelopmentTeam',
+ 'B3LX46C5HS',
+ extensionName,
+ )
+ pbxProject.addTargetAttribute('DevelopmentTeam', 'B3LX46C5HS')
+
+ return config
+ })
+}
+
+module.exports = {withXcodeTarget}
diff --git a/plugins/withAndroidManifestFCMIconPlugin.js b/plugins/withAndroidManifestFCMIconPlugin.js
new file mode 100644
index 0000000000..066a975d87
--- /dev/null
+++ b/plugins/withAndroidManifestFCMIconPlugin.js
@@ -0,0 +1,37 @@
+const {withAndroidManifest} = require('expo/config-plugins')
+
+module.exports = function withAndroidManifestFCMIconPlugin(appConfig) {
+ return withAndroidManifest(appConfig, function (decoratedAppConfig) {
+ try {
+ function addOrModifyMetaData(metaData, name, resource) {
+ const elem = metaData.find(elem => elem.$['android:name'] === name)
+ if (elem === undefined) {
+ metaData.push({
+ $: {
+ 'android:name': name,
+ 'android:resource': resource,
+ },
+ })
+ } else {
+ elem.$['android:resource'] = resource
+ }
+ }
+ const androidManifest = decoratedAppConfig.modResults.manifest
+ const metaData = androidManifest.application[0]['meta-data']
+ addOrModifyMetaData(
+ metaData,
+ 'com.google.firebase.messaging.default_notification_color',
+ '@color/notification_icon_color',
+ )
+ addOrModifyMetaData(
+ metaData,
+ 'com.google.firebase.messaging.default_notification_icon',
+ '@drawable/notification_icon',
+ )
+ return decoratedAppConfig
+ } catch (e) {
+ console.error(`withAndroidManifestFCMIconPlugin failed`, e)
+ }
+ return decoratedAppConfig
+ })
+}
diff --git a/plugins/withAndroidSplashScreenStatusBarTranslucentPlugin.js b/plugins/withAndroidSplashScreenStatusBarTranslucentPlugin.js
new file mode 100644
index 0000000000..704ead054b
--- /dev/null
+++ b/plugins/withAndroidSplashScreenStatusBarTranslucentPlugin.js
@@ -0,0 +1,28 @@
+const {withStringsXml, AndroidConfig} = require('@expo/config-plugins')
+
+module.exports = function withAndroidSplashScreenStatusBarTranslucentPlugin(
+ appConfig,
+) {
+ return withStringsXml(appConfig, function (decoratedAppConfig) {
+ try {
+ decoratedAppConfig.modResults = AndroidConfig.Strings.setStringItem(
+ [
+ {
+ _: 'true',
+ $: {
+ name: 'expo_splash_screen_status_bar_translucent',
+ translatable: 'false',
+ },
+ },
+ ],
+ decoratedAppConfig.modResults,
+ )
+ } catch (e) {
+ console.error(
+ `withAndroidSplashScreenStatusBarTranslucentPlugin failed`,
+ e,
+ )
+ }
+ return decoratedAppConfig
+ })
+}
diff --git a/plugins/withAndroidStylesWindowBackgroundPlugin.js b/plugins/withAndroidStylesWindowBackgroundPlugin.js
new file mode 100644
index 0000000000..427f43df07
--- /dev/null
+++ b/plugins/withAndroidStylesWindowBackgroundPlugin.js
@@ -0,0 +1,20 @@
+const {withAndroidStyles, AndroidConfig} = require('@expo/config-plugins')
+
+module.exports = function withAndroidStylesWindowBackgroundPlugin(appConfig) {
+ return withAndroidStyles(appConfig, function (decoratedAppConfig) {
+ try {
+ decoratedAppConfig.modResults = AndroidConfig.Styles.assignStylesValue(
+ decoratedAppConfig.modResults,
+ {
+ add: true,
+ parent: AndroidConfig.Styles.getAppThemeLightNoActionBarGroup(),
+ name: 'android:windowBackground',
+ value: '@drawable/splashscreen',
+ },
+ )
+ } catch (e) {
+ console.error(`withAndroidStylesWindowBackgroundPlugin failed`, e)
+ }
+ return decoratedAppConfig
+ })
+}
diff --git a/scripts/README.md b/scripts/README.md
new file mode 100644
index 0000000000..99d6236f90
--- /dev/null
+++ b/scripts/README.md
@@ -0,0 +1,5 @@
+# Tool Scripts
+
+## updateExtensions.sh
+
+Updates the extensions in `/modules` with the current iOS/Android project changes.
diff --git a/scripts/bumpAndroidBuildNumber.sh b/scripts/bumpAndroidBuildNumber.sh
deleted file mode 100755
index 105f1296d4..0000000000
--- a/scripts/bumpAndroidBuildNumber.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# The number here should always be the line number the iOS build variable is on
-line=$(sed "30q;d" ./app.config.js)
-currentBuildNumber=$(echo "$line" | grep -oE '[0-9]+([.][0-9]+)?')
-newBuildNumber=$((currentBuildNumber+1))
-newBuildVariable="const ANDROID_VERSION_CODE = '$newBuildNumber'"
-sed -i.bak "30s/.*/ $newBuildVariable/" ./app.config.js
-rm -rf ./app.config.js.bak
-
-echo "Android build number bumped to $newBuildNumber"
diff --git a/scripts/bumpIosBuildNumber.sh b/scripts/bumpIosBuildNumber.sh
deleted file mode 100755
index b78d2e69db..0000000000
--- a/scripts/bumpIosBuildNumber.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-# The number here should always be the line number the iOS build variable is on
-line=$(sed "24q;d" ./app.config.js)
-currentBuildNumber=$(echo "$line" | grep -oE '[0-9]+([.][0-9]+)?')
-newBuildNumber=$((currentBuildNumber+1))
-newBuildVariable="const IOS_BUILD_NUMBER = '$newBuildNumber'"
-sed -i.bak "24s/.*/ $newBuildVariable/" ./app.config.js
-rm -rf ./app.config.js.bak
-
-echo "iOS build number bumped to $newBuildNumber"
diff --git a/scripts/bundleUpdate.js b/scripts/bundleUpdate.js
new file mode 100644
index 0000000000..00217dcd7b
--- /dev/null
+++ b/scripts/bundleUpdate.js
@@ -0,0 +1,104 @@
+const crypto = require('crypto')
+const fs = require('fs')
+const fsp = fs.promises
+const path = require('path')
+
+const DIST_DIR = './dist'
+const BUNDLES_DIR = '/_expo/static/js'
+const IOS_BUNDLE_DIR = path.join(DIST_DIR, BUNDLES_DIR, '/ios')
+const ANDROID_BUNDLE_DIR = path.join(DIST_DIR, BUNDLES_DIR, '/android')
+const METADATA_PATH = path.join(DIST_DIR, '/metadata.json')
+const DEST_DIR = './bundleTempDir'
+
+// Weird, don't feel like figuring out _why_ it wants this
+const METADATA = require(`../${METADATA_PATH}`)
+const IOS_METADATA_ASSETS = METADATA.fileMetadata.ios.assets
+const ANDROID_METADATA_ASSETS = METADATA.fileMetadata.android.assets
+
+const getMd5 = async path => {
+ return new Promise(res => {
+ const hash = crypto.createHash('md5')
+ const rStream = fs.createReadStream(path)
+ rStream.on('data', data => {
+ hash.update(data)
+ })
+ rStream.on('end', () => {
+ res(hash.digest('hex'))
+ })
+ })
+}
+
+const moveFiles = async () => {
+ console.log('Making directory...')
+ await fsp.mkdir(DEST_DIR)
+ await fsp.mkdir(path.join(DEST_DIR, '/assets'))
+
+ console.log('Getting ios md5...')
+ const iosCurrPath = path.join(
+ IOS_BUNDLE_DIR,
+ (await fsp.readdir(IOS_BUNDLE_DIR))[0],
+ )
+ const iosMd5 = await getMd5(iosCurrPath)
+ const iosNewPath = `bundles/${iosMd5}.bundle`
+
+ console.log('Copying ios bundle...')
+ await fsp.cp(iosCurrPath, path.join(DEST_DIR, iosNewPath))
+
+ console.log('Getting android md5...')
+ const androidCurrPath = path.join(
+ ANDROID_BUNDLE_DIR,
+ (await fsp.readdir(ANDROID_BUNDLE_DIR))[0],
+ )
+ const androidMd5 = await getMd5(androidCurrPath)
+ const androidNewPath = `bundles/${androidMd5}.bundle`
+
+ console.log('Copying android bundle...')
+ await fsp.cp(androidCurrPath, path.join(DEST_DIR, androidNewPath))
+
+ const iosAssets = []
+ const androidAssets = []
+
+ console.log('Getting ios asset md5s and moving them...')
+ for (const asset of IOS_METADATA_ASSETS) {
+ const currPath = path.join(DIST_DIR, asset.path)
+ const md5 = await getMd5(currPath)
+ const withExtPath = `assets/${md5}.${asset.ext}`
+ iosAssets.push(withExtPath)
+ await fsp.cp(currPath, path.join(DEST_DIR, withExtPath))
+ }
+
+ console.log('Getting android asset md5s and moving them...')
+ for (const asset of ANDROID_METADATA_ASSETS) {
+ const currPath = path.join(DIST_DIR, asset.path)
+ const md5 = await getMd5(currPath)
+ const withExtPath = `assets/${md5}.${asset.ext}`
+ androidAssets.push(withExtPath)
+ await fsp.cp(currPath, path.join(DEST_DIR, withExtPath))
+ }
+
+ const result = {
+ version: 0,
+ bundler: 'metro',
+ fileMetadata: {
+ ios: {
+ bundle: iosNewPath,
+ assets: iosAssets,
+ },
+ android: {
+ bundle: androidNewPath,
+ assets: androidAssets,
+ },
+ },
+ }
+
+ console.log('Writing metadata...')
+ await fsp.writeFile(
+ path.join(DEST_DIR, 'metadata.json'),
+ JSON.stringify(result),
+ )
+
+ console.log('Finished!')
+ console.log('Metadata:', result)
+}
+
+moveFiles()
diff --git a/scripts/bundleUpdate.sh b/scripts/bundleUpdate.sh
new file mode 100644
index 0000000000..5927a36c8e
--- /dev/null
+++ b/scripts/bundleUpdate.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+set -o errexit
+set -o pipefail
+set -o nounset
+
+rm -rf bundleTempDir
+rm -rf bundle.tar.gz
+
+echo "Creating tarball..."
+node scripts/bundleUpdate.js
+
+if [ -z "$RUNTIME_VERSION" ]; then
+ RUNTIME_VERSION=$(cat package.json | jq '.version' -r)
+fi
+
+cd bundleTempDir || exit
+BUNDLE_VERSION=$(date +%s)
+DEPLOYMENT_URL="https://updates.bsky.app/v1/upload?runtime-version=$RUNTIME_VERSION&bundle-version=$BUNDLE_VERSION&channel=$CHANNEL_NAME&ios-build-number=$BSKY_IOS_BUILD_NUMBER&android-build-number=$BSKY_ANDROID_VERSION_CODE"
+
+tar czvf bundle.tar.gz ./*
+
+echo "Deploying to $DEPLOYMENT_URL..."
+
+curl -o - --form "bundle=@./bundle.tar.gz" --user "bsky:$DENIS_API_KEY" --basic "$DEPLOYMENT_URL"
+
+cd ..
+
+rm -rf bundleTempDir
+rm -rf bundle.tar.gz
diff --git a/scripts/updateExtensions.sh b/scripts/updateExtensions.sh
new file mode 100755
index 0000000000..f4e462b744
--- /dev/null
+++ b/scripts/updateExtensions.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+IOS_SHARE_EXTENSION_DIRECTORY="./ios/Share-with-Bluesky"
+MODULES_DIRECTORY="./modules"
+
+if [ ! -d $IOS_SHARE_EXTENSION_DIRECTORY ]; then
+ echo "$IOS_SHARE_EXTENSION_DIRECTORY not found inside of your iOS project."
+ exit 1
+else
+ cp -R $IOS_SHARE_EXTENSION_DIRECTORY $MODULES_DIRECTORY
+fi
diff --git a/scripts/useBuildNumberEnv.sh b/scripts/useBuildNumberEnv.sh
new file mode 100755
index 0000000000..2251c09078
--- /dev/null
+++ b/scripts/useBuildNumberEnv.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+outputIos=$(eas build:version:get -p ios)
+outputAndroid=$(eas build:version:get -p android)
+BSKY_IOS_BUILD_NUMBER=${outputIos#*buildNumber - }
+BSKY_ANDROID_VERSION_CODE=${outputAndroid#*versionCode - }
+
+bash -c "BSKY_IOS_BUILD_NUMBER=$BSKY_IOS_BUILD_NUMBER BSKY_ANDROID_VERSION_CODE=$BSKY_ANDROID_VERSION_CODE $*"
diff --git a/scripts/useBuildNumberEnvWithBump.sh b/scripts/useBuildNumberEnvWithBump.sh
new file mode 100755
index 0000000000..fe273d3948
--- /dev/null
+++ b/scripts/useBuildNumberEnvWithBump.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+outputIos=$(eas build:version:get -p ios)
+outputAndroid=$(eas build:version:get -p android)
+currentIosVersion=${outputIos#*buildNumber - }
+currentAndroidVersion=${outputAndroid#*versionCode - }
+
+BSKY_IOS_BUILD_NUMBER=$((currentIosVersion+1))
+BSKY_ANDROID_VERSION_CODE=$((currentAndroidVersion+1))
+
+bash -c "BSKY_IOS_BUILD_NUMBER=$BSKY_IOS_BUILD_NUMBER BSKY_ANDROID_VERSION_CODE=$BSKY_ANDROID_VERSION_CODE $*"
+
diff --git a/src/App.native.tsx b/src/App.native.tsx
index 1284154f3b..9abe4a559d 100644
--- a/src/App.native.tsx
+++ b/src/App.native.tsx
@@ -1,50 +1,53 @@
import 'react-native-url-polyfill/auto'
import 'lib/sentry' // must be near top
+import 'view/icons'
-import React, {useState, useEffect} from 'react'
-import {RootSiblingParent} from 'react-native-root-siblings'
-import * as SplashScreen from 'expo-splash-screen'
+import React, {useEffect, useState} from 'react'
import {GestureHandlerRootView} from 'react-native-gesture-handler'
-import {QueryClientProvider} from '@tanstack/react-query'
+import {RootSiblingParent} from 'react-native-root-siblings'
import {
- SafeAreaProvider,
initialWindowMetrics,
+ SafeAreaProvider,
} from 'react-native-safe-area-context'
+import * as SplashScreen from 'expo-splash-screen'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {useQueryClient} from '@tanstack/react-query'
-import 'view/icons'
-
-import {ThemeProvider as Alf} from '#/alf'
-import {useColorModeTheme} from '#/alf/util/useColorModeTheme'
+import {Provider as StatsigProvider} from '#/lib/statsig/statsig'
import {init as initPersistedState} from '#/state/persisted'
-import {listenSessionDropped} from './state/events'
-import {ThemeProvider} from 'lib/ThemeContext'
+import * as persisted from '#/state/persisted'
+import {Provider as LabelDefsProvider} from '#/state/preferences/label-defs'
+import {useIntentHandler} from 'lib/hooks/useIntentHandler'
+import {useOTAUpdates} from 'lib/hooks/useOTAUpdates'
+import {useNotificationsListener} from 'lib/notifications/notifications'
+import {QueryProvider} from 'lib/react-query'
import {s} from 'lib/styles'
-import {Shell} from 'view/shell'
-import * as notifications from 'lib/notifications/notifications'
-import * as Toast from 'view/com/util/Toast'
-import {queryClient} from 'lib/react-query'
-import {TestCtrls} from 'view/com/testing/TestCtrls'
-import {Provider as ShellStateProvider} from 'state/shell'
-import {Provider as ModalStateProvider} from 'state/modals'
+import {ThemeProvider} from 'lib/ThemeContext'
import {Provider as DialogStateProvider} from 'state/dialogs'
+import {Provider as InvitesStateProvider} from 'state/invites'
import {Provider as LightboxStateProvider} from 'state/lightbox'
+import {Provider as ModalStateProvider} from 'state/modals'
import {Provider as MutedThreadsProvider} from 'state/muted-threads'
-import {Provider as InvitesStateProvider} from 'state/invites'
import {Provider as PrefsStateProvider} from 'state/preferences'
-import {Provider as LoggedOutViewProvider} from 'state/shell/logged-out'
-import {Provider as SelectedFeedProvider} from 'state/shell/selected-feed'
-import I18nProvider from './locale/i18nProvider'
+import {Provider as UnreadNotifsProvider} from 'state/queries/notifications/unread'
import {
Provider as SessionProvider,
useSession,
useSessionApi,
} from 'state/session'
-import {Provider as UnreadNotifsProvider} from 'state/queries/notifications/unread'
-import * as persisted from '#/state/persisted'
-import {Splash} from '#/Splash'
+import {Provider as ShellStateProvider} from 'state/shell'
+import {Provider as LoggedOutViewProvider} from 'state/shell/logged-out'
+import {Provider as SelectedFeedProvider} from 'state/shell/selected-feed'
+import {TestCtrls} from 'view/com/testing/TestCtrls'
+import * as Toast from 'view/com/util/Toast'
+import {Shell} from 'view/shell'
+import {ThemeProvider as Alf} from '#/alf'
+import {useColorModeTheme} from '#/alf/util/useColorModeTheme'
import {Provider as PortalProvider} from '#/components/Portal'
-import {msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
+import {Splash} from '#/Splash'
+import I18nProvider from './locale/i18nProvider'
+import {listenSessionDropped} from './state/events'
SplashScreen.preventAutoHideAsync()
@@ -54,9 +57,11 @@ function InnerApp() {
const theme = useColorModeTheme()
const {_} = useLingui()
+ useIntentHandler()
+ useOTAUpdates()
+
// init
useEffect(() => {
- notifications.init(queryClient)
listenSessionDropped(() => {
Toast.show(_(msg`Sorry! Your session expired. Please log in again.`))
})
@@ -72,21 +77,29 @@ function InnerApp() {
-
-
-
-
- {/* All components should be within this provider */}
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+ {/* All components should be within this provider */}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -94,6 +107,12 @@ function InnerApp() {
)
}
+function PushNotificationsListener({children}: {children: React.ReactNode}) {
+ const queryClient = useQueryClient()
+ useNotificationsListener(queryClient)
+ return children
+}
+
function App() {
const [isReady, setReady] = useState(false)
@@ -110,29 +129,27 @@ function App() {
* that is set up in the InnerApp component above.
*/
return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
)
}
diff --git a/src/App.web.tsx b/src/App.web.tsx
index f10bb194d4..ccf7ecb491 100644
--- a/src/App.web.tsx
+++ b/src/App.web.tsx
@@ -1,42 +1,44 @@
import 'lib/sentry' // must be near top
+import 'view/icons'
-import React, {useState, useEffect} from 'react'
-import {QueryClientProvider} from '@tanstack/react-query'
-import {SafeAreaProvider} from 'react-native-safe-area-context'
+import React, {useEffect, useState} from 'react'
import {RootSiblingParent} from 'react-native-root-siblings'
+import {SafeAreaProvider} from 'react-native-safe-area-context'
-import 'view/icons'
-
-import {ThemeProvider as Alf} from '#/alf'
-import {useColorModeTheme} from '#/alf/util/useColorModeTheme'
+import {Provider as StatsigProvider} from '#/lib/statsig/statsig'
import {init as initPersistedState} from '#/state/persisted'
-import {Shell} from 'view/shell/index'
-import {ToastContainer} from 'view/com/util/Toast.web'
+import * as persisted from '#/state/persisted'
+import {Provider as LabelDefsProvider} from '#/state/preferences/label-defs'
+import {useIntentHandler} from 'lib/hooks/useIntentHandler'
+import {QueryProvider} from 'lib/react-query'
import {ThemeProvider} from 'lib/ThemeContext'
-import {queryClient} from 'lib/react-query'
-import {Provider as ShellStateProvider} from 'state/shell'
-import {Provider as ModalStateProvider} from 'state/modals'
import {Provider as DialogStateProvider} from 'state/dialogs'
+import {Provider as InvitesStateProvider} from 'state/invites'
import {Provider as LightboxStateProvider} from 'state/lightbox'
+import {Provider as ModalStateProvider} from 'state/modals'
import {Provider as MutedThreadsProvider} from 'state/muted-threads'
-import {Provider as InvitesStateProvider} from 'state/invites'
import {Provider as PrefsStateProvider} from 'state/preferences'
-import {Provider as LoggedOutViewProvider} from 'state/shell/logged-out'
-import {Provider as SelectedFeedProvider} from 'state/shell/selected-feed'
-import I18nProvider from './locale/i18nProvider'
+import {Provider as UnreadNotifsProvider} from 'state/queries/notifications/unread'
import {
Provider as SessionProvider,
useSession,
useSessionApi,
} from 'state/session'
-import {Provider as UnreadNotifsProvider} from 'state/queries/notifications/unread'
-import * as persisted from '#/state/persisted'
+import {Provider as ShellStateProvider} from 'state/shell'
+import {Provider as LoggedOutViewProvider} from 'state/shell/logged-out'
+import {Provider as SelectedFeedProvider} from 'state/shell/selected-feed'
+import {ToastContainer} from 'view/com/util/Toast.web'
+import {Shell} from 'view/shell/index'
+import {ThemeProvider as Alf} from '#/alf'
+import {useColorModeTheme} from '#/alf/util/useColorModeTheme'
import {Provider as PortalProvider} from '#/components/Portal'
+import I18nProvider from './locale/i18nProvider'
function InnerApp() {
const {isInitialLoad, currentAccount} = useSession()
const {resumeSession} = useSessionApi()
const theme = useColorModeTheme()
+ useIntentHandler()
// init
useEffect(() => {
@@ -52,21 +54,27 @@ function InnerApp() {
-
-
-
-
- {/* All components should be within this provider */}
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+ {/* All components should be within this provider */}
+
+
+
+
+
+
+
+
+
+
+
+
+
)
@@ -88,29 +96,27 @@ function App() {
* that is set up in the InnerApp component above.
*/
return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
)
}
diff --git a/src/Navigation.tsx b/src/Navigation.tsx
index 897d86e40f..070c57960d 100644
--- a/src/Navigation.tsx
+++ b/src/Navigation.tsx
@@ -1,82 +1,86 @@
import * as React from 'react'
-import {
- NavigationContainer,
- createNavigationContainerRef,
- CommonActions,
- StackActions,
- DefaultTheme,
- DarkTheme,
-} from '@react-navigation/native'
+import {JSX} from 'react/jsx-runtime'
+import {i18n, MessageDescriptor} from '@lingui/core'
+import {msg} from '@lingui/macro'
import {
BottomTabBarProps,
createBottomTabNavigator,
} from '@react-navigation/bottom-tabs'
import {
- HomeTabNavigatorParams,
- SearchTabNavigatorParams,
+ CommonActions,
+ createNavigationContainerRef,
+ DarkTheme,
+ DefaultTheme,
+ NavigationContainer,
+ StackActions,
+} from '@react-navigation/native'
+
+import {timeout} from 'lib/async/timeout'
+import {useColorSchemeStyle} from 'lib/hooks/useColorSchemeStyle'
+import {usePalette} from 'lib/hooks/usePalette'
+import {buildStateObject} from 'lib/routes/helpers'
+import {
+ AllNavigatorParams,
+ BottomTabNavigatorParams,
FeedsTabNavigatorParams,
- NotificationsTabNavigatorParams,
FlatNavigatorParams,
- AllNavigatorParams,
+ HomeTabNavigatorParams,
MyProfileTabNavigatorParams,
- BottomTabNavigatorParams,
+ NotificationsTabNavigatorParams,
+ SearchTabNavigatorParams,
} from 'lib/routes/types'
-import {BottomBar} from './view/shell/bottom-bar/BottomBar'
-import {buildStateObject} from 'lib/routes/helpers'
-import {State, RouteParams} from 'lib/routes/types'
+import {RouteParams, State} from 'lib/routes/types'
+import {bskyTitle} from 'lib/strings/headings'
import {isAndroid, isNative} from 'platform/detection'
-import {useColorSchemeStyle} from 'lib/hooks/useColorSchemeStyle'
+import {PreferencesExternalEmbeds} from '#/view/screens/PreferencesExternalEmbeds'
+import {AppPasswords} from 'view/screens/AppPasswords'
+import {ModerationBlockedAccounts} from 'view/screens/ModerationBlockedAccounts'
+import {ModerationMutedAccounts} from 'view/screens/ModerationMutedAccounts'
+import {PreferencesFollowingFeed} from 'view/screens/PreferencesFollowingFeed'
+import {PreferencesThreads} from 'view/screens/PreferencesThreads'
+import {SavedFeeds} from 'view/screens/SavedFeeds'
+import HashtagScreen from '#/screens/Hashtag'
+import {ModerationScreen} from '#/screens/Moderation'
+import {ProfileLabelerLikedByScreen} from '#/screens/Profile/ProfileLabelerLikedBy'
+import {init as initAnalytics} from './lib/analytics/analytics'
+import {useWebScrollRestoration} from './lib/hooks/useWebScrollRestoration'
+import {attachRouteToLogEvents, logEvent} from './lib/statsig/statsig'
import {router} from './routes'
-import {usePalette} from 'lib/hooks/usePalette'
-import {bskyTitle} from 'lib/strings/headings'
-import {JSX} from 'react/jsx-runtime'
-import {timeout} from 'lib/async/timeout'
+import {useModalControls} from './state/modals'
import {useUnreadNotifications} from './state/queries/notifications/unread'
import {useSession} from './state/session'
-import {useModalControls} from './state/modals'
import {
- shouldRequestEmailConfirmation,
setEmailConfirmationRequested,
+ shouldRequestEmailConfirmation,
} from './state/shell/reminders'
-import {init as initAnalytics} from './lib/analytics/analytics'
-import {useWebScrollRestoration} from './lib/hooks/useWebScrollRestoration'
-
-import {HomeScreen} from './view/screens/Home'
-import {SearchScreen} from './view/screens/Search'
+import {CommunityGuidelinesScreen} from './view/screens/CommunityGuidelines'
+import {CopyrightPolicyScreen} from './view/screens/CopyrightPolicy'
+import {DebugModScreen} from './view/screens/DebugMod'
import {FeedsScreen} from './view/screens/Feeds'
-import {NotificationsScreen} from './view/screens/Notifications'
+import {HomeScreen} from './view/screens/Home'
+import {LanguageSettingsScreen} from './view/screens/LanguageSettings'
import {ListsScreen} from './view/screens/Lists'
-import {ModerationScreen} from './view/screens/Moderation'
+import {LogScreen} from './view/screens/Log'
import {ModerationModlistsScreen} from './view/screens/ModerationModlists'
import {NotFoundScreen} from './view/screens/NotFound'
-import {SettingsScreen} from './view/screens/Settings'
-import {LanguageSettingsScreen} from './view/screens/LanguageSettings'
+import {NotificationsScreen} from './view/screens/Notifications'
+import {PostLikedByScreen} from './view/screens/PostLikedBy'
+import {PostRepostedByScreen} from './view/screens/PostRepostedBy'
+import {PostThreadScreen} from './view/screens/PostThread'
+import {PrivacyPolicyScreen} from './view/screens/PrivacyPolicy'
import {ProfileScreen} from './view/screens/Profile'
-import {ProfileFollowersScreen} from './view/screens/ProfileFollowers'
-import {ProfileFollowsScreen} from './view/screens/ProfileFollows'
import {ProfileFeedScreen} from './view/screens/ProfileFeed'
import {ProfileFeedLikedByScreen} from './view/screens/ProfileFeedLikedBy'
+import {ProfileFollowersScreen} from './view/screens/ProfileFollowers'
+import {ProfileFollowsScreen} from './view/screens/ProfileFollows'
import {ProfileListScreen} from './view/screens/ProfileList'
-import {PostThreadScreen} from './view/screens/PostThread'
-import {PostLikedByScreen} from './view/screens/PostLikedBy'
-import {PostRepostedByScreen} from './view/screens/PostRepostedBy'
+import {SearchScreen} from './view/screens/Search'
+import {SettingsScreen} from './view/screens/Settings'
import {Storybook} from './view/screens/Storybook'
-import {LogScreen} from './view/screens/Log'
import {SupportScreen} from './view/screens/Support'
-import {PrivacyPolicyScreen} from './view/screens/PrivacyPolicy'
import {TermsOfServiceScreen} from './view/screens/TermsOfService'
-import {CommunityGuidelinesScreen} from './view/screens/CommunityGuidelines'
-import {CopyrightPolicyScreen} from './view/screens/CopyrightPolicy'
-import {AppPasswords} from 'view/screens/AppPasswords'
-import {ModerationMutedAccounts} from 'view/screens/ModerationMutedAccounts'
-import {ModerationBlockedAccounts} from 'view/screens/ModerationBlockedAccounts'
-import {SavedFeeds} from 'view/screens/SavedFeeds'
-import {PreferencesHomeFeed} from 'view/screens/PreferencesHomeFeed'
-import {PreferencesThreads} from 'view/screens/PreferencesThreads'
-import {PreferencesExternalEmbeds} from '#/view/screens/PreferencesExternalEmbeds'
+import {BottomBar} from './view/shell/bottom-bar/BottomBar'
import {createNativeStackNavigatorWithAuth} from './view/shell/createNativeStackNavigatorWithAuth'
-import {msg} from '@lingui/macro'
-import {i18n, MessageDescriptor} from '@lingui/core'
const navigationRef = createNavigationContainerRef()
@@ -196,11 +200,21 @@ function commonScreens(Stack: typeof HomeTab, unreadCountLabel?: string) {
getComponent={() => ProfileFeedLikedByScreen}
options={{title: title(msg`Liked by`)}}
/>
+ ProfileLabelerLikedByScreen}
+ options={{title: title(msg`Liked by`)}}
+ />
Storybook}
options={{title: title(msg`Storybook`), requireAuth: true}}
/>
+ DebugModScreen}
+ options={{title: title(msg`Moderation states`), requireAuth: true}}
+ />
LogScreen}
@@ -242,9 +256,12 @@ function commonScreens(Stack: typeof HomeTab, unreadCountLabel?: string) {
options={{title: title(msg`Edit My Feeds`), requireAuth: true}}
/>
PreferencesHomeFeed}
- options={{title: title(msg`Home Feed Preferences`), requireAuth: true}}
+ name="PreferencesFollowingFeed"
+ getComponent={() => PreferencesFollowingFeed}
+ options={{
+ title: title(msg`Following Feed Preferences`),
+ requireAuth: true,
+ }}
/>
+ HashtagScreen}
+ options={{title: title(msg`Hashtag`)}}
+ />
>
)
}
@@ -457,7 +479,8 @@ const FlatNavigator = () => {
*/
const LINKING = {
- prefixes: ['bsky://', 'https://bsky.app'],
+ // TODO figure out what we are going to use
+ prefixes: ['bsky://', 'bluesky://', 'https://bsky.app'],
getPathFromState(state: State) {
// find the current node in the navigation tree
@@ -476,6 +499,18 @@ const LINKING = {
getStateFromPath(path: string) {
const [name, params] = router.matchPath(path)
+
+ // Any time we receive a url that starts with `intent/` we want to ignore it here. It will be handled in the
+ // intent handler hook. We should check for the trailing slash, because if there isn't one then it isn't a valid
+ // intent
+ // On web, there is no route state that's created by default, so we should initialize it as the home route. On
+ // native, since the home tab and the home screen are defined as initial routes, we don't need to return a state
+ // since it will be created by react-navigation.
+ if (path.includes('intent/')) {
+ if (isNative) return
+ return buildStateObject('Flat', 'Home', params)
+ }
+
if (isNative) {
if (name === 'Search') {
return buildStateObject('SearchTab', 'Search', params)
@@ -494,7 +529,8 @@ const LINKING = {
},
])
} else {
- return buildStateObject('Flat', name, params)
+ const res = buildStateObject('Flat', name, params)
+ return res
}
},
}
@@ -503,8 +539,10 @@ function RoutesContainer({children}: React.PropsWithChildren<{}>) {
const theme = useColorSchemeStyle(DefaultTheme, DarkTheme)
const {currentAccount} = useSession()
const {openModal} = useModalControls()
+ const prevLoggedRouteName = React.useRef(undefined)
function onReady() {
+ prevLoggedRouteName.current = getCurrentRouteName()
initAnalytics(currentAccount)
if (currentAccount && shouldRequestEmailConfirmation(currentAccount)) {
@@ -518,15 +556,31 @@ function RoutesContainer({children}: React.PropsWithChildren<{}>) {
ref={navigationRef}
linking={LINKING}
theme={theme}
+ onStateChange={() => {
+ logEvent('router:navigate', {
+ from: prevLoggedRouteName.current,
+ })
+ prevLoggedRouteName.current = getCurrentRouteName()
+ }}
onReady={() => {
+ attachRouteToLogEvents(getCurrentRouteName)
logModuleInitTime()
onReady()
+ logEvent('router:navigate', {})
}}>
{children}
)
}
+function getCurrentRouteName() {
+ if (navigationRef.isReady()) {
+ return navigationRef.getCurrentRoute()?.name
+ } else {
+ return undefined
+ }
+}
+
/**
* These helpers can be used from outside of the RoutesContainer
* (eg in the state models).
@@ -626,11 +680,16 @@ function logModuleInitTime() {
return
}
didInit = true
+
const initMs = Math.round(
// @ts-ignore Emitted by Metro in the bundle prelude
performance.now() - global.__BUNDLE_START_TIME__,
)
console.log(`Time to first paint: ${initMs} ms`)
+ logEvent('init', {
+ initMs,
+ })
+
if (__DEV__) {
// This log is noisy, so keep false committed
const shouldLog = false
@@ -643,11 +702,11 @@ function logModuleInitTime() {
}
export {
+ FlatNavigator,
+ handleLink,
navigate,
- resetToTab,
reset,
- handleLink,
- TabsNavigator,
- FlatNavigator,
+ resetToTab,
RoutesContainer,
+ TabsNavigator,
}
diff --git a/src/Splash.tsx b/src/Splash.tsx
index 80d0a66e75..8acf75875f 100644
--- a/src/Splash.tsx
+++ b/src/Splash.tsx
@@ -1,29 +1,27 @@
import React, {useCallback, useEffect} from 'react'
import {
- View,
- StyleSheet,
- Image as RNImage,
AccessibilityInfo,
+ Image as RNImage,
+ StyleSheet,
useColorScheme,
+ View,
} from 'react-native'
-import * as SplashScreen from 'expo-splash-screen'
-import {Image} from 'expo-image'
import Animated, {
+ Easing,
interpolate,
runOnJS,
useAnimatedStyle,
useSharedValue,
withTiming,
- Easing,
} from 'react-native-reanimated'
-import MaskedView from '@react-native-masked-view/masked-view'
import {useSafeAreaInsets} from 'react-native-safe-area-context'
import Svg, {Path, SvgProps} from 'react-native-svg'
+import {Image} from 'expo-image'
+import * as SplashScreen from 'expo-splash-screen'
+import MaskedView from '@react-native-masked-view/masked-view'
import {isAndroid} from '#/platform/detection'
-import {useThemePrefs} from 'state/shell'
import {Logotype} from '#/view/icons/Logotype'
-
// @ts-ignore
import splashImagePointer from '../assets/splash.png'
// @ts-ignore
@@ -75,10 +73,8 @@ export function Splash(props: React.PropsWithChildren) {
isLayoutReady &&
reduceMotion !== undefined
- const {colorMode} = useThemePrefs()
const colorScheme = useColorScheme()
- const themeName = colorMode === 'system' ? colorScheme : colorMode
- const isDarkMode = themeName === 'dark'
+ const isDarkMode = colorScheme === 'dark'
const logoAnimation = useAnimatedStyle(() => {
return {
@@ -184,6 +180,8 @@ export function Splash(props: React.PropsWithChildren) {
const logoAnimations =
reduceMotion === true ? reducedLogoAnimation : logoAnimation
+ // special off-spec color for dark mode
+ const logoBg = isDarkMode ? '#0F1824' : '#fff'
return (
@@ -235,7 +233,7 @@ export function Splash(props: React.PropsWithChildren) {
},
]}>
@@ -256,14 +254,16 @@ export function Splash(props: React.PropsWithChildren) {
transform: [{translateY: -(insets.top / 2)}, {scale: 0.1}], // scale from 1000px to 100px
},
]}>
-
+
}>
{!isAnimationComplete && (
)}
diff --git a/src/alf/atoms.ts b/src/alf/atoms.ts
index bbf7e32431..45ab72ca61 100644
--- a/src/alf/atoms.ts
+++ b/src/alf/atoms.ts
@@ -1,11 +1,14 @@
+import {Platform} from 'react-native'
+
import * as tokens from '#/alf/tokens'
+import {native, web} from '#/alf/util/platform'
export const atoms = {
/*
* Positioning
*/
fixed: {
- position: 'fixed',
+ position: Platform.select({web: 'fixed', native: 'absolute'}) as 'absolute',
},
absolute: {
position: 'absolute',
@@ -48,6 +51,9 @@ export const atoms = {
h_full: {
height: '100%',
},
+ h_full_vh: web({
+ height: '100vh',
+ }),
/*
* Border radius
@@ -110,9 +116,18 @@ export const atoms = {
flex_row: {
flexDirection: 'row',
},
+ flex_col_reverse: {
+ flexDirection: 'column-reverse',
+ },
+ flex_row_reverse: {
+ flexDirection: 'row-reverse',
+ },
flex_wrap: {
flexWrap: 'wrap',
},
+ flex_0: {
+ flex: web('0 0 auto') || (native(0) as number),
+ },
flex_1: {
flex: 1,
},
@@ -122,6 +137,9 @@ export const atoms = {
flex_shrink: {
flexShrink: 1,
},
+ justify_start: {
+ justifyContent: 'flex-start',
+ },
justify_center: {
justifyContent: 'center',
},
@@ -140,10 +158,37 @@ export const atoms = {
align_end: {
alignItems: 'flex-end',
},
+ align_baseline: {
+ alignItems: 'baseline',
+ },
+ align_stretch: {
+ alignItems: 'stretch',
+ },
+ self_auto: {
+ alignSelf: 'auto',
+ },
+ self_start: {
+ alignSelf: 'flex-start',
+ },
+ self_end: {
+ alignSelf: 'flex-end',
+ },
+ self_center: {
+ alignSelf: 'center',
+ },
+ self_stretch: {
+ alignSelf: 'stretch',
+ },
+ self_baseline: {
+ alignSelf: 'baseline',
+ },
/*
* Text
*/
+ text_left: {
+ textAlign: 'left',
+ },
text_center: {
textAlign: 'center',
},
@@ -152,53 +197,78 @@ export const atoms = {
},
text_2xs: {
fontSize: tokens.fontSize._2xs,
+ letterSpacing: 0.25,
},
text_xs: {
fontSize: tokens.fontSize.xs,
+ letterSpacing: 0.25,
},
text_sm: {
fontSize: tokens.fontSize.sm,
+ letterSpacing: 0.25,
},
text_md: {
fontSize: tokens.fontSize.md,
+ letterSpacing: 0.25,
},
text_lg: {
fontSize: tokens.fontSize.lg,
+ letterSpacing: 0.25,
},
text_xl: {
fontSize: tokens.fontSize.xl,
+ letterSpacing: 0.25,
},
text_2xl: {
fontSize: tokens.fontSize._2xl,
+ letterSpacing: 0.25,
},
text_3xl: {
fontSize: tokens.fontSize._3xl,
+ letterSpacing: 0.25,
},
text_4xl: {
fontSize: tokens.fontSize._4xl,
+ letterSpacing: 0.25,
},
text_5xl: {
fontSize: tokens.fontSize._5xl,
+ letterSpacing: 0.25,
},
leading_tight: {
lineHeight: 1.15,
},
leading_snug: {
- lineHeight: 1.25,
+ lineHeight: 1.3,
},
leading_normal: {
lineHeight: 1.5,
},
+ tracking_normal: {
+ letterSpacing: 0,
+ },
+ tracking_wide: {
+ letterSpacing: 0.25,
+ },
font_normal: {
fontWeight: tokens.fontWeight.normal,
},
- font_bold: {
+ font_semibold: {
fontWeight: tokens.fontWeight.semibold,
},
+ font_bold: {
+ fontWeight: tokens.fontWeight.bold,
+ },
+ italic: {
+ fontStyle: 'italic',
+ },
/*
* Border
*/
+ border_0: {
+ borderWidth: 0,
+ },
border: {
borderWidth: 1,
},
@@ -208,6 +278,12 @@ export const atoms = {
border_b: {
borderBottomWidth: 1,
},
+ border_l: {
+ borderLeftWidth: 1,
+ },
+ border_r: {
+ borderRightWidth: 1,
+ },
/*
* Shadow
@@ -231,6 +307,9 @@ export const atoms = {
/*
* Padding
*/
+ p_0: {
+ padding: 0,
+ },
p_2xs: {
padding: tokens.space._2xs,
},
@@ -261,6 +340,10 @@ export const atoms = {
p_5xl: {
padding: tokens.space._5xl,
},
+ px_0: {
+ paddingLeft: 0,
+ paddingRight: 0,
+ },
px_2xs: {
paddingLeft: tokens.space._2xs,
paddingRight: tokens.space._2xs,
@@ -301,6 +384,10 @@ export const atoms = {
paddingLeft: tokens.space._5xl,
paddingRight: tokens.space._5xl,
},
+ py_0: {
+ paddingTop: 0,
+ paddingBottom: 0,
+ },
py_2xs: {
paddingTop: tokens.space._2xs,
paddingBottom: tokens.space._2xs,
@@ -341,6 +428,9 @@ export const atoms = {
paddingTop: tokens.space._5xl,
paddingBottom: tokens.space._5xl,
},
+ pt_0: {
+ paddingTop: 0,
+ },
pt_2xs: {
paddingTop: tokens.space._2xs,
},
@@ -371,6 +461,9 @@ export const atoms = {
pt_5xl: {
paddingTop: tokens.space._5xl,
},
+ pb_0: {
+ paddingBottom: 0,
+ },
pb_2xs: {
paddingBottom: tokens.space._2xs,
},
@@ -401,6 +494,9 @@ export const atoms = {
pb_5xl: {
paddingBottom: tokens.space._5xl,
},
+ pl_0: {
+ paddingLeft: 0,
+ },
pl_2xs: {
paddingLeft: tokens.space._2xs,
},
@@ -431,6 +527,9 @@ export const atoms = {
pl_5xl: {
paddingLeft: tokens.space._5xl,
},
+ pr_0: {
+ paddingRight: 0,
+ },
pr_2xs: {
paddingRight: tokens.space._2xs,
},
@@ -465,6 +564,9 @@ export const atoms = {
/*
* Margin
*/
+ m_0: {
+ margin: 0,
+ },
m_2xs: {
margin: tokens.space._2xs,
},
@@ -495,6 +597,13 @@ export const atoms = {
m_5xl: {
margin: tokens.space._5xl,
},
+ m_auto: {
+ margin: 'auto',
+ },
+ mx_0: {
+ marginLeft: 0,
+ marginRight: 0,
+ },
mx_2xs: {
marginLeft: tokens.space._2xs,
marginRight: tokens.space._2xs,
@@ -535,6 +644,14 @@ export const atoms = {
marginLeft: tokens.space._5xl,
marginRight: tokens.space._5xl,
},
+ mx_auto: {
+ marginLeft: 'auto',
+ marginRight: 'auto',
+ },
+ my_0: {
+ marginTop: 0,
+ marginBottom: 0,
+ },
my_2xs: {
marginTop: tokens.space._2xs,
marginBottom: tokens.space._2xs,
@@ -575,6 +692,13 @@ export const atoms = {
marginTop: tokens.space._5xl,
marginBottom: tokens.space._5xl,
},
+ my_auto: {
+ marginTop: 'auto',
+ marginBottom: 'auto',
+ },
+ mt_0: {
+ marginTop: 0,
+ },
mt_2xs: {
marginTop: tokens.space._2xs,
},
@@ -605,6 +729,12 @@ export const atoms = {
mt_5xl: {
marginTop: tokens.space._5xl,
},
+ mt_auto: {
+ marginTop: 'auto',
+ },
+ mb_0: {
+ marginBottom: 0,
+ },
mb_2xs: {
marginBottom: tokens.space._2xs,
},
@@ -635,6 +765,12 @@ export const atoms = {
mb_5xl: {
marginBottom: tokens.space._5xl,
},
+ mb_auto: {
+ marginBottom: 'auto',
+ },
+ ml_0: {
+ marginLeft: 0,
+ },
ml_2xs: {
marginLeft: tokens.space._2xs,
},
@@ -665,6 +801,12 @@ export const atoms = {
ml_5xl: {
marginLeft: tokens.space._5xl,
},
+ ml_auto: {
+ marginLeft: 'auto',
+ },
+ mr_0: {
+ marginRight: 0,
+ },
mr_2xs: {
marginRight: tokens.space._2xs,
},
@@ -695,4 +837,7 @@ export const atoms = {
mr_5xl: {
marginRight: tokens.space._5xl,
},
+ mr_auto: {
+ marginRight: 'auto',
+ },
} as const
diff --git a/src/alf/index.tsx b/src/alf/index.tsx
index 06d6ebf01c..13aa65a187 100644
--- a/src/alf/index.tsx
+++ b/src/alf/index.tsx
@@ -1,12 +1,13 @@
import React from 'react'
import {Dimensions} from 'react-native'
+
import * as themes from '#/alf/themes'
-export * from '#/alf/types'
-export * as tokens from '#/alf/tokens'
export {atoms} from '#/alf/atoms'
-export * from '#/alf/util/platform'
+export * as tokens from '#/alf/tokens'
+export * from '#/alf/types'
export * from '#/alf/util/flatten'
+export * from '#/alf/util/platform'
type BreakpointName = keyof typeof breakpoints
@@ -16,8 +17,9 @@ type BreakpointName = keyof typeof breakpoints
const breakpoints: {
[key: string]: number
} = {
+ gtPhone: 500,
gtMobile: 800,
- gtTablet: 1200,
+ gtTablet: 1300,
}
function getActiveBreakpoints({width}: {width: number}) {
const active: (keyof typeof breakpoints)[] = Object.keys(breakpoints).filter(
@@ -26,6 +28,7 @@ function getActiveBreakpoints({width}: {width: number}) {
return {
active: active[active.length - 1],
+ gtPhone: active.includes('gtPhone'),
gtMobile: active.includes('gtMobile'),
gtTablet: active.includes('gtTablet'),
}
@@ -39,6 +42,7 @@ export const Context = React.createContext<{
theme: themes.Theme
breakpoints: {
active: BreakpointName | undefined
+ gtPhone: boolean
gtMobile: boolean
gtTablet: boolean
}
@@ -47,6 +51,7 @@ export const Context = React.createContext<{
theme: themes.light,
breakpoints: {
active: undefined,
+ gtPhone: false,
gtMobile: false,
gtTablet: false,
},
diff --git a/src/alf/themes.ts b/src/alf/themes.ts
index 72e08e8941..0cb1cae248 100644
--- a/src/alf/themes.ts
+++ b/src/alf/themes.ts
@@ -1,6 +1,7 @@
+import {atoms} from '#/alf/atoms'
import * as tokens from '#/alf/tokens'
import type {Mutable} from '#/alf/types'
-import {atoms} from '#/alf/atoms'
+import {BLUE_HUE, GREEN_HUE, RED_HUE} from '#/alf/util/colorGeneration'
export type ThemeName = 'light' | 'dim' | 'dark'
export type ReadonlyTheme = typeof light
@@ -132,21 +133,63 @@ export const darkPalette: Palette = {
export const dimPalette: Palette = {
...darkPalette,
- black: tokens.color.gray_1000,
+ black: `hsl(${BLUE_HUE}, 28%, ${tokens.dimScale[0]}%)`,
- contrast_25: tokens.color.gray_975,
- contrast_50: tokens.color.gray_950,
- contrast_100: tokens.color.gray_900,
- contrast_200: tokens.color.gray_800,
- contrast_300: tokens.color.gray_700,
- contrast_400: tokens.color.gray_600,
- contrast_500: tokens.color.gray_500,
- contrast_600: tokens.color.gray_400,
- contrast_700: tokens.color.gray_300,
- contrast_800: tokens.color.gray_200,
- contrast_900: tokens.color.gray_100,
- contrast_950: tokens.color.gray_50,
- contrast_975: tokens.color.gray_25,
+ contrast_25: `hsl(${BLUE_HUE}, 28%, ${tokens.dimScale[1]}%)`,
+ contrast_50: `hsl(${BLUE_HUE}, 28%, ${tokens.dimScale[2]}%)`,
+ contrast_100: `hsl(${BLUE_HUE}, 28%, ${tokens.dimScale[3]}%)`,
+ contrast_200: `hsl(${BLUE_HUE}, 28%, ${tokens.dimScale[4]}%)`,
+ contrast_300: `hsl(${BLUE_HUE}, 24%, ${tokens.dimScale[5]}%)`,
+ contrast_400: `hsl(${BLUE_HUE}, 24%, ${tokens.dimScale[6]}%)`,
+ contrast_500: `hsl(${BLUE_HUE}, 20%, ${tokens.dimScale[7]}%)`,
+ contrast_600: `hsl(${BLUE_HUE}, 20%, ${tokens.dimScale[8]}%)`,
+ contrast_700: `hsl(${BLUE_HUE}, 20%, ${tokens.dimScale[9]}%)`,
+ contrast_800: `hsl(${BLUE_HUE}, 20%, ${tokens.dimScale[10]}%)`,
+ contrast_900: `hsl(${BLUE_HUE}, 20%, ${tokens.dimScale[11]}%)`,
+ contrast_950: `hsl(${BLUE_HUE}, 20%, ${tokens.dimScale[12]}%)`,
+ contrast_975: `hsl(${BLUE_HUE}, 20%, ${tokens.dimScale[13]}%)`,
+
+ primary_25: `hsl(${BLUE_HUE}, 99%, ${tokens.dimScale[13]}%)`,
+ primary_50: `hsl(${BLUE_HUE}, 99%, ${tokens.dimScale[12]}%)`,
+ primary_100: `hsl(${BLUE_HUE}, 99%, ${tokens.dimScale[11]}%)`,
+ primary_200: `hsl(${BLUE_HUE}, 99%, ${tokens.dimScale[10]}%)`,
+ primary_300: `hsl(${BLUE_HUE}, 99%, ${tokens.dimScale[9]}%)`,
+ primary_400: `hsl(${BLUE_HUE}, 99%, ${tokens.dimScale[8]}%)`,
+ primary_500: `hsl(${BLUE_HUE}, 99%, ${tokens.dimScale[7]}%)`,
+ primary_600: `hsl(${BLUE_HUE}, 95%, ${tokens.dimScale[6]}%)`,
+ primary_700: `hsl(${BLUE_HUE}, 90%, ${tokens.dimScale[5]}%)`,
+ primary_800: `hsl(${BLUE_HUE}, 82%, ${tokens.dimScale[4]}%)`,
+ primary_900: `hsl(${BLUE_HUE}, 70%, ${tokens.dimScale[3]}%)`,
+ primary_950: `hsl(${BLUE_HUE}, 60%, ${tokens.dimScale[2]}%)`,
+ primary_975: `hsl(${BLUE_HUE}, 50%, ${tokens.dimScale[1]}%)`,
+
+ positive_25: `hsl(${GREEN_HUE}, 82%, ${tokens.dimScale[13]}%)`,
+ positive_50: `hsl(${GREEN_HUE}, 82%, ${tokens.dimScale[12]}%)`,
+ positive_100: `hsl(${GREEN_HUE}, 82%, ${tokens.dimScale[11]}%)`,
+ positive_200: `hsl(${GREEN_HUE}, 82%, ${tokens.dimScale[10]}%)`,
+ positive_300: `hsl(${GREEN_HUE}, 82%, ${tokens.dimScale[9]}%)`,
+ positive_400: `hsl(${GREEN_HUE}, 82%, ${tokens.dimScale[8]}%)`,
+ positive_500: `hsl(${GREEN_HUE}, 82%, ${tokens.dimScale[7]}%)`,
+ positive_600: `hsl(${GREEN_HUE}, 82%, ${tokens.dimScale[6]}%)`,
+ positive_700: `hsl(${GREEN_HUE}, 82%, ${tokens.dimScale[5]}%)`,
+ positive_800: `hsl(${GREEN_HUE}, 82%, ${tokens.dimScale[4]}%)`,
+ positive_900: `hsl(${GREEN_HUE}, 70%, ${tokens.dimScale[3]}%)`,
+ positive_950: `hsl(${GREEN_HUE}, 60%, ${tokens.dimScale[2]}%)`,
+ positive_975: `hsl(${GREEN_HUE}, 50%, ${tokens.dimScale[1]}%)`,
+
+ negative_25: `hsl(${RED_HUE}, 91%, ${tokens.dimScale[13]}%)`,
+ negative_50: `hsl(${RED_HUE}, 91%, ${tokens.dimScale[12]}%)`,
+ negative_100: `hsl(${RED_HUE}, 91%, ${tokens.dimScale[11]}%)`,
+ negative_200: `hsl(${RED_HUE}, 91%, ${tokens.dimScale[10]}%)`,
+ negative_300: `hsl(${RED_HUE}, 91%, ${tokens.dimScale[9]}%)`,
+ negative_400: `hsl(${RED_HUE}, 91%, ${tokens.dimScale[8]}%)`,
+ negative_500: `hsl(${RED_HUE}, 91%, ${tokens.dimScale[7]}%)`,
+ negative_600: `hsl(${RED_HUE}, 91%, ${tokens.dimScale[6]}%)`,
+ negative_700: `hsl(${RED_HUE}, 91%, ${tokens.dimScale[5]}%)`,
+ negative_800: `hsl(${RED_HUE}, 88%, ${tokens.dimScale[4]}%)`,
+ negative_900: `hsl(${RED_HUE}, 84%, ${tokens.dimScale[3]}%)`,
+ negative_950: `hsl(${RED_HUE}, 80%, ${tokens.dimScale[2]}%)`,
+ negative_975: `hsl(${RED_HUE}, 70%, ${tokens.dimScale[1]}%)`,
} as const
export const light = {
@@ -325,6 +368,7 @@ export const dark: Theme = {
export const dim: Theme = {
...dark,
name: 'dim',
+ palette: dimPalette,
atoms: {
...dark.atoms,
text: {
@@ -393,5 +437,20 @@ export const dim: Theme = {
border_contrast_high: {
borderColor: dimPalette.contrast_300,
},
+ shadow_sm: {
+ ...atoms.shadow_sm,
+ shadowOpacity: 0.7,
+ shadowColor: `hsl(${BLUE_HUE}, 28%, 6%)`,
+ },
+ shadow_md: {
+ ...atoms.shadow_md,
+ shadowOpacity: 0.7,
+ shadowColor: `hsl(${BLUE_HUE}, 28%, 6%)`,
+ },
+ shadow_lg: {
+ ...atoms.shadow_lg,
+ shadowOpacity: 0.7,
+ shadowColor: `hsl(${BLUE_HUE}, 28%, 6%)`,
+ },
},
}
diff --git a/src/alf/tokens.ts b/src/alf/tokens.ts
index f0b8c7c692..1bddd95d43 100644
--- a/src/alf/tokens.ts
+++ b/src/alf/tokens.ts
@@ -1,25 +1,35 @@
-const BLUE_HUE = 211
-const RED_HUE = 346
-const GREEN_HUE = 152
+import {
+ BLUE_HUE,
+ generateScale,
+ GREEN_HUE,
+ RED_HUE,
+} from '#/alf/util/colorGeneration'
+
+export const scale = generateScale(6, 100)
+// dim shifted 6% lighter
+export const dimScale = generateScale(12, 100)
export const color = {
trueBlack: '#000000',
- gray_0: `hsl(${BLUE_HUE}, 20%, 100%)`,
- gray_25: `hsl(${BLUE_HUE}, 20%, 97%)`,
- gray_50: `hsl(${BLUE_HUE}, 20%, 95%)`,
- gray_100: `hsl(${BLUE_HUE}, 20%, 90%)`,
- gray_200: `hsl(${BLUE_HUE}, 20%, 80%)`,
- gray_300: `hsl(${BLUE_HUE}, 20%, 70%)`,
- gray_400: `hsl(${BLUE_HUE}, 20%, 60%)`,
- gray_500: `hsl(${BLUE_HUE}, 20%, 50%)`,
- gray_600: `hsl(${BLUE_HUE}, 24%, 42%)`,
- gray_700: `hsl(${BLUE_HUE}, 24%, 34%)`,
- gray_800: `hsl(${BLUE_HUE}, 28%, 26%)`,
- gray_900: `hsl(${BLUE_HUE}, 28%, 18%)`,
- gray_950: `hsl(${BLUE_HUE}, 28%, 10%)`,
- gray_975: `hsl(${BLUE_HUE}, 28%, 7%)`,
- gray_1000: `hsl(${BLUE_HUE}, 28%, 4%)`,
+ temp_purple: 'rgb(105 0 255)',
+ temp_purple_dark: 'rgb(83 0 202)',
+
+ gray_0: `hsl(${BLUE_HUE}, 20%, ${scale[14]}%)`,
+ gray_25: `hsl(${BLUE_HUE}, 20%, ${scale[13]}%)`,
+ gray_50: `hsl(${BLUE_HUE}, 20%, ${scale[12]}%)`,
+ gray_100: `hsl(${BLUE_HUE}, 20%, ${scale[11]}%)`,
+ gray_200: `hsl(${BLUE_HUE}, 20%, ${scale[10]}%)`,
+ gray_300: `hsl(${BLUE_HUE}, 20%, ${scale[9]}%)`,
+ gray_400: `hsl(${BLUE_HUE}, 20%, ${scale[8]}%)`,
+ gray_500: `hsl(${BLUE_HUE}, 20%, ${scale[7]}%)`,
+ gray_600: `hsl(${BLUE_HUE}, 24%, ${scale[6]}%)`,
+ gray_700: `hsl(${BLUE_HUE}, 24%, ${scale[5]}%)`,
+ gray_800: `hsl(${BLUE_HUE}, 28%, ${scale[4]}%)`,
+ gray_900: `hsl(${BLUE_HUE}, 28%, ${scale[3]}%)`,
+ gray_950: `hsl(${BLUE_HUE}, 28%, ${scale[2]}%)`,
+ gray_975: `hsl(${BLUE_HUE}, 28%, ${scale[1]}%)`,
+ gray_1000: `hsl(${BLUE_HUE}, 28%, ${scale[0]}%)`,
blue_25: `hsl(${BLUE_HUE}, 99%, 97%)`,
blue_50: `hsl(${BLUE_HUE}, 99%, 95%)`,
@@ -106,8 +116,8 @@ export const borderRadius = {
export const fontWeight = {
normal: '400',
- semibold: '600',
- bold: '900',
+ semibold: '500',
+ bold: '600',
} as const
export const gradients = {
diff --git a/src/alf/util/colorGeneration.ts b/src/alf/util/colorGeneration.ts
new file mode 100644
index 0000000000..929a01d3a7
--- /dev/null
+++ b/src/alf/util/colorGeneration.ts
@@ -0,0 +1,17 @@
+export const BLUE_HUE = 211
+export const RED_HUE = 346
+export const GREEN_HUE = 152
+
+/**
+ * Smooth progression of lightness "stops" for generating HSL colors.
+ */
+export const COLOR_STOPS = [
+ 0, 0.05, 0.1, 0.15, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.85, 0.9, 0.95, 1,
+]
+
+export function generateScale(start: number, end: number) {
+ const range = end - start
+ return COLOR_STOPS.map(stop => {
+ return start + range * stop
+ })
+}
diff --git a/src/alf/util/platform.ts b/src/alf/util/platform.ts
index 544f5480b6..294e08a8b0 100644
--- a/src/alf/util/platform.ts
+++ b/src/alf/util/platform.ts
@@ -1,25 +1,25 @@
-import {Platform} from 'react-native'
+import {isAndroid, isIOS, isNative, isWeb} from 'platform/detection'
export function web(value: any) {
- return Platform.select({
- web: value,
- })
+ if (isWeb) {
+ return value
+ }
}
export function ios(value: any) {
- return Platform.select({
- ios: value,
- })
+ if (isIOS) {
+ return value
+ }
}
export function android(value: any) {
- return Platform.select({
- android: value,
- })
+ if (isAndroid) {
+ return value
+ }
}
export function native(value: any) {
- return Platform.select({
- native: value,
- })
+ if (isNative) {
+ return value
+ }
}
diff --git a/src/alf/util/useColorModeTheme.ts b/src/alf/util/useColorModeTheme.ts
index 48cf904fe1..301c993dd4 100644
--- a/src/alf/util/useColorModeTheme.ts
+++ b/src/alf/util/useColorModeTheme.ts
@@ -1,10 +1,10 @@
import React from 'react'
import {ColorSchemeName, useColorScheme} from 'react-native'
+import * as SystemUI from 'expo-system-ui'
-import {useThemePrefs} from 'state/shell'
import {isWeb} from 'platform/detection'
-import {ThemeName, light, dark, dim} from '#/alf/themes'
-import * as SystemUI from 'expo-system-ui'
+import {useThemePrefs} from 'state/shell'
+import {dark, dim, light, ThemeName} from '#/alf/themes'
export function useColorModeTheme(): ThemeName {
const colorScheme = useColorScheme()
@@ -13,7 +13,7 @@ export function useColorModeTheme(): ThemeName {
React.useLayoutEffect(() => {
const theme = getThemeName(colorScheme, colorMode, darkTheme)
updateDocument(theme)
- updateSystemBackground(theme)
+ SystemUI.setBackgroundColorAsync(getBackgroundColor(theme))
}, [colorMode, colorScheme, darkTheme])
return React.useMemo(
@@ -42,23 +42,24 @@ function updateDocument(theme: ThemeName) {
if (isWeb && typeof window !== 'undefined') {
// @ts-ignore web only
const html = window.document.documentElement
+ // @ts-ignore web only
+ const meta = window.document.querySelector('meta[name="theme-color"]')
+
// remove any other color mode classes
html.className = html.className.replace(/(theme)--\w+/g, '')
-
html.classList.add(`theme--${theme}`)
+ // set color to 'theme-color' meta tag
+ meta?.setAttribute('content', getBackgroundColor(theme))
}
}
-function updateSystemBackground(theme: ThemeName) {
+function getBackgroundColor(theme: ThemeName): string {
switch (theme) {
case 'light':
- SystemUI.setBackgroundColorAsync(light.atoms.bg.backgroundColor)
- break
+ return light.atoms.bg.backgroundColor
case 'dark':
- SystemUI.setBackgroundColorAsync(dark.atoms.bg.backgroundColor)
- break
+ return dark.atoms.bg.backgroundColor
case 'dim':
- SystemUI.setBackgroundColorAsync(dim.atoms.bg.backgroundColor)
- break
+ return dim.atoms.bg.backgroundColor
}
}
diff --git a/src/components/AccountList.tsx b/src/components/AccountList.tsx
new file mode 100644
index 0000000000..169e7b84fe
--- /dev/null
+++ b/src/components/AccountList.tsx
@@ -0,0 +1,141 @@
+import React, {useCallback} from 'react'
+import {View} from 'react-native'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {useProfileQuery} from '#/state/queries/profile'
+import {type SessionAccount, useSession} from '#/state/session'
+import {UserAvatar} from '#/view/com/util/UserAvatar'
+import {atoms as a, useTheme} from '#/alf'
+import {Check_Stroke2_Corner0_Rounded as Check} from '#/components/icons/Check'
+import {ChevronRight_Stroke2_Corner0_Rounded as Chevron} from '#/components/icons/Chevron'
+import {Button} from './Button'
+import {Text} from './Typography'
+
+export function AccountList({
+ onSelectAccount,
+ onSelectOther,
+ otherLabel,
+}: {
+ onSelectAccount: (account: SessionAccount) => void
+ onSelectOther: () => void
+ otherLabel?: string
+}) {
+ const {isSwitchingAccounts, currentAccount, accounts} = useSession()
+ const t = useTheme()
+ const {_} = useLingui()
+
+ const onPressAddAccount = useCallback(() => {
+ onSelectOther()
+ }, [onSelectOther])
+
+ return (
+
+ {accounts.map(account => (
+
+
+
+
+ ))}
+
+
+ )
+}
+
+function AccountItem({
+ account,
+ onSelect,
+ isCurrentAccount,
+}: {
+ account: SessionAccount
+ onSelect: (account: SessionAccount) => void
+ isCurrentAccount: boolean
+}) {
+ const t = useTheme()
+ const {_} = useLingui()
+ const {data: profile} = useProfileQuery({did: account.did})
+
+ const onPress = React.useCallback(() => {
+ onSelect(account)
+ }, [account, onSelect])
+
+ return (
+
+ )
+}
diff --git a/src/components/Button.tsx b/src/components/Button.tsx
index 68cee43745..33d777971c 100644
--- a/src/components/Button.tsx
+++ b/src/components/Button.tsx
@@ -1,20 +1,21 @@
import React from 'react'
import {
+ AccessibilityProps,
Pressable,
- Text,
PressableProps,
+ StyleProp,
+ StyleSheet,
+ Text,
TextProps,
- ViewStyle,
- AccessibilityProps,
- View,
TextStyle,
- StyleSheet,
- StyleProp,
+ View,
+ ViewStyle,
} from 'react-native'
-import LinearGradient from 'react-native-linear-gradient'
+import {LinearGradient} from 'expo-linear-gradient'
-import {useTheme, atoms as a, tokens, android, flatten} from '#/alf'
+import {android, atoms as a, flatten, tokens, useTheme} from '#/alf'
import {Props as SVGIconProps} from '#/components/icons/common'
+import {normalizeTextStyles} from '#/components/Typography'
export type ButtonVariant = 'solid' | 'outline' | 'ghost' | 'gradient'
export type ButtonColor =
@@ -27,7 +28,7 @@ export type ButtonColor =
| 'gradient_sunset'
| 'gradient_nordic'
| 'gradient_bonfire'
-export type ButtonSize = 'small' | 'large'
+export type ButtonSize = 'tiny' | 'small' | 'medium' | 'large'
export type ButtonShape = 'round' | 'square' | 'default'
export type VariantProps = {
/**
@@ -48,25 +49,34 @@ export type VariantProps = {
shape?: ButtonShape
}
-export type ButtonProps = React.PropsWithChildren<
- Pick &
- AccessibilityProps &
- VariantProps & {
- testID?: string
- label: string
- style?: StyleProp
- }
->
-export type ButtonTextProps = TextProps & VariantProps & {disabled?: boolean}
+export type ButtonState = {
+ hovered: boolean
+ focused: boolean
+ pressed: boolean
+ disabled: boolean
+}
-const Context = React.createContext<
+export type ButtonContext = VariantProps & ButtonState
+
+type NonTextElements =
+ | React.ReactElement
+ | Iterable
+
+export type ButtonProps = Pick<
+ PressableProps,
+ 'disabled' | 'onPress' | 'testID'
+> &
+ AccessibilityProps &
VariantProps & {
- hovered: boolean
- focused: boolean
- pressed: boolean
- disabled: boolean
+ testID?: string
+ label: string
+ style?: StyleProp
+ children: NonTextElements | ((context: ButtonContext) => NonTextElements)
}
->({
+
+export type ButtonTextProps = TextProps & VariantProps & {disabled?: boolean}
+
+const Context = React.createContext({
hovered: false,
focused: false,
pressed: false,
@@ -132,7 +142,7 @@ export function Button({
}))
}, [setState])
- const {baseStyles, hoverStyles, focusStyles} = React.useMemo(() => {
+ const {baseStyles, hoverStyles} = React.useMemo(() => {
const baseStyles: ViewStyle[] = []
const hoverStyles: ViewStyle[] = []
const light = t.name === 'light'
@@ -158,7 +168,7 @@ export function Button({
if (!disabled) {
baseStyles.push(a.border, {
- borderColor: tokens.color.blue_500,
+ borderColor: t.palette.primary_500,
})
hoverStyles.push(a.border, {
backgroundColor: light
@@ -167,7 +177,7 @@ export function Button({
})
} else {
baseStyles.push(a.border, {
- borderColor: light ? tokens.color.blue_200 : tokens.color.blue_900,
+ borderColor: light ? t.palette.primary_200 : t.palette.primary_900,
})
}
} else if (variant === 'ghost') {
@@ -184,20 +194,14 @@ export function Button({
if (variant === 'solid') {
if (!disabled) {
baseStyles.push({
- backgroundColor: light
- ? tokens.color.gray_50
- : tokens.color.gray_900,
+ backgroundColor: t.palette.contrast_25,
})
hoverStyles.push({
- backgroundColor: light
- ? tokens.color.gray_100
- : tokens.color.gray_950,
+ backgroundColor: t.palette.contrast_50,
})
} else {
baseStyles.push({
- backgroundColor: light
- ? tokens.color.gray_200
- : tokens.color.gray_950,
+ backgroundColor: t.palette.contrast_100,
})
}
} else if (variant === 'outline') {
@@ -207,21 +211,19 @@ export function Button({
if (!disabled) {
baseStyles.push(a.border, {
- borderColor: light ? tokens.color.gray_300 : tokens.color.gray_700,
+ borderColor: t.palette.contrast_300,
})
- hoverStyles.push(a.border, t.atoms.bg_contrast_50)
+ hoverStyles.push(t.atoms.bg_contrast_50)
} else {
baseStyles.push(a.border, {
- borderColor: light ? tokens.color.gray_200 : tokens.color.gray_800,
+ borderColor: t.palette.contrast_200,
})
}
} else if (variant === 'ghost') {
if (!disabled) {
baseStyles.push(t.atoms.bg)
hoverStyles.push({
- backgroundColor: light
- ? tokens.color.gray_100
- : tokens.color.gray_900,
+ backgroundColor: t.palette.contrast_100,
})
}
}
@@ -229,14 +231,14 @@ export function Button({
if (variant === 'solid') {
if (!disabled) {
baseStyles.push({
- backgroundColor: t.palette.negative_400,
+ backgroundColor: t.palette.negative_500,
})
hoverStyles.push({
- backgroundColor: t.palette.negative_500,
+ backgroundColor: t.palette.negative_600,
})
} else {
baseStyles.push({
- backgroundColor: t.palette.negative_600,
+ backgroundColor: t.palette.negative_700,
})
}
} else if (variant === 'outline') {
@@ -246,7 +248,7 @@ export function Button({
if (!disabled) {
baseStyles.push(a.border, {
- borderColor: t.palette.negative_400,
+ borderColor: t.palette.negative_500,
})
hoverStyles.push(a.border, {
backgroundColor: light
@@ -266,7 +268,7 @@ export function Button({
hoverStyles.push({
backgroundColor: light
? t.palette.negative_100
- : t.palette.negative_950,
+ : t.palette.negative_975,
})
}
}
@@ -275,8 +277,12 @@ export function Button({
if (shape === 'default') {
if (size === 'large') {
baseStyles.push({paddingVertical: 15}, a.px_2xl, a.rounded_sm, a.gap_md)
+ } else if (size === 'medium') {
+ baseStyles.push({paddingVertical: 12}, a.px_2xl, a.rounded_sm, a.gap_md)
} else if (size === 'small') {
baseStyles.push({paddingVertical: 9}, a.px_lg, a.rounded_sm, a.gap_sm)
+ } else if (size === 'tiny') {
+ baseStyles.push({paddingVertical: 4}, a.px_sm, a.rounded_xs, a.gap_xs)
}
} else if (shape === 'round' || shape === 'square') {
if (size === 'large') {
@@ -287,24 +293,24 @@ export function Button({
}
} else if (size === 'small') {
baseStyles.push({height: 40, width: 40})
+ } else if (size === 'tiny') {
+ baseStyles.push({height: 20, width: 20})
}
if (shape === 'round') {
baseStyles.push(a.rounded_full)
} else if (shape === 'square') {
- baseStyles.push(a.rounded_sm)
+ if (size === 'tiny') {
+ baseStyles.push(a.rounded_xs)
+ } else {
+ baseStyles.push(a.rounded_sm)
+ }
}
}
return {
baseStyles,
hoverStyles,
- focusStyles: [
- ...hoverStyles,
- {
- outline: 0,
- } as ViewStyle,
- ],
}
}, [t, variant, color, size, shape, disabled])
@@ -338,7 +344,7 @@ export function Button({
}
}, [variant, color])
- const context = React.useMemo(
+ const context = React.useMemo(
() => ({
...state,
variant,
@@ -349,6 +355,8 @@ export function Button({
[state, variant, color, size, disabled],
)
+ const flattenedBaseStyles = flatten(baseStyles)
+
return (
{variant === 'gradient' && (
-
+
+
+
)}
- {typeof children === 'string' ? (
- {children}
- ) : (
- children
- )}
+ {typeof children === 'function' ? children(context) : children}
)
@@ -435,31 +444,31 @@ export function useSharedButtonTextStyles() {
if (variant === 'solid' || variant === 'gradient') {
if (!disabled) {
baseStyles.push({
- color: light ? tokens.color.gray_700 : tokens.color.gray_100,
+ color: t.palette.contrast_700,
})
} else {
baseStyles.push({
- color: light ? tokens.color.gray_400 : tokens.color.gray_700,
+ color: t.palette.contrast_400,
})
}
} else if (variant === 'outline') {
if (!disabled) {
baseStyles.push({
- color: light ? tokens.color.gray_600 : tokens.color.gray_300,
+ color: t.palette.contrast_600,
})
} else {
baseStyles.push({
- color: light ? tokens.color.gray_400 : tokens.color.gray_700,
+ color: t.palette.contrast_300,
})
}
} else if (variant === 'ghost') {
if (!disabled) {
baseStyles.push({
- color: light ? tokens.color.gray_600 : tokens.color.gray_300,
+ color: t.palette.contrast_600,
})
} else {
baseStyles.push({
- color: light ? tokens.color.gray_400 : tokens.color.gray_600,
+ color: t.palette.contrast_300,
})
}
}
@@ -493,6 +502,8 @@ export function useSharedButtonTextStyles() {
if (size === 'large') {
baseStyles.push(a.text_md, android({paddingBottom: 1}))
+ } else if (size === 'tiny') {
+ baseStyles.push(a.text_xs, android({paddingBottom: 1}))
} else {
baseStyles.push(a.text_sm, android({paddingBottom: 1}))
}
@@ -505,7 +516,14 @@ export function ButtonText({children, style, ...rest}: ButtonTextProps) {
const textStyles = useSharedButtonTextStyles()
return (
-
+
{children}
)
@@ -514,9 +532,11 @@ export function ButtonText({children, style, ...rest}: ButtonTextProps) {
export function ButtonIcon({
icon: Comp,
position,
+ size: iconSize,
}: {
icon: React.ComponentType
position?: 'left' | 'right'
+ size?: SVGIconProps['size']
}) {
const {size, disabled} = useButtonContext()
const textStyles = useSharedButtonTextStyles()
@@ -532,7 +552,9 @@ export function ButtonIcon({
},
]}>
diff --git a/src/components/Dialog/context.ts b/src/components/Dialog/context.ts
index b28b9f5a25..859f8edd77 100644
--- a/src/components/Dialog/context.ts
+++ b/src/components/Dialog/context.ts
@@ -1,7 +1,11 @@
import React from 'react'
import {useDialogStateContext} from '#/state/dialogs'
-import {DialogContextProps, DialogControlProps} from '#/components/Dialog/types'
+import {
+ DialogContextProps,
+ DialogControlRefProps,
+ DialogOuterProps,
+} from '#/components/Dialog/types'
export const Context = React.createContext({
close: () => {},
@@ -11,9 +15,9 @@ export function useDialogContext() {
return React.useContext(Context)
}
-export function useDialogControl() {
+export function useDialogControl(): DialogOuterProps['control'] {
const id = React.useId()
- const control = React.useRef({
+ const control = React.useRef({
open: () => {},
close: () => {},
})
@@ -27,9 +31,17 @@ export function useDialogControl() {
}
}, [id, activeDialogs])
- return {
- ref: control,
- open: () => control.current.open(),
- close: () => control.current.close(),
- }
+ return React.useMemo(
+ () => ({
+ id,
+ ref: control,
+ open: () => {
+ control.current.open()
+ },
+ close: cb => {
+ control.current.close(cb)
+ },
+ }),
+ [id, control],
+ )
}
diff --git a/src/components/Dialog/index.tsx b/src/components/Dialog/index.tsx
index 9132e68de5..55798db7f5 100644
--- a/src/components/Dialog/index.tsx
+++ b/src/components/Dialog/index.tsx
@@ -1,49 +1,146 @@
import React, {useImperativeHandle} from 'react'
-import {View, Dimensions} from 'react-native'
+import {Dimensions, Pressable, View} from 'react-native'
+import Animated, {useAnimatedStyle} from 'react-native-reanimated'
+import {useSafeAreaInsets} from 'react-native-safe-area-context'
import BottomSheet, {
- BottomSheetBackdrop,
+ BottomSheetBackdropProps,
BottomSheetScrollView,
+ BottomSheetScrollViewMethods,
BottomSheetTextInput,
BottomSheetView,
-} from '@gorhom/bottom-sheet'
-import {useSafeAreaInsets} from 'react-native-safe-area-context'
-
-import {useTheme, atoms as a} from '#/alf'
-import {Portal} from '#/components/Portal'
-import {createInput} from '#/components/forms/TextField'
+ useBottomSheet,
+ WINDOW_HEIGHT,
+} from '@discord/bottom-sheet/src'
+import {logger} from '#/logger'
+import {useDialogStateControlContext} from '#/state/dialogs'
+import {isNative} from 'platform/detection'
+import {atoms as a, flatten, useTheme} from '#/alf'
+import {Context} from '#/components/Dialog/context'
import {
- DialogOuterProps,
DialogControlProps,
DialogInnerProps,
+ DialogOuterProps,
} from '#/components/Dialog/types'
-import {Context} from '#/components/Dialog/context'
+import {createInput} from '#/components/forms/TextField'
+import {Portal} from '#/components/Portal'
-export {useDialogControl, useDialogContext} from '#/components/Dialog/context'
+export {useDialogContext, useDialogControl} from '#/components/Dialog/context'
export * from '#/components/Dialog/types'
// @ts-ignore
export const Input = createInput(BottomSheetTextInput)
+function Backdrop(props: BottomSheetBackdropProps) {
+ const t = useTheme()
+ const bottomSheet = useBottomSheet()
+
+ const animatedStyle = useAnimatedStyle(() => {
+ const opacity =
+ (Math.abs(WINDOW_HEIGHT - props.animatedPosition.value) - 50) / 1000
+
+ return {
+ opacity: Math.min(Math.max(opacity, 0), 0.55),
+ }
+ })
+
+ const onPress = React.useCallback(() => {
+ bottomSheet.close()
+ }, [bottomSheet])
+
+ return (
+
+
+
+ )
+}
+
export function Outer({
children,
control,
onClose,
nativeOptions,
+ testID,
}: React.PropsWithChildren) {
const t = useTheme()
const sheet = React.useRef(null)
const sheetOptions = nativeOptions?.sheet || {}
const hasSnapPoints = !!sheetOptions.snapPoints
const insets = useSafeAreaInsets()
+ const closeCallbacks = React.useRef<(() => void)[]>([])
+ const {setDialogIsOpen} = useDialogStateControlContext()
- const open = React.useCallback((i = 0) => {
- sheet.current?.snapToIndex(i)
+ /*
+ * Used to manage open/closed, but index is otherwise handled internally by `BottomSheet`
+ */
+ const [openIndex, setOpenIndex] = React.useState(-1)
+
+ /*
+ * `openIndex` is the index of the snap point to open the bottom sheet to. If >0, the bottom sheet is open.
+ */
+ const isOpen = openIndex > -1
+
+ const callQueuedCallbacks = React.useCallback(() => {
+ for (const cb of closeCallbacks.current) {
+ try {
+ cb()
+ } catch (e: any) {
+ logger.error('Error running close callback', e)
+ }
+ }
+
+ closeCallbacks.current = []
}, [])
- const close = React.useCallback(() => {
+ const open = React.useCallback(
+ ({index} = {}) => {
+ // Run any leftover callbacks that might have been queued up before calling `.open()`
+ callQueuedCallbacks()
+
+ setDialogIsOpen(control.id, true)
+ // can be set to any index of `snapPoints`, but `0` is the first i.e. "open"
+ setOpenIndex(index || 0)
+ sheet.current?.snapToIndex(index || 0)
+ },
+ [setDialogIsOpen, control.id, callQueuedCallbacks],
+ )
+
+ // This is the function that we call when we want to dismiss the dialog.
+ const close = React.useCallback(cb => {
+ if (typeof cb === 'function') {
+ closeCallbacks.current.push(cb)
+ }
sheet.current?.close()
}, [])
+ // This is the actual thing we are doing once we "confirm" the dialog. We want the dialog's close animation to
+ // happen before we run this. It is passed to the `BottomSheet` component.
+ const onCloseAnimationComplete = React.useCallback(() => {
+ // This removes the dialog from our list of stored dialogs. Not super necessary on iOS, but on Android this
+ // tells us that we need to toggle the accessibility overlay setting
+ setDialogIsOpen(control.id, false)
+ setOpenIndex(-1)
+
+ callQueuedCallbacks()
+ onClose?.()
+ }, [callQueuedCallbacks, control.id, onClose, setDialogIsOpen])
+
useImperativeHandle(
control.ref,
() => ({
@@ -53,103 +150,105 @@ export function Outer({
[open, close],
)
- const onChange = React.useCallback(
- (index: number) => {
- if (index === -1) {
- onClose?.()
- }
- },
- [onClose],
- )
-
const context = React.useMemo(() => ({close}), [close])
return (
-
- (
-
- )}
- handleIndicatorStyle={{backgroundColor: t.palette.primary_500}}
- handleStyle={{display: 'none'}}
- onChange={onChange}>
-
-
- {children}
-
-
-
+ isOpen && (
+
+
+
+
+
+ {children}
+
+
+
+
+ )
)
}
-// TODO a11y props here, or is that handled by the sheet?
-export function Inner(props: DialogInnerProps) {
+export function Inner({children, style}: DialogInnerProps) {
const insets = useSafeAreaInsets()
return (
- {props.children}
+ {children}
)
}
-export function ScrollableInner(props: DialogInnerProps) {
+export const ScrollableInner = React.forwardRef<
+ BottomSheetScrollViewMethods,
+ DialogInnerProps
+>(function ScrollableInner({children, style}, ref) {
const insets = useSafeAreaInsets()
return (
- {props.children}
+ flatten(style),
+ ]}
+ contentContainerStyle={isNative ? a.pb_4xl : undefined}
+ ref={ref}>
+ {children}
)
-}
+})
export function Handle() {
const t = useTheme()
+
return (
e.stopPropagation()
export function Outer({
+ children,
control,
onClose,
- children,
}: React.PropsWithChildren) {
const {_} = useLingui()
const t = useTheme()
const {gtMobile} = useBreakpoints()
const [isOpen, setIsOpen] = React.useState(false)
- const [isVisible, setIsVisible] = React.useState(true)
+ const {setDialogIsOpen} = useDialogStateControlContext()
const open = React.useCallback(() => {
+ setDialogIsOpen(control.id, true)
setIsOpen(true)
- }, [setIsOpen])
+ }, [setIsOpen, setDialogIsOpen, control.id])
+
+ const close = React.useCallback(
+ cb => {
+ setDialogIsOpen(control.id, false)
+ setIsOpen(false)
+
+ try {
+ if (cb && typeof cb === 'function') {
+ // This timeout ensures that the callback runs at the same time as it would on native. I.e.
+ // console.log('Step 1') -> close(() => console.log('Step 3')) -> console.log('Step 2')
+ // This should always output 'Step 1', 'Step 2', 'Step 3', but without the timeout it would output
+ // 'Step 1', 'Step 3', 'Step 2'.
+ setTimeout(cb)
+ }
+ } catch (e: any) {
+ logger.error(`Dialog closeCallback failed`, {
+ message: e.message,
+ })
+ }
+
+ onClose?.()
+ },
+ [control.id, onClose, setDialogIsOpen],
+ )
- const close = React.useCallback(async () => {
- setIsVisible(false)
- await new Promise(resolve => setTimeout(resolve, 150))
- setIsOpen(false)
- setIsVisible(true)
- onClose?.()
- }, [onClose, setIsOpen])
+ const handleBackgroundPress = React.useCallback(async () => {
+ close()
+ }, [close])
useImperativeHandle(
control.ref,
@@ -46,7 +74,7 @@ export function Outer({
open,
close,
}),
- [open, close],
+ [close, open],
)
React.useEffect(() => {
@@ -59,7 +87,7 @@ export function Outer({
document.addEventListener('keydown', handler)
return () => document.removeEventListener('keydown', handler)
- }, [isOpen, close])
+ }, [close, isOpen])
const context = React.useMemo(
() => ({
@@ -76,7 +104,7 @@ export function Outer({
+ onPress={handleBackgroundPress}>
- {isVisible && (
-
- )}
+
- {isVisible ? children : null}
+ {children}
@@ -147,7 +173,7 @@ export function Inner({
a.rounded_md,
a.w_full,
a.border,
- gtMobile ? a.p_xl : a.p_lg,
+ gtMobile ? a.p_2xl : a.p_xl,
t.atoms.bg,
{
maxWidth: 600,
@@ -156,7 +182,7 @@ export function Inner({
shadowOpacity: t.name === 'light' ? 0.1 : 0.4,
shadowRadius: 30,
},
- ...(Array.isArray(style) ? style : [style || {}]),
+ flatten(style),
]}>
{children}
@@ -170,25 +196,28 @@ export function Handle() {
return null
}
-/**
- * TODO(eric) unused rn
- */
-// export function Close() {
-// const {_} = useLingui()
-// const t = useTheme()
-// const {close} = useDialogContext()
-// return (
-//
-//
-//
-// )
-// }
+export function Close() {
+ const {_} = useLingui()
+ const {close} = React.useContext(Context)
+ return (
+
+
+
+ )
+}
diff --git a/src/components/Dialog/types.ts b/src/components/Dialog/types.ts
index d36784183c..1ddab02eea 100644
--- a/src/components/Dialog/types.ts
+++ b/src/components/Dialog/types.ts
@@ -1,43 +1,75 @@
import React from 'react'
-import type {ViewStyle, AccessibilityProps} from 'react-native'
-import {BottomSheetProps} from '@gorhom/bottom-sheet'
+import type {
+ AccessibilityProps,
+ GestureResponderEvent,
+ ScrollViewProps,
+} from 'react-native'
+import {BottomSheetProps} from '@discord/bottom-sheet/src'
+
+import {ViewStyleProp} from '#/alf'
type A11yProps = Required
+/**
+ * Mutated by useImperativeHandle to provide a public API for controlling the
+ * dialog. The methods here will actually become the handlers defined within
+ * the `Dialog.Outer` component.
+ *
+ * `Partial` here allows us to add this directly to the
+ * `onPress` prop of a button, for example. If this type was not added, we
+ * would need to create a function to wrap `.open()` with.
+ */
+export type DialogControlRefProps = {
+ open: (
+ options?: DialogControlOpenOptions & Partial,
+ ) => void
+ close: (callback?: () => void) => void
+}
+
+/**
+ * The return type of the useDialogControl hook.
+ */
+export type DialogControlProps = DialogControlRefProps & {
+ id: string
+ ref: React.RefObject
+ isOpen?: boolean
+}
+
export type DialogContextProps = {
- close: () => void
+ close: DialogControlProps['close']
}
-export type DialogControlProps = {
- open: (index?: number) => void
- close: () => void
+export type DialogControlOpenOptions = {
+ /**
+ * NATIVE ONLY
+ *
+ * Optional index of the snap point to open the bottom sheet to. Defaults to
+ * 0, which is the first snap point (i.e. "open").
+ */
+ index?: number
}
export type DialogOuterProps = {
- control: {
- ref: React.RefObject
- open: (index?: number) => void
- close: () => void
- }
+ control: DialogControlProps
onClose?: () => void
nativeOptions?: {
sheet?: Omit
}
webOptions?: {}
+ testID?: string
}
-type DialogInnerPropsBase = React.PropsWithChildren<{
- style?: ViewStyle
-}> &
- T
+type DialogInnerPropsBase = React.PropsWithChildren & T
export type DialogInnerProps =
| DialogInnerPropsBase<{
label?: undefined
accessibilityLabelledBy: A11yProps['aria-labelledby']
accessibilityDescribedBy: string
+ keyboardDismissMode?: ScrollViewProps['keyboardDismissMode']
}>
| DialogInnerPropsBase<{
label: string
accessibilityLabelledBy?: undefined
accessibilityDescribedBy?: undefined
+ keyboardDismissMode?: ScrollViewProps['keyboardDismissMode']
}>
diff --git a/src/components/Error.tsx b/src/components/Error.tsx
new file mode 100644
index 0000000000..91b33f48e0
--- /dev/null
+++ b/src/components/Error.tsx
@@ -0,0 +1,97 @@
+import React from 'react'
+import {View} from 'react-native'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {useNavigation} from '@react-navigation/core'
+import {StackActions} from '@react-navigation/native'
+
+import {NavigationProp} from 'lib/routes/types'
+import {CenteredView} from 'view/com/util/Views'
+import {atoms as a, useBreakpoints, useTheme} from '#/alf'
+import {Button, ButtonText} from '#/components/Button'
+import {Text} from '#/components/Typography'
+import {router} from '#/routes'
+
+export function Error({
+ title,
+ message,
+ onRetry,
+}: {
+ title?: string
+ message?: string
+ onRetry?: () => unknown
+}) {
+ const navigation = useNavigation()
+ const {_} = useLingui()
+ const t = useTheme()
+ const {gtMobile} = useBreakpoints()
+
+ const canGoBack = navigation.canGoBack()
+ const onGoBack = React.useCallback(() => {
+ if (canGoBack) {
+ navigation.goBack()
+ } else {
+ navigation.navigate('HomeTab')
+
+ // Checking the state for routes ensures that web doesn't encounter errors while going back
+ if (navigation.getState()?.routes) {
+ navigation.dispatch(StackActions.push(...router.matchPath('/')))
+ } else {
+ navigation.navigate('HomeTab')
+ navigation.dispatch(StackActions.popToTop())
+ }
+ }
+ }, [navigation, canGoBack])
+
+ return (
+
+
+ {title}
+
+ {message}
+
+
+
+ {onRetry && (
+
+ )}
+
+
+
+ )
+}
diff --git a/src/components/GradientFill.tsx b/src/components/GradientFill.tsx
new file mode 100644
index 0000000000..3c64c8960e
--- /dev/null
+++ b/src/components/GradientFill.tsx
@@ -0,0 +1,27 @@
+import React from 'react'
+import {LinearGradient} from 'expo-linear-gradient'
+
+import {atoms as a, tokens} from '#/alf'
+
+export function GradientFill({
+ gradient,
+}: {
+ gradient:
+ | typeof tokens.gradients.sky
+ | typeof tokens.gradients.midnight
+ | typeof tokens.gradients.sunrise
+ | typeof tokens.gradients.sunset
+ | typeof tokens.gradients.bonfire
+ | typeof tokens.gradients.summer
+ | typeof tokens.gradients.nordic
+}) {
+ return (
+ c[1])}
+ locations={gradient.values.map(c => c[0])}
+ start={{x: 0, y: 0}}
+ end={{x: 1, y: 1}}
+ style={[a.absolute, a.inset_0]}
+ />
+ )
+}
diff --git a/src/components/LabelingServiceCard/index.tsx b/src/components/LabelingServiceCard/index.tsx
new file mode 100644
index 0000000000..6d1c4f0fc8
--- /dev/null
+++ b/src/components/LabelingServiceCard/index.tsx
@@ -0,0 +1,182 @@
+import React from 'react'
+import {View} from 'react-native'
+import {AppBskyLabelerDefs} from '@atproto/api'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {getLabelingServiceTitle} from '#/lib/moderation'
+import {sanitizeHandle} from '#/lib/strings/handles'
+import {pluralize} from '#/lib/strings/helpers'
+import {useLabelerInfoQuery} from '#/state/queries/labeler'
+import {UserAvatar} from '#/view/com/util/UserAvatar'
+import {atoms as a, useTheme, ViewStyleProp} from '#/alf'
+import {Link as InternalLink, LinkProps} from '#/components/Link'
+import {RichText} from '#/components/RichText'
+import {Text} from '#/components/Typography'
+import {ChevronRight_Stroke2_Corner0_Rounded as ChevronRight} from '../icons/Chevron'
+
+type LabelingServiceProps = {
+ labeler: AppBskyLabelerDefs.LabelerViewDetailed
+}
+
+export function Outer({
+ children,
+ style,
+}: React.PropsWithChildren) {
+ return (
+
+ {children}
+
+ )
+}
+
+export function Avatar({avatar}: {avatar?: string}) {
+ return
+}
+
+export function Title({value}: {value: string}) {
+ return {value}
+}
+
+export function Description({value, handle}: {value?: string; handle: string}) {
+ return value ? (
+
+
+
+ ) : (
+
+ By {sanitizeHandle(handle, '@')}
+
+ )
+}
+
+export function LikeCount({count}: {count: number}) {
+ const t = useTheme()
+ return (
+
+
+ Liked by {count} {pluralize(count, 'user')}
+
+
+ )
+}
+
+export function Content({children}: React.PropsWithChildren<{}>) {
+ const t = useTheme()
+
+ return (
+
+ {children}
+
+
+
+ )
+}
+
+/**
+ * The canonical view for a labeling service. Use this or compose your own.
+ */
+export function Default({
+ labeler,
+ style,
+}: LabelingServiceProps & ViewStyleProp) {
+ return (
+
+
+
+
+
+ {labeler.likeCount ? : null}
+
+
+ )
+}
+
+export function Link({
+ children,
+ labeler,
+}: LabelingServiceProps & Pick) {
+ const {_} = useLingui()
+
+ return (
+
+ {children}
+
+ )
+}
+
+// TODO not finished yet
+export function DefaultSkeleton() {
+ return (
+
+ Loading
+
+ )
+}
+
+export function Loader({
+ did,
+ loading: LoadingComponent = DefaultSkeleton,
+ error: ErrorComponent,
+ component: Component,
+}: {
+ did: string
+ loading?: React.ComponentType<{}>
+ error?: React.ComponentType<{error: string}>
+ component: React.ComponentType<{
+ labeler: AppBskyLabelerDefs.LabelerViewDetailed
+ }>
+}) {
+ const {isLoading, data, error} = useLabelerInfoQuery({did})
+
+ return isLoading ? (
+ LoadingComponent ? (
+
+ ) : null
+ ) : error || !data ? (
+ ErrorComponent ? (
+
+ ) : null
+ ) : (
+
+ )
+}
diff --git a/src/components/LikedByList.tsx b/src/components/LikedByList.tsx
new file mode 100644
index 0000000000..239a7044f6
--- /dev/null
+++ b/src/components/LikedByList.tsx
@@ -0,0 +1,107 @@
+import React from 'react'
+import {AppBskyFeedGetLikes as GetLikes} from '@atproto/api'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {logger} from '#/logger'
+import {useLikedByQuery} from '#/state/queries/post-liked-by'
+import {useResolveUriQuery} from '#/state/queries/resolve-uri'
+import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
+import {cleanError} from 'lib/strings/errors'
+import {ProfileCardWithFollowBtn} from '#/view/com/profile/ProfileCard'
+import {List} from '#/view/com/util/List'
+import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
+
+function renderItem({item}: {item: GetLikes.Like}) {
+ return
+}
+
+function keyExtractor(item: GetLikes.Like) {
+ return item.actor.did
+}
+
+export function LikedByList({uri}: {uri: string}) {
+ const {_} = useLingui()
+ const initialNumToRender = useInitialNumToRender()
+ const [isPTRing, setIsPTRing] = React.useState(false)
+
+ const {
+ data: resolvedUri,
+ error: resolveError,
+ isLoading: isUriLoading,
+ } = useResolveUriQuery(uri)
+ const {
+ data,
+ isLoading: isLikedByLoading,
+ isFetchingNextPage,
+ hasNextPage,
+ fetchNextPage,
+ error: likedByError,
+ refetch,
+ } = useLikedByQuery(resolvedUri?.uri)
+
+ const error = resolveError || likedByError
+ const isError = !!resolveError || !!likedByError
+
+ const likes = React.useMemo(() => {
+ if (data?.pages) {
+ return data.pages.flatMap(page => page.likes)
+ }
+ return []
+ }, [data])
+
+ const onRefresh = React.useCallback(async () => {
+ setIsPTRing(true)
+ try {
+ await refetch()
+ } catch (err) {
+ logger.error('Failed to refresh likes', {message: err})
+ }
+ setIsPTRing(false)
+ }, [refetch, setIsPTRing])
+
+ const onEndReached = React.useCallback(async () => {
+ if (isFetchingNextPage || !hasNextPage || isError) return
+ try {
+ await fetchNextPage()
+ } catch (err) {
+ logger.error('Failed to load more likes', {message: err})
+ }
+ }, [isFetchingNextPage, hasNextPage, isError, fetchNextPage])
+
+ if (likes.length < 1) {
+ return (
+
+ )
+ }
+
+ return (
+
+ }
+ onEndReachedThreshold={3}
+ initialNumToRender={initialNumToRender}
+ windowSize={11}
+ />
+ )
+}
diff --git a/src/components/LikesDialog.tsx b/src/components/LikesDialog.tsx
new file mode 100644
index 0000000000..51aae7af0d
--- /dev/null
+++ b/src/components/LikesDialog.tsx
@@ -0,0 +1,130 @@
+import React, {useCallback, useMemo} from 'react'
+import {ActivityIndicator, FlatList, View} from 'react-native'
+import {AppBskyFeedGetLikes as GetLikes} from '@atproto/api'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {cleanError} from '#/lib/strings/errors'
+import {logger} from '#/logger'
+import {useLikedByQuery} from '#/state/queries/post-liked-by'
+import {useResolveUriQuery} from '#/state/queries/resolve-uri'
+import {ProfileCardWithFollowBtn} from '#/view/com/profile/ProfileCard'
+import {ErrorMessage} from '#/view/com/util/error/ErrorMessage'
+import {atoms as a, useTheme} from '#/alf'
+import * as Dialog from '#/components/Dialog'
+import {Loader} from '#/components/Loader'
+import {Text} from '#/components/Typography'
+
+interface LikesDialogProps {
+ control: Dialog.DialogOuterProps['control']
+ uri: string
+}
+
+export function LikesDialog(props: LikesDialogProps) {
+ return (
+
+
+
+
+
+ )
+}
+
+export function LikesDialogInner({control, uri}: LikesDialogProps) {
+ const {_} = useLingui()
+ const t = useTheme()
+
+ const {
+ data: resolvedUri,
+ error: resolveError,
+ isFetched: hasFetchedResolvedUri,
+ } = useResolveUriQuery(uri)
+ const {
+ data,
+ isFetching: isFetchingLikedBy,
+ isFetched: hasFetchedLikedBy,
+ isFetchingNextPage,
+ hasNextPage,
+ fetchNextPage,
+ isError,
+ error: likedByError,
+ } = useLikedByQuery(resolvedUri?.uri)
+
+ const isLoading = !hasFetchedResolvedUri || !hasFetchedLikedBy
+ const likes = useMemo(() => {
+ if (data?.pages) {
+ return data.pages.flatMap(page => page.likes)
+ }
+ return []
+ }, [data])
+
+ const onEndReached = useCallback(async () => {
+ if (isFetchingLikedBy || !hasNextPage || isError) return
+ try {
+ await fetchNextPage()
+ } catch (err) {
+ logger.error('Failed to load more likes', {message: err})
+ }
+ }, [isFetchingLikedBy, hasNextPage, isError, fetchNextPage])
+
+ const renderItem = useCallback(
+ ({item}: {item: GetLikes.Like}) => {
+ return (
+ control.close()}
+ />
+ )
+ },
+ [control],
+ )
+
+ return (
+
+
+ Liked by
+
+
+ {isLoading ? (
+
+
+
+ ) : resolveError || likedByError || !data ? (
+
+ ) : likes.length === 0 ? (
+
+
+
+ Nobody has liked this yet. Maybe you should be the first!
+
+
+
+ ) : (
+ item.actor.did}
+ onEndReached={onEndReached}
+ renderItem={renderItem}
+ initialNumToRender={15}
+ ListFooterComponent={
+
+ }
+ />
+ )}
+
+
+
+ )
+}
+
+function ListFooterComponent({isFetching}: {isFetching: boolean}) {
+ if (isFetching) {
+ return (
+
+
+
+ )
+ }
+ return null
+}
diff --git a/src/components/Link.tsx b/src/components/Link.tsx
index 763f07ca93..65a015ba3a 100644
--- a/src/components/Link.tsx
+++ b/src/components/Link.tsx
@@ -1,29 +1,24 @@
import React from 'react'
-import {
- GestureResponderEvent,
- Linking,
- TouchableWithoutFeedback,
-} from 'react-native'
-import {
- useLinkProps,
- useNavigation,
- StackActions,
-} from '@react-navigation/native'
+import {GestureResponderEvent} from 'react-native'
import {sanitizeUrl} from '@braintree/sanitize-url'
+import {StackActions, useLinkProps} from '@react-navigation/native'
-import {useInteractionState} from '#/components/hooks/useInteractionState'
-import {isWeb} from '#/platform/detection'
-import {useTheme, web, flatten, TextStyleProp} from '#/alf'
-import {Button, ButtonProps} from '#/components/Button'
-import {AllNavigatorParams, NavigationProp} from '#/lib/routes/types'
+import {AllNavigatorParams} from '#/lib/routes/types'
+import {shareUrl} from '#/lib/sharing'
import {
convertBskyAppUrlIfNeeded,
isExternalUrl,
linkRequiresWarning,
} from '#/lib/strings/url-helpers'
+import {isNative, isWeb} from '#/platform/detection'
import {useModalControls} from '#/state/modals'
+import {useOpenLink} from '#/state/preferences/in-app-browser'
+import {useNavigationDeduped} from 'lib/hooks/useNavigationDeduped'
+import {atoms as a, flatten, TextStyleProp, useTheme, web} from '#/alf'
+import {Button, ButtonProps} from '#/components/Button'
+import {useInteractionState} from '#/components/hooks/useInteractionState'
+import {Text, TextProps} from '#/components/Typography'
import {router} from '#/routes'
-import {Text} from '#/components/Typography'
/**
* Only available within a `Link`, since that inherits from `Button`.
@@ -35,6 +30,13 @@ type BaseLinkProps = Pick<
Parameters>[0],
'to'
> & {
+ testID?: string
+
+ /**
+ * Label for a11y. Defaults to the href.
+ */
+ label?: string
+
/**
* The React Navigation `StackAction` to perform when the link is pressed.
*/
@@ -45,29 +47,54 @@ type BaseLinkProps = Pick<
*
* Note: atm this only works for `InlineLink`s with a string child.
*/
- warnOnMismatchingTextChild?: boolean
+ disableMismatchWarning?: boolean
+
+ /**
+ * Callback for when the link is pressed. Prevent default and return `false`
+ * to exit early and prevent navigation.
+ *
+ * DO NOT use this for navigation, that's what the `to` prop is for.
+ */
+ onPress?: (e: GestureResponderEvent) => void | false
+
+ /**
+ * Web-only attribute. Sets `download` attr on web.
+ */
+ download?: string
+
+ /**
+ * Native-only attribute. If true, will open the share sheet on long press.
+ */
+ shareOnLongPress?: boolean
}
export function useLink({
to,
displayText,
action = 'push',
- warnOnMismatchingTextChild,
+ disableMismatchWarning,
+ onPress: outerOnPress,
+ shareOnLongPress,
}: BaseLinkProps & {
displayText: string
}) {
- const navigation = useNavigation()
+ const navigation = useNavigationDeduped()
const {href} = useLinkProps({
to:
typeof to === 'string' ? convertBskyAppUrlIfNeeded(sanitizeUrl(to)) : to,
})
const isExternal = isExternalUrl(href)
const {openModal, closeModal} = useModalControls()
+ const openLink = useOpenLink()
const onPress = React.useCallback(
(e: GestureResponderEvent) => {
+ const exitEarlyIfFalse = outerOnPress?.(e)
+
+ if (exitEarlyIfFalse === false) return
+
const requiresWarning = Boolean(
- warnOnMismatchingTextChild &&
+ !disableMismatchWarning &&
displayText &&
isExternal &&
linkRequiresWarning(href, displayText),
@@ -85,7 +112,7 @@ export function useLink({
e.preventDefault()
if (isExternal) {
- Linking.openURL(href)
+ openLink(href)
} else {
/**
* A `GestureResponderEvent`, but cast to `any` to avoid using a bunch
@@ -103,7 +130,7 @@ export function useLink({
href.startsWith('http') ||
href.startsWith('mailto')
) {
- Linking.openURL(href)
+ openLink(href)
} else {
closeModal() // close any active modals
@@ -124,35 +151,52 @@ export function useLink({
}
},
[
- href,
- isExternal,
- warnOnMismatchingTextChild,
- navigation,
- action,
+ outerOnPress,
+ disableMismatchWarning,
displayText,
- closeModal,
+ isExternal,
+ href,
openModal,
+ openLink,
+ closeModal,
+ action,
+ navigation,
],
)
+ const handleLongPress = React.useCallback(() => {
+ const requiresWarning = Boolean(
+ !disableMismatchWarning &&
+ displayText &&
+ isExternal &&
+ linkRequiresWarning(href, displayText),
+ )
+
+ if (requiresWarning) {
+ openModal({
+ name: 'link-warning',
+ text: displayText,
+ href: href,
+ share: true,
+ })
+ } else {
+ shareUrl(href)
+ }
+ }, [disableMismatchWarning, displayText, href, isExternal, openModal])
+
+ const onLongPress =
+ isNative && isExternal && shareOnLongPress ? handleLongPress : undefined
+
return {
isExternal,
href,
onPress,
+ onLongPress,
}
}
-export type LinkProps = Omit &
- Omit & {
- /**
- * Label for a11y. Defaults to the href.
- */
- label?: string
- /**
- * Web-only attribute. Sets `download` attr on web.
- */
- download?: string
- }
+export type LinkProps = Omit &
+ Omit
/**
* A interactive element that renders as a `` tag on the web. On mobile it
@@ -166,6 +210,7 @@ export function Link({
children,
to,
action = 'push',
+ onPress: outerOnPress,
download,
...rest
}: LinkProps) {
@@ -173,24 +218,26 @@ export function Link({
to,
displayText: typeof children === 'string' ? children : '',
action,
+ onPress: outerOnPress,
})
return (
)
}
diff --git a/src/components/Lists.tsx b/src/components/Lists.tsx
new file mode 100644
index 0000000000..89913b12b0
--- /dev/null
+++ b/src/components/Lists.tsx
@@ -0,0 +1,196 @@
+import React from 'react'
+import {View} from 'react-native'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {cleanError} from 'lib/strings/errors'
+import {CenteredView} from 'view/com/util/Views'
+import {atoms as a, useBreakpoints, useTheme} from '#/alf'
+import {Button, ButtonText} from '#/components/Button'
+import {Error} from '#/components/Error'
+import {Loader} from '#/components/Loader'
+import {Text} from '#/components/Typography'
+
+export function ListFooter({
+ isFetchingNextPage,
+ error,
+ onRetry,
+ height,
+}: {
+ isFetchingNextPage?: boolean
+ error?: string
+ onRetry?: () => Promise
+ height?: number
+}) {
+ const t = useTheme()
+
+ return (
+
+ {isFetchingNextPage ? (
+
+ ) : (
+
+ )}
+
+ )
+}
+
+function ListFooterMaybeError({
+ error,
+ onRetry,
+}: {
+ error?: string
+ onRetry?: () => Promise
+}) {
+ const t = useTheme()
+ const {_} = useLingui()
+
+ if (!error) return null
+
+ return (
+
+
+
+ {error ? (
+ cleanError(error)
+ ) : (
+ Oops, something went wrong!
+ )}
+
+
+
+
+ )
+}
+
+export function ListHeaderDesktop({
+ title,
+ subtitle,
+}: {
+ title: string
+ subtitle?: string
+}) {
+ const {gtTablet} = useBreakpoints()
+ const t = useTheme()
+
+ if (!gtTablet) return null
+
+ return (
+
+ {title}
+ {subtitle ? (
+
+ {subtitle}
+
+ ) : undefined}
+
+ )
+}
+
+export function ListMaybePlaceholder({
+ isLoading,
+ noEmpty,
+ isError,
+ emptyTitle,
+ emptyMessage,
+ errorTitle,
+ errorMessage,
+ emptyType = 'page',
+ onRetry,
+}: {
+ isLoading: boolean
+ noEmpty?: boolean
+ isError?: boolean
+ emptyTitle?: string
+ emptyMessage?: string
+ errorTitle?: string
+ errorMessage?: string
+ emptyType?: 'page' | 'results'
+ onRetry?: () => Promise
+}) {
+ const t = useTheme()
+ const {_} = useLingui()
+ const {gtMobile, gtTablet} = useBreakpoints()
+
+ if (isLoading) {
+ return (
+
+
+
+
+
+ )
+ }
+
+ if (isError) {
+ return (
+
+ )
+ }
+
+ if (!noEmpty) {
+ return (
+
+ )
+ }
+
+ return null
+}
diff --git a/src/components/Loader.tsx b/src/components/Loader.tsx
index bbe4e2f75c..e0b3be6373 100644
--- a/src/components/Loader.tsx
+++ b/src/components/Loader.tsx
@@ -1,17 +1,18 @@
import React from 'react'
import Animated, {
Easing,
- useSharedValue,
useAnimatedStyle,
+ useSharedValue,
withRepeat,
withTiming,
} from 'react-native-reanimated'
-import {atoms as a} from '#/alf'
+import {atoms as a, flatten, useTheme} from '#/alf'
import {Props, useCommonSVGProps} from '#/components/icons/common'
import {Loader_Stroke2_Corner0_Rounded as Icon} from '#/components/icons/Loader'
export function Loader(props: Props) {
+ const t = useTheme()
const common = useCommonSVGProps(props)
const rotation = useSharedValue(0)
@@ -35,7 +36,15 @@ export function Loader(props: Props) {
{width: common.size, height: common.size},
animatedStyles,
]}>
-
+
)
}
diff --git a/src/components/Loader.web.tsx b/src/components/Loader.web.tsx
new file mode 100644
index 0000000000..d8182673f6
--- /dev/null
+++ b/src/components/Loader.web.tsx
@@ -0,0 +1,34 @@
+import React from 'react'
+import {View} from 'react-native'
+
+import {atoms as a, flatten, useTheme} from '#/alf'
+import {Props, useCommonSVGProps} from '#/components/icons/common'
+import {Loader_Stroke2_Corner0_Rounded as Icon} from '#/components/icons/Loader'
+
+export function Loader(props: Props) {
+ const t = useTheme()
+ const common = useCommonSVGProps(props)
+
+ return (
+
+ {/* css rotation animation - /bskyweb/templates/base.html */}
+
+
+
+
+ )
+}
diff --git a/src/components/Menu/context.tsx b/src/components/Menu/context.tsx
new file mode 100644
index 0000000000..9fc91f6815
--- /dev/null
+++ b/src/components/Menu/context.tsx
@@ -0,0 +1,8 @@
+import React from 'react'
+
+import type {ContextType} from '#/components/Menu/types'
+
+export const Context = React.createContext({
+ // @ts-ignore
+ control: null,
+})
diff --git a/src/components/Menu/index.tsx b/src/components/Menu/index.tsx
new file mode 100644
index 0000000000..889769f3a7
--- /dev/null
+++ b/src/components/Menu/index.tsx
@@ -0,0 +1,220 @@
+import React from 'react'
+import {Pressable, StyleProp, View, ViewStyle} from 'react-native'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import flattenReactChildren from 'react-keyed-flatten-children'
+
+import {isNative} from 'platform/detection'
+import {atoms as a, useTheme} from '#/alf'
+import {Button, ButtonText} from '#/components/Button'
+import * as Dialog from '#/components/Dialog'
+import {useInteractionState} from '#/components/hooks/useInteractionState'
+import {Context} from '#/components/Menu/context'
+import {
+ ContextType,
+ GroupProps,
+ ItemIconProps,
+ ItemProps,
+ ItemTextProps,
+ TriggerProps,
+} from '#/components/Menu/types'
+import {Text} from '#/components/Typography'
+
+export {useDialogControl as useMenuControl} from '#/components/Dialog'
+
+export function useMemoControlContext() {
+ return React.useContext(Context)
+}
+
+export function Root({
+ children,
+ control,
+}: React.PropsWithChildren<{
+ control?: Dialog.DialogOuterProps['control']
+}>) {
+ const defaultControl = Dialog.useDialogControl()
+ const context = React.useMemo(
+ () => ({
+ control: control || defaultControl,
+ }),
+ [control, defaultControl],
+ )
+
+ return {children}
+}
+
+export function Trigger({children, label}: TriggerProps) {
+ const {control} = React.useContext(Context)
+ const {state: focused, onIn: onFocus, onOut: onBlur} = useInteractionState()
+ const {
+ state: pressed,
+ onIn: onPressIn,
+ onOut: onPressOut,
+ } = useInteractionState()
+
+ return children({
+ isNative: true,
+ control,
+ state: {
+ hovered: false,
+ focused,
+ pressed,
+ },
+ props: {
+ onPress: control.open,
+ onFocus,
+ onBlur,
+ onPressIn,
+ onPressOut,
+ accessibilityLabel: label,
+ },
+ })
+}
+
+export function Outer({
+ children,
+ showCancel,
+}: React.PropsWithChildren<{
+ showCancel?: boolean
+ style?: StyleProp
+}>) {
+ const context = React.useContext(Context)
+
+ return (
+
+
+
+ {/* Re-wrap with context since Dialogs are portal-ed to root */}
+
+
+
+ {children}
+ {isNative && showCancel && }
+
+
+
+
+
+ )
+}
+
+export function Item({children, label, style, onPress, ...rest}: ItemProps) {
+ const t = useTheme()
+ const {control} = React.useContext(Context)
+ const {state: focused, onIn: onFocus, onOut: onBlur} = useInteractionState()
+ const {
+ state: pressed,
+ onIn: onPressIn,
+ onOut: onPressOut,
+ } = useInteractionState()
+
+ return (
+ {
+ onPress(e)
+
+ if (!e.defaultPrevented) {
+ control?.close()
+ }
+ }}
+ onFocus={onFocus}
+ onBlur={onBlur}
+ onPressIn={onPressIn}
+ onPressOut={onPressOut}
+ style={[
+ a.flex_row,
+ a.align_center,
+ a.gap_sm,
+ a.px_md,
+ a.rounded_md,
+ a.border,
+ t.atoms.bg_contrast_25,
+ t.atoms.border_contrast_low,
+ {minHeight: 44, paddingVertical: 10},
+ style,
+ (focused || pressed) && [t.atoms.bg_contrast_50],
+ ]}>
+ {children}
+
+ )
+}
+
+export function ItemText({children, style}: ItemTextProps) {
+ const t = useTheme()
+ return (
+
+ {children}
+
+ )
+}
+
+export function ItemIcon({icon: Comp}: ItemIconProps) {
+ const t = useTheme()
+ return
+}
+
+export function Group({children, style}: GroupProps) {
+ const t = useTheme()
+ return (
+
+ {flattenReactChildren(children).map((child, i) => {
+ return React.isValidElement(child) && child.type === Item ? (
+
+ {i > 0 ? (
+
+ ) : null}
+ {React.cloneElement(child, {
+ // @ts-ignore
+ style: {
+ borderRadius: 0,
+ borderWidth: 0,
+ },
+ })}
+
+ ) : null
+ })}
+
+ )
+}
+
+function Cancel() {
+ const {_} = useLingui()
+ const {control} = React.useContext(Context)
+
+ return (
+
+ )
+}
+
+export function Divider() {
+ return null
+}
diff --git a/src/components/Menu/index.web.tsx b/src/components/Menu/index.web.tsx
new file mode 100644
index 0000000000..b72067f586
--- /dev/null
+++ b/src/components/Menu/index.web.tsx
@@ -0,0 +1,292 @@
+/* eslint-disable react/prop-types */
+
+import React from 'react'
+import {Pressable, StyleProp, View, ViewStyle} from 'react-native'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import * as DropdownMenu from '@radix-ui/react-dropdown-menu'
+
+import {atoms as a, flatten, useTheme, web} from '#/alf'
+import * as Dialog from '#/components/Dialog'
+import {useInteractionState} from '#/components/hooks/useInteractionState'
+import {Context} from '#/components/Menu/context'
+import {
+ ContextType,
+ GroupProps,
+ ItemIconProps,
+ ItemProps,
+ ItemTextProps,
+ RadixPassThroughTriggerProps,
+ TriggerProps,
+} from '#/components/Menu/types'
+import {Portal} from '#/components/Portal'
+import {Text} from '#/components/Typography'
+
+export function useMenuControl(): Dialog.DialogControlProps {
+ const id = React.useId()
+ const [isOpen, setIsOpen] = React.useState(false)
+
+ return React.useMemo(
+ () => ({
+ id,
+ ref: {current: null},
+ isOpen,
+ open() {
+ setIsOpen(true)
+ },
+ close() {
+ setIsOpen(false)
+ },
+ }),
+ [id, isOpen, setIsOpen],
+ )
+}
+
+export function useMemoControlContext() {
+ return React.useContext(Context)
+}
+
+export function Root({
+ children,
+ control,
+}: React.PropsWithChildren<{
+ control?: Dialog.DialogOuterProps['control']
+}>) {
+ const {_} = useLingui()
+ const defaultControl = useMenuControl()
+ const context = React.useMemo(
+ () => ({
+ control: control || defaultControl,
+ }),
+ [control, defaultControl],
+ )
+ const onOpenChange = React.useCallback(
+ (open: boolean) => {
+ if (context.control.isOpen && !open) {
+ context.control.close()
+ } else if (!context.control.isOpen && open) {
+ context.control.open()
+ }
+ },
+ [context.control],
+ )
+
+ return (
+
+ {context.control.isOpen && (
+
+ context.control.close()}
+ accessibilityHint=""
+ accessibilityLabel={_(
+ msg`Context menu backdrop, click to close the menu.`,
+ )}
+ />
+
+ )}
+
+ {children}
+
+
+ )
+}
+
+const RadixTriggerPassThrough = React.forwardRef(
+ (
+ props: {
+ children: (
+ props: RadixPassThroughTriggerProps & {
+ ref: React.Ref
+ },
+ ) => React.ReactNode
+ },
+ ref,
+ ) => {
+ // @ts-expect-error Radix provides no types of this stuff
+ return props.children({...props, ref})
+ },
+)
+RadixTriggerPassThrough.displayName = 'RadixTriggerPassThrough'
+
+export function Trigger({children, label}: TriggerProps) {
+ const {control} = React.useContext(Context)
+ const {
+ state: hovered,
+ onIn: onMouseEnter,
+ onOut: onMouseLeave,
+ } = useInteractionState()
+ const {state: focused, onIn: onFocus, onOut: onBlur} = useInteractionState()
+
+ return (
+
+
+ {props =>
+ children({
+ isNative: false,
+ control,
+ state: {
+ hovered,
+ focused,
+ pressed: false,
+ },
+ props: {
+ ...props,
+ // disable on web, use `onPress`
+ onPointerDown: () => false,
+ onPress: () =>
+ control.isOpen ? control.close() : control.open(),
+ onFocus: onFocus,
+ onBlur: onBlur,
+ onMouseEnter,
+ onMouseLeave,
+ accessibilityLabel: label,
+ },
+ })
+ }
+
+
+ )
+}
+
+export function Outer({
+ children,
+ style,
+}: React.PropsWithChildren<{
+ showCancel?: boolean
+ style?: StyleProp
+}>) {
+ const t = useTheme()
+
+ return (
+
+
+
+ {children}
+
+
+ {/* Disabled until we can fix positioning
+
+ */}
+
+
+ )
+}
+
+export function Item({children, label, onPress, ...rest}: ItemProps) {
+ const t = useTheme()
+ const {control} = React.useContext(Context)
+ const {
+ state: hovered,
+ onIn: onMouseEnter,
+ onOut: onMouseLeave,
+ } = useInteractionState()
+ const {state: focused, onIn: onFocus, onOut: onBlur} = useInteractionState()
+
+ return (
+
+ {
+ onPress(e)
+
+ /**
+ * Ported forward from Radix
+ * @see https://www.radix-ui.com/primitives/docs/components/dropdown-menu#item
+ */
+ if (!e.defaultPrevented) {
+ control.close()
+ }
+ }}
+ onFocus={onFocus}
+ onBlur={onBlur}
+ // need `flatten` here for Radix compat
+ style={flatten([
+ a.flex_row,
+ a.align_center,
+ a.gap_lg,
+ a.py_sm,
+ a.rounded_xs,
+ {minHeight: 32, paddingHorizontal: 10},
+ web({outline: 0}),
+ (hovered || focused) && [
+ web({outline: '0 !important'}),
+ t.name === 'light'
+ ? t.atoms.bg_contrast_25
+ : t.atoms.bg_contrast_50,
+ ],
+ ])}
+ {...web({
+ onMouseEnter,
+ onMouseLeave,
+ })}>
+ {children}
+
+
+ )
+}
+
+export function ItemText({children, style}: ItemTextProps) {
+ const t = useTheme()
+ return (
+
+ {children}
+
+ )
+}
+
+export function ItemIcon({icon: Comp, position = 'left'}: ItemIconProps) {
+ const t = useTheme()
+ return (
+
+ )
+}
+
+export function Group({children}: GroupProps) {
+ return children
+}
+
+export function Divider() {
+ const t = useTheme()
+ return (
+
+ )
+}
diff --git a/src/components/Menu/types.ts b/src/components/Menu/types.ts
new file mode 100644
index 0000000000..2fcb2fa2d9
--- /dev/null
+++ b/src/components/Menu/types.ts
@@ -0,0 +1,99 @@
+import React from 'react'
+import {
+ AccessibilityProps,
+ GestureResponderEvent,
+ PressableProps,
+} from 'react-native'
+
+import {TextStyleProp, ViewStyleProp} from '#/alf'
+import * as Dialog from '#/components/Dialog'
+import {Props as SVGIconProps} from '#/components/icons/common'
+
+export type ContextType = {
+ control: Dialog.DialogOuterProps['control']
+}
+
+export type RadixPassThroughTriggerProps = {
+ id: string
+ type: 'button'
+ disabled: boolean
+ ['data-disabled']: boolean
+ ['data-state']: string
+ ['aria-controls']?: string
+ ['aria-haspopup']?: boolean
+ ['aria-expanded']?: AccessibilityProps['aria-expanded']
+ onKeyDown: (e: React.KeyboardEvent) => void
+ /**
+ * Radix provides this, but we override on web to use `onPress` instead,
+ * which is less sensitive while scrolling.
+ */
+ onPointerDown: PressableProps['onPointerDown']
+}
+export type TriggerProps = {
+ children(props: TriggerChildProps): React.ReactNode
+ label: string
+}
+export type TriggerChildProps =
+ | {
+ isNative: true
+ control: Dialog.DialogOuterProps['control']
+ state: {
+ /**
+ * Web only, `false` on native
+ */
+ hovered: false
+ focused: boolean
+ pressed: boolean
+ }
+ /**
+ * We don't necessarily know what these will be spread on to, so we
+ * should add props one-by-one.
+ *
+ * On web, these properties are applied to a parent `Pressable`, so this
+ * object is empty.
+ */
+ props: {
+ onPress: () => void
+ onFocus: () => void
+ onBlur: () => void
+ onPressIn: () => void
+ onPressOut: () => void
+ accessibilityLabel: string
+ }
+ }
+ | {
+ isNative: false
+ control: Dialog.DialogOuterProps['control']
+ state: {
+ hovered: boolean
+ focused: boolean
+ /**
+ * Native only, `false` on web
+ */
+ pressed: false
+ }
+ props: RadixPassThroughTriggerProps & {
+ onPress: () => void
+ onFocus: () => void
+ onBlur: () => void
+ onMouseEnter: () => void
+ onMouseLeave: () => void
+ accessibilityLabel: string
+ }
+ }
+
+export type ItemProps = React.PropsWithChildren<
+ Omit &
+ ViewStyleProp & {
+ label: string
+ onPress: (e: GestureResponderEvent) => void
+ }
+>
+
+export type ItemTextProps = React.PropsWithChildren
+export type ItemIconProps = React.PropsWithChildren<{
+ icon: React.ComponentType
+ position?: 'left' | 'right'
+}>
+
+export type GroupProps = React.PropsWithChildren
diff --git a/src/components/Prompt.tsx b/src/components/Prompt.tsx
index 2c79d27cf1..0a171674de 100644
--- a/src/components/Prompt.tsx
+++ b/src/components/Prompt.tsx
@@ -1,13 +1,12 @@
import React from 'react'
-import {View, PressableProps} from 'react-native'
+import {View} from 'react-native'
import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
-import {useTheme, atoms as a} from '#/alf'
-import {Text} from '#/components/Typography'
-import {Button} from '#/components/Button'
-
+import {atoms as a, useBreakpoints, useTheme} from '#/alf'
+import {Button, ButtonColor, ButtonText} from '#/components/Button'
import * as Dialog from '#/components/Dialog'
+import {Text} from '#/components/Typography'
export {useDialogControl as usePromptControl} from '#/components/Dialog'
@@ -22,9 +21,12 @@ const Context = React.createContext<{
export function Outer({
children,
control,
+ testID,
}: React.PropsWithChildren<{
control: Dialog.DialogOuterProps['control']
+ testID?: string
}>) {
+ const {gtMobile} = useBreakpoints()
const titleId = React.useId()
const descriptionId = React.useId()
@@ -34,22 +36,22 @@ export function Outer({
)
return (
-
+
-
+ style={[gtMobile ? {width: 'auto', maxWidth: 400} : a.w_full]}>
{children}
-
+
)
}
-export function Title({children}: React.PropsWithChildren<{}>) {
+export function TitleText({children}: React.PropsWithChildren<{}>) {
const {titleId} = React.useContext(Context)
return (
@@ -58,7 +60,7 @@ export function Title({children}: React.PropsWithChildren<{}>) {
)
}
-export function Description({children}: React.PropsWithChildren<{}>) {
+export function DescriptionText({children}: React.PropsWithChildren<{}>) {
const t = useTheme()
const {descriptionId} = React.useContext(Context)
return (
@@ -71,48 +73,128 @@ export function Description({children}: React.PropsWithChildren<{}>) {
}
export function Actions({children}: React.PropsWithChildren<{}>) {
+ const {gtMobile} = useBreakpoints()
+
return (
-
+
{children}
)
}
export function Cancel({
- children,
-}: React.PropsWithChildren<{onPress?: PressableProps['onPress']}>) {
+ cta,
+}: {
+ /**
+ * Optional i18n string. If undefined, it will default to "Cancel".
+ */
+ cta?: string
+}) {
const {_} = useLingui()
+ const {gtMobile} = useBreakpoints()
const {close} = Dialog.useDialogContext()
+ const onPress = React.useCallback(() => {
+ close()
+ }, [close])
+
return (
)
}
export function Action({
- children,
onPress,
-}: React.PropsWithChildren<{onPress?: () => void}>) {
+ color = 'primary',
+ cta,
+ testID,
+}: {
+ /**
+ * Callback to run when the action is pressed. The method is called _after_
+ * the dialog closes.
+ *
+ * Note: The dialog will close automatically when the action is pressed, you
+ * should NOT close the dialog as a side effect of this method.
+ */
+ onPress: () => void
+ color?: ButtonColor
+ /**
+ * Optional i18n string. If undefined, it will default to "Confirm".
+ */
+ cta?: string
+ testID?: string
+}) {
const {_} = useLingui()
+ const {gtMobile} = useBreakpoints()
const {close} = Dialog.useDialogContext()
const handleOnPress = React.useCallback(() => {
- close()
- onPress?.()
+ close(onPress)
}, [close, onPress])
+
return (
)
}
+
+export function Basic({
+ control,
+ title,
+ description,
+ cancelButtonCta,
+ confirmButtonCta,
+ onConfirm,
+ confirmButtonColor,
+}: React.PropsWithChildren<{
+ control: Dialog.DialogOuterProps['control']
+ title: string
+ description: string
+ cancelButtonCta?: string
+ confirmButtonCta?: string
+ /**
+ * Callback to run when the Confirm button is pressed. The method is called
+ * _after_ the dialog closes.
+ *
+ * Note: The dialog will close automatically when the action is pressed, you
+ * should NOT close the dialog as a side effect of this method.
+ */
+ onConfirm: () => void
+ confirmButtonColor?: ButtonColor
+}>) {
+ return (
+
+ {title}
+ {description}
+
+
+
+
+
+ )
+}
diff --git a/src/components/ReportDialog/SelectLabelerView.tsx b/src/components/ReportDialog/SelectLabelerView.tsx
new file mode 100644
index 0000000000..dd07cafa38
--- /dev/null
+++ b/src/components/ReportDialog/SelectLabelerView.tsx
@@ -0,0 +1,87 @@
+import React from 'react'
+import {View} from 'react-native'
+import {AppBskyLabelerDefs} from '@atproto/api'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+export {useDialogControl as useReportDialogControl} from '#/components/Dialog'
+import {getLabelingServiceTitle} from '#/lib/moderation'
+import {atoms as a, useBreakpoints, useTheme} from '#/alf'
+import {Button, useButtonContext} from '#/components/Button'
+import {Divider} from '#/components/Divider'
+import * as LabelingServiceCard from '#/components/LabelingServiceCard'
+import {Text} from '#/components/Typography'
+import {ReportDialogProps} from './types'
+
+export function SelectLabelerView({
+ ...props
+}: ReportDialogProps & {
+ labelers: AppBskyLabelerDefs.LabelerViewDetailed[]
+ onSelectLabeler: (v: string) => void
+}) {
+ const t = useTheme()
+ const {_} = useLingui()
+ const {gtMobile} = useBreakpoints()
+
+ return (
+
+
+
+ Select moderator
+
+
+ To whom would you like to send this report?
+
+
+
+
+
+
+ {props.labelers.map(labeler => {
+ return (
+
+ )
+ })}
+
+
+ )
+}
+
+function LabelerButton({
+ labeler,
+}: {
+ labeler: AppBskyLabelerDefs.LabelerViewDetailed
+}) {
+ const t = useTheme()
+ const {hovered, pressed} = useButtonContext()
+ const interacted = hovered || pressed
+
+ return (
+
+
+
+
+
+ @{labeler.creator.handle}
+
+
+
+ )
+}
diff --git a/src/components/ReportDialog/SelectReportOptionView.tsx b/src/components/ReportDialog/SelectReportOptionView.tsx
new file mode 100644
index 0000000000..8219b20951
--- /dev/null
+++ b/src/components/ReportDialog/SelectReportOptionView.tsx
@@ -0,0 +1,186 @@
+import React from 'react'
+import {View} from 'react-native'
+import {AppBskyLabelerDefs} from '@atproto/api'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {ReportOption, useReportOptions} from '#/lib/moderation/useReportOptions'
+import {Link} from '#/components/Link'
+import {DMCA_LINK} from '#/components/ReportDialog/const'
+export {useDialogControl as useReportDialogControl} from '#/components/Dialog'
+
+import {atoms as a, useBreakpoints, useTheme} from '#/alf'
+import {
+ Button,
+ ButtonIcon,
+ ButtonText,
+ useButtonContext,
+} from '#/components/Button'
+import {Divider} from '#/components/Divider'
+import {
+ ChevronLeft_Stroke2_Corner0_Rounded as ChevronLeft,
+ ChevronRight_Stroke2_Corner0_Rounded as ChevronRight,
+} from '#/components/icons/Chevron'
+import {SquareArrowTopRight_Stroke2_Corner0_Rounded as SquareArrowTopRight} from '#/components/icons/SquareArrowTopRight'
+import {Text} from '#/components/Typography'
+import {ReportDialogProps} from './types'
+
+export function SelectReportOptionView({
+ ...props
+}: ReportDialogProps & {
+ labelers: AppBskyLabelerDefs.LabelerViewDetailed[]
+ onSelectReportOption: (reportOption: ReportOption) => void
+ goBack: () => void
+}) {
+ const t = useTheme()
+ const {_} = useLingui()
+ const {gtMobile} = useBreakpoints()
+ const allReportOptions = useReportOptions()
+ const reportOptions = allReportOptions[props.params.type]
+
+ const i18n = React.useMemo(() => {
+ let title = _(msg`Report this content`)
+ let description = _(msg`Why should this content be reviewed?`)
+
+ if (props.params.type === 'account') {
+ title = _(msg`Report this user`)
+ description = _(msg`Why should this user be reviewed?`)
+ } else if (props.params.type === 'post') {
+ title = _(msg`Report this post`)
+ description = _(msg`Why should this post be reviewed?`)
+ } else if (props.params.type === 'list') {
+ title = _(msg`Report this list`)
+ description = _(msg`Why should this list be reviewed?`)
+ } else if (props.params.type === 'feedgen') {
+ title = _(msg`Report this feed`)
+ description = _(msg`Why should this feed be reviewed?`)
+ }
+
+ return {
+ title,
+ description,
+ }
+ }, [_, props.params.type])
+
+ return (
+
+ {props.labelers?.length > 1 ? (
+
+ ) : null}
+
+
+ {i18n.title}
+
+ {i18n.description}
+
+
+
+
+
+
+ {reportOptions.map(reportOption => {
+ return (
+
+ )
+ })}
+
+ {(props.params.type === 'post' || props.params.type === 'account') && (
+
+
+ Need to report a copyright violation?
+
+
+
+ View details
+
+
+
+
+ )}
+
+
+ )
+}
+
+function ReportOptionButton({
+ title,
+ description,
+}: {
+ title: string
+ description: string
+}) {
+ const t = useTheme()
+ const {hovered, pressed} = useButtonContext()
+ const interacted = hovered || pressed
+
+ return (
+
+
+
+ {title}
+
+ {description}
+
+
+
+
+
+
+ )
+}
diff --git a/src/components/ReportDialog/SubmitView.tsx b/src/components/ReportDialog/SubmitView.tsx
new file mode 100644
index 0000000000..892e55489c
--- /dev/null
+++ b/src/components/ReportDialog/SubmitView.tsx
@@ -0,0 +1,263 @@
+import React from 'react'
+import {View} from 'react-native'
+import {AppBskyLabelerDefs} from '@atproto/api'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {getLabelingServiceTitle} from '#/lib/moderation'
+import {ReportOption} from '#/lib/moderation/useReportOptions'
+import {getAgent} from '#/state/session'
+import {CharProgress} from '#/view/com/composer/char-progress/CharProgress'
+import * as Toast from '#/view/com/util/Toast'
+import {atoms as a, native, useTheme} from '#/alf'
+import {Button, ButtonIcon, ButtonText} from '#/components/Button'
+import * as Dialog from '#/components/Dialog'
+import * as Toggle from '#/components/forms/Toggle'
+import {Check_Stroke2_Corner0_Rounded as Check} from '#/components/icons/Check'
+import {ChevronLeft_Stroke2_Corner0_Rounded as ChevronLeft} from '#/components/icons/Chevron'
+import {Loader} from '#/components/Loader'
+import {Text} from '#/components/Typography'
+import {ReportDialogProps} from './types'
+
+export function SubmitView({
+ params,
+ labelers,
+ selectedLabeler,
+ selectedReportOption,
+ goBack,
+ onSubmitComplete,
+}: ReportDialogProps & {
+ labelers: AppBskyLabelerDefs.LabelerViewDetailed[]
+ selectedLabeler: string
+ selectedReportOption: ReportOption
+ goBack: () => void
+ onSubmitComplete: () => void
+}) {
+ const t = useTheme()
+ const {_} = useLingui()
+ const [details, setDetails] = React.useState('')
+ const [submitting, setSubmitting] = React.useState(false)
+ const [selectedServices, setSelectedServices] = React.useState([
+ selectedLabeler,
+ ])
+ const [error, setError] = React.useState('')
+
+ const submit = React.useCallback(async () => {
+ setSubmitting(true)
+ setError('')
+
+ const $type =
+ params.type === 'account'
+ ? 'com.atproto.admin.defs#repoRef'
+ : 'com.atproto.repo.strongRef'
+ const report = {
+ reasonType: selectedReportOption.reason,
+ subject: {
+ $type,
+ ...params,
+ },
+ reason: details,
+ }
+ const results = await Promise.all(
+ selectedServices.map(did =>
+ getAgent()
+ .withProxy('atproto_labeler', did)
+ .createModerationReport(report)
+ .then(
+ _ => true,
+ _ => false,
+ ),
+ ),
+ )
+
+ setSubmitting(false)
+
+ if (results.includes(true)) {
+ Toast.show(_(msg`Thank you. Your report has been sent.`))
+ onSubmitComplete()
+ } else {
+ setError(
+ _(
+ msg`There was an issue sending your report. Please check your internet connection.`,
+ ),
+ )
+ }
+ }, [
+ _,
+ params,
+ details,
+ selectedReportOption,
+ selectedServices,
+ onSubmitComplete,
+ setError,
+ ])
+
+ return (
+
+
+
+
+
+
+ {selectedReportOption.title}
+
+
+ {selectedReportOption.description}
+
+
+
+
+
+
+
+
+ Select the moderation service(s) to report to
+
+
+
+
+ {labelers.map(labeler => {
+ const title = getLabelingServiceTitle({
+ displayName: labeler.creator.displayName,
+ handle: labeler.creator.handle,
+ })
+ return (
+
+
+
+ )
+ })}
+
+
+
+
+
+ Optionally provide additional information below:
+
+
+
+
+
+
+
+
+
+
+
+
+ {!selectedServices.length ||
+ (error && (
+
+ {error ? (
+ error
+ ) : (
+ You must select at least one labeler for a report
+ )}
+
+ ))}
+
+
+
+
+ )
+}
+
+function LabelerToggle({title}: {title: string}) {
+ const t = useTheme()
+ const ctx = Toggle.useItemContext()
+
+ return (
+
+
+
+
+ {title}
+
+
+
+ )
+}
diff --git a/src/components/ReportDialog/const.ts b/src/components/ReportDialog/const.ts
new file mode 100644
index 0000000000..30c9aff88d
--- /dev/null
+++ b/src/components/ReportDialog/const.ts
@@ -0,0 +1 @@
+export const DMCA_LINK = 'https://bsky.social/about/support/copyright'
diff --git a/src/components/ReportDialog/index.tsx b/src/components/ReportDialog/index.tsx
new file mode 100644
index 0000000000..c87d32f9ec
--- /dev/null
+++ b/src/components/ReportDialog/index.tsx
@@ -0,0 +1,102 @@
+import React from 'react'
+import {Pressable, View} from 'react-native'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {ReportOption} from '#/lib/moderation/useReportOptions'
+import {useMyLabelersQuery} from '#/state/queries/preferences'
+export {useDialogControl as useReportDialogControl} from '#/components/Dialog'
+
+import {AppBskyLabelerDefs} from '@atproto/api'
+import {BottomSheetScrollViewMethods} from '@discord/bottom-sheet/src'
+
+import {atoms as a} from '#/alf'
+import * as Dialog from '#/components/Dialog'
+import {useDelayedLoading} from '#/components/hooks/useDelayedLoading'
+import {useOnKeyboardDidShow} from '#/components/hooks/useOnKeyboard'
+import {Loader} from '#/components/Loader'
+import {Text} from '#/components/Typography'
+import {SelectLabelerView} from './SelectLabelerView'
+import {SelectReportOptionView} from './SelectReportOptionView'
+import {SubmitView} from './SubmitView'
+import {ReportDialogProps} from './types'
+
+export function ReportDialog(props: ReportDialogProps) {
+ return (
+
+
+
+
+
+ )
+}
+
+function ReportDialogInner(props: ReportDialogProps) {
+ const {_} = useLingui()
+ const {
+ isLoading: isLabelerLoading,
+ data: labelers,
+ error,
+ } = useMyLabelersQuery()
+ const isLoading = useDelayedLoading(500, isLabelerLoading)
+
+ const ref = React.useRef(null)
+ useOnKeyboardDidShow(() => {
+ ref.current?.scrollToEnd({animated: true})
+ })
+
+ return (
+
+ {isLoading ? (
+
+
+ {/* Here to capture focus for a hot sec to prevent flash */}
+
+
+ ) : error || !labelers ? (
+
+
+ Something went wrong, please try again.
+
+
+ ) : (
+
+ )}
+
+ )
+}
+
+function ReportDialogLoaded(
+ props: ReportDialogProps & {
+ labelers: AppBskyLabelerDefs.LabelerViewDetailed[]
+ },
+) {
+ const [selectedLabeler, setSelectedLabeler] = React.useState<
+ string | undefined
+ >(props.labelers.length === 1 ? props.labelers[0].creator.did : undefined)
+ const [selectedReportOption, setSelectedReportOption] = React.useState<
+ ReportOption | undefined
+ >()
+
+ if (selectedReportOption && selectedLabeler) {
+ return (
+ setSelectedReportOption(undefined)}
+ onSubmitComplete={() => props.control.close()}
+ />
+ )
+ }
+ if (selectedLabeler) {
+ return (
+ setSelectedLabeler(undefined)}
+ onSelectReportOption={setSelectedReportOption}
+ />
+ )
+ }
+ return
+}
diff --git a/src/components/ReportDialog/types.ts b/src/components/ReportDialog/types.ts
new file mode 100644
index 0000000000..0c8a1e0778
--- /dev/null
+++ b/src/components/ReportDialog/types.ts
@@ -0,0 +1,15 @@
+import * as Dialog from '#/components/Dialog'
+
+export type ReportDialogProps = {
+ control: Dialog.DialogOuterProps['control']
+ params:
+ | {
+ type: 'post' | 'list' | 'feedgen' | 'other'
+ uri: string
+ cid: string
+ }
+ | {
+ type: 'account'
+ did: string
+ }
+}
diff --git a/src/components/RichText.tsx b/src/components/RichText.tsx
index 068ee99e07..5cfa0b24f9 100644
--- a/src/components/RichText.tsx
+++ b/src/components/RichText.tsx
@@ -1,11 +1,15 @@
import React from 'react'
-import {RichText as RichTextAPI, AppBskyRichtextFacet} from '@atproto/api'
+import {AppBskyRichtextFacet, RichText as RichTextAPI} from '@atproto/api'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
-import {atoms as a, TextStyleProp} from '#/alf'
-import {InlineLink} from '#/components/Link'
-import {Text} from '#/components/Typography'
-import {toShortUrl} from 'lib/strings/url-helpers'
-import {getAgent} from '#/state/session'
+import {toShortUrl} from '#/lib/strings/url-helpers'
+import {isNative} from '#/platform/detection'
+import {atoms as a, flatten, native, TextStyleProp, useTheme, web} from '#/alf'
+import {useInteractionState} from '#/components/hooks/useInteractionState'
+import {InlineLinkText} from '#/components/Link'
+import {TagMenu, useTagMenuControl} from '#/components/TagMenu'
+import {Text, TextProps} from '#/components/Typography'
const WORD_WRAP = {wordWrap: 1}
@@ -15,34 +19,24 @@ export function RichText({
style,
numberOfLines,
disableLinks,
- resolveFacets = false,
-}: TextStyleProp & {
- value: RichTextAPI | string
- testID?: string
- numberOfLines?: number
- disableLinks?: boolean
- resolveFacets?: boolean
-}) {
- const detected = React.useRef(false)
- const [richText, setRichText] = React.useState(() =>
- value instanceof RichTextAPI ? value : new RichTextAPI({text: value}),
+ selectable,
+ enableTags = false,
+ authorHandle,
+}: TextStyleProp &
+ Pick & {
+ value: RichTextAPI | string
+ testID?: string
+ numberOfLines?: number
+ disableLinks?: boolean
+ enableTags?: boolean
+ authorHandle?: string
+ }) {
+ const richText = React.useMemo(
+ () =>
+ value instanceof RichTextAPI ? value : new RichTextAPI({text: value}),
+ [value],
)
- const styles = [a.leading_normal, style]
-
- React.useEffect(() => {
- if (!resolveFacets) return
-
- async function detectFacets() {
- const rt = new RichTextAPI({text: richText.text})
- await rt.detectFacets(getAgent())
- setRichText(rt)
- }
-
- if (!detected.current) {
- detected.current = true
- detectFacets()
- }
- }, [richText, setRichText, resolveFacets])
+ const styles = [a.leading_snug, flatten(style)]
const {text, facets} = richText
@@ -50,6 +44,7 @@ export function RichText({
if (text.length <= 5 && /^\p{Extended_Pictographic}+$/u.test(text)) {
return (
{segment.text}
- ,
+ ,
)
} else if (link && AppBskyRichtextFacet.validateLink(link).success) {
if (disableLinks) {
els.push(toShortUrl(segment.text))
} else {
els.push(
-
+ shareOnLongPress>
{toShortUrl(segment.text)}
- ,
+ ,
)
}
+ } else if (
+ !disableLinks &&
+ enableTags &&
+ tag &&
+ AppBskyRichtextFacet.validateTag(tag).success
+ ) {
+ els.push(
+ ,
+ )
} else {
els.push(segment.text)
}
@@ -120,6 +135,7 @@ export function RichText({
return (
)
}
+
+function RichTextTag({
+ text,
+ tag,
+ style,
+ selectable,
+ authorHandle,
+}: {
+ text: string
+ tag: string
+ selectable?: boolean
+ authorHandle?: string
+} & TextStyleProp) {
+ const t = useTheme()
+ const {_} = useLingui()
+ const control = useTagMenuControl()
+ const {
+ state: hovered,
+ onIn: onHoverIn,
+ onOut: onHoverOut,
+ } = useInteractionState()
+ const {state: focused, onIn: onFocus, onOut: onBlur} = useInteractionState()
+ const {
+ state: pressed,
+ onIn: onPressIn,
+ onOut: onPressOut,
+ } = useInteractionState()
+
+ const open = React.useCallback(() => {
+ control.open()
+ }, [control])
+
+ /*
+ * N.B. On web, this is wrapped in another pressable comopnent with a11y
+ * labels, etc. That's why only some of these props are applied here.
+ */
+
+ return (
+
+
+
+ {text}
+
+
+
+ )
+}
diff --git a/src/components/TagMenu/index.tsx b/src/components/TagMenu/index.tsx
new file mode 100644
index 0000000000..b235dad95e
--- /dev/null
+++ b/src/components/TagMenu/index.tsx
@@ -0,0 +1,277 @@
+import React from 'react'
+import {View} from 'react-native'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {useNavigation} from '@react-navigation/native'
+
+import {makeSearchLink} from '#/lib/routes/links'
+import {NavigationProp} from '#/lib/routes/types'
+import {isInvalidHandle} from '#/lib/strings/handles'
+import {
+ usePreferencesQuery,
+ useRemoveMutedWordMutation,
+ useUpsertMutedWordsMutation,
+} from '#/state/queries/preferences'
+import {atoms as a, native, useTheme} from '#/alf'
+import {Button, ButtonText} from '#/components/Button'
+import * as Dialog from '#/components/Dialog'
+import {Divider} from '#/components/Divider'
+import {MagnifyingGlass2_Stroke2_Corner0_Rounded as Search} from '#/components/icons/MagnifyingGlass2'
+import {Mute_Stroke2_Corner0_Rounded as Mute} from '#/components/icons/Mute'
+import {Person_Stroke2_Corner0_Rounded as Person} from '#/components/icons/Person'
+import {Link} from '#/components/Link'
+import {Loader} from '#/components/Loader'
+import {Text} from '#/components/Typography'
+
+export function useTagMenuControl() {
+ return Dialog.useDialogControl()
+}
+
+export function TagMenu({
+ children,
+ control,
+ tag,
+ authorHandle,
+}: React.PropsWithChildren<{
+ control: Dialog.DialogOuterProps['control']
+ /**
+ * This should be the sanitized tag value from the facet itself, not the
+ * "display" value with a leading `#`.
+ */
+ tag: string
+ authorHandle?: string
+}>) {
+ const {_} = useLingui()
+ const t = useTheme()
+ const navigation = useNavigation()
+ const {isLoading: isPreferencesLoading, data: preferences} =
+ usePreferencesQuery()
+ const {
+ mutateAsync: upsertMutedWord,
+ variables: optimisticUpsert,
+ reset: resetUpsert,
+ } = useUpsertMutedWordsMutation()
+ const {
+ mutateAsync: removeMutedWord,
+ variables: optimisticRemove,
+ reset: resetRemove,
+ } = useRemoveMutedWordMutation()
+ const displayTag = '#' + tag
+
+ const isMuted = Boolean(
+ (preferences?.moderationPrefs.mutedWords?.find(
+ m => m.value === tag && m.targets.includes('tag'),
+ ) ??
+ optimisticUpsert?.find(
+ m => m.value === tag && m.targets.includes('tag'),
+ )) &&
+ !(optimisticRemove?.value === tag),
+ )
+
+ return (
+ <>
+ {children}
+
+
+
+
+
+ {isPreferencesLoading ? (
+
+
+
+ ) : (
+ <>
+
+ {
+ e.preventDefault()
+
+ control.close(() => {
+ navigation.push('Hashtag', {
+ tag: encodeURIComponent(tag),
+ })
+ })
+
+ return false
+ }}>
+
+
+
+
+ See{' '}
+
+ {displayTag}
+ {' '}
+ posts
+
+
+
+
+
+ {authorHandle && !isInvalidHandle(authorHandle) && (
+ <>
+
+
+ {
+ e.preventDefault()
+
+ control.close(() => {
+ navigation.push('Hashtag', {
+ tag: encodeURIComponent(tag),
+ author: authorHandle,
+ })
+ })
+
+ return false
+ }}>
+
+
+
+
+ See{' '}
+
+ {displayTag}
+ {' '}
+ posts by this user
+
+
+
+
+ >
+ )}
+
+ {preferences ? (
+ <>
+
+
+
+ >
+ ) : null}
+
+
+
+ >
+ )}
+
+
+ >
+ )
+}
diff --git a/src/components/TagMenu/index.web.tsx b/src/components/TagMenu/index.web.tsx
new file mode 100644
index 0000000000..b879466cd3
--- /dev/null
+++ b/src/components/TagMenu/index.web.tsx
@@ -0,0 +1,149 @@
+import React from 'react'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {useNavigation} from '@react-navigation/native'
+
+import {NavigationProp} from '#/lib/routes/types'
+import {isInvalidHandle} from '#/lib/strings/handles'
+import {enforceLen} from '#/lib/strings/helpers'
+import {
+ usePreferencesQuery,
+ useRemoveMutedWordMutation,
+ useUpsertMutedWordsMutation,
+} from '#/state/queries/preferences'
+import {EventStopper} from '#/view/com/util/EventStopper'
+import {NativeDropdown} from '#/view/com/util/forms/NativeDropdown'
+import {web} from '#/alf'
+import * as Dialog from '#/components/Dialog'
+
+export function useTagMenuControl(): Dialog.DialogControlProps {
+ return {
+ id: '',
+ // @ts-ignore
+ ref: null,
+ open: () => {
+ throw new Error(`TagMenu controls are only available on native platforms`)
+ },
+ close: () => {
+ throw new Error(`TagMenu controls are only available on native platforms`)
+ },
+ }
+}
+
+export function TagMenu({
+ children,
+ tag,
+ authorHandle,
+}: React.PropsWithChildren<{
+ /**
+ * This should be the sanitized tag value from the facet itself, not the
+ * "display" value with a leading `#`.
+ */
+ tag: string
+ authorHandle?: string
+}>) {
+ const {_} = useLingui()
+ const navigation = useNavigation()
+ const {data: preferences} = usePreferencesQuery()
+ const {mutateAsync: upsertMutedWord, variables: optimisticUpsert} =
+ useUpsertMutedWordsMutation()
+ const {mutateAsync: removeMutedWord, variables: optimisticRemove} =
+ useRemoveMutedWordMutation()
+ const isMuted = Boolean(
+ (preferences?.moderationPrefs.mutedWords?.find(
+ m => m.value === tag && m.targets.includes('tag'),
+ ) ??
+ optimisticUpsert?.find(
+ m => m.value === tag && m.targets.includes('tag'),
+ )) &&
+ !(optimisticRemove?.value === tag),
+ )
+ const truncatedTag = '#' + enforceLen(tag, 15, true, 'middle')
+
+ const dropdownItems = React.useMemo(() => {
+ return [
+ {
+ label: _(msg`See ${truncatedTag} posts`),
+ onPress() {
+ navigation.push('Hashtag', {
+ tag: encodeURIComponent(tag),
+ })
+ },
+ testID: 'tagMenuSearch',
+ icon: {
+ ios: {
+ name: 'magnifyingglass',
+ },
+ android: '',
+ web: 'magnifying-glass',
+ },
+ },
+ authorHandle &&
+ !isInvalidHandle(authorHandle) && {
+ label: _(msg`See ${truncatedTag} posts by user`),
+ onPress() {
+ navigation.push('Hashtag', {
+ tag: encodeURIComponent(tag),
+ author: authorHandle,
+ })
+ },
+ testID: 'tagMenuSearchByUser',
+ icon: {
+ ios: {
+ name: 'magnifyingglass',
+ },
+ android: '',
+ web: ['far', 'user'],
+ },
+ },
+ preferences && {
+ label: 'separator',
+ },
+ preferences && {
+ label: isMuted
+ ? _(msg`Unmute ${truncatedTag}`)
+ : _(msg`Mute ${truncatedTag}`),
+ onPress() {
+ if (isMuted) {
+ removeMutedWord({value: tag, targets: ['tag']})
+ } else {
+ upsertMutedWord([{value: tag, targets: ['tag']}])
+ }
+ },
+ testID: 'tagMenuMute',
+ icon: {
+ ios: {
+ name: 'speaker.slash',
+ },
+ android: 'ic_menu_sort_alphabetically',
+ web: isMuted ? 'eye' : ['far', 'eye-slash'],
+ },
+ },
+ ].filter(Boolean)
+ }, [
+ _,
+ authorHandle,
+ isMuted,
+ navigation,
+ preferences,
+ tag,
+ truncatedTag,
+ upsertMutedWord,
+ removeMutedWord,
+ ])
+
+ return (
+
+
+ {children}
+
+
+ )
+}
diff --git a/src/components/Typography.tsx b/src/components/Typography.tsx
index b34f51018e..31dd931c6a 100644
--- a/src/components/Typography.tsx
+++ b/src/components/Typography.tsx
@@ -1,7 +1,16 @@
import React from 'react'
-import {Text as RNText, TextStyle, TextProps} from 'react-native'
+import {StyleProp, TextProps as RNTextProps, TextStyle} from 'react-native'
+import {UITextView} from 'react-native-uitextview'
-import {useTheme, atoms, web, flatten} from '#/alf'
+import {isNative} from '#/platform/detection'
+import {atoms, flatten, useTheme, web} from '#/alf'
+
+export type TextProps = RNTextProps & {
+ /**
+ * Lets the user select text, to use the native copy and paste functionality.
+ */
+ selectable?: boolean
+}
/**
* Util to calculate lineHeight from a text size atom and a leading atom
@@ -25,17 +34,17 @@ export function leading<
* If the `lineHeight` value is > 2, we assume it's an absolute value and
* returns it as-is.
*/
-function normalizeTextStyles(styles: TextStyle[]) {
+export function normalizeTextStyles(styles: StyleProp) {
const s = flatten(styles)
// should always be defined on these components
const fontSize = s.fontSize || atoms.text_md.fontSize
if (s?.lineHeight) {
- if (s.lineHeight <= 2) {
+ if (s.lineHeight !== 0 && s.lineHeight <= 2) {
s.lineHeight = Math.round(fontSize * s.lineHeight)
}
- } else {
- s.lineHeight = fontSize
+ } else if (!isNative) {
+ s.lineHeight = s.fontSize
}
return s
@@ -44,27 +53,21 @@ function normalizeTextStyles(styles: TextStyle[]) {
/**
* Our main text component. Use this most of the time.
*/
-export function Text({style, ...rest}: TextProps) {
+export function Text({style, selectable, ...rest}: TextProps) {
const t = useTheme()
const s = normalizeTextStyles([atoms.text_sm, t.atoms.text, flatten(style)])
- return
+
+ return
}
export function createHeadingElement({level}: {level: number}) {
return function HeadingElement({style, ...rest}: TextProps) {
- const t = useTheme()
const attr =
web({
role: 'heading',
'aria-level': level,
}) || {}
- return (
-
- )
+ return
}
}
@@ -78,21 +81,15 @@ export const H4 = createHeadingElement({level: 4})
export const H5 = createHeadingElement({level: 5})
export const H6 = createHeadingElement({level: 6})
export function P({style, ...rest}: TextProps) {
- const t = useTheme()
const attr =
web({
role: 'paragraph',
}) || {}
return (
-
)
}
diff --git a/src/components/dialogs/BirthDateSettings.tsx b/src/components/dialogs/BirthDateSettings.tsx
new file mode 100644
index 0000000000..d831c6002a
--- /dev/null
+++ b/src/components/dialogs/BirthDateSettings.tsx
@@ -0,0 +1,132 @@
+import React from 'react'
+import {View} from 'react-native'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {cleanError} from '#/lib/strings/errors'
+import {logger} from '#/logger'
+import {isIOS, isWeb} from '#/platform/detection'
+import {
+ usePreferencesQuery,
+ UsePreferencesQueryResponse,
+ usePreferencesSetBirthDateMutation,
+} from '#/state/queries/preferences'
+import {ErrorMessage} from '#/view/com/util/error/ErrorMessage'
+import {DateInput} from '#/view/com/util/forms/DateInput'
+import {atoms as a, useTheme} from '#/alf'
+import * as Dialog from '#/components/Dialog'
+import {Loader} from '#/components/Loader'
+import {Button, ButtonIcon, ButtonText} from '../Button'
+import {Text} from '../Typography'
+
+export function BirthDateSettingsDialog({
+ control,
+}: {
+ control: Dialog.DialogControlProps
+}) {
+ const t = useTheme()
+ const {_} = useLingui()
+ const {isLoading, error, data: preferences} = usePreferencesQuery()
+
+ return (
+
+
+
+
+
+
+ My Birthday
+
+
+ This information is not shared with other users.
+
+
+
+ {isLoading ? (
+
+ ) : error || !preferences ? (
+
+ ) : (
+
+ )}
+
+
+
+
+ )
+}
+
+function BirthdayInner({
+ control,
+ preferences,
+}: {
+ control: Dialog.DialogControlProps
+ preferences: UsePreferencesQueryResponse
+}) {
+ const {_} = useLingui()
+ const [date, setDate] = React.useState(preferences.birthDate || new Date())
+ const {
+ isPending,
+ isError,
+ error,
+ mutateAsync: setBirthDate,
+ } = usePreferencesSetBirthDateMutation()
+ const hasChanged = date !== preferences.birthDate
+
+ const onSave = React.useCallback(async () => {
+ try {
+ // skip if date is the same
+ if (hasChanged) {
+ await setBirthDate({birthDate: date})
+ }
+ control.close()
+ } catch (e: any) {
+ logger.error(`setBirthDate failed`, {message: e.message})
+ }
+ }, [date, setBirthDate, control, hasChanged])
+
+ return (
+
+
+
+
+
+ {isError ? (
+
+ ) : undefined}
+
+
+
+
+
+ )
+}
diff --git a/src/components/dialogs/Context.tsx b/src/components/dialogs/Context.tsx
new file mode 100644
index 0000000000..87bd5c2ed7
--- /dev/null
+++ b/src/components/dialogs/Context.tsx
@@ -0,0 +1,29 @@
+import React from 'react'
+
+import * as Dialog from '#/components/Dialog'
+
+type Control = Dialog.DialogOuterProps['control']
+
+type ControlsContext = {
+ mutedWordsDialogControl: Control
+}
+
+const ControlsContext = React.createContext({
+ mutedWordsDialogControl: {} as Control,
+})
+
+export function useGlobalDialogsControlContext() {
+ return React.useContext(ControlsContext)
+}
+
+export function Provider({children}: React.PropsWithChildren<{}>) {
+ const mutedWordsDialogControl = Dialog.useDialogControl()
+ const ctx = React.useMemo(
+ () => ({mutedWordsDialogControl}),
+ [mutedWordsDialogControl],
+ )
+
+ return (
+ {children}
+ )
+}
diff --git a/src/components/dialogs/EmbedConsent.tsx b/src/components/dialogs/EmbedConsent.tsx
new file mode 100644
index 0000000000..c3fefd9f09
--- /dev/null
+++ b/src/components/dialogs/EmbedConsent.tsx
@@ -0,0 +1,119 @@
+import React, {useCallback} from 'react'
+import {View} from 'react-native'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {
+ type EmbedPlayerSource,
+ embedPlayerSources,
+ externalEmbedLabels,
+} from '#/lib/strings/embed-player'
+import {useSetExternalEmbedPref} from '#/state/preferences'
+import {atoms as a, useBreakpoints, useTheme} from '#/alf'
+import * as Dialog from '#/components/Dialog'
+import {Button, ButtonText} from '../Button'
+import {Text} from '../Typography'
+
+export function EmbedConsentDialog({
+ control,
+ source,
+ onAccept,
+}: {
+ control: Dialog.DialogControlProps
+ source: EmbedPlayerSource
+ onAccept: () => void
+}) {
+ const {_} = useLingui()
+ const t = useTheme()
+ const setExternalEmbedPref = useSetExternalEmbedPref()
+ const {gtMobile} = useBreakpoints()
+
+ const onShowAllPress = useCallback(() => {
+ for (const key of embedPlayerSources) {
+ setExternalEmbedPref(key, 'show')
+ }
+ onAccept()
+ control.close()
+ }, [control, onAccept, setExternalEmbedPref])
+
+ const onShowPress = useCallback(() => {
+ setExternalEmbedPref(source, 'show')
+ onAccept()
+ control.close()
+ }, [control, onAccept, setExternalEmbedPref, source])
+
+ const onHidePress = useCallback(() => {
+ setExternalEmbedPref(source, 'hide')
+ control.close()
+ }, [control, setExternalEmbedPref, source])
+
+ return (
+
+
+
+
+
+
+ External Media
+
+
+
+
+
+ This content is hosted by {externalEmbedLabels[source]}. Do you
+ want to enable external media?
+
+
+
+
+
+ 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.
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/src/components/dialogs/MutedWords.tsx b/src/components/dialogs/MutedWords.tsx
new file mode 100644
index 0000000000..0eced11e3d
--- /dev/null
+++ b/src/components/dialogs/MutedWords.tsx
@@ -0,0 +1,375 @@
+import React from 'react'
+import {Keyboard, View} from 'react-native'
+import {AppBskyActorDefs, sanitizeMutedWordValue} from '@atproto/api'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {logger} from '#/logger'
+import {isNative} from '#/platform/detection'
+import {
+ usePreferencesQuery,
+ useRemoveMutedWordMutation,
+ useUpsertMutedWordsMutation,
+} from '#/state/queries/preferences'
+import {
+ atoms as a,
+ native,
+ useBreakpoints,
+ useTheme,
+ ViewStyleProp,
+ web,
+} from '#/alf'
+import {Button, ButtonIcon, ButtonText} from '#/components/Button'
+import * as Dialog from '#/components/Dialog'
+import {useGlobalDialogsControlContext} from '#/components/dialogs/Context'
+import {Divider} from '#/components/Divider'
+import * as Toggle from '#/components/forms/Toggle'
+import {Hashtag_Stroke2_Corner0_Rounded as Hashtag} from '#/components/icons/Hashtag'
+import {PageText_Stroke2_Corner0_Rounded as PageText} from '#/components/icons/PageText'
+import {PlusLarge_Stroke2_Corner0_Rounded as Plus} from '#/components/icons/Plus'
+import {TimesLarge_Stroke2_Corner0_Rounded as X} from '#/components/icons/Times'
+import {Loader} from '#/components/Loader'
+import * as Prompt from '#/components/Prompt'
+import {Text} from '#/components/Typography'
+
+export function MutedWordsDialog() {
+ const {mutedWordsDialogControl: control} = useGlobalDialogsControlContext()
+ return (
+
+
+
+
+ )
+}
+
+function MutedWordsInner({}: {control: Dialog.DialogOuterProps['control']}) {
+ const t = useTheme()
+ const {_} = useLingui()
+ const {gtMobile} = useBreakpoints()
+ const {
+ isLoading: isPreferencesLoading,
+ data: preferences,
+ error: preferencesError,
+ } = usePreferencesQuery()
+ const {isPending, mutateAsync: addMutedWord} = useUpsertMutedWordsMutation()
+ const [field, setField] = React.useState('')
+ const [options, setOptions] = React.useState(['content'])
+ const [error, setError] = React.useState('')
+
+ const submit = React.useCallback(async () => {
+ const sanitizedValue = sanitizeMutedWordValue(field)
+ const targets = ['tag', options.includes('content') && 'content'].filter(
+ Boolean,
+ ) as AppBskyActorDefs.MutedWord['targets']
+
+ if (!sanitizedValue || !targets.length) {
+ setField('')
+ setError(_(msg`Please enter a valid word, tag, or phrase to mute`))
+ return
+ }
+
+ try {
+ // send raw value and rely on SDK as sanitization source of truth
+ await addMutedWord([{value: field, targets}])
+ setField('')
+ } catch (e: any) {
+ logger.error(`Failed to save muted word`, {message: e.message})
+ setError(e.message)
+ }
+ }, [_, field, options, addMutedWord, setField])
+
+ return (
+
+
+
+ Add muted words and tags
+
+
+
+ Posts can be muted based on their text, their tags, or both.
+
+
+
+
+ {
+ if (error) {
+ setError('')
+ }
+ setField(value)
+ }}
+ onSubmitEditing={submit}
+ />
+
+
+
+
+
+
+
+
+ Mute in text & tags
+
+
+
+
+
+
+
+
+
+
+
+ Mute in tags only
+
+
+
+
+
+
+
+
+
+
+ {error && (
+
+
+ {error}
+
+
+ )}
+
+
+
+ We recommend avoiding common words that appear in many posts,
+ since it can result in no posts being shown.
+
+
+
+
+
+
+
+
+ Your muted words
+
+
+ {isPreferencesLoading ? (
+
+ ) : preferencesError || !preferences ? (
+
+
+
+ We're sorry, but we weren't able to load your muted words at
+ this time. Please try again.
+
+
+
+ ) : preferences.moderationPrefs.mutedWords.length ? (
+ [...preferences.moderationPrefs.mutedWords]
+ .reverse()
+ .map((word, i) => (
+
+ ))
+ ) : (
+
+
+ You haven't muted any words or tags yet
+
+
+ )}
+
+
+ {isNative && }
+
+
+
+
+ )
+}
+
+function MutedWordRow({
+ style,
+ word,
+}: ViewStyleProp & {word: AppBskyActorDefs.MutedWord}) {
+ const t = useTheme()
+ const {_} = useLingui()
+ const {isPending, mutateAsync: removeMutedWord} = useRemoveMutedWordMutation()
+ const control = Prompt.usePromptControl()
+
+ const remove = React.useCallback(async () => {
+ control.close()
+ removeMutedWord(word)
+ }, [removeMutedWord, word, control])
+
+ return (
+ <>
+
+
+
+
+ {word.value}
+
+
+
+ {word.targets.map(target => (
+
+
+ {target === 'content' ? _(msg`text`) : _(msg`tag`)}
+
+
+ ))}
+
+
+
+
+ >
+ )
+}
+
+function TargetToggle({children}: React.PropsWithChildren<{}>) {
+ const t = useTheme()
+ const ctx = Toggle.useItemContext()
+ const {gtMobile} = useBreakpoints()
+ return (
+
+ {children}
+
+ )
+}
diff --git a/src/components/dialogs/SwitchAccount.tsx b/src/components/dialogs/SwitchAccount.tsx
new file mode 100644
index 0000000000..645113d4af
--- /dev/null
+++ b/src/components/dialogs/SwitchAccount.tsx
@@ -0,0 +1,61 @@
+import React, {useCallback} from 'react'
+import {View} from 'react-native'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {useAccountSwitcher} from '#/lib/hooks/useAccountSwitcher'
+import {type SessionAccount, useSession} from '#/state/session'
+import {useLoggedOutViewControls} from '#/state/shell/logged-out'
+import {useCloseAllActiveElements} from '#/state/util'
+import {atoms as a} from '#/alf'
+import * as Dialog from '#/components/Dialog'
+import {AccountList} from '../AccountList'
+import {Text} from '../Typography'
+
+export function SwitchAccountDialog({
+ control,
+}: {
+ control: Dialog.DialogControlProps
+}) {
+ const {_} = useLingui()
+ const {currentAccount} = useSession()
+ const {onPressSwitchAccount} = useAccountSwitcher()
+ const {setShowLoggedOut} = useLoggedOutViewControls()
+ const closeAllActiveElements = useCloseAllActiveElements()
+
+ const onSelectAccount = useCallback(
+ (account: SessionAccount) => {
+ if (account.did === currentAccount?.did) {
+ control.close()
+ } else {
+ onPressSwitchAccount(account, 'SwitchAccount')
+ }
+ },
+ [currentAccount, control, onPressSwitchAccount],
+ )
+
+ const onPressAddAccount = useCallback(() => {
+ setShowLoggedOut(true)
+ closeAllActiveElements()
+ }, [setShowLoggedOut, closeAllActiveElements])
+
+ return (
+
+
+
+
+
+
+ Switch Account
+
+
+
+
+
+
+ )
+}
diff --git a/src/components/forms/DateField/index.android.tsx b/src/components/forms/DateField/index.android.tsx
index 83fa285f5f..1830ca4bfd 100644
--- a/src/components/forms/DateField/index.android.tsx
+++ b/src/components/forms/DateField/index.android.tsx
@@ -1,23 +1,14 @@
import React from 'react'
-import {View, Pressable} from 'react-native'
-import DateTimePicker, {
- BaseProps as DateTimePickerProps,
-} from '@react-native-community/datetimepicker'
-
-import {useTheme, atoms} from '#/alf'
-import {Text} from '#/components/Typography'
-import {useInteractionState} from '#/components/hooks/useInteractionState'
-import * as TextField from '#/components/forms/TextField'
-import {CalendarDays_Stroke2_Corner0_Rounded as CalendarDays} from '#/components/icons/CalendarDays'
+import DatePicker from 'react-native-date-picker'
+import {useTheme} from '#/alf'
import {DateFieldProps} from '#/components/forms/DateField/types'
-import {
- localizeDate,
- toSimpleDateString,
-} from '#/components/forms/DateField/utils'
+import {toSimpleDateString} from '#/components/forms/DateField/utils'
+import * as TextField from '#/components/forms/TextField'
+import {DateFieldButton} from './index.shared'
export * as utils from '#/components/forms/DateField/utils'
-export const Label = TextField.Label
+export const LabelText = TextField.LabelText
export function DateField({
value,
@@ -25,84 +16,55 @@ export function DateField({
label,
isInvalid,
testID,
+ accessibilityHint,
}: DateFieldProps) {
const t = useTheme()
const [open, setOpen] = React.useState(false)
- const {
- state: pressed,
- onIn: onPressIn,
- onOut: onPressOut,
- } = useInteractionState()
- const {state: focused, onIn: onFocus, onOut: onBlur} = useInteractionState()
- const {chromeFocus, chromeError, chromeErrorHover} =
- TextField.useSharedInputStyles()
-
- const onChangeInternal = React.useCallback<
- Required['onChange']
- >(
- (_event, date) => {
+ const onChangeInternal = React.useCallback(
+ (date: Date) => {
setOpen(false)
- if (date) {
- const formatted = toSimpleDateString(date)
- onChangeDate(formatted)
- }
+ const formatted = toSimpleDateString(date)
+ onChangeDate(formatted)
},
[onChangeDate, setOpen],
)
- return (
-
- setOpen(true)}
- onPressIn={onPressIn}
- onPressOut={onPressOut}
- onFocus={onFocus}
- onBlur={onBlur}
- style={[
- {
- paddingTop: 16,
- paddingBottom: 16,
- borderColor: 'transparent',
- borderWidth: 2,
- },
- atoms.flex_row,
- atoms.flex_1,
- atoms.w_full,
- atoms.px_lg,
- atoms.rounded_sm,
- t.atoms.bg_contrast_50,
- focused || pressed ? chromeFocus : {},
- isInvalid ? chromeError : {},
- isInvalid && (focused || pressed) ? chromeErrorHover : {},
- ]}>
-
+ const onPress = React.useCallback(() => {
+ setOpen(true)
+ }, [])
-
- {localizeDate(value)}
-
-
+ const onCancel = React.useCallback(() => {
+ setOpen(false)
+ }, [])
+
+ return (
+ <>
+
{open && (
-
)}
-
+ >
)
}
diff --git a/src/components/forms/DateField/index.shared.tsx b/src/components/forms/DateField/index.shared.tsx
new file mode 100644
index 0000000000..1f54bdc8be
--- /dev/null
+++ b/src/components/forms/DateField/index.shared.tsx
@@ -0,0 +1,99 @@
+import React from 'react'
+import {Pressable, View} from 'react-native'
+
+import {android, atoms as a, useTheme, web} from '#/alf'
+import * as TextField from '#/components/forms/TextField'
+import {useInteractionState} from '#/components/hooks/useInteractionState'
+import {CalendarDays_Stroke2_Corner0_Rounded as CalendarDays} from '#/components/icons/CalendarDays'
+import {Text} from '#/components/Typography'
+import {localizeDate} from './utils'
+
+// looks like a TextField.Input, but is just a button. It'll do something different on each platform on press
+// iOS: open a dialog with an inline date picker
+// Android: open the date picker modal
+
+export function DateFieldButton({
+ label,
+ value,
+ onPress,
+ isInvalid,
+ accessibilityHint,
+}: {
+ label: string
+ value: string
+ onPress: () => void
+ isInvalid?: boolean
+ accessibilityHint?: string
+}) {
+ const t = useTheme()
+
+ const {
+ state: pressed,
+ onIn: onPressIn,
+ onOut: onPressOut,
+ } = useInteractionState()
+ const {
+ state: hovered,
+ onIn: onHoverIn,
+ onOut: onHoverOut,
+ } = useInteractionState()
+ const {state: focused, onIn: onFocus, onOut: onBlur} = useInteractionState()
+
+ const {chromeHover, chromeFocus, chromeError, chromeErrorHover} =
+ TextField.useSharedInputStyles()
+
+ return (
+
+
+
+
+ {localizeDate(value)}
+
+
+
+ )
+}
diff --git a/src/components/forms/DateField/index.tsx b/src/components/forms/DateField/index.tsx
index c359a9d460..e231ac5baf 100644
--- a/src/components/forms/DateField/index.tsx
+++ b/src/components/forms/DateField/index.tsx
@@ -1,16 +1,19 @@
import React from 'react'
import {View} from 'react-native'
-import DateTimePicker, {
- DateTimePickerEvent,
-} from '@react-native-community/datetimepicker'
+import DatePicker from 'react-native-date-picker'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
-import {useTheme, atoms} from '#/alf'
-import * as TextField from '#/components/forms/TextField'
-import {toSimpleDateString} from '#/components/forms/DateField/utils'
+import {atoms as a, useTheme} from '#/alf'
+import {Button, ButtonText} from '#/components/Button'
+import * as Dialog from '#/components/Dialog'
import {DateFieldProps} from '#/components/forms/DateField/types'
+import {toSimpleDateString} from '#/components/forms/DateField/utils'
+import * as TextField from '#/components/forms/TextField'
+import {DateFieldButton} from './index.shared'
export * as utils from '#/components/forms/DateField/utils'
-export const Label = TextField.Label
+export const LabelText = TextField.LabelText
/**
* Date-only input. Accepts a date in the format YYYY-MM-DD, and reports date
@@ -24,11 +27,15 @@ export function DateField({
onChangeDate,
testID,
label,
+ isInvalid,
+ accessibilityHint,
}: DateFieldProps) {
+ const {_} = useLingui()
const t = useTheme()
+ const control = Dialog.useDialogControl()
const onChangeInternal = React.useCallback(
- (event: DateTimePickerEvent, date: Date | undefined) => {
+ (date: Date | undefined) => {
if (date) {
const formatted = toSimpleDateString(date)
onChangeDate(formatted)
@@ -38,19 +45,44 @@ export function DateField({
)
return (
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+ >
)
}
diff --git a/src/components/forms/DateField/index.web.tsx b/src/components/forms/DateField/index.web.tsx
index 32f38a5d16..b764620e33 100644
--- a/src/components/forms/DateField/index.web.tsx
+++ b/src/components/forms/DateField/index.web.tsx
@@ -1,14 +1,15 @@
import React from 'react'
-import {TextInput, TextInputProps, StyleSheet} from 'react-native'
+import {StyleSheet, TextInput, TextInputProps} from 'react-native'
// @ts-ignore
import {unstable_createElement} from 'react-native-web'
-import * as TextField from '#/components/forms/TextField'
-import {toSimpleDateString} from '#/components/forms/DateField/utils'
import {DateFieldProps} from '#/components/forms/DateField/types'
+import {toSimpleDateString} from '#/components/forms/DateField/utils'
+import * as TextField from '#/components/forms/TextField'
+import {CalendarDays_Stroke2_Corner0_Rounded as CalendarDays} from '#/components/icons/CalendarDays'
export * as utils from '#/components/forms/DateField/utils'
-export const Label = TextField.Label
+export const LabelText = TextField.LabelText
const InputBase = React.forwardRef(
({style, ...props}, ref) => {
@@ -37,6 +38,7 @@ export function DateField({
label,
isInvalid,
testID,
+ accessibilityHint,
}: DateFieldProps) {
const handleOnChange = React.useCallback(
(e: any) => {
@@ -52,12 +54,14 @@ export function DateField({
return (
+
{}}
testID={testID}
+ accessibilityHint={accessibilityHint}
/>
)
diff --git a/src/components/forms/DateField/types.ts b/src/components/forms/DateField/types.ts
index 129f5672d4..5400cf9037 100644
--- a/src/components/forms/DateField/types.ts
+++ b/src/components/forms/DateField/types.ts
@@ -4,4 +4,5 @@ export type DateFieldProps = {
label: string
isInvalid?: boolean
testID?: string
+ accessibilityHint?: string
}
diff --git a/src/components/forms/FormError.tsx b/src/components/forms/FormError.tsx
new file mode 100644
index 0000000000..8ab6e3f357
--- /dev/null
+++ b/src/components/forms/FormError.tsx
@@ -0,0 +1,30 @@
+import React from 'react'
+import {View} from 'react-native'
+
+import {atoms as a, useTheme} from '#/alf'
+import {Warning_Stroke2_Corner0_Rounded as Warning} from '#/components/icons/Warning'
+import {Text} from '#/components/Typography'
+
+export function FormError({error}: {error?: string}) {
+ const t = useTheme()
+
+ if (!error) return null
+
+ return (
+
+
+
+
+ {error}
+
+
+
+ )
+}
diff --git a/src/components/forms/HostingProvider.tsx b/src/components/forms/HostingProvider.tsx
new file mode 100644
index 0000000000..4f3767ece1
--- /dev/null
+++ b/src/components/forms/HostingProvider.tsx
@@ -0,0 +1,96 @@
+import React from 'react'
+import {Keyboard, View} from 'react-native'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {toNiceDomain} from '#/lib/strings/url-helpers'
+import {isAndroid} from '#/platform/detection'
+import {ServerInputDialog} from '#/view/com/auth/server-input'
+import {atoms as a, useTheme} from '#/alf'
+import {Globe_Stroke2_Corner0_Rounded as Globe} from '#/components/icons/Globe'
+import {PencilLine_Stroke2_Corner0_Rounded as Pencil} from '#/components/icons/Pencil'
+import {Button} from '../Button'
+import {useDialogControl} from '../Dialog'
+import {Text} from '../Typography'
+
+export function HostingProvider({
+ serviceUrl,
+ onSelectServiceUrl,
+ onOpenDialog,
+}: {
+ serviceUrl: string
+ onSelectServiceUrl: (provider: string) => void
+ onOpenDialog?: () => void
+}) {
+ const serverInputControl = useDialogControl()
+ const t = useTheme()
+ const {_} = useLingui()
+
+ const onPressSelectService = React.useCallback(() => {
+ Keyboard.dismiss()
+ serverInputControl.open()
+ if (onOpenDialog) {
+ onOpenDialog()
+ }
+ }, [onOpenDialog, serverInputControl])
+
+ return (
+ <>
+
+
+ >
+ )
+}
diff --git a/src/components/forms/TextField.tsx b/src/components/forms/TextField.tsx
index ebf2e47506..73a660ea6c 100644
--- a/src/components/forms/TextField.tsx
+++ b/src/components/forms/TextField.tsx
@@ -1,19 +1,20 @@
import React from 'react'
import {
- View,
+ AccessibilityProps,
+ StyleSheet,
TextInput,
TextInputProps,
TextStyle,
+ View,
ViewStyle,
- StyleSheet,
- AccessibilityProps,
} from 'react-native'
+import {mergeRefs} from '#/lib/merge-refs'
import {HITSLOP_20} from 'lib/constants'
-import {useTheme, atoms as a, web, tokens, android} from '#/alf'
-import {Text} from '#/components/Typography'
+import {android, atoms as a, useTheme, web} from '#/alf'
import {useInteractionState} from '#/components/hooks/useInteractionState'
import {Props as SVGIconProps} from '#/components/icons/common'
+import {Text} from '#/components/Typography'
const Context = React.createContext<{
inputRef: React.RefObject | null
@@ -72,7 +73,7 @@ export function Root({children, isInvalid = false}: RootProps) {
return (
inputRef.current?.focus(),
onMouseOver: onHoverIn,
@@ -110,7 +111,7 @@ export function useSharedInputStyles() {
{
backgroundColor:
t.name === 'light' ? t.palette.negative_25 : t.palette.negative_900,
- borderColor: tokens.color.red_500,
+ borderColor: t.palette.negative_500,
},
]
@@ -125,9 +126,10 @@ export function useSharedInputStyles() {
export type InputProps = Omit & {
label: string
- value: string
- onChangeText: (value: string) => void
+ value?: string
+ onChangeText?: (value: string) => void
isInvalid?: boolean
+ inputRef?: React.RefObject
}
export function createInput(Component: typeof TextInput) {
@@ -137,6 +139,7 @@ export function createInput(Component: typeof TextInput) {
value,
onChangeText,
isInvalid,
+ inputRef,
...rest
}: InputProps) {
const t = useTheme()
@@ -161,19 +164,22 @@ export function createInput(Component: typeof TextInput) {
)
}
+ const refs = mergeRefs([ctx.inputRef, inputRef!].filter(Boolean))
+
return (
<>
) {
@@ -271,7 +277,7 @@ export function Icon({icon: Comp}: {icon: React.ComponentType}) {
}) {
)
}
-export function Suffix({
+export function SuffixText({
children,
label,
accessibilityHint,
diff --git a/src/components/forms/Toggle.tsx b/src/components/forms/Toggle.tsx
index 9369423f20..7285e5faca 100644
--- a/src/components/forms/Toggle.tsx
+++ b/src/components/forms/Toggle.tsx
@@ -2,9 +2,17 @@ import React from 'react'
import {Pressable, View, ViewStyle} from 'react-native'
import {HITSLOP_10} from 'lib/constants'
-import {useTheme, atoms as a, web, native, flatten, ViewStyleProp} from '#/alf'
-import {Text} from '#/components/Typography'
+import {
+ atoms as a,
+ flatten,
+ native,
+ TextStyleProp,
+ useTheme,
+ ViewStyleProp,
+} from '#/alf'
import {useInteractionState} from '#/components/hooks/useInteractionState'
+import {CheckThick_Stroke2_Corner0_Rounded as Checkmark} from '#/components/icons/Check'
+import {Text} from '#/components/Typography'
export type ItemState = {
name: string
@@ -219,20 +227,17 @@ export function Item({
onPressOut={onPressOut}
onFocus={onFocus}
onBlur={onBlur}
- style={[
- a.flex_row,
- a.align_center,
- a.gap_sm,
- focused ? web({outline: 'none'}) : {},
- flatten(style),
- ]}>
+ style={[a.flex_row, a.align_center, a.gap_sm, flatten(style)]}>
{typeof children === 'function' ? children(state) : children}
)
}
-export function Label({children}: React.PropsWithChildren<{}>) {
+export function LabelText({
+ children,
+ style,
+}: React.PropsWithChildren) {
const t = useTheme()
const {disabled} = useItemContext()
return (
@@ -241,11 +246,14 @@ export function Label({children}: React.PropsWithChildren<{}>) {
a.font_bold,
{
userSelect: 'none',
- color: disabled ? t.palette.contrast_400 : t.palette.contrast_600,
+ color: disabled
+ ? t.atoms.text_contrast_low.color
+ : t.atoms.text_contrast_high.color,
},
native({
paddingTop: 3,
}),
+ flatten(style),
]}>
{children}
@@ -256,7 +264,6 @@ export function Label({children}: React.PropsWithChildren<{}>) {
export function createSharedToggleStyles({
theme: t,
hovered,
- focused,
selected,
disabled,
isInvalid,
@@ -279,7 +286,7 @@ export function createSharedToggleStyles({
borderColor: t.palette.primary_500,
})
- if (hovered || focused) {
+ if (hovered) {
baseHover.push({
backgroundColor:
t.name === 'light' ? t.palette.primary_100 : t.palette.primary_800,
@@ -288,7 +295,7 @@ export function createSharedToggleStyles({
})
}
} else {
- if (hovered || focused) {
+ if (hovered) {
baseHover.push({
backgroundColor:
t.name === 'light' ? t.palette.contrast_50 : t.palette.contrast_100,
@@ -300,16 +307,16 @@ export function createSharedToggleStyles({
if (isInvalid) {
base.push({
backgroundColor:
- t.name === 'light' ? t.palette.negative_25 : t.palette.negative_900,
+ t.name === 'light' ? t.palette.negative_25 : t.palette.negative_975,
borderColor:
t.name === 'light' ? t.palette.negative_300 : t.palette.negative_800,
})
- if (hovered || focused) {
+ if (hovered) {
baseHover.push({
backgroundColor:
t.name === 'light' ? t.palette.negative_25 : t.palette.negative_900,
- borderColor: t.palette.negative_500,
+ borderColor: t.palette.negative_600,
})
}
}
@@ -331,15 +338,14 @@ export function createSharedToggleStyles({
export function Checkbox() {
const t = useTheme()
const {selected, hovered, focused, disabled, isInvalid} = useItemContext()
- const {baseStyles, baseHoverStyles, indicatorStyles} =
- createSharedToggleStyles({
- theme: t,
- hovered,
- focused,
- selected,
- disabled,
- isInvalid,
- })
+ const {baseStyles, baseHoverStyles} = createSharedToggleStyles({
+ theme: t,
+ hovered,
+ focused,
+ selected,
+ disabled,
+ isInvalid,
+ })
return (
- {selected ? (
-
- ) : null}
+ {selected ? : null}
)
}
@@ -399,7 +391,7 @@ export function Switch() {
width: 30,
},
baseStyles,
- hovered || focused ? baseHoverStyles : {},
+ hovered ? baseHoverStyles : {},
]}>
{selected ? (
&
- AccessibilityProps &
- React.PropsWithChildren<{testID?: string}>
+type ItemProps = Omit &
+ AccessibilityProps & {
+ children: React.ReactElement
+ testID?: string
+ }
export type GroupProps = Omit & {
multiple?: boolean
@@ -45,49 +46,42 @@ function ButtonInner({children}: React.PropsWithChildren<{}>) {
const t = useTheme()
const state = Toggle.useItemContext()
- const {baseStyles, hoverStyles, activeStyles, textStyles} =
- React.useMemo(() => {
- const base: ViewStyle[] = []
- const hover: ViewStyle[] = []
- const active: ViewStyle[] = []
- const text: TextStyle[] = []
+ const {baseStyles, hoverStyles, activeStyles} = React.useMemo(() => {
+ const base: ViewStyle[] = []
+ const hover: ViewStyle[] = []
+ const active: ViewStyle[] = []
- hover.push(
- t.name === 'light' ? t.atoms.bg_contrast_100 : t.atoms.bg_contrast_25,
- )
+ hover.push(
+ t.name === 'light' ? t.atoms.bg_contrast_100 : t.atoms.bg_contrast_25,
+ )
- if (state.selected) {
- active.push({
- backgroundColor: t.palette.contrast_800,
- })
- text.push(t.atoms.text_inverted)
- hover.push({
- backgroundColor: t.palette.contrast_800,
- })
-
- if (state.disabled) {
- active.push({
- backgroundColor: t.palette.contrast_500,
- })
- }
- }
+ if (state.selected) {
+ active.push({
+ backgroundColor: t.palette.contrast_800,
+ })
+ hover.push({
+ backgroundColor: t.palette.contrast_800,
+ })
if (state.disabled) {
- base.push({
- backgroundColor: t.palette.contrast_100,
- })
- text.push({
- opacity: 0.5,
+ active.push({
+ backgroundColor: t.palette.contrast_500,
})
}
+ }
- return {
- baseStyles: base,
- hoverStyles: hover,
- activeStyles: active,
- textStyles: text,
- }
- }, [t, state])
+ if (state.disabled) {
+ base.push({
+ backgroundColor: t.palette.contrast_100,
+ })
+ }
+
+ return {
+ baseStyles: base,
+ hoverStyles: hover,
+ activeStyles: active,
+ }
+ }, [t, state])
return (
) {
native({
paddingBottom: 10,
}),
- a.px_sm,
+ a.px_md,
t.atoms.bg,
t.atoms.border_contrast_low,
baseStyles,
activeStyles,
- (state.hovered || state.focused || state.pressed) && hoverStyles,
+ (state.hovered || state.pressed) && hoverStyles,
]}>
- {typeof children === 'string' ? (
-
- {children}
-
- ) : (
- children
- )}
+ {children}
)
}
+
+export function ButtonText({children}: {children: React.ReactNode}) {
+ const t = useTheme()
+ const state = Toggle.useItemContext()
+
+ const textStyles = React.useMemo(() => {
+ const text: TextStyle[] = []
+ if (state.selected) {
+ text.push(t.atoms.text_inverted)
+ }
+ if (state.disabled) {
+ text.push({
+ opacity: 0.5,
+ })
+ }
+ return text
+ }, [t, state])
+
+ return (
+
+ {children}
+
+ )
+}
diff --git a/src/components/hooks/useDelayedLoading.ts b/src/components/hooks/useDelayedLoading.ts
new file mode 100644
index 0000000000..6c7e2ede06
--- /dev/null
+++ b/src/components/hooks/useDelayedLoading.ts
@@ -0,0 +1,15 @@
+import React from 'react'
+
+export function useDelayedLoading(delay: number, initialState: boolean = true) {
+ const [isLoading, setIsLoading] = React.useState(initialState)
+
+ React.useEffect(() => {
+ let timeout: NodeJS.Timeout
+ // on initial load, show a loading spinner for a hot sec to prevent flash
+ if (isLoading) timeout = setTimeout(() => setIsLoading(false), delay)
+
+ return () => timeout && clearTimeout(timeout)
+ }, [isLoading, delay])
+
+ return isLoading
+}
diff --git a/src/components/hooks/useOnKeyboard.ts b/src/components/hooks/useOnKeyboard.ts
new file mode 100644
index 0000000000..5de681a42a
--- /dev/null
+++ b/src/components/hooks/useOnKeyboard.ts
@@ -0,0 +1,12 @@
+import React from 'react'
+import {Keyboard} from 'react-native'
+
+export function useOnKeyboardDidShow(cb: () => unknown) {
+ React.useEffect(() => {
+ const subscription = Keyboard.addListener('keyboardDidShow', cb)
+
+ return () => {
+ subscription.remove()
+ }
+ }, [cb])
+}
diff --git a/src/components/icons/ArrowTriangle.tsx b/src/components/icons/ArrowTriangle.tsx
new file mode 100644
index 0000000000..b27b719aef
--- /dev/null
+++ b/src/components/icons/ArrowTriangle.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const ArrowTriangleBottom_Stroke2_Corner1_Rounded = createSinglePathSVG({
+ path: 'M4.213 6.886c-.673-1.35.334-2.889 1.806-2.889H17.98c1.472 0 2.479 1.539 1.806 2.89l-5.982 11.997c-.74 1.484-2.87 1.484-3.61 0L4.213 6.886Z',
+})
diff --git a/src/components/icons/Bars.tsx b/src/components/icons/Bars.tsx
new file mode 100644
index 0000000000..7b1415a4bc
--- /dev/null
+++ b/src/components/icons/Bars.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const Bars3_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M3 5a1 1 0 0 0 0 2h18a1 1 0 1 0 0-2H3Zm-1 7a1 1 0 0 1 1-1h18a1 1 0 1 1 0 2H3a1 1 0 0 1-1-1Zm0 6a1 1 0 0 1 1-1h18a1 1 0 1 1 0 2H3a1 1 0 0 1-1-1Z',
+})
diff --git a/src/components/icons/Bubble.tsx b/src/components/icons/Bubble.tsx
new file mode 100644
index 0000000000..d4e08f6d29
--- /dev/null
+++ b/src/components/icons/Bubble.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const BubbleQuestion_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M5.002 17.036V5h14v12.036h-3.986a1 1 0 0 0-.639.23l-2.375 1.968-2.344-1.965a1 1 0 0 0-.643-.233H5.002ZM20.002 3h-16a1 1 0 0 0-1 1v14.036a1 1 0 0 0 1 1h4.65l2.704 2.266a1 1 0 0 0 1.28.004l2.74-2.27h4.626a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1Zm-7.878 3.663c-1.39 0-2.5 1.135-2.5 2.515a1 1 0 0 0 2 0c0-.294.232-.515.5-.515a.507.507 0 0 1 .489.6.174.174 0 0 1-.027.048 1.1 1.1 0 0 1-.267.226c-.508.345-1.128.923-1.286 1.978a1 1 0 1 0 1.978.297.762.762 0 0 1 .14-.359c.063-.086.155-.169.293-.262.436-.297 1.18-.885 1.18-2.013 0-1.38-1.11-2.515-2.5-2.515ZM12 15.75a1.25 1.25 0 1 1 0-2.5 1.25 1.25 0 0 1 0 2.5Z',
+})
diff --git a/src/components/icons/Calendar.tsx b/src/components/icons/Calendar.tsx
new file mode 100644
index 0000000000..b3816f28b5
--- /dev/null
+++ b/src/components/icons/Calendar.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const Calendar_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M8 2a1 1 0 0 1 1 1v1h6V3a1 1 0 1 1 2 0v1h2a2 2 0 0 1 2 2v13a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2V3a1 1 0 0 1 1-1ZM5 6v3h14V6H5Zm14 5H5v8h14v-8Z',
+})
diff --git a/src/components/icons/Camera.tsx b/src/components/icons/Camera.tsx
new file mode 100644
index 0000000000..ced8e7442e
--- /dev/null
+++ b/src/components/icons/Camera.tsx
@@ -0,0 +1,9 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const Camera_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M8.371 3.89A2 2 0 0 1 10.035 3h3.93a2 2 0 0 1 1.664.89L17.035 6H20a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h2.965L8.37 3.89ZM13.965 5h-3.93L8.63 7.11A2 2 0 0 1 6.965 8H4v11h16V8h-2.965a2 2 0 0 1-1.664-.89L13.965 5ZM12 11a2 2 0 1 0 0 4 2 2 0 0 0 0-4Zm-4 2a4 4 0 1 1 8 0 4 4 0 0 1-8 0Z',
+})
+
+export const Camera_Filled_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M8.371 3.89A2 2 0 0 1 10.035 3h3.93a2 2 0 0 1 1.664.89L17.035 6H20a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h2.965L8.37 3.89ZM12 9a3.5 3.5 0 1 0 0 7 3.5 3.5 0 0 0 0-7Z',
+})
diff --git a/src/components/icons/Check.tsx b/src/components/icons/Check.tsx
index 24316c7849..fe9883baf8 100644
--- a/src/components/icons/Check.tsx
+++ b/src/components/icons/Check.tsx
@@ -3,3 +3,7 @@ import {createSinglePathSVG} from './TEMPLATE'
export const Check_Stroke2_Corner0_Rounded = createSinglePathSVG({
path: 'M21.59 3.193a1 1 0 0 1 .217 1.397l-11.706 16a1 1 0 0 1-1.429.193l-6.294-5a1 1 0 1 1 1.244-1.566l5.48 4.353 11.09-15.16a1 1 0 0 1 1.398-.217Z',
})
+
+export const CheckThick_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M21.474 2.98a2.5 2.5 0 0 1 .545 3.494l-10.222 14a2.5 2.5 0 0 1-3.528.52L2.49 16.617a2.5 2.5 0 0 1 3.018-3.986l3.75 2.84L17.98 3.525a2.5 2.5 0 0 1 3.493-.545Z',
+})
diff --git a/src/components/icons/Chevron.tsx b/src/components/icons/Chevron.tsx
index b1a9deea0b..a04e6e0092 100644
--- a/src/components/icons/Chevron.tsx
+++ b/src/components/icons/Chevron.tsx
@@ -7,3 +7,11 @@ export const ChevronLeft_Stroke2_Corner0_Rounded = createSinglePathSVG({
export const ChevronRight_Stroke2_Corner0_Rounded = createSinglePathSVG({
path: 'M8.293 3.293a1 1 0 0 1 1.414 0l8 8a1 1 0 0 1 0 1.414l-8 8a1 1 0 0 1-1.414-1.414L15.586 12 8.293 4.707a1 1 0 0 1 0-1.414Z',
})
+
+export const ChevronTop_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M12 6a1 1 0 0 1 .707.293l8 8a1 1 0 0 1-1.414 1.414L12 8.414l-7.293 7.293a1 1 0 0 1-1.414-1.414l8-8A1 1 0 0 1 12 6Z',
+})
+
+export const ChevronBottom_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M3.293 8.293a1 1 0 0 1 1.414 0L12 15.586l7.293-7.293a1 1 0 1 1 1.414 1.414l-8 8a1 1 0 0 1-1.414 0l-8-8a1 1 0 0 1 0-1.414Z',
+})
diff --git a/src/components/icons/CircleBanSign.tsx b/src/components/icons/CircleBanSign.tsx
new file mode 100644
index 0000000000..543985d43a
--- /dev/null
+++ b/src/components/icons/CircleBanSign.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const CircleBanSign_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M12 4a8 8 0 0 0-6.32 12.906L16.906 5.68A7.962 7.962 0 0 0 12 4Zm6.32 3.094L7.094 18.32A8 8 0 0 0 18.32 7.094ZM2 12C2 6.477 6.477 2 12 2a9.972 9.972 0 0 1 7.071 2.929A9.972 9.972 0 0 1 22 12c0 5.523-4.477 10-10 10a9.972 9.972 0 0 1-7.071-2.929A9.972 9.972 0 0 1 2 12Z',
+})
diff --git a/src/components/icons/Clipboard.tsx b/src/components/icons/Clipboard.tsx
new file mode 100644
index 0000000000..0135992b4c
--- /dev/null
+++ b/src/components/icons/Clipboard.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const Clipboard_Stroke2_Corner2_Rounded = createSinglePathSVG({
+ path: 'M8.17 4A3.001 3.001 0 0 1 11 2h2c1.306 0 2.418.835 2.83 2H17a3 3 0 0 1 3 3v12a3 3 0 0 1-3 3H7a3 3 0 0 1-3-3V7a3 3 0 0 1 3-3h1.17ZM8 6H7a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V7a1 1 0 0 0-1-1h-1v1a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1V6Zm6 0V5a1 1 0 0 0-1-1h-2a1 1 0 0 0-1 1v1h4Z',
+})
diff --git a/src/components/icons/DotGrid.tsx b/src/components/icons/DotGrid.tsx
new file mode 100644
index 0000000000..c50d7a440f
--- /dev/null
+++ b/src/components/icons/DotGrid.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const DotGrid_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M2 12a2 2 0 1 1 4 0 2 2 0 0 1-4 0Zm16 0a2 2 0 1 1 4 0 2 2 0 0 1-4 0Zm-6-2a2 2 0 1 0 0 4 2 2 0 0 0 0-4Z',
+})
diff --git a/src/components/icons/Envelope.tsx b/src/components/icons/Envelope.tsx
new file mode 100644
index 0000000000..8e40346cdc
--- /dev/null
+++ b/src/components/icons/Envelope.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const Envelope_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M4.568 4h14.864c.252 0 .498 0 .706.017.229.019.499.063.77.201a2 2 0 0 1 .874.874c.138.271.182.541.201.77.017.208.017.454.017.706v10.864c0 .252 0 .498-.017.706a2.022 2.022 0 0 1-.201.77 2 2 0 0 1-.874.874 2.022 2.022 0 0 1-.77.201c-.208.017-.454.017-.706.017H4.568c-.252 0-.498 0-.706-.017a2.022 2.022 0 0 1-.77-.201 2 2 0 0 1-.874-.874 2.022 2.022 0 0 1-.201-.77C2 17.93 2 17.684 2 17.432V6.568c0-.252 0-.498.017-.706.019-.229.063-.499.201-.77a2 2 0 0 1 .874-.874c.271-.138.541-.182.77-.201C4.07 4 4.316 4 4.568 4Zm.456 2L12 11.708 18.976 6H5.024ZM20 7.747l-6.733 5.509a2 2 0 0 1-2.534 0L4 7.746V17.4a8.187 8.187 0 0 0 .011.589h.014c.116.01.278.011.575.011h14.8a8.207 8.207 0 0 0 .589-.012v-.013c.01-.116.011-.279.011-.575V7.747Z',
+})
diff --git a/src/components/icons/Filter.tsx b/src/components/icons/Filter.tsx
new file mode 100644
index 0000000000..02ac1c71b4
--- /dev/null
+++ b/src/components/icons/Filter.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const Filter_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M3 4a1 1 0 0 1 1-1h16a1 1 0 0 1 1 1v4a1 1 0 0 1-.293.707L15 14.414V20a1 1 0 0 1-.758.97l-4 1A1 1 0 0 1 9 21v-6.586L3.293 8.707A1 1 0 0 1 3 8V4Zm2 1v2.586l5.707 5.707A1 1 0 0 1 11 14v5.72l2-.5V14a1 1 0 0 1 .293-.707L19 7.586V5H5Z',
+})
diff --git a/src/components/icons/Flag.tsx b/src/components/icons/Flag.tsx
new file mode 100644
index 0000000000..d986db75a3
--- /dev/null
+++ b/src/components/icons/Flag.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const Flag_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M4 4a2 2 0 0 1 2-2h13.131c1.598 0 2.55 1.78 1.665 3.11L18.202 9l2.594 3.89c.886 1.33-.067 3.11-1.665 3.11H6v5a1 1 0 1 1-2 0V4Zm2 10h13.131l-2.593-3.89a2 2 0 0 1 0-2.22L19.13 4H6v10Z',
+})
diff --git a/src/components/icons/Gear.tsx b/src/components/icons/Gear.tsx
new file mode 100644
index 0000000000..980b7413bd
--- /dev/null
+++ b/src/components/icons/Gear.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const SettingsGear2_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M11.1 2a1 1 0 0 0-.832.445L8.851 4.57 6.6 4.05a1 1 0 0 0-.932.268l-1.35 1.35a1 1 0 0 0-.267.932l.52 2.251-2.126 1.417A1 1 0 0 0 2 11.1v1.8a1 1 0 0 0 .445.832l2.125 1.417-.52 2.251a1 1 0 0 0 .268.932l1.35 1.35a1 1 0 0 0 .932.267l2.251-.52 1.417 2.126A1 1 0 0 0 11.1 22h1.8a1 1 0 0 0 .832-.445l1.417-2.125 2.251.52a1 1 0 0 0 .932-.268l1.35-1.35a1 1 0 0 0 .267-.932l-.52-2.251 2.126-1.417A1 1 0 0 0 22 12.9v-1.8a1 1 0 0 0-.445-.832L19.43 8.851l.52-2.251a1 1 0 0 0-.268-.932l-1.35-1.35a1 1 0 0 0-.932-.267l-2.251.52-1.417-2.126A1 1 0 0 0 12.9 2h-1.8Zm-.968 4.255L11.635 4h.73l1.503 2.255a1 1 0 0 0 1.057.42l2.385-.551.566.566-.55 2.385a1 1 0 0 0 .42 1.057L20 11.635v.73l-2.255 1.503a1 1 0 0 0-.42 1.057l.551 2.385-.566.566-2.385-.55a1 1 0 0 0-1.057.42L12.365 20h-.73l-1.503-2.255a1 1 0 0 0-1.057-.42l-2.385.551-.566-.566.55-2.385a1 1 0 0 0-.42-1.057L4 12.365v-.73l2.255-1.503a1 1 0 0 0 .42-1.057L6.123 6.69l.566-.566 2.385.55a1 1 0 0 0 1.057-.42ZM8 12a4 4 0 1 1 8 0 4 4 0 0 1-8 0Zm4-2a2 2 0 1 0 0 4 2 2 0 0 0 0-4Z',
+})
diff --git a/src/components/icons/Group.tsx b/src/components/icons/Group.tsx
new file mode 100644
index 0000000000..9e5ab8893a
--- /dev/null
+++ b/src/components/icons/Group.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const Group3_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M8 5a2 2 0 1 0 0 4 2 2 0 0 0 0-4ZM4 7a4 4 0 1 1 8 0 4 4 0 0 1-8 0Zm13-1a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3Zm-3.5 1.5a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0Zm5.826 7.376c-.919-.779-2.052-1.03-3.1-.787a1 1 0 0 1-.451-1.949c1.671-.386 3.45.028 4.844 1.211 1.397 1.185 2.348 3.084 2.524 5.579a1 1 0 0 1-.997 1.07H18a1 1 0 1 1 0-2h3.007c-.29-1.47-.935-2.49-1.681-3.124ZM3.126 19h9.747c-.61-3.495-2.867-5-4.873-5-2.006 0-4.263 1.505-4.873 5ZM8 12c3.47 0 6.64 2.857 6.998 7.93A1 1 0 0 1 14 21H2a1 1 0 0 1-.998-1.07C1.36 14.857 4.53 12 8 12Z',
+})
diff --git a/src/components/icons/Group3.tsx b/src/components/icons/Group3.tsx
deleted file mode 100644
index 2bb16ba870..0000000000
--- a/src/components/icons/Group3.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-import {createSinglePathSVG} from './TEMPLATE'
-
-export const Group3_Stroke2_Corner0_Rounded = createSinglePathSVG({
- path: 'M17 16H21.1456C20.8246 11.4468 17.7199 9.48509 15.0001 10.1147M10 4C10 5.65685 8.65685 7 7 7C5.34315 7 4 5.65685 4 4C4 2.34315 5.34315 1 7 1C8.65685 1 10 2.34315 10 4ZM18.5 4.5C18.5 5.88071 17.3807 7 16 7C14.6193 7 13.5 5.88071 13.5 4.5C13.5 3.11929 14.6193 2 16 2C17.3807 2 18.5 3.11929 18.5 4.5ZM1 17H13C12.3421 7.66667 1.65792 7.66667 1 17Z',
-})
diff --git a/src/components/icons/Heart2.tsx b/src/components/icons/Heart2.tsx
new file mode 100644
index 0000000000..07f5a1d2c8
--- /dev/null
+++ b/src/components/icons/Heart2.tsx
@@ -0,0 +1,9 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const Heart2_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M16.734 5.091c-1.238-.276-2.708.047-4.022 1.38a1 1 0 0 1-1.424 0C9.974 5.137 8.504 4.814 7.266 5.09c-1.263.282-2.379 1.206-2.92 2.556C3.33 10.18 4.252 14.84 12 19.348c7.747-4.508 8.67-9.168 7.654-11.7-.541-1.351-1.657-2.275-2.92-2.557Zm4.777 1.812c1.604 4-.494 9.69-9.022 14.47a1 1 0 0 1-.978 0C2.983 16.592.885 10.902 2.49 6.902c.779-1.942 2.414-3.334 4.342-3.764 1.697-.378 3.552.003 5.169 1.286 1.617-1.283 3.472-1.664 5.17-1.286 1.927.43 3.562 1.822 4.34 3.764Z',
+})
+
+export const Heart2_Filled_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M12.489 21.372c8.528-4.78 10.626-10.47 9.022-14.47-.779-1.941-2.414-3.333-4.342-3.763-1.697-.378-3.552.003-5.169 1.287-1.617-1.284-3.472-1.665-5.17-1.287-1.927.43-3.562 1.822-4.34 3.764-1.605 4 .493 9.69 9.021 14.47a1 1 0 0 0 .978 0Z',
+})
diff --git a/src/components/icons/Lock.tsx b/src/components/icons/Lock.tsx
new file mode 100644
index 0000000000..87830b3794
--- /dev/null
+++ b/src/components/icons/Lock.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const Lock_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M7 7a5 5 0 0 1 10 0v2h1a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-9a2 2 0 0 1 2-2h1V7Zm-1 4v9h12v-9H6Zm9-2H9V7a3 3 0 1 1 6 0v2Zm-3 4a1 1 0 0 1 1 1v3a1 1 0 1 1-2 0v-3a1 1 0 0 1 1-1Z',
+})
diff --git a/src/components/icons/MagnifyingGlass2.tsx b/src/components/icons/MagnifyingGlass2.tsx
new file mode 100644
index 0000000000..3ca4034001
--- /dev/null
+++ b/src/components/icons/MagnifyingGlass2.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const MagnifyingGlass2_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M11 5a6 6 0 1 0 0 12 6 6 0 0 0 0-12Zm-8 6a8 8 0 1 1 14.32 4.906l3.387 3.387a1 1 0 0 1-1.414 1.414l-3.387-3.387A8 8 0 0 1 3 11Z',
+})
diff --git a/src/components/icons/Mute.tsx b/src/components/icons/Mute.tsx
new file mode 100644
index 0000000000..0065707870
--- /dev/null
+++ b/src/components/icons/Mute.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const Mute_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M20.707 3.293a1 1 0 0 1 0 1.414l-16 16a1 1 0 0 1-1.414-1.414l2.616-2.616A1.998 1.998 0 0 1 5 15V9a2 2 0 0 1 2-2h2.697l5.748-3.832A1 1 0 0 1 17 4v1.586l2.293-2.293a1 1 0 0 1 1.414 0ZM15 7.586 7.586 15H7V9h2.697a2 2 0 0 0 1.11-.336L15 5.87v1.717Zm2 3.657-2 2v4.888l-2.933-1.955-1.442 1.442 4.82 3.214A1 1 0 0 0 17 20v-8.757Z',
+})
diff --git a/src/components/icons/PageText.tsx b/src/components/icons/PageText.tsx
new file mode 100644
index 0000000000..25fbde3392
--- /dev/null
+++ b/src/components/icons/PageText.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const PageText_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M5 2a1 1 0 0 0-1 1v18a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H5Zm1 18V4h12v16H6Zm3-6a1 1 0 1 0 0 2h2a1 1 0 1 0 0-2H9Zm-1-3a1 1 0 0 1 1-1h6a1 1 0 1 1 0 2H9a1 1 0 0 1-1-1Zm1-5a1 1 0 0 0 0 2h6a1 1 0 1 0 0-2H9Z',
+})
diff --git a/src/components/icons/Pencil.tsx b/src/components/icons/Pencil.tsx
new file mode 100644
index 0000000000..854d51a3b2
--- /dev/null
+++ b/src/components/icons/Pencil.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const PencilLine_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M15.586 2.5a2 2 0 0 1 2.828 0L21.5 5.586a2 2 0 0 1 0 2.828l-13 13A2 2 0 0 1 7.086 22H3a1 1 0 0 1-1-1v-4.086a2 2 0 0 1 .586-1.414l13-13ZM17 3.914l-13 13V20h3.086l13-13L17 3.914ZM13 21a1 1 0 0 1 1-1h7a1 1 0 1 1 0 2h-7a1 1 0 0 1-1-1Z',
+})
diff --git a/src/components/icons/PeopleRemove2.tsx b/src/components/icons/PeopleRemove2.tsx
new file mode 100644
index 0000000000..3d16ed9682
--- /dev/null
+++ b/src/components/icons/PeopleRemove2.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const PeopleRemove2_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M10 4a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5ZM5.5 6.5a4.5 4.5 0 1 1 9 0 4.5 4.5 0 0 1-9 0ZM16 11a1 1 0 0 1 1-1h5a1 1 0 1 1 0 2h-5a1 1 0 0 1-1-1ZM3.678 19h12.644c-.71-2.909-3.092-5-6.322-5s-5.613 2.091-6.322 5Zm-2.174.906C1.917 15.521 5.242 12 10 12c4.758 0 8.083 3.521 8.496 7.906A1 1 0 0 1 17.5 21h-15a1 1 0 0 1-.996-1.094Z',
+})
diff --git a/src/components/icons/Person.tsx b/src/components/icons/Person.tsx
new file mode 100644
index 0000000000..6d09148c9d
--- /dev/null
+++ b/src/components/icons/Person.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const Person_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M12 4a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5ZM7.5 6.5a4.5 4.5 0 1 1 9 0 4.5 4.5 0 0 1-9 0ZM5.678 19h12.644c-.71-2.909-3.092-5-6.322-5s-5.613 2.091-6.322 5Zm-2.174.906C3.917 15.521 7.242 12 12 12c4.758 0 8.083 3.521 8.496 7.906A1 1 0 0 1 19.5 21h-15a1 1 0 0 1-.996-1.094Z',
+})
diff --git a/src/components/icons/PersonCheck.tsx b/src/components/icons/PersonCheck.tsx
new file mode 100644
index 0000000000..097271d89a
--- /dev/null
+++ b/src/components/icons/PersonCheck.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const PersonCheck_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M12 4a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5ZM7.5 6.5a4.5 4.5 0 1 1 9 0 4.5 4.5 0 0 1-9 0ZM5.679 19c.709-2.902 3.079-5 6.321-5a6.69 6.69 0 0 1 2.612.51 1 1 0 0 0 .776-1.844A8.687 8.687 0 0 0 12 12c-4.3 0-7.447 2.884-8.304 6.696-.29 1.29.767 2.304 1.902 2.304H11a1 1 0 1 0 0-2H5.679Zm14.835-4.857a1 1 0 0 1 .344 1.371l-3 5a1 1 0 0 1-1.458.286l-2-1.5a1 1 0 0 1 1.2-1.6l1.113.835 2.43-4.05a1 1 0 0 1 1.372-.342Z',
+})
diff --git a/src/components/icons/PersonX.tsx b/src/components/icons/PersonX.tsx
new file mode 100644
index 0000000000..a015e13765
--- /dev/null
+++ b/src/components/icons/PersonX.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const PersonX_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M12 4a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5ZM7.5 6.5a4.5 4.5 0 1 1 9 0 4.5 4.5 0 0 1-9 0ZM5.679 19c.709-2.902 3.079-5 6.321-5 .302 0 .595.018.878.053a1 1 0 0 0 .243-1.985A9.235 9.235 0 0 0 12 12c-4.3 0-7.447 2.884-8.304 6.696-.29 1.29.767 2.304 1.902 2.304H12a1 1 0 1 0 0-2H5.679Zm9.614-3.707a1 1 0 0 1 1.414 0L18 16.586l1.293-1.293a1 1 0 0 1 1.414 1.414L19.414 18l1.293 1.293a1 1 0 0 1-1.414 1.414L18 19.414l-1.293 1.293a1 1 0 0 1-1.414-1.414L16.586 18l-1.293-1.293a1 1 0 0 1 0-1.414Z',
+})
diff --git a/src/components/icons/RaisingHand.tsx b/src/components/icons/RaisingHand.tsx
new file mode 100644
index 0000000000..cd023cb7ef
--- /dev/null
+++ b/src/components/icons/RaisingHand.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const RaisingHande4Finger_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M10.25 4a.75.75 0 0 0-.75.75V11a1 1 0 1 1-2 0V6.75a.75.75 0 0 0-1.5 0V14a6 6 0 0 0 12 0V9a2 2 0 0 0-2 2v1.5a1 1 0 0 1-.684.949l-.628.21A2.469 2.469 0 0 0 13 16a1 1 0 1 1-2 0 4.469 4.469 0 0 1 3-4.22V11c0-.703.181-1.364.5-1.938V5.75a.75.75 0 0 0-1.5 0V9a1 1 0 1 1-2 0V4.75a.75.75 0 0 0-.75-.75Zm2.316-.733A2.75 2.75 0 0 1 16.5 5.75v1.54c.463-.187.97-.29 1.5-.29h1a1 1 0 0 1 1 1v6a8 8 0 1 1-16 0V6.75a2.75 2.75 0 0 1 3.571-2.625 2.751 2.751 0 0 1 4.995-.858Z',
+})
diff --git a/src/components/icons/Shield.tsx b/src/components/icons/Shield.tsx
new file mode 100644
index 0000000000..5038d5c244
--- /dev/null
+++ b/src/components/icons/Shield.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const Shield_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M11.675 2.054a1 1 0 0 1 .65 0l8 2.75A1 1 0 0 1 21 5.75v6.162c0 2.807-1.149 4.83-2.813 6.405-1.572 1.488-3.632 2.6-5.555 3.636l-.157.085a1 1 0 0 1-.95 0l-.157-.085c-1.923-1.037-3.983-2.148-5.556-3.636C4.15 16.742 3 14.719 3 11.912V5.75a1 1 0 0 1 .675-.946l8-2.75ZM5 6.464v5.448c0 2.166.851 3.687 2.188 4.952 1.276 1.209 2.964 2.158 4.812 3.157 1.848-1 3.536-1.948 4.813-3.157C18.148 15.6 19 14.078 19 11.912V6.464l-7-2.407-7 2.407Z',
+})
diff --git a/src/components/icons/Speaker.tsx b/src/components/icons/Speaker.tsx
new file mode 100644
index 0000000000..365d5e1143
--- /dev/null
+++ b/src/components/icons/Speaker.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const SpeakerVolumeFull_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M12.472 3.118A1 1 0 0 1 13 4v16a1 1 0 0 1-1.555.832L5.697 17H2a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1h3.697l5.748-3.832a1 1 0 0 1 1.027-.05ZM11 5.868 6.555 8.833A1 1 0 0 1 6 9H3v6h3a1 1 0 0 1 .555.168L11 18.131V5.87Zm7.364-1.645a1 1 0 0 1 1.414 0A10.969 10.969 0 0 1 23 12c0 3.037-1.232 5.788-3.222 7.778a1 1 0 1 1-1.414-1.414A8.969 8.969 0 0 0 21 12a8.969 8.969 0 0 0-2.636-6.364 1 1 0 0 1 0-1.414Zm-3.182 3.181a1 1 0 0 1 1.414 0A6.483 6.483 0 0 1 18.5 12a6.483 6.483 0 0 1-1.904 4.597 1 1 0 0 1-1.414-1.415A4.483 4.483 0 0 0 16.5 12a4.483 4.483 0 0 0-1.318-3.182 1 1 0 0 1 0-1.414Z',
+})
diff --git a/src/components/icons/SquareArrowTopRight.tsx b/src/components/icons/SquareArrowTopRight.tsx
new file mode 100644
index 0000000000..7701e26e56
--- /dev/null
+++ b/src/components/icons/SquareArrowTopRight.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const SquareArrowTopRight_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M14 5a1 1 0 1 1 0-2h6a1 1 0 0 1 1 1v6a1 1 0 1 1-2 0V6.414l-7.293 7.293a1 1 0 0 1-1.414-1.414L17.586 5H14ZM3 6a1 1 0 0 1 1-1h5a1 1 0 0 1 0 2H5v12h12v-4a1 1 0 1 1 2 0v5a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V6Z',
+})
diff --git a/src/components/icons/SquareBehindSquare4.tsx b/src/components/icons/SquareBehindSquare4.tsx
new file mode 100644
index 0000000000..425599cbce
--- /dev/null
+++ b/src/components/icons/SquareBehindSquare4.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const SquareBehindSquare4_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M8 8V3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1h-5v5a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1h5Zm1 8a1 1 0 0 1-1-1v-5H4v10h10v-4H9Z',
+})
diff --git a/src/components/icons/StreamingLive.tsx b/src/components/icons/StreamingLive.tsx
new file mode 100644
index 0000000000..8ab5099da7
--- /dev/null
+++ b/src/components/icons/StreamingLive.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const StreamingLive_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M4 4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2H4Zm8 12.5c1.253 0 2.197.609 2.674 1.5H9.326c.477-.891 1.42-1.5 2.674-1.5Zm0-2c2.404 0 4.235 1.475 4.822 3.5H20V6H4v12h3.178c.587-2.025 2.418-3.5 4.822-3.5Zm-1.25-3.75a1.25 1.25 0 1 1 2.5 0 1.25 1.25 0 0 1-2.5 0ZM12 7.5a3.25 3.25 0 1 0 0 6.5 3.25 3.25 0 0 0 0-6.5Zm5.75 2a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5Z',
+})
diff --git a/src/components/icons/Ticket.tsx b/src/components/icons/Ticket.tsx
new file mode 100644
index 0000000000..1a8059c2a1
--- /dev/null
+++ b/src/components/icons/Ticket.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const Ticket_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M4 5.5a.5.5 0 0 0-.5.5v2.535a.5.5 0 0 0 .25.433A3.498 3.498 0 0 1 5.5 12a3.498 3.498 0 0 1-1.75 3.032.5.5 0 0 0-.25.433V18a.5.5 0 0 0 .5.5h16a.5.5 0 0 0 .5-.5v-2.535a.5.5 0 0 0-.25-.433A3.498 3.498 0 0 1 18.5 12a3.5 3.5 0 0 1 1.75-3.032.5.5 0 0 0 .25-.433V6a.5.5 0 0 0-.5-.5H4ZM2.5 6A1.5 1.5 0 0 1 4 4.5h16A1.5 1.5 0 0 1 21.5 6v3.17a.5.5 0 0 1-.333.472 2.501 2.501 0 0 0 0 4.716.5.5 0 0 1 .333.471V18a1.5 1.5 0 0 1-1.5 1.5H4A1.5 1.5 0 0 1 2.5 18v-3.17a.5.5 0 0 1 .333-.472 2.501 2.501 0 0 0 0-4.716.5.5 0 0 1-.333-.471V6Zm12 2a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0Zm0 4a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0Zm0 4a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0Z',
+})
diff --git a/src/components/icons/Times.tsx b/src/components/icons/Times.tsx
new file mode 100644
index 0000000000..678ac3fcb3
--- /dev/null
+++ b/src/components/icons/Times.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const TimesLarge_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M4.293 4.293a1 1 0 0 1 1.414 0L12 10.586l6.293-6.293a1 1 0 1 1 1.414 1.414L13.414 12l6.293 6.293a1 1 0 0 1-1.414 1.414L12 13.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L10.586 12 4.293 5.707a1 1 0 0 1 0-1.414Z',
+})
diff --git a/src/components/icons/Trash.tsx b/src/components/icons/Trash.tsx
new file mode 100644
index 0000000000..d09a3311ff
--- /dev/null
+++ b/src/components/icons/Trash.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const Trash_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M7.416 5H3a1 1 0 0 0 0 2h1.064l.938 14.067A1 1 0 0 0 6 22h12a1 1 0 0 0 .998-.933L19.936 7H21a1 1 0 1 0 0-2h-4.416a5 5 0 0 0-9.168 0Zm2.348 0h4.472c-.55-.614-1.348-1-2.236-1-.888 0-1.687.386-2.236 1Zm6.087 2H6.07l.867 13h10.128l.867-13h-2.036a1 1 0 0 1-.044 0ZM10 10a1 1 0 0 1 1 1v5a1 1 0 1 1-2 0v-5a1 1 0 0 1 1-1Zm4 0a1 1 0 0 1 1 1v5a1 1 0 1 1-2 0v-5a1 1 0 0 1 1-1Z',
+})
diff --git a/src/components/icons/Warning.tsx b/src/components/icons/Warning.tsx
new file mode 100644
index 0000000000..fc84b28945
--- /dev/null
+++ b/src/components/icons/Warning.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const Warning_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M11.14 4.494a.995.995 0 0 1 1.72 0l7.001 12.008a.996.996 0 0 1-.86 1.498H4.999a.996.996 0 0 1-.86-1.498L11.14 4.494Zm3.447-1.007c-1.155-1.983-4.019-1.983-5.174 0L2.41 15.494C1.247 17.491 2.686 20 4.998 20h14.004c2.312 0 3.751-2.509 2.587-4.506L14.587 3.487ZM13 9.019a1 1 0 1 0-2 0v2.994a1 1 0 1 0 2 0V9.02Zm-1 4.731a1.25 1.25 0 1 0 0 2.5 1.25 1.25 0 0 0 0-2.5Z',
+})
diff --git a/src/components/moderation/ContentHider.tsx b/src/components/moderation/ContentHider.tsx
new file mode 100644
index 0000000000..0681914a6e
--- /dev/null
+++ b/src/components/moderation/ContentHider.tsx
@@ -0,0 +1,181 @@
+import React from 'react'
+import {StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
+import {ModerationUI} from '@atproto/api'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {isJustAMute} from '#/lib/moderation'
+import {useModerationCauseDescription} from '#/lib/moderation/useModerationCauseDescription'
+import {sanitizeDisplayName} from '#/lib/strings/display-names'
+import {atoms as a, useBreakpoints, useTheme, web} from '#/alf'
+import {Button} from '#/components/Button'
+import {
+ ModerationDetailsDialog,
+ useModerationDetailsDialogControl,
+} from '#/components/moderation/ModerationDetailsDialog'
+import {Text} from '#/components/Typography'
+
+export function ContentHider({
+ testID,
+ modui,
+ ignoreMute,
+ style,
+ childContainerStyle,
+ children,
+}: React.PropsWithChildren<{
+ testID?: string
+ modui: ModerationUI | undefined
+ ignoreMute?: boolean
+ style?: StyleProp
+ childContainerStyle?: StyleProp
+}>) {
+ const t = useTheme()
+ const {_} = useLingui()
+ const {gtMobile} = useBreakpoints()
+ const [override, setOverride] = React.useState(false)
+ const control = useModerationDetailsDialogControl()
+
+ const blur = modui?.blurs[0]
+ const desc = useModerationCauseDescription(blur)
+
+ if (!blur || (ignoreMute && isJustAMute(modui))) {
+ return (
+
+ {children}
+
+ )
+ }
+
+ return (
+
+
+
+
+
+ {desc.source && blur.type === 'label' && !override && (
+
+ )}
+
+ {override && {children}}
+
+ )
+}
+
+const styles = StyleSheet.create({
+ outer: {
+ overflow: 'hidden',
+ },
+ cover: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ gap: 6,
+ borderRadius: 8,
+ marginTop: 4,
+ paddingVertical: 14,
+ paddingLeft: 14,
+ paddingRight: 18,
+ },
+ showBtn: {
+ marginLeft: 'auto',
+ alignSelf: 'center',
+ },
+})
diff --git a/src/components/moderation/LabelPreference.tsx b/src/components/moderation/LabelPreference.tsx
new file mode 100644
index 0000000000..6191643038
--- /dev/null
+++ b/src/components/moderation/LabelPreference.tsx
@@ -0,0 +1,293 @@
+import React from 'react'
+import {View} from 'react-native'
+import {InterpretedLabelValueDefinition, LabelPreference} from '@atproto/api'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {useGlobalLabelStrings} from '#/lib/moderation/useGlobalLabelStrings'
+import {useLabelBehaviorDescription} from '#/lib/moderation/useLabelBehaviorDescription'
+import {getLabelStrings} from '#/lib/moderation/useLabelInfo'
+import {
+ usePreferencesQuery,
+ usePreferencesSetContentLabelMutation,
+} from '#/state/queries/preferences'
+import {atoms as a, useBreakpoints, useTheme} from '#/alf'
+import * as ToggleButton from '#/components/forms/ToggleButton'
+import {InlineLinkText} from '#/components/Link'
+import {Text} from '#/components/Typography'
+import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '../icons/CircleInfo'
+
+export function Outer({children}: React.PropsWithChildren<{}>) {
+ return (
+
+ {children}
+
+ )
+}
+
+export function Content({
+ children,
+ name,
+ description,
+}: React.PropsWithChildren<{
+ name: string
+ description: string
+}>) {
+ const t = useTheme()
+ const {gtPhone} = useBreakpoints()
+
+ return (
+
+ {name}
+
+ {description}
+
+
+ {children}
+
+ )
+}
+
+export function Buttons({
+ name,
+ values,
+ onChange,
+ ignoreLabel,
+ warnLabel,
+ hideLabel,
+}: {
+ name: string
+ values: ToggleButton.GroupProps['values']
+ onChange: ToggleButton.GroupProps['onChange']
+ ignoreLabel?: string
+ warnLabel?: string
+ hideLabel?: string
+}) {
+ const {_} = useLingui()
+ const {gtPhone} = useBreakpoints()
+
+ return (
+
+
+ {ignoreLabel && (
+
+ {ignoreLabel}
+
+ )}
+ {warnLabel && (
+
+ {warnLabel}
+
+ )}
+ {hideLabel && (
+
+ {hideLabel}
+
+ )}
+
+
+ )
+}
+
+/**
+ * For use on the global Moderation screen to set prefs for a "global" label,
+ * not scoped to a single labeler.
+ */
+export function GlobalLabelPreference({
+ labelDefinition,
+ disabled,
+}: {
+ labelDefinition: InterpretedLabelValueDefinition
+ disabled?: boolean
+}) {
+ const {_} = useLingui()
+
+ const {identifier} = labelDefinition
+ const {data: preferences} = usePreferencesQuery()
+ const {mutate, variables} = usePreferencesSetContentLabelMutation()
+ const savedPref = preferences?.moderationPrefs.labels[identifier]
+ const pref = variables?.visibility ?? savedPref ?? 'warn'
+
+ const allLabelStrings = useGlobalLabelStrings()
+ const labelStrings =
+ labelDefinition.identifier in allLabelStrings
+ ? allLabelStrings[labelDefinition.identifier]
+ : {
+ name: labelDefinition.identifier,
+ description: `Labeled "${labelDefinition.identifier}"`,
+ }
+
+ const labelOptions = {
+ hide: _(msg`Hide`),
+ warn: _(msg`Warn`),
+ ignore: _(msg`Show`),
+ }
+
+ return (
+
+
+ {!disabled && (
+ {
+ mutate({
+ label: identifier,
+ visibility: values[0] as LabelPreference,
+ labelerDid: undefined,
+ })
+ }}
+ ignoreLabel={labelOptions.ignore}
+ warnLabel={labelOptions.warn}
+ hideLabel={labelOptions.hide}
+ />
+ )}
+
+ )
+}
+
+/**
+ * For use on individual labeler pages
+ */
+export function LabelerLabelPreference({
+ labelDefinition,
+ disabled,
+ labelerDid,
+}: {
+ labelDefinition: InterpretedLabelValueDefinition
+ disabled?: boolean
+ labelerDid?: string
+}) {
+ const {i18n} = useLingui()
+ const t = useTheme()
+ const {gtPhone} = useBreakpoints()
+
+ const isGlobalLabel = !labelDefinition.definedBy
+ const {identifier} = labelDefinition
+ const {data: preferences} = usePreferencesQuery()
+ const {mutate, variables} = usePreferencesSetContentLabelMutation()
+ const savedPref =
+ labelerDid && !isGlobalLabel
+ ? preferences?.moderationPrefs.labelers.find(l => l.did === labelerDid)
+ ?.labels[identifier]
+ : preferences?.moderationPrefs.labels[identifier]
+ const pref =
+ variables?.visibility ??
+ savedPref ??
+ labelDefinition.defaultSetting ??
+ 'warn'
+
+ // does the 'warn' setting make sense for this label?
+ const canWarn = !(
+ labelDefinition.blurs === 'none' && labelDefinition.severity === 'none'
+ )
+ // is this label adult only?
+ const adultOnly = labelDefinition.flags.includes('adult')
+ // is this label disabled because it's adult only?
+ const adultDisabled =
+ adultOnly && !preferences?.moderationPrefs.adultContentEnabled
+ // are there any reasons we cant configure this label here?
+ const cantConfigure = isGlobalLabel || adultDisabled
+ const showConfig = !disabled && (gtPhone || !cantConfigure)
+
+ // adjust the pref based on whether warn is available
+ let prefAdjusted = pref
+ if (adultDisabled) {
+ prefAdjusted = 'hide'
+ } else if (!canWarn && pref === 'warn') {
+ prefAdjusted = 'ignore'
+ }
+
+ // grab localized descriptions of the label and its settings
+ const currentPrefLabel = useLabelBehaviorDescription(
+ labelDefinition,
+ prefAdjusted,
+ )
+ const hideLabel = useLabelBehaviorDescription(labelDefinition, 'hide')
+ const warnLabel = useLabelBehaviorDescription(labelDefinition, 'warn')
+ const ignoreLabel = useLabelBehaviorDescription(labelDefinition, 'ignore')
+ const globalLabelStrings = useGlobalLabelStrings()
+ const labelStrings = getLabelStrings(
+ i18n.locale,
+ globalLabelStrings,
+ labelDefinition,
+ )
+
+ return (
+
+
+ {cantConfigure && (
+
+
+
+
+ {adultDisabled ? (
+ Adult content is disabled.
+ ) : isGlobalLabel ? (
+
+ Configured in{' '}
+
+ moderation settings
+
+ .
+
+ ) : null}
+
+
+ )}
+
+
+ {showConfig && (
+
+ {cantConfigure ? (
+
+
+ {currentPrefLabel}
+
+
+ ) : (
+ {
+ mutate({
+ label: identifier,
+ visibility: values[0] as LabelPreference,
+ labelerDid,
+ })
+ }}
+ ignoreLabel={ignoreLabel}
+ warnLabel={canWarn ? warnLabel : undefined}
+ hideLabel={hideLabel}
+ />
+ )}
+
+ )}
+
+ )
+}
diff --git a/src/components/moderation/LabelsOnMe.tsx b/src/components/moderation/LabelsOnMe.tsx
new file mode 100644
index 0000000000..747f6a6d33
--- /dev/null
+++ b/src/components/moderation/LabelsOnMe.tsx
@@ -0,0 +1,83 @@
+import React from 'react'
+import {StyleProp, View, ViewStyle} from 'react-native'
+import {AppBskyFeedDefs, ComAtprotoLabelDefs} from '@atproto/api'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {useSession} from '#/state/session'
+import {atoms as a} from '#/alf'
+import {Button, ButtonIcon, ButtonSize, ButtonText} from '#/components/Button'
+import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
+import {
+ LabelsOnMeDialog,
+ useLabelsOnMeDialogControl,
+} from '#/components/moderation/LabelsOnMeDialog'
+
+export function LabelsOnMe({
+ details,
+ labels,
+ size,
+ style,
+}: {
+ details: {did: string} | {uri: string; cid: string}
+ labels: ComAtprotoLabelDefs.Label[] | undefined
+ size?: ButtonSize
+ style?: StyleProp
+}) {
+ const {_} = useLingui()
+ const {currentAccount} = useSession()
+ const isAccount = 'did' in details
+ const control = useLabelsOnMeDialogControl()
+
+ if (!labels || !currentAccount) {
+ return null
+ }
+ labels = labels.filter(
+ l => !l.val.startsWith('!') && l.src !== currentAccount.did,
+ )
+ if (!labels.length) {
+ return null
+ }
+
+ const labelTarget = isAccount ? _(msg`account`) : _(msg`content`)
+ return (
+
+
+
+
+
+ )
+}
+
+export function LabelsOnMyPost({
+ post,
+ style,
+}: {
+ post: AppBskyFeedDefs.PostView
+ style?: StyleProp
+}) {
+ const {currentAccount} = useSession()
+ if (post.author.did !== currentAccount?.did) {
+ return null
+ }
+ return (
+
+ )
+}
diff --git a/src/components/moderation/LabelsOnMeDialog.tsx b/src/components/moderation/LabelsOnMeDialog.tsx
new file mode 100644
index 0000000000..5cf86644c0
--- /dev/null
+++ b/src/components/moderation/LabelsOnMeDialog.tsx
@@ -0,0 +1,261 @@
+import React from 'react'
+import {View} from 'react-native'
+import {ComAtprotoLabelDefs, ComAtprotoModerationDefs} from '@atproto/api'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {useLabelInfo} from '#/lib/moderation/useLabelInfo'
+import {makeProfileLink} from '#/lib/routes/links'
+import {sanitizeHandle} from '#/lib/strings/handles'
+import {getAgent} from '#/state/session'
+import * as Toast from '#/view/com/util/Toast'
+import {atoms as a, useBreakpoints, useTheme} from '#/alf'
+import {Button, ButtonText} from '#/components/Button'
+import * as Dialog from '#/components/Dialog'
+import {InlineLinkText} from '#/components/Link'
+import {Text} from '#/components/Typography'
+import {Divider} from '../Divider'
+
+export {useDialogControl as useLabelsOnMeDialogControl} from '#/components/Dialog'
+
+type Subject =
+ | {
+ uri: string
+ cid: string
+ }
+ | {
+ did: string
+ }
+
+export interface LabelsOnMeDialogProps {
+ control: Dialog.DialogOuterProps['control']
+ subject: Subject
+ labels: ComAtprotoLabelDefs.Label[]
+}
+
+export function LabelsOnMeDialogInner(props: LabelsOnMeDialogProps) {
+ const {_} = useLingui()
+ const [appealingLabel, setAppealingLabel] = React.useState<
+ ComAtprotoLabelDefs.Label | undefined
+ >(undefined)
+ const {subject, labels} = props
+ const isAccount = 'did' in subject
+
+ return (
+
+ {appealingLabel ? (
+ setAppealingLabel(undefined)}
+ />
+ ) : (
+ <>
+
+ {isAccount ? (
+ Labels on your account
+ ) : (
+ Labels on your content
+ )}
+
+
+
+ You may appeal these labels if you feel they were placed in error.
+
+
+
+
+ {labels.map(label => (
+
+ >
+ )}
+
+
+
+ )
+}
+
+export function LabelsOnMeDialog(props: LabelsOnMeDialogProps) {
+ return (
+
+
+
+
+
+ )
+}
+
+function Label({
+ label,
+ control,
+ onPressAppeal,
+}: {
+ label: ComAtprotoLabelDefs.Label
+ control: Dialog.DialogOuterProps['control']
+ onPressAppeal: (label: ComAtprotoLabelDefs.Label) => void
+}) {
+ const t = useTheme()
+ const {_} = useLingui()
+ const {labeler, strings} = useLabelInfo(label)
+ return (
+
+
+
+ {strings.name}
+
+ {strings.description}
+
+
+
+
+
+
+
+
+
+
+
+ Source:{' '}
+ control.close()}>
+ {labeler ? sanitizeHandle(labeler.creator.handle, '@') : label.src}
+
+
+
+
+ )
+}
+
+function AppealForm({
+ label,
+ subject,
+ control,
+ onPressBack,
+}: {
+ label: ComAtprotoLabelDefs.Label
+ subject: Subject
+ control: Dialog.DialogOuterProps['control']
+ onPressBack: () => void
+}) {
+ const {_} = useLingui()
+ const {labeler, strings} = useLabelInfo(label)
+ const {gtMobile} = useBreakpoints()
+ const [details, setDetails] = React.useState('')
+ const isAccountReport = 'did' in subject
+
+ const onSubmit = async () => {
+ try {
+ const $type = !isAccountReport
+ ? 'com.atproto.repo.strongRef'
+ : 'com.atproto.admin.defs#repoRef'
+ await getAgent()
+ .withProxy('atproto_labeler', label.src)
+ .createModerationReport({
+ reasonType: ComAtprotoModerationDefs.REASONAPPEAL,
+ subject: {
+ $type,
+ ...subject,
+ },
+ reason: details,
+ })
+ Toast.show(_(msg`Appeal submitted.`))
+ } finally {
+ control.close()
+ }
+ }
+
+ return (
+ <>
+
+ Appeal "{strings.name}" label
+
+
+
+ This appeal will be sent to{' '}
+ control.close()}
+ style={[a.text_md, a.leading_snug]}>
+ {labeler ? sanitizeHandle(labeler.creator.handle, '@') : label.src}
+
+ .
+
+
+
+
+
+
+
+
+
+
+ >
+ )
+}
diff --git a/src/components/moderation/ModerationDetailsDialog.tsx b/src/components/moderation/ModerationDetailsDialog.tsx
new file mode 100644
index 0000000000..da57de4df3
--- /dev/null
+++ b/src/components/moderation/ModerationDetailsDialog.tsx
@@ -0,0 +1,147 @@
+import React from 'react'
+import {View} from 'react-native'
+import {ModerationCause} from '@atproto/api'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {useModerationCauseDescription} from '#/lib/moderation/useModerationCauseDescription'
+import {makeProfileLink} from '#/lib/routes/links'
+import {listUriToHref} from '#/lib/strings/url-helpers'
+import {isNative} from '#/platform/detection'
+import {atoms as a, useTheme} from '#/alf'
+import * as Dialog from '#/components/Dialog'
+import {Divider} from '#/components/Divider'
+import {InlineLinkText} from '#/components/Link'
+import {Text} from '#/components/Typography'
+
+export {useDialogControl as useModerationDetailsDialogControl} from '#/components/Dialog'
+
+export interface ModerationDetailsDialogProps {
+ control: Dialog.DialogOuterProps['control']
+ modcause: ModerationCause
+}
+
+export function ModerationDetailsDialog(props: ModerationDetailsDialogProps) {
+ return (
+
+
+
+
+ )
+}
+
+function ModerationDetailsDialogInner({
+ modcause,
+ control,
+}: ModerationDetailsDialogProps & {
+ control: Dialog.DialogOuterProps['control']
+}) {
+ const t = useTheme()
+ const {_} = useLingui()
+ const desc = useModerationCauseDescription(modcause)
+
+ let name
+ let description
+ if (!modcause) {
+ name = _(msg`Content Warning`)
+ description = _(
+ msg`Moderator has chosen to set a general warning on the content.`,
+ )
+ } else if (modcause.type === 'blocking') {
+ if (modcause.source.type === 'list') {
+ const list = modcause.source.list
+ name = _(msg`User Blocked by List`)
+ description = (
+
+ This user is included in the{' '}
+
+ {list.name}
+ {' '}
+ list which you have blocked.
+
+ )
+ } else {
+ name = _(msg`User Blocked`)
+ description = _(
+ msg`You have blocked this user. You cannot view their content.`,
+ )
+ }
+ } else if (modcause.type === 'blocked-by') {
+ name = _(msg`User Blocks You`)
+ description = _(
+ msg`This user has blocked you. You cannot view their content.`,
+ )
+ } else if (modcause.type === 'block-other') {
+ name = _(msg`Content Not Available`)
+ description = _(
+ msg`This content is not available because one of the users involved has blocked the other.`,
+ )
+ } else if (modcause.type === 'muted') {
+ if (modcause.source.type === 'list') {
+ const list = modcause.source.list
+ name = _(msg`Account Muted by List`)
+ description = (
+
+ This user is included in the{' '}
+
+ {list.name}
+ {' '}
+ list which you have muted.
+
+ )
+ } else {
+ name = _(msg`Account Muted`)
+ description = _(msg`You have muted this account.`)
+ }
+ } else if (modcause.type === 'mute-word') {
+ name = _(msg`Post Hidden by Muted Word`)
+ description = _(msg`You've chosen to hide a word or tag within this post.`)
+ } else if (modcause.type === 'hidden') {
+ name = _(msg`Post Hidden by You`)
+ description = _(msg`You have hidden this post.`)
+ } else if (modcause.type === 'label') {
+ name = desc.name
+ description = desc.description
+ } else {
+ // should never happen
+ name = ''
+ description = ''
+ }
+
+ return (
+
+
+ {name}
+
+
+ {description}
+
+
+ {modcause.type === 'label' && (
+ <>
+
+
+
+ This label was applied by{' '}
+ {modcause.source.type === 'user' ? (
+ the author
+ ) : (
+ control.close()}
+ style={a.text_md}>
+ {desc.source}
+
+ )}
+ .
+
+
+ >
+ )}
+
+ {isNative && }
+
+
+
+ )
+}
diff --git a/src/components/moderation/PostAlerts.tsx b/src/components/moderation/PostAlerts.tsx
new file mode 100644
index 0000000000..c2f5844b0a
--- /dev/null
+++ b/src/components/moderation/PostAlerts.tsx
@@ -0,0 +1,65 @@
+import React from 'react'
+import {StyleProp, View, ViewStyle} from 'react-native'
+import {ModerationCause, ModerationUI} from '@atproto/api'
+
+import {getModerationCauseKey} from '#/lib/moderation'
+import {useModerationCauseDescription} from '#/lib/moderation/useModerationCauseDescription'
+import {atoms as a} from '#/alf'
+import {Button, ButtonIcon, ButtonText} from '#/components/Button'
+import {
+ ModerationDetailsDialog,
+ useModerationDetailsDialogControl,
+} from '#/components/moderation/ModerationDetailsDialog'
+
+export function PostAlerts({
+ modui,
+ style,
+}: {
+ modui: ModerationUI
+ includeMute?: boolean
+ style?: StyleProp
+}) {
+ if (!modui.alert && !modui.inform) {
+ return null
+ }
+
+ return (
+
+
+ {modui.alerts.map(cause => (
+
+ ))}
+ {modui.informs.map(cause => (
+
+ ))}
+
+
+ )
+}
+
+function PostLabel({cause}: {cause: ModerationCause}) {
+ const control = useModerationDetailsDialogControl()
+ const desc = useModerationCauseDescription(cause)
+
+ return (
+ <>
+
+
+
+ >
+ )
+}
diff --git a/src/view/com/util/moderation/PostHider.tsx b/src/components/moderation/PostHider.tsx
similarity index 51%
rename from src/view/com/util/moderation/PostHider.tsx
rename to src/components/moderation/PostHider.tsx
index b1fa71d4ac..3a6f77f0d4 100644
--- a/src/view/com/util/moderation/PostHider.tsx
+++ b/src/components/moderation/PostHider.tsx
@@ -1,45 +1,49 @@
import React, {ComponentProps} from 'react'
-import {StyleSheet, Pressable, View, ViewStyle, StyleProp} from 'react-native'
+import {Pressable, StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
import {ModerationUI} from '@atproto/api'
-import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import {usePalette} from 'lib/hooks/usePalette'
-import {Link} from '../Link'
-import {Text} from '../text/Text'
-import {addStyle} from 'lib/styles'
-import {describeModerationCause} from 'lib/moderation'
-import {ShieldExclamation} from 'lib/icons'
+import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
-import {Trans, msg} from '@lingui/macro'
-import {useModalControls} from '#/state/modals'
+
+import {useModerationCauseDescription} from '#/lib/moderation/useModerationCauseDescription'
+import {addStyle} from 'lib/styles'
+// import {Link} from '#/components/Link' TODO this imposes some styles that screw things up
+import {Link} from '#/view/com/util/Link'
+import {atoms as a, useTheme} from '#/alf'
+import {
+ ModerationDetailsDialog,
+ useModerationDetailsDialogControl,
+} from '#/components/moderation/ModerationDetailsDialog'
+import {Text} from '#/components/Typography'
interface Props extends ComponentProps {
iconSize: number
iconStyles: StyleProp
- moderation: ModerationUI
+ modui: ModerationUI
}
export function PostHider({
testID,
href,
- moderation,
+ modui,
style,
children,
iconSize,
iconStyles,
...props
}: Props) {
- const pal = usePalette('default')
+ const t = useTheme()
const {_} = useLingui()
const [override, setOverride] = React.useState(false)
- const {openModal} = useModalControls()
+ const control = useModerationDetailsDialogControl()
+ const blur = modui.blurs[0]
+ const desc = useModerationCauseDescription(blur)
- if (!moderation.blur) {
+ if (!blur) {
return (
{children}
@@ -47,12 +51,10 @@ export function PostHider({
)
}
- const isMute = moderation.cause?.type === 'muted'
- const desc = describeModerationCause(moderation.cause, 'content')
return !override ? (
{
- if (!moderation.noOverride) {
+ if (!modui.noOverride) {
setOverride(v => !v)
}
}}
@@ -62,49 +64,45 @@ export function PostHider({
}
accessibilityLabel=""
style={[
- styles.description,
+ a.flex_row,
+ a.align_center,
+ a.gap_sm,
+ a.py_md,
+ {
+ paddingLeft: 6,
+ paddingRight: 18,
+ },
override ? {paddingBottom: 0} : undefined,
- pal.view,
+ t.atoms.bg,
]}>
+
{
- openModal({
- name: 'moderation-details',
- context: 'content',
- moderation,
- })
+ control.open()
}}
accessibilityRole="button"
accessibilityLabel={_(msg`Learn more about this warning`)}
accessibilityHint="">
- {isMute ? (
-
- ) : (
-
- )}
+
-
+
{desc.name}
- {!moderation.noOverride && (
-
+ {!modui.noOverride && (
+
{override ? Hide : Show}
)}
@@ -114,26 +112,14 @@ export function PostHider({
testID={testID}
style={addStyle(style, styles.child)}
href={href}
- noFeedback>
+ accessible={false}
+ {...props}>
{children}
)
}
const styles = StyleSheet.create({
- description: {
- flexDirection: 'row',
- alignItems: 'center',
- gap: 4,
- paddingVertical: 10,
- paddingLeft: 6,
- paddingRight: 18,
- marginTop: 1,
- },
- showBtn: {
- marginLeft: 'auto',
- alignSelf: 'center',
- },
child: {
borderWidth: 0,
borderTopWidth: 0,
diff --git a/src/components/moderation/ProfileHeaderAlerts.tsx b/src/components/moderation/ProfileHeaderAlerts.tsx
new file mode 100644
index 0000000000..789541eb09
--- /dev/null
+++ b/src/components/moderation/ProfileHeaderAlerts.tsx
@@ -0,0 +1,65 @@
+import React from 'react'
+import {StyleProp, View, ViewStyle} from 'react-native'
+import {ModerationCause, ModerationDecision} from '@atproto/api'
+
+import {useModerationCauseDescription} from '#/lib/moderation/useModerationCauseDescription'
+import {getModerationCauseKey} from 'lib/moderation'
+import {atoms as a} from '#/alf'
+import {Button, ButtonIcon, ButtonText} from '#/components/Button'
+import {
+ ModerationDetailsDialog,
+ useModerationDetailsDialogControl,
+} from '#/components/moderation/ModerationDetailsDialog'
+
+export function ProfileHeaderAlerts({
+ moderation,
+ style,
+}: {
+ moderation: ModerationDecision
+ style?: StyleProp
+}) {
+ const modui = moderation.ui('profileView')
+ if (!modui.alert && !modui.inform) {
+ return null
+ }
+
+ return (
+
+
+ {modui.alerts.map(cause => (
+
+ ))}
+ {modui.informs.map(cause => (
+
+ ))}
+
+
+ )
+}
+
+function ProfileLabel({cause}: {cause: ModerationCause}) {
+ const control = useModerationDetailsDialogControl()
+ const desc = useModerationCauseDescription(cause)
+
+ return (
+ <>
+
+
+
+ >
+ )
+}
diff --git a/src/components/moderation/ScreenHider.tsx b/src/components/moderation/ScreenHider.tsx
new file mode 100644
index 0000000000..0d316bc885
--- /dev/null
+++ b/src/components/moderation/ScreenHider.tsx
@@ -0,0 +1,179 @@
+import React from 'react'
+import {
+ StyleProp,
+ TouchableWithoutFeedback,
+ View,
+ ViewStyle,
+} from 'react-native'
+import {ModerationUI} from '@atproto/api'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {useNavigation} from '@react-navigation/native'
+
+import {useModerationCauseDescription} from '#/lib/moderation/useModerationCauseDescription'
+import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import {NavigationProp} from 'lib/routes/types'
+import {CenteredView} from '#/view/com/util/Views'
+import {atoms as a, useTheme} from '#/alf'
+import {Button, ButtonText} from '#/components/Button'
+import {
+ ModerationDetailsDialog,
+ useModerationDetailsDialogControl,
+} from '#/components/moderation/ModerationDetailsDialog'
+import {Text} from '#/components/Typography'
+
+export function ScreenHider({
+ testID,
+ screenDescription,
+ modui,
+ style,
+ containerStyle,
+ children,
+}: React.PropsWithChildren<{
+ testID?: string
+ screenDescription: string
+ modui: ModerationUI
+ style?: StyleProp
+ containerStyle?: StyleProp
+}>) {
+ const t = useTheme()
+ const {_} = useLingui()
+ const [override, setOverride] = React.useState(false)
+ const navigation = useNavigation()
+ const {isMobile} = useWebMediaQueries()
+ const control = useModerationDetailsDialogControl()
+ const blur = modui.blurs[0]
+ const desc = useModerationCauseDescription(blur)
+
+ if (!blur || override) {
+ return (
+
+ {children}
+
+ )
+ }
+
+ const isNoPwi = !!modui.blurs.find(
+ cause =>
+ cause.type === 'label' &&
+ cause.labelDef.identifier === '!no-unauthenticated',
+ )
+ return (
+
+
+
+
+
+
+
+ {isNoPwi ? (
+ Sign-in Required
+ ) : (
+ Content Warning
+ )}
+
+
+ {isNoPwi ? (
+
+ This account has requested that users sign in to view their profile.
+
+ ) : (
+ <>
+ This {screenDescription} has been flagged:
+
+ {desc.name}.{' '}
+
+ {
+ control.open()
+ }}
+ accessibilityRole="button"
+ accessibilityLabel={_(msg`Learn more about this warning`)}
+ accessibilityHint="">
+
+ Learn More
+
+
+
+
+ >
+ )}{' '}
+
+ {isMobile && }
+
+
+ {!modui.noOverride && (
+
+ )}
+
+
+ )
+}
diff --git a/src/lib/api/index.ts b/src/lib/api/index.ts
index 440dfa5ee3..27eb5e9f46 100644
--- a/src/lib/api/index.ts
+++ b/src/lib/api/index.ts
@@ -1,6 +1,6 @@
import {
- AppBskyEmbedImages,
AppBskyEmbedExternal,
+ AppBskyEmbedImages,
AppBskyEmbedRecord,
AppBskyEmbedRecordWithMedia,
AppBskyFeedThreadgate,
@@ -11,13 +11,14 @@ import {
RichText,
} from '@atproto/api'
import {AtUri} from '@atproto/api'
+
+import {logger} from '#/logger'
+import {ThreadgateSetting} from '#/state/queries/threadgate'
import {isNetworkError} from 'lib/strings/errors'
-import {LinkMeta} from '../link-meta/link-meta'
+import {shortenLinks} from 'lib/strings/rich-text-manip'
import {isWeb} from 'platform/detection'
import {ImageModel} from 'state/models/media/image'
-import {shortenLinks} from 'lib/strings/rich-text-manip'
-import {logger} from '#/logger'
-import {ThreadgateSetting} from '#/state/queries/threadgate'
+import {LinkMeta} from '../link-meta/link-meta'
export interface ExternalEmbedDraft {
uri: string
@@ -104,18 +105,18 @@ export async function post(agent: BskyAgent, opts: PostOpts) {
// add image embed if present
if (opts.images?.length) {
- logger.info(`Uploading images`, {
+ logger.debug(`Uploading images`, {
count: opts.images.length,
})
const images: AppBskyEmbedImages.Image[] = []
for (const image of opts.images) {
opts.onStateChange?.(`Uploading image #${images.length + 1}...`)
- logger.info(`Compressing image`)
+ logger.debug(`Compressing image`)
await image.compress()
const path = image.compressed?.path ?? image.path
const {width, height} = image.compressed || image
- logger.info(`Uploading image`)
+ logger.debug(`Uploading image`)
const res = await uploadBlob(agent, path, 'image/jpeg')
images.push({
image: res.data.blob,
diff --git a/src/lib/app-info.ts b/src/lib/app-info.ts
index 3f026d3fe6..83406bf2ef 100644
--- a/src/lib/app-info.ts
+++ b/src/lib/app-info.ts
@@ -1,5 +1,9 @@
-import VersionNumber from 'react-native-version-number'
-import * as Updates from 'expo-updates'
-export const updateChannel = Updates.channel
+import {nativeApplicationVersion, nativeBuildVersion} from 'expo-application'
-export const appVersion = `${VersionNumber.appVersion} (${VersionNumber.buildVersion})`
+export const IS_DEV = process.env.EXPO_PUBLIC_ENV === 'development'
+export const IS_TESTFLIGHT = process.env.EXPO_PUBLIC_ENV === 'testflight'
+
+const UPDATES_CHANNEL = IS_TESTFLIGHT ? 'testflight' : 'production'
+export const appVersion = `${nativeApplicationVersion} (${nativeBuildVersion}, ${
+ IS_DEV ? 'development' : UPDATES_CHANNEL
+})`
diff --git a/src/lib/constants.ts b/src/lib/constants.ts
index aec8338d03..401c39362b 100644
--- a/src/lib/constants.ts
+++ b/src/lib/constants.ts
@@ -3,9 +3,8 @@ import {Insets, Platform} from 'react-native'
export const LOCAL_DEV_SERVICE =
Platform.OS === 'android' ? 'http://10.0.2.2:2583' : 'http://localhost:2583'
export const STAGING_SERVICE = 'https://staging.bsky.dev'
-export const PROD_SERVICE = 'https://bsky.social'
-export const DEFAULT_SERVICE = PROD_SERVICE
-
+export const BSKY_SERVICE = 'https://bsky.social'
+export const DEFAULT_SERVICE = BSKY_SERVICE
const HELP_DESK_LANG = 'en-us'
export const HELP_DESK_URL = `https://blueskyweb.zendesk.com/hc/${HELP_DESK_LANG}`
@@ -36,92 +35,16 @@ export const MAX_GRAPHEME_LENGTH = 300
// but increasing limit per user feedback
export const MAX_ALT_TEXT = 1000
-export function IS_LOCAL_DEV(url: string) {
- return url.includes('localhost')
-}
-
-export function IS_STAGING(url: string) {
- return url.startsWith('https://staging.bsky.dev')
+export function IS_TEST_USER(handle?: string) {
+ return handle && handle?.endsWith('.test')
}
-export function IS_PROD(url: string) {
- // NOTE
- // until open federation, "production" is defined as the main server
- // this definition will not work once federation is enabled!
- // -prf
- return (
- url.startsWith('https://bsky.social') ||
- url.startsWith('https://api.bsky.app') ||
- /bsky\.network\/?$/.test(url)
- )
+export function IS_PROD_SERVICE(url?: string) {
+ return url && url !== STAGING_SERVICE && url !== LOCAL_DEV_SERVICE
}
-export const PROD_TEAM_HANDLES = [
- 'jay.bsky.social',
- 'pfrazee.com',
- 'divy.zone',
- 'dholms.xyz',
- 'why.bsky.world',
- 'iamrosewang.bsky.social',
-]
-export const STAGING_TEAM_HANDLES = [
- 'arcalinea.staging.bsky.dev',
- 'paul.staging.bsky.dev',
- 'paul2.staging.bsky.dev',
-]
-export const DEV_TEAM_HANDLES = ['alice.test', 'bob.test', 'carla.test']
-
-export function TEAM_HANDLES(serviceUrl: string) {
- if (serviceUrl.includes('localhost')) {
- return DEV_TEAM_HANDLES
- } else if (serviceUrl.includes('staging')) {
- return STAGING_TEAM_HANDLES
- } else {
- return PROD_TEAM_HANDLES
- }
-}
-
-export const STAGING_DEFAULT_FEED = (rkey: string) =>
- `at://did:plc:wqzurwm3kmaig6e6hnc2gqwo/app.bsky.feed.generator/${rkey}`
export const PROD_DEFAULT_FEED = (rkey: string) =>
`at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/${rkey}`
-export async function DEFAULT_FEEDS(
- serviceUrl: string,
- resolveHandle: (name: string) => Promise,
-) {
- // TODO: remove this when the test suite no longer relies on it
- if (IS_LOCAL_DEV(serviceUrl)) {
- // local dev
- const aliceDid = await resolveHandle('alice.test')
- return {
- pinned: [
- `at://${aliceDid}/app.bsky.feed.generator/alice-favs`,
- `at://${aliceDid}/app.bsky.feed.generator/alice-favs2`,
- ],
- saved: [
- `at://${aliceDid}/app.bsky.feed.generator/alice-favs`,
- `at://${aliceDid}/app.bsky.feed.generator/alice-favs2`,
- ],
- }
- } else if (IS_STAGING(serviceUrl)) {
- // staging
- return {
- pinned: [STAGING_DEFAULT_FEED('whats-hot')],
- saved: [
- STAGING_DEFAULT_FEED('bsky-team'),
- STAGING_DEFAULT_FEED('with-friends'),
- STAGING_DEFAULT_FEED('whats-hot'),
- STAGING_DEFAULT_FEED('hot-classic'),
- ],
- }
- } else {
- // production
- return {
- pinned: [PROD_DEFAULT_FEED('whats-hot')],
- saved: [PROD_DEFAULT_FEED('whats-hot')],
- }
- }
-}
export const POST_IMG_MAX = {
width: 2000,
@@ -135,13 +58,11 @@ export const STAGING_LINK_META_PROXY =
export const PROD_LINK_META_PROXY = 'https://cardyb.bsky.app/v1/extract?url='
export function LINK_META_PROXY(serviceUrl: string) {
- if (IS_LOCAL_DEV(serviceUrl)) {
- return STAGING_LINK_META_PROXY
- } else if (IS_STAGING(serviceUrl)) {
- return STAGING_LINK_META_PROXY
- } else {
+ if (IS_PROD_SERVICE(serviceUrl)) {
return PROD_LINK_META_PROXY
}
+
+ return STAGING_LINK_META_PROXY
}
export const STATUS_PAGE_URL = 'https://status.bsky.app/'
@@ -158,3 +79,11 @@ export const HITSLOP_20 = createHitslop(20)
export const HITSLOP_30 = createHitslop(30)
export const BACK_HITSLOP = HITSLOP_30
export const MAX_POST_LINES = 25
+
+export const BSKY_APP_ACCOUNT_DID = 'did:plc:z72i7hdynmk6r22z27h6tvur'
+
+export const BSKY_FEED_OWNER_DIDS = [
+ BSKY_APP_ACCOUNT_DID,
+ 'did:plc:vpkhqolt662uhesyj6nxm7ys',
+ 'did:plc:q6gjnaw2blty4crticxkmujt',
+]
diff --git a/src/lib/country-codes.ts b/src/lib/country-codes.ts
deleted file mode 100644
index 9c9da84cff..0000000000
--- a/src/lib/country-codes.ts
+++ /dev/null
@@ -1,256 +0,0 @@
-import {CountryCode} from 'libphonenumber-js'
-
-// ISO 3166-1 alpha-2 codes
-
-export interface CountryCodeMap {
- code2: CountryCode
- name: string
-}
-
-export const COUNTRY_CODES: CountryCodeMap[] = [
- {code2: 'AF', name: 'Afghanistan (+93)'},
- {code2: 'AX', name: 'Åland Islands (+358)'},
- {code2: 'AL', name: 'Albania (+355)'},
- {code2: 'DZ', name: 'Algeria (+213)'},
- {code2: 'AS', name: 'American Samoa (+1)'},
- {code2: 'AD', name: 'Andorra (+376)'},
- {code2: 'AO', name: 'Angola (+244)'},
- {code2: 'AI', name: 'Anguilla (+1)'},
- {code2: 'AG', name: 'Antigua and Barbuda (+1)'},
- {code2: 'AR', name: 'Argentina (+54)'},
- {code2: 'AM', name: 'Armenia (+374)'},
- {code2: 'AW', name: 'Aruba (+297)'},
- {code2: 'AU', name: 'Australia (+61)'},
- {code2: 'AT', name: 'Austria (+43)'},
- {code2: 'AZ', name: 'Azerbaijan (+994)'},
- {code2: 'BS', name: 'Bahamas (+1)'},
- {code2: 'BH', name: 'Bahrain (+973)'},
- {code2: 'BD', name: 'Bangladesh (+880)'},
- {code2: 'BB', name: 'Barbados (+1)'},
- {code2: 'BY', name: 'Belarus (+375)'},
- {code2: 'BE', name: 'Belgium (+32)'},
- {code2: 'BZ', name: 'Belize (+501)'},
- {code2: 'BJ', name: 'Benin (+229)'},
- {code2: 'BM', name: 'Bermuda (+1)'},
- {code2: 'BT', name: 'Bhutan (+975)'},
- {code2: 'BO', name: 'Bolivia (Plurinational State of) (+591)'},
- {code2: 'BQ', name: 'Bonaire, Sint Eustatius and Saba (+599)'},
- {code2: 'BA', name: 'Bosnia and Herzegovina (+387)'},
- {code2: 'BW', name: 'Botswana (+267)'},
- {code2: 'BR', name: 'Brazil (+55)'},
- {code2: 'IO', name: 'British Indian Ocean Territory (+246)'},
- {code2: 'BN', name: 'Brunei Darussalam (+673)'},
- {code2: 'BG', name: 'Bulgaria (+359)'},
- {code2: 'BF', name: 'Burkina Faso (+226)'},
- {code2: 'BI', name: 'Burundi (+257)'},
- {code2: 'CV', name: 'Cabo Verde (+238)'},
- {code2: 'KH', name: 'Cambodia (+855)'},
- {code2: 'CM', name: 'Cameroon (+237)'},
- {code2: 'CA', name: 'Canada (+1)'},
- {code2: 'KY', name: 'Cayman Islands (+1)'},
- {code2: 'CF', name: 'Central African Republic (+236)'},
- {code2: 'TD', name: 'Chad (+235)'},
- {code2: 'CL', name: 'Chile (+56)'},
- {code2: 'CN', name: 'China (+86)'},
- {code2: 'CX', name: 'Christmas Island (+61)'},
- {code2: 'CC', name: 'Cocos (Keeling) Islands (+61)'},
- {code2: 'CO', name: 'Colombia (+57)'},
- {code2: 'KM', name: 'Comoros (+269)'},
- {code2: 'CG', name: 'Congo (+242)'},
- {code2: 'CD', name: 'Congo, Democratic Republic of the (+243)'},
- {code2: 'CK', name: 'Cook Islands (+682)'},
- {code2: 'CR', name: 'Costa Rica (+506)'},
- {code2: 'CI', name: "Côte d'Ivoire (+225)"},
- {code2: 'HR', name: 'Croatia (+385)'},
- {code2: 'CU', name: 'Cuba (+53)'},
- {code2: 'CW', name: 'Curaçao (+599)'},
- {code2: 'CY', name: 'Cyprus (+357)'},
- {code2: 'CZ', name: 'Czechia (+420)'},
- {code2: 'DK', name: 'Denmark (+45)'},
- {code2: 'DJ', name: 'Djibouti (+253)'},
- {code2: 'DM', name: 'Dominica (+1)'},
- {code2: 'DO', name: 'Dominican Republic (+1)'},
- {code2: 'EC', name: 'Ecuador (+593)'},
- {code2: 'EG', name: 'Egypt (+20)'},
- {code2: 'SV', name: 'El Salvador (+503)'},
- {code2: 'GQ', name: 'Equatorial Guinea (+240)'},
- {code2: 'ER', name: 'Eritrea (+291)'},
- {code2: 'EE', name: 'Estonia (+372)'},
- {code2: 'SZ', name: 'Eswatini (+268)'},
- {code2: 'ET', name: 'Ethiopia (+251)'},
- {code2: 'FK', name: 'Falkland Islands (Malvinas) (+500)'},
- {code2: 'FO', name: 'Faroe Islands (+298)'},
- {code2: 'FJ', name: 'Fiji (+679)'},
- {code2: 'FI', name: 'Finland (+358)'},
- {code2: 'FR', name: 'France (+33)'},
- {code2: 'GF', name: 'French Guiana (+594)'},
- {code2: 'PF', name: 'French Polynesia (+689)'},
- {code2: 'GA', name: 'Gabon (+241)'},
- {code2: 'GM', name: 'Gambia (+220)'},
- {code2: 'GE', name: 'Georgia (+995)'},
- {code2: 'DE', name: 'Germany (+49)'},
- {code2: 'GH', name: 'Ghana (+233)'},
- {code2: 'GI', name: 'Gibraltar (+350)'},
- {code2: 'GR', name: 'Greece (+30)'},
- {code2: 'GL', name: 'Greenland (+299)'},
- {code2: 'GD', name: 'Grenada (+1)'},
- {code2: 'GP', name: 'Guadeloupe (+590)'},
- {code2: 'GU', name: 'Guam (+1)'},
- {code2: 'GT', name: 'Guatemala (+502)'},
- {code2: 'GG', name: 'Guernsey (+44)'},
- {code2: 'GN', name: 'Guinea (+224)'},
- {code2: 'GW', name: 'Guinea-Bissau (+245)'},
- {code2: 'GY', name: 'Guyana (+592)'},
- {code2: 'HT', name: 'Haiti (+509)'},
- {code2: 'VA', name: 'Holy See (+39)'},
- {code2: 'HN', name: 'Honduras (+504)'},
- {code2: 'HK', name: 'Hong Kong (+852)'},
- {code2: 'HU', name: 'Hungary (+36)'},
- {code2: 'IS', name: 'Iceland (+354)'},
- {code2: 'IN', name: 'India (+91)'},
- {code2: 'ID', name: 'Indonesia (+62)'},
- {code2: 'IR', name: 'Iran (Islamic Republic of) (+98)'},
- {code2: 'IQ', name: 'Iraq (+964)'},
- {code2: 'IE', name: 'Ireland (+353)'},
- {code2: 'IM', name: 'Isle of Man (+44)'},
- {code2: 'IL', name: 'Israel (+972)'},
- {code2: 'IT', name: 'Italy (+39)'},
- {code2: 'JM', name: 'Jamaica (+1)'},
- {code2: 'JP', name: 'Japan (+81)'},
- {code2: 'JE', name: 'Jersey (+44)'},
- {code2: 'JO', name: 'Jordan (+962)'},
- {code2: 'KZ', name: 'Kazakhstan (+7)'},
- {code2: 'KE', name: 'Kenya (+254)'},
- {code2: 'KI', name: 'Kiribati (+686)'},
- {code2: 'KP', name: "Korea (Democratic People's Republic of) (+850)"},
- {code2: 'KR', name: 'Korea, Republic of (+82)'},
- {code2: 'KW', name: 'Kuwait (+965)'},
- {code2: 'KG', name: 'Kyrgyzstan (+996)'},
- {code2: 'LA', name: "Lao People's Democratic Republic (+856)"},
- {code2: 'LV', name: 'Latvia (+371)'},
- {code2: 'LB', name: 'Lebanon (+961)'},
- {code2: 'LS', name: 'Lesotho (+266)'},
- {code2: 'LR', name: 'Liberia (+231)'},
- {code2: 'LY', name: 'Libya (+218)'},
- {code2: 'LI', name: 'Liechtenstein (+423)'},
- {code2: 'LT', name: 'Lithuania (+370)'},
- {code2: 'LU', name: 'Luxembourg (+352)'},
- {code2: 'MO', name: 'Macao (+853)'},
- {code2: 'MG', name: 'Madagascar (+261)'},
- {code2: 'MW', name: 'Malawi (+265)'},
- {code2: 'MY', name: 'Malaysia (+60)'},
- {code2: 'MV', name: 'Maldives (+960)'},
- {code2: 'ML', name: 'Mali (+223)'},
- {code2: 'MT', name: 'Malta (+356)'},
- {code2: 'MH', name: 'Marshall Islands (+692)'},
- {code2: 'MQ', name: 'Martinique (+596)'},
- {code2: 'MR', name: 'Mauritania (+222)'},
- {code2: 'MU', name: 'Mauritius (+230)'},
- {code2: 'YT', name: 'Mayotte (+262)'},
- {code2: 'MX', name: 'Mexico (+52)'},
- {code2: 'FM', name: 'Micronesia (Federated States of) (+691)'},
- {code2: 'MD', name: 'Moldova, Republic of (+373)'},
- {code2: 'MC', name: 'Monaco (+377)'},
- {code2: 'MN', name: 'Mongolia (+976)'},
- {code2: 'ME', name: 'Montenegro (+382)'},
- {code2: 'MS', name: 'Montserrat (+1)'},
- {code2: 'MA', name: 'Morocco (+212)'},
- {code2: 'MZ', name: 'Mozambique (+258)'},
- {code2: 'MM', name: 'Myanmar (+95)'},
- {code2: 'NA', name: 'Namibia (+264)'},
- {code2: 'NR', name: 'Nauru (+674)'},
- {code2: 'NP', name: 'Nepal (+977)'},
- {code2: 'NL', name: 'Netherlands, Kingdom of the (+31)'},
- {code2: 'NC', name: 'New Caledonia (+687)'},
- {code2: 'NZ', name: 'New Zealand (+64)'},
- {code2: 'NI', name: 'Nicaragua (+505)'},
- {code2: 'NE', name: 'Niger (+227)'},
- {code2: 'NG', name: 'Nigeria (+234)'},
- {code2: 'NU', name: 'Niue (+683)'},
- {code2: 'NF', name: 'Norfolk Island (+672)'},
- {code2: 'MK', name: 'North Macedonia (+389)'},
- {code2: 'MP', name: 'Northern Mariana Islands (+1)'},
- {code2: 'NO', name: 'Norway (+47)'},
- {code2: 'OM', name: 'Oman (+968)'},
- {code2: 'PK', name: 'Pakistan (+92)'},
- {code2: 'PW', name: 'Palau (+680)'},
- {code2: 'PS', name: 'Palestine, State of (+970)'},
- {code2: 'PA', name: 'Panama (+507)'},
- {code2: 'PG', name: 'Papua New Guinea (+675)'},
- {code2: 'PY', name: 'Paraguay (+595)'},
- {code2: 'PE', name: 'Peru (+51)'},
- {code2: 'PH', name: 'Philippines (+63)'},
- {code2: 'PL', name: 'Poland (+48)'},
- {code2: 'PT', name: 'Portugal (+351)'},
- {code2: 'PR', name: 'Puerto Rico (+1)'},
- {code2: 'QA', name: 'Qatar (+974)'},
- {code2: 'RE', name: 'Réunion (+262)'},
- {code2: 'RO', name: 'Romania (+40)'},
- {code2: 'RU', name: 'Russian Federation (+7)'},
- {code2: 'RW', name: 'Rwanda (+250)'},
- {code2: 'BL', name: 'Saint Barthélemy (+590)'},
- {code2: 'SH', name: 'Saint Helena, Ascension and Tristan da Cunha (+290)'},
- {code2: 'KN', name: 'Saint Kitts and Nevis (+1)'},
- {code2: 'LC', name: 'Saint Lucia (+1)'},
- {code2: 'MF', name: 'Saint Martin (French part) (+590)'},
- {code2: 'PM', name: 'Saint Pierre and Miquelon (+508)'},
- {code2: 'VC', name: 'Saint Vincent and the Grenadines (+1)'},
- {code2: 'WS', name: 'Samoa (+685)'},
- {code2: 'SM', name: 'San Marino (+378)'},
- {code2: 'ST', name: 'Sao Tome and Principe (+239)'},
- {code2: 'SA', name: 'Saudi Arabia (+966)'},
- {code2: 'SN', name: 'Senegal (+221)'},
- {code2: 'RS', name: 'Serbia (+381)'},
- {code2: 'SC', name: 'Seychelles (+248)'},
- {code2: 'SL', name: 'Sierra Leone (+232)'},
- {code2: 'SG', name: 'Singapore (+65)'},
- {code2: 'SX', name: 'Sint Maarten (Dutch part) (+1)'},
- {code2: 'SK', name: 'Slovakia (+421)'},
- {code2: 'SI', name: 'Slovenia (+386)'},
- {code2: 'SB', name: 'Solomon Islands (+677)'},
- {code2: 'SO', name: 'Somalia (+252)'},
- {code2: 'ZA', name: 'South Africa (+27)'},
- {code2: 'SS', name: 'South Sudan (+211)'},
- {code2: 'ES', name: 'Spain (+34)'},
- {code2: 'LK', name: 'Sri Lanka (+94)'},
- {code2: 'SD', name: 'Sudan (+249)'},
- {code2: 'SR', name: 'Suriname (+597)'},
- {code2: 'SJ', name: 'Svalbard and Jan Mayen (+47)'},
- {code2: 'SE', name: 'Sweden (+46)'},
- {code2: 'CH', name: 'Switzerland (+41)'},
- {code2: 'SY', name: 'Syrian Arab Republic (+963)'},
- {code2: 'TW', name: 'Taiwan (+886)'},
- {code2: 'TJ', name: 'Tajikistan (+992)'},
- {code2: 'TZ', name: 'Tanzania, United Republic of (+255)'},
- {code2: 'TH', name: 'Thailand (+66)'},
- {code2: 'TL', name: 'Timor-Leste (+670)'},
- {code2: 'TG', name: 'Togo (+228)'},
- {code2: 'TK', name: 'Tokelau (+690)'},
- {code2: 'TO', name: 'Tonga (+676)'},
- {code2: 'TT', name: 'Trinidad and Tobago (+1)'},
- {code2: 'TN', name: 'Tunisia (+216)'},
- {code2: 'TR', name: 'Türkiye (+90)'},
- {code2: 'TM', name: 'Turkmenistan (+993)'},
- {code2: 'TC', name: 'Turks and Caicos Islands (+1)'},
- {code2: 'TV', name: 'Tuvalu (+688)'},
- {code2: 'UG', name: 'Uganda (+256)'},
- {code2: 'UA', name: 'Ukraine (+380)'},
- {code2: 'AE', name: 'United Arab Emirates (+971)'},
- {
- code2: 'GB',
- name: 'United Kingdom of Great Britain and Northern Ireland (+44)',
- },
- {code2: 'US', name: 'United States of America (+1)'},
- {code2: 'UY', name: 'Uruguay (+598)'},
- {code2: 'UZ', name: 'Uzbekistan (+998)'},
- {code2: 'VU', name: 'Vanuatu (+678)'},
- {code2: 'VE', name: 'Venezuela (Bolivarian Republic of) (+58)'},
- {code2: 'VN', name: 'Viet Nam (+84)'},
- {code2: 'VG', name: 'Virgin Islands (British) (+1)'},
- {code2: 'VI', name: 'Virgin Islands (U.S.) (+1)'},
- {code2: 'WF', name: 'Wallis and Futuna (+681)'},
- {code2: 'EH', name: 'Western Sahara (+212)'},
- {code2: 'YE', name: 'Yemen (+967)'},
- {code2: 'ZM', name: 'Zambia (+260)'},
- {code2: 'ZW', name: 'Zimbabwe (+263)'},
-]
diff --git a/src/lib/haptics.ts b/src/lib/haptics.ts
index 516940c1ce..02940f793d 100644
--- a/src/lib/haptics.ts
+++ b/src/lib/haptics.ts
@@ -1,40 +1,20 @@
+import React from 'react'
+import {impactAsync, ImpactFeedbackStyle} from 'expo-haptics'
+
import {isIOS, isWeb} from 'platform/detection'
-import ReactNativeHapticFeedback, {
- HapticFeedbackTypes,
-} from 'react-native-haptic-feedback'
+import {useHapticsDisabled} from 'state/preferences/disable-haptics'
-const hapticImpact: HapticFeedbackTypes = isIOS ? 'impactMedium' : 'impactLight' // Users said the medium impact was too strong on Android; see APP-537s
+const hapticImpact: ImpactFeedbackStyle = isIOS
+ ? ImpactFeedbackStyle.Medium
+ : ImpactFeedbackStyle.Light // Users said the medium impact was too strong on Android; see APP-537s
-export class Haptics {
- static default() {
- if (isWeb) {
- return
- }
- ReactNativeHapticFeedback.trigger(hapticImpact)
- }
- static impact(type: HapticFeedbackTypes = hapticImpact) {
- if (isWeb) {
- return
- }
- ReactNativeHapticFeedback.trigger(type)
- }
- static selection() {
- if (isWeb) {
- return
- }
- ReactNativeHapticFeedback.trigger('selection')
- }
- static notification = (type: 'success' | 'warning' | 'error') => {
- if (isWeb) {
+export function useHaptics() {
+ const isHapticsDisabled = useHapticsDisabled()
+
+ return React.useCallback(() => {
+ if (isHapticsDisabled || isWeb) {
return
}
- switch (type) {
- case 'success':
- return ReactNativeHapticFeedback.trigger('notificationSuccess')
- case 'warning':
- return ReactNativeHapticFeedback.trigger('notificationWarning')
- case 'error':
- return ReactNativeHapticFeedback.trigger('notificationError')
- }
- }
+ impactAsync(hapticImpact)
+ }, [isHapticsDisabled])
}
diff --git a/src/lib/hooks/useAccountSwitcher.ts b/src/lib/hooks/useAccountSwitcher.ts
index 74b5674d5a..3432c42c0c 100644
--- a/src/lib/hooks/useAccountSwitcher.ts
+++ b/src/lib/hooks/useAccountSwitcher.ts
@@ -1,11 +1,12 @@
import {useCallback} from 'react'
-import {isWeb} from '#/platform/detection'
import {useAnalytics} from '#/lib/analytics/analytics'
-import {useSessionApi, SessionAccount} from '#/state/session'
-import * as Toast from '#/view/com/util/Toast'
-import {useCloseAllActiveElements} from '#/state/util'
+import {isWeb} from '#/platform/detection'
+import {SessionAccount, useSessionApi} from '#/state/session'
import {useLoggedOutViewControls} from '#/state/shell/logged-out'
+import {useCloseAllActiveElements} from '#/state/util'
+import * as Toast from '#/view/com/util/Toast'
+import {LogEvents} from '../statsig/statsig'
export function useAccountSwitcher() {
const {track} = useAnalytics()
@@ -14,7 +15,10 @@ export function useAccountSwitcher() {
const {requestSwitchToAccount} = useLoggedOutViewControls()
const onPressSwitchAccount = useCallback(
- async (account: SessionAccount) => {
+ async (
+ account: SessionAccount,
+ logContext: LogEvents['account:loggedIn']['logContext'],
+ ) => {
track('Settings:SwitchAccountButtonClicked')
try {
@@ -28,7 +32,7 @@ export function useAccountSwitcher() {
// So we change the URL ourselves. The navigator will pick it up on remount.
history.pushState(null, '', '/')
}
- await selectAccount(account)
+ await selectAccount(account, logContext)
setTimeout(() => {
Toast.show(`Signed in as @${account.handle}`)
}, 100)
diff --git a/src/lib/hooks/useDedupe.ts b/src/lib/hooks/useDedupe.ts
new file mode 100644
index 0000000000..d9432cb2c2
--- /dev/null
+++ b/src/lib/hooks/useDedupe.ts
@@ -0,0 +1,17 @@
+import React from 'react'
+
+export const useDedupe = () => {
+ const canDo = React.useRef(true)
+
+ return React.useRef((cb: () => unknown) => {
+ if (canDo.current) {
+ canDo.current = false
+ setTimeout(() => {
+ canDo.current = true
+ }, 250)
+ cb()
+ return true
+ }
+ return false
+ }).current
+}
diff --git a/src/lib/hooks/useInitialNumToRender.ts b/src/lib/hooks/useInitialNumToRender.ts
new file mode 100644
index 0000000000..942f0404ab
--- /dev/null
+++ b/src/lib/hooks/useInitialNumToRender.ts
@@ -0,0 +1,11 @@
+import React from 'react'
+import {Dimensions} from 'react-native'
+
+const MIN_POST_HEIGHT = 100
+
+export function useInitialNumToRender(minItemHeight: number = MIN_POST_HEIGHT) {
+ return React.useMemo(() => {
+ const screenHeight = Dimensions.get('window').height
+ return Math.ceil(screenHeight / minItemHeight) + 1
+ }, [minItemHeight])
+}
diff --git a/src/lib/hooks/useIntentHandler.ts b/src/lib/hooks/useIntentHandler.ts
new file mode 100644
index 0000000000..eab9844146
--- /dev/null
+++ b/src/lib/hooks/useIntentHandler.ts
@@ -0,0 +1,94 @@
+import React from 'react'
+import * as Linking from 'expo-linking'
+
+import {isNative} from 'platform/detection'
+import {useSession} from 'state/session'
+import {useComposerControls} from 'state/shell'
+import {useCloseAllActiveElements} from 'state/util'
+
+type IntentType = 'compose'
+
+const VALID_IMAGE_REGEX = /^[\w.:\-_/]+\|\d+(\.\d+)?\|\d+(\.\d+)?$/
+
+export function useIntentHandler() {
+ const incomingUrl = Linking.useURL()
+ const composeIntent = useComposeIntent()
+
+ React.useEffect(() => {
+ const handleIncomingURL = (url: string) => {
+ // We want to be able to support bluesky:// deeplinks. It's unnatural for someone to use a deeplink with three
+ // slashes, like bluesky:///intent/follow. However, supporting just two slashes causes us to have to take care
+ // of two cases when parsing the url. If we ensure there is a third slash, we can always ensure the first
+ // path parameter is in pathname rather than in hostname.
+ if (url.startsWith('bluesky://') && !url.startsWith('bluesky:///')) {
+ url = url.replace('bluesky://', 'bluesky:///')
+ }
+
+ const urlp = new URL(url)
+ const [_, intent, intentType] = urlp.pathname.split('/')
+
+ // On native, our links look like bluesky://intent/SomeIntent, so we have to check the hostname for the
+ // intent check. On web, we have to check the first part of the path since we have an actual hostname
+ const isIntent = intent === 'intent'
+ const params = urlp.searchParams
+
+ if (!isIntent) return
+
+ switch (intentType as IntentType) {
+ case 'compose': {
+ composeIntent({
+ text: params.get('text'),
+ imageUrisStr: params.get('imageUris'),
+ })
+ }
+ }
+ }
+
+ if (incomingUrl) handleIncomingURL(incomingUrl)
+ }, [incomingUrl, composeIntent])
+}
+
+function useComposeIntent() {
+ const closeAllActiveElements = useCloseAllActiveElements()
+ const {openComposer} = useComposerControls()
+ const {hasSession} = useSession()
+
+ return React.useCallback(
+ ({
+ text,
+ imageUrisStr,
+ }: {
+ text: string | null
+ imageUrisStr: string | null // unused for right now, will be used later with intents
+ }) => {
+ if (!hasSession) return
+
+ closeAllActiveElements()
+
+ const imageUris = imageUrisStr
+ ?.split(',')
+ .filter(part => {
+ // For some security, we're going to filter out any image uri that is external. We don't want someone to
+ // be able to provide some link like "bluesky://intent/compose?imageUris=https://IHaveYourIpNow.com/image.jpeg
+ // and we load that image
+ if (part.includes('https://') || part.includes('http://')) {
+ return false
+ }
+ // We also should just filter out cases that don't have all the info we need
+ return VALID_IMAGE_REGEX.test(part)
+ })
+ .map(part => {
+ const [uri, width, height] = part.split('|')
+ return {uri, width: Number(width), height: Number(height)}
+ })
+
+ setTimeout(() => {
+ openComposer({
+ text: text ?? undefined,
+ imageUris: isNative ? imageUris : undefined,
+ })
+ }, 500)
+ },
+ [hasSession, closeAllActiveElements, openComposer],
+ )
+}
diff --git a/src/lib/hooks/useNavigationDeduped.ts b/src/lib/hooks/useNavigationDeduped.ts
new file mode 100644
index 0000000000..2a9a08f84d
--- /dev/null
+++ b/src/lib/hooks/useNavigationDeduped.ts
@@ -0,0 +1,81 @@
+import React from 'react'
+import {useNavigation} from '@react-navigation/core'
+import {NavigationState} from '@react-navigation/native'
+import type {NavigationAction} from '@react-navigation/routers'
+
+import {useDedupe} from 'lib/hooks/useDedupe'
+import {AllNavigatorParams, NavigationProp} from 'lib/routes/types'
+
+export type DebouncedNavigationProp = Pick<
+ NavigationProp,
+ | 'popToTop'
+ | 'push'
+ | 'navigate'
+ | 'canGoBack'
+ | 'replace'
+ | 'dispatch'
+ | 'goBack'
+ | 'getState'
+>
+
+export function useNavigationDeduped() {
+ const navigation = useNavigation()
+ const dedupe = useDedupe()
+
+ return React.useMemo(
+ (): DebouncedNavigationProp => ({
+ // Types from @react-navigation/routers/lib/typescript/src/StackRouter.ts
+ push: (
+ ...args: undefined extends AllNavigatorParams[RouteName]
+ ?
+ | [screen: RouteName]
+ | [screen: RouteName, params: AllNavigatorParams[RouteName]]
+ : [screen: RouteName, params: AllNavigatorParams[RouteName]]
+ ) => {
+ dedupe(() => navigation.push(...args))
+ },
+ // Types from @react-navigation/core/src/types.tsx
+ navigate: (
+ ...args: RouteName extends unknown
+ ? undefined extends AllNavigatorParams[RouteName]
+ ?
+ | [screen: RouteName]
+ | [screen: RouteName, params: AllNavigatorParams[RouteName]]
+ : [screen: RouteName, params: AllNavigatorParams[RouteName]]
+ : never
+ ) => {
+ dedupe(() => navigation.navigate(...args))
+ },
+ // Types from @react-navigation/routers/lib/typescript/src/StackRouter.ts
+ replace: (
+ ...args: undefined extends AllNavigatorParams[RouteName]
+ ?
+ | [screen: RouteName]
+ | [screen: RouteName, params: AllNavigatorParams[RouteName]]
+ : [screen: RouteName, params: AllNavigatorParams[RouteName]]
+ ) => {
+ dedupe(() => navigation.replace(...args))
+ },
+ dispatch: (
+ action:
+ | NavigationAction
+ | ((state: NavigationState) => NavigationAction),
+ ) => {
+ dedupe(() => navigation.dispatch(action))
+ },
+ popToTop: () => {
+ dedupe(() => navigation.popToTop())
+ },
+ goBack: () => {
+ dedupe(() => navigation.goBack())
+ },
+ canGoBack: () => {
+ return navigation.canGoBack()
+ },
+ getState: () => {
+ return navigation.getState()
+ },
+ }),
+ [dedupe, navigation],
+ )
+}
diff --git a/src/lib/hooks/useOTAUpdate.ts b/src/lib/hooks/useOTAUpdate.ts
index 53eab300e7..ccb6446372 100644
--- a/src/lib/hooks/useOTAUpdate.ts
+++ b/src/lib/hooks/useOTAUpdate.ts
@@ -1,26 +1,11 @@
-import * as Updates from 'expo-updates'
import {useCallback, useEffect} from 'react'
import {AppState} from 'react-native'
+import * as Updates from 'expo-updates'
+
import {logger} from '#/logger'
-import {useModalControls} from '#/state/modals'
-import {t} from '@lingui/macro'
export function useOTAUpdate() {
- const {openModal} = useModalControls()
-
// HELPER FUNCTIONS
- const showUpdatePopup = useCallback(() => {
- openModal({
- name: 'confirm',
- title: t`Update Available`,
- message: t`A new version of the app is available. Please update to continue using the app.`,
- onPressConfirm: async () => {
- Updates.reloadAsync().catch(err => {
- throw err
- })
- },
- })
- }, [openModal])
const checkForUpdate = useCallback(async () => {
logger.debug('useOTAUpdate: Checking for update...')
try {
@@ -32,32 +17,26 @@ export function useOTAUpdate() {
}
// Otherwise fetch the update in the background, so even if the user rejects switching to latest version it will be done automatically on next relaunch.
await Updates.fetchUpdateAsync()
- // show a popup modal
- showUpdatePopup()
} catch (e) {
logger.error('useOTAUpdate: Error while checking for update', {
message: e,
})
}
- }, [showUpdatePopup])
- const updateEventListener = useCallback(
- (event: Updates.UpdateEvent) => {
- logger.debug('useOTAUpdate: Listening for update...')
- if (event.type === Updates.UpdateEventType.ERROR) {
- logger.error('useOTAUpdate: Error while listening for update', {
- message: event.message,
- })
- } else if (event.type === Updates.UpdateEventType.NO_UPDATE_AVAILABLE) {
- // Handle no update available
- // do nothing
- } else if (event.type === Updates.UpdateEventType.UPDATE_AVAILABLE) {
- // Handle update available
- // open modal, ask for user confirmation, and reload the app
- showUpdatePopup()
- }
- },
- [showUpdatePopup],
- )
+ }, [])
+ const updateEventListener = useCallback((event: Updates.UpdateEvent) => {
+ logger.debug('useOTAUpdate: Listening for update...')
+ if (event.type === Updates.UpdateEventType.ERROR) {
+ logger.error('useOTAUpdate: Error while listening for update', {
+ message: event.message,
+ })
+ } else if (event.type === Updates.UpdateEventType.NO_UPDATE_AVAILABLE) {
+ // Handle no update available
+ // do nothing
+ } else if (event.type === Updates.UpdateEventType.UPDATE_AVAILABLE) {
+ // Handle update available
+ // open modal, ask for user confirmation, and reload the app
+ }
+ }, [])
useEffect(() => {
// ADD EVENT LISTENERS
diff --git a/src/lib/hooks/useOTAUpdates.ts b/src/lib/hooks/useOTAUpdates.ts
new file mode 100644
index 0000000000..51fd18aa04
--- /dev/null
+++ b/src/lib/hooks/useOTAUpdates.ts
@@ -0,0 +1,142 @@
+import React from 'react'
+import {Alert, AppState, AppStateStatus} from 'react-native'
+import {nativeBuildVersion} from 'expo-application'
+import {
+ checkForUpdateAsync,
+ fetchUpdateAsync,
+ isEnabled,
+ reloadAsync,
+ setExtraParamAsync,
+ useUpdates,
+} from 'expo-updates'
+
+import {logger} from '#/logger'
+import {IS_TESTFLIGHT} from 'lib/app-info'
+import {isIOS} from 'platform/detection'
+
+const MINIMUM_MINIMIZE_TIME = 15 * 60e3
+
+async function setExtraParams() {
+ await setExtraParamAsync(
+ isIOS ? 'ios-build-number' : 'android-build-number',
+ // Hilariously, `buildVersion` is not actually a string on Android even though the TS type says it is.
+ // This just ensures it gets passed as a string
+ `${nativeBuildVersion}`,
+ )
+ await setExtraParamAsync(
+ 'channel',
+ IS_TESTFLIGHT ? 'testflight' : 'production',
+ )
+}
+
+export function useOTAUpdates() {
+ const appState = React.useRef('active')
+ const lastMinimize = React.useRef(0)
+ const ranInitialCheck = React.useRef(false)
+ const timeout = React.useRef()
+ const {isUpdatePending} = useUpdates()
+
+ const setCheckTimeout = React.useCallback(() => {
+ timeout.current = setTimeout(async () => {
+ try {
+ await setExtraParams()
+
+ logger.debug('Checking for update...')
+ const res = await checkForUpdateAsync()
+
+ if (res.isAvailable) {
+ logger.debug('Attempting to fetch update...')
+ await fetchUpdateAsync()
+ } else {
+ logger.debug('No update available.')
+ }
+ } catch (e) {
+ logger.warn('OTA Update Error', {error: `${e}`})
+ }
+ }, 10e3)
+ }, [])
+
+ const onIsTestFlight = React.useCallback(() => {
+ setTimeout(async () => {
+ try {
+ await setExtraParams()
+
+ const res = await checkForUpdateAsync()
+ if (res.isAvailable) {
+ await fetchUpdateAsync()
+
+ Alert.alert(
+ 'Update Available',
+ 'A new version of the app is available. Relaunch now?',
+ [
+ {
+ text: 'No',
+ style: 'cancel',
+ },
+ {
+ text: 'Relaunch',
+ style: 'default',
+ onPress: async () => {
+ await reloadAsync()
+ },
+ },
+ ],
+ )
+ }
+ } catch (e: any) {
+ // No need to handle
+ }
+ }, 3e3)
+ }, [])
+
+ React.useEffect(() => {
+ // For Testflight users, we can prompt the user to update immediately whenever there's an available update. This
+ // is suspect however with the Apple App Store guidelines, so we don't want to prompt production users to update
+ // immediately.
+ if (IS_TESTFLIGHT) {
+ onIsTestFlight()
+ return
+ } else if (!isEnabled || __DEV__ || ranInitialCheck.current) {
+ // Development client shouldn't check for updates at all, so we skip that here.
+ return
+ }
+
+ setCheckTimeout()
+ ranInitialCheck.current = true
+ }, [onIsTestFlight, setCheckTimeout])
+
+ // After the app has been minimized for 30 minutes, we want to either A. install an update if one has become available
+ // or B check for an update again.
+ React.useEffect(() => {
+ if (!isEnabled) return
+
+ const subscription = AppState.addEventListener(
+ 'change',
+ async nextAppState => {
+ if (
+ appState.current.match(/inactive|background/) &&
+ nextAppState === 'active'
+ ) {
+ // If it's been 15 minutes since the last "minimize", we should feel comfortable updating the client since
+ // chances are that there isn't anything important going on in the current session.
+ if (lastMinimize.current <= Date.now() - MINIMUM_MINIMIZE_TIME) {
+ if (isUpdatePending) {
+ await reloadAsync()
+ } else {
+ setCheckTimeout()
+ }
+ }
+ } else {
+ lastMinimize.current = Date.now()
+ }
+
+ appState.current = nextAppState
+ },
+ )
+
+ return () => {
+ clearTimeout(timeout.current)
+ subscription.remove()
+ }
+ }, [isUpdatePending, setCheckTimeout])
+}
diff --git a/src/lib/hooks/useWebBodyScrollLock.ts b/src/lib/hooks/useWebBodyScrollLock.ts
index 585f193f1f..c63c23b29c 100644
--- a/src/lib/hooks/useWebBodyScrollLock.ts
+++ b/src/lib/hooks/useWebBodyScrollLock.ts
@@ -1,4 +1,5 @@
import {useEffect} from 'react'
+
import {isWeb} from '#/platform/detection'
let refCount = 0
@@ -6,6 +7,7 @@ let refCount = 0
function incrementRefCount() {
if (refCount === 0) {
document.body.style.overflow = 'hidden'
+ document.documentElement.style.scrollbarGutter = 'auto'
}
refCount++
}
@@ -14,6 +16,7 @@ function decrementRefCount() {
refCount--
if (refCount === 0) {
document.body.style.overflow = ''
+ document.documentElement.style.scrollbarGutter = ''
}
}
diff --git a/src/lib/icons.tsx b/src/lib/icons.tsx
index 7ae88806f7..93b45ea3a9 100644
--- a/src/lib/icons.tsx
+++ b/src/lib/icons.tsx
@@ -1,6 +1,6 @@
import React from 'react'
import {StyleProp, TextStyle, ViewStyle} from 'react-native'
-import Svg, {Path, Rect, Line, Ellipse} from 'react-native-svg'
+import Svg, {Ellipse, Line, Path, Rect} from 'react-native-svg'
export function GridIcon({
style,
@@ -141,8 +141,8 @@ export function MagnifyingGlassIcon2({
width={size || 24}
height={size || 24}
style={style}>
-
-
+
+
)
}
@@ -167,14 +167,14 @@ export function MagnifyingGlassIcon2Solid({
style={style}>
-
-
+
+
)
}
diff --git a/src/lib/link-meta/link-meta.ts b/src/lib/link-meta/link-meta.ts
index c7c8d4130a..e073e9b003 100644
--- a/src/lib/link-meta/link-meta.ts
+++ b/src/lib/link-meta/link-meta.ts
@@ -1,8 +1,9 @@
import {BskyAgent} from '@atproto/api'
-import {isBskyAppUrl} from '../strings/url-helpers'
-import {extractBskyMeta} from './bsky'
+
import {LINK_META_PROXY} from 'lib/constants'
import {getGiphyMetaUri} from 'lib/strings/embed-player'
+import {isBskyAppUrl} from '../strings/url-helpers'
+import {extractBskyMeta} from './bsky'
export enum LikelyType {
HTML,
@@ -26,7 +27,7 @@ export interface LinkMeta {
export async function getLinkMeta(
agent: BskyAgent,
url: string,
- timeout = 5e3,
+ timeout = 15e3,
): Promise {
if (isBskyAppUrl(url)) {
return extractBskyMeta(agent, url)
diff --git a/src/lib/media/picker.e2e.tsx b/src/lib/media/picker.e2e.tsx
index d7b6080417..a0ffdce11c 100644
--- a/src/lib/media/picker.e2e.tsx
+++ b/src/lib/media/picker.e2e.tsx
@@ -1,9 +1,9 @@
-import {Image as RNImage} from 'react-native-image-crop-picker'
import RNFS from 'react-native-fs'
-import {CropperOptions} from './types'
+import {Image as RNImage} from 'react-native-image-crop-picker'
+
import {compressIfNeeded} from './manip'
+import {CropperOptions} from './types'
-let _imageCounter = 0
async function getFile() {
let files = await RNFS.readDir(
RNFS.LibraryDirectoryPath.split('/')
@@ -12,7 +12,7 @@ async function getFile() {
.join('/'),
)
files = files.filter(file => file.path.endsWith('.JPG'))
- const file = files[_imageCounter++ % files.length]
+ const file = files[0]
return await compressIfNeeded({
path: file.path,
mime: 'image/jpeg',
diff --git a/src/lib/media/picker.shared.ts b/src/lib/media/picker.shared.ts
index 8bade34e25..44df590df9 100644
--- a/src/lib/media/picker.shared.ts
+++ b/src/lib/media/picker.shared.ts
@@ -3,8 +3,9 @@ import {
launchImageLibraryAsync,
MediaTypeOptions,
} from 'expo-image-picker'
-import {getDataUriSize} from './util'
+
import * as Toast from 'view/com/util/Toast'
+import {getDataUriSize} from './util'
export async function openPicker(opts?: ImagePickerOptions) {
const response = await launchImageLibraryAsync({
@@ -18,11 +19,18 @@ export async function openPicker(opts?: ImagePickerOptions) {
Toast.show('You may only select up to 4 images')
}
- return (response.assets ?? []).slice(0, 4).map(image => ({
- mime: 'image/jpeg',
- height: image.height,
- width: image.width,
- path: image.uri,
- size: getDataUriSize(image.uri),
- }))
+ return (response.assets ?? [])
+ .slice(0, 4)
+ .filter(asset => {
+ if (asset.mimeType?.startsWith('image/')) return true
+ Toast.show('Only image files are supported')
+ return false
+ })
+ .map(image => ({
+ mime: 'image/jpeg',
+ height: image.height,
+ width: image.width,
+ path: image.uri,
+ size: getDataUriSize(image.uri),
+ }))
}
diff --git a/src/lib/moderatePost_wrapped.ts b/src/lib/moderatePost_wrapped.ts
index 2195b23044..10e548629e 100644
--- a/src/lib/moderatePost_wrapped.ts
+++ b/src/lib/moderatePost_wrapped.ts
@@ -1,58 +1,30 @@
-import {
- AppBskyEmbedRecord,
- AppBskyEmbedRecordWithMedia,
- moderatePost,
-} from '@atproto/api'
+import {BSKY_LABELER_DID, moderatePost} from '@atproto/api'
type ModeratePost = typeof moderatePost
-type Options = Parameters[1] & {
- hiddenPosts?: string[]
-}
+type Options = Parameters[1]
export function moderatePost_wrapped(
subject: Parameters[0],
opts: Options,
) {
- const {hiddenPosts = [], ...options} = opts
- const moderations = moderatePost(subject, options)
+ // HACK
+ // temporarily translate 'gore' into 'graphic-media' during the transition period
+ // can remove this in a few months
+ // -prf
+ translateOldLabels(subject)
- if (hiddenPosts.includes(subject.uri)) {
- moderations.content.filter = true
- moderations.content.blur = true
- if (!moderations.content.cause) {
- moderations.content.cause = {
- // @ts-ignore Temporary extension to the moderation system -prf
- type: 'post-hidden',
- source: {type: 'user'},
- priority: 1,
- }
- }
- }
+ return moderatePost(subject, opts)
+}
- if (subject.embed) {
- let embedHidden = false
- if (AppBskyEmbedRecord.isViewRecord(subject.embed.record)) {
- embedHidden = hiddenPosts.includes(subject.embed.record.uri)
- }
- if (
- AppBskyEmbedRecordWithMedia.isView(subject.embed) &&
- AppBskyEmbedRecord.isViewRecord(subject.embed.record.record)
- ) {
- embedHidden = hiddenPosts.includes(subject.embed.record.record.uri)
- }
- if (embedHidden) {
- moderations.embed.filter = true
- moderations.embed.blur = true
- if (!moderations.embed.cause) {
- moderations.embed.cause = {
- // @ts-ignore Temporary extension to the moderation system -prf
- type: 'post-hidden',
- source: {type: 'user'},
- priority: 1,
- }
+function translateOldLabels(subject: Parameters[0]) {
+ if (subject.labels) {
+ for (const label of subject.labels) {
+ if (
+ label.val === 'gore' &&
+ (!label.src || label.src === BSKY_LABELER_DID)
+ ) {
+ label.val = 'graphic-media'
}
}
}
-
- return moderations
}
diff --git a/src/lib/moderation.ts b/src/lib/moderation.ts
index bf19c208ad..f83469c660 100644
--- a/src/lib/moderation.ts
+++ b/src/lib/moderation.ts
@@ -1,142 +1,81 @@
-import {ModerationCause, ProfileModeration, PostModeration} from '@atproto/api'
+import {
+ AppBskyLabelerDefs,
+ BskyAgent,
+ InterpretedLabelValueDefinition,
+ LABELS,
+ ModerationCause,
+ ModerationOpts,
+ ModerationUI,
+} from '@atproto/api'
-export interface ModerationCauseDescription {
- name: string
- description: string
-}
+import {sanitizeDisplayName} from '#/lib/strings/display-names'
+import {sanitizeHandle} from '#/lib/strings/handles'
-export function describeModerationCause(
- cause: ModerationCause | undefined,
- context: 'account' | 'content',
-): ModerationCauseDescription {
- if (!cause) {
- return {
- name: 'Content Warning',
- description:
- 'Moderator has chosen to set a general warning on the content.',
- }
- }
- if (cause.type === 'blocking') {
- if (cause.source.type === 'list') {
- return {
- name: `User Blocked by "${cause.source.list.name}"`,
- description:
- 'You have blocked this user. You cannot view their content.',
- }
- } else {
- return {
- name: 'User Blocked',
- description:
- 'You have blocked this user. You cannot view their content.',
- }
- }
- }
- if (cause.type === 'blocked-by') {
- return {
- name: 'User Blocking You',
- description: 'This user has blocked you. You cannot view their content.',
- }
- }
- if (cause.type === 'block-other') {
- return {
- name: 'Content Not Available',
- description:
- 'This content is not available because one of the users involved has blocked the other.',
- }
- }
- if (cause.type === 'muted') {
- if (cause.source.type === 'list') {
- return {
- name:
- context === 'account'
- ? `Muted by "${cause.source.list.name}"`
- : `Post by muted user ("${cause.source.list.name}")`,
- description: 'You have muted this user',
- }
- } else {
- return {
- name: context === 'account' ? 'Muted User' : 'Post by muted user',
- description: 'You have muted this user',
- }
- }
- }
- // @ts-ignore Temporary extension to the moderation system -prf
- if (cause.type === 'post-hidden') {
- return {
- name: 'Post Hidden by You',
- description: 'You have hidden this post',
- }
+export function getModerationCauseKey(cause: ModerationCause): string {
+ const source =
+ cause.source.type === 'labeler'
+ ? cause.source.did
+ : cause.source.type === 'list'
+ ? cause.source.list.uri
+ : 'user'
+ if (cause.type === 'label') {
+ return `label:${cause.label.val}:${source}`
}
- return cause.labelDef.strings[context].en
+ return `${cause.type}:${source}`
}
-export function getProfileModerationCauses(
- moderation: ProfileModeration,
-): ModerationCause[] {
- /*
- Gather everything on profile and account that blurs or alerts
- */
- return [
- moderation.decisions.profile.cause,
- ...moderation.decisions.profile.additionalCauses,
- moderation.decisions.account.cause,
- ...moderation.decisions.account.additionalCauses,
- ].filter(cause => {
- if (!cause) {
- return false
- }
- if (cause?.type === 'label') {
- if (
- cause.labelDef.onwarn === 'blur' ||
- cause.labelDef.onwarn === 'alert'
- ) {
- return true
- } else {
- return false
- }
- }
- return true
- }) as ModerationCause[]
+export function isJustAMute(modui: ModerationUI): boolean {
+ return modui.filters.length === 1 && modui.filters[0].type === 'muted'
}
-export function isPostMediaBlurred(
- decisions: PostModeration['decisions'],
-): boolean {
- return decisions.post.blurMedia
+export function getLabelingServiceTitle({
+ displayName,
+ handle,
+}: {
+ displayName?: string
+ handle: string
+}) {
+ return displayName
+ ? sanitizeDisplayName(displayName)
+ : sanitizeHandle(handle, '@')
}
-export function isQuoteBlurred(
- decisions: PostModeration['decisions'],
-): boolean {
- return (
- decisions.quote?.blur ||
- decisions.quote?.blurMedia ||
- decisions.quote?.filter ||
- decisions.quotedAccount?.blur ||
- decisions.quotedAccount?.filter ||
- false
- )
+export function lookupLabelValueDefinition(
+ labelValue: string,
+ customDefs: InterpretedLabelValueDefinition[] | undefined,
+): InterpretedLabelValueDefinition | undefined {
+ let def
+ if (!labelValue.startsWith('!') && customDefs) {
+ def = customDefs.find(d => d.identifier === labelValue)
+ }
+ if (!def) {
+ def = LABELS[labelValue as keyof typeof LABELS]
+ }
+ return def
}
-export function isCauseALabelOnUri(
- cause: ModerationCause | undefined,
- uri: string,
+export function isAppLabeler(
+ labeler:
+ | string
+ | AppBskyLabelerDefs.LabelerView
+ | AppBskyLabelerDefs.LabelerViewDetailed,
): boolean {
- if (cause?.type !== 'label') {
- return false
+ if (typeof labeler === 'string') {
+ return BskyAgent.appLabelers.includes(labeler)
}
- return cause.label.uri === uri
+ return BskyAgent.appLabelers.includes(labeler.creator.did)
}
-export function getModerationCauseKey(cause: ModerationCause): string {
- const source =
- cause.source.type === 'labeler'
- ? cause.source.labeler.did
- : cause.source.type === 'list'
- ? cause.source.list.uri
- : 'user'
- if (cause.type === 'label') {
- return `label:${cause.label.val}:${source}`
+export function isLabelerSubscribed(
+ labeler:
+ | string
+ | AppBskyLabelerDefs.LabelerView
+ | AppBskyLabelerDefs.LabelerViewDetailed,
+ modOpts: ModerationOpts,
+) {
+ labeler = typeof labeler === 'string' ? labeler : labeler.creator.did
+ if (isAppLabeler(labeler)) {
+ return true
}
- return `${cause.type}:${source}`
+ return modOpts.prefs.labelers.find(l => l.did === labeler)
}
diff --git a/src/lib/moderation/useGlobalLabelStrings.ts b/src/lib/moderation/useGlobalLabelStrings.ts
new file mode 100644
index 0000000000..4f41c62b10
--- /dev/null
+++ b/src/lib/moderation/useGlobalLabelStrings.ts
@@ -0,0 +1,52 @@
+import {useMemo} from 'react'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+export type GlobalLabelStrings = Record<
+ string,
+ {
+ name: string
+ description: string
+ }
+>
+
+export function useGlobalLabelStrings(): GlobalLabelStrings {
+ const {_} = useLingui()
+ return useMemo(
+ () => ({
+ '!hide': {
+ name: _(msg`Content Blocked`),
+ description: _(msg`This content has been hidden by the moderators.`),
+ },
+ '!warn': {
+ name: _(msg`Content Warning`),
+ description: _(
+ msg`This content has received a general warning from moderators.`,
+ ),
+ },
+ '!no-unauthenticated': {
+ name: _(msg`Sign-in Required`),
+ description: _(
+ msg`This user has requested that their content only be shown to signed-in users.`,
+ ),
+ },
+ porn: {
+ name: _(msg`Adult Content`),
+ description: _(msg`Explicit sexual images.`),
+ },
+ sexual: {
+ name: _(msg`Sexually Suggestive`),
+ description: _(msg`Does not include nudity.`),
+ },
+ nudity: {
+ name: _(msg`Non-sexual Nudity`),
+ description: _(msg`E.g. artistic nudes.`),
+ },
+ 'graphic-media': {
+ name: _(msg`Graphic Media`),
+ description: _(msg`Explicit or potentially disturbing media.`),
+ },
+ }),
+ [_],
+ )
+}
diff --git a/src/lib/moderation/useLabelBehaviorDescription.ts b/src/lib/moderation/useLabelBehaviorDescription.ts
new file mode 100644
index 0000000000..4e773e0f0f
--- /dev/null
+++ b/src/lib/moderation/useLabelBehaviorDescription.ts
@@ -0,0 +1,70 @@
+import {InterpretedLabelValueDefinition, LabelPreference} from '@atproto/api'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+export function useLabelBehaviorDescription(
+ labelValueDef: InterpretedLabelValueDefinition,
+ pref: LabelPreference,
+) {
+ const {_} = useLingui()
+ if (pref === 'ignore') {
+ return _(msg`Off`)
+ }
+ if (labelValueDef.blurs === 'content' || labelValueDef.blurs === 'media') {
+ if (pref === 'hide') {
+ return _(msg`Hide`)
+ }
+ return _(msg`Warn`)
+ } else if (labelValueDef.severity === 'alert') {
+ if (pref === 'hide') {
+ return _(msg`Hide`)
+ }
+ return _(msg`Warn`)
+ } else if (labelValueDef.severity === 'inform') {
+ if (pref === 'hide') {
+ return _(msg`Hide`)
+ }
+ return _(msg`Show badge`)
+ } else {
+ if (pref === 'hide') {
+ return _(msg`Hide`)
+ }
+ return _(msg`Disabled`)
+ }
+}
+
+export function useLabelLongBehaviorDescription(
+ labelValueDef: InterpretedLabelValueDefinition,
+ pref: LabelPreference,
+) {
+ const {_} = useLingui()
+ if (pref === 'ignore') {
+ return _(msg`Disabled`)
+ }
+ if (labelValueDef.blurs === 'content') {
+ if (pref === 'hide') {
+ return _(msg`Warn content and filter from feeds`)
+ }
+ return _(msg`Warn content`)
+ } else if (labelValueDef.blurs === 'media') {
+ if (pref === 'hide') {
+ return _(msg`Blur images and filter from feeds`)
+ }
+ return _(msg`Blur images`)
+ } else if (labelValueDef.severity === 'alert') {
+ if (pref === 'hide') {
+ return _(msg`Show warning and filter from feeds`)
+ }
+ return _(msg`Show warning`)
+ } else if (labelValueDef.severity === 'inform') {
+ if (pref === 'hide') {
+ return _(msg`Show badge and filter from feeds`)
+ }
+ return _(msg`Show badge`)
+ } else {
+ if (pref === 'hide') {
+ return _(msg`Filter from feeds`)
+ }
+ return _(msg`Disabled`)
+ }
+}
diff --git a/src/lib/moderation/useLabelInfo.ts b/src/lib/moderation/useLabelInfo.ts
new file mode 100644
index 0000000000..0ff7e1246a
--- /dev/null
+++ b/src/lib/moderation/useLabelInfo.ts
@@ -0,0 +1,100 @@
+import {
+ AppBskyLabelerDefs,
+ ComAtprotoLabelDefs,
+ InterpretedLabelValueDefinition,
+ interpretLabelValueDefinition,
+ LABELS,
+} from '@atproto/api'
+import {useLingui} from '@lingui/react'
+import * as bcp47Match from 'bcp-47-match'
+
+import {
+ GlobalLabelStrings,
+ useGlobalLabelStrings,
+} from '#/lib/moderation/useGlobalLabelStrings'
+import {useLabelDefinitions} from '#/state/preferences'
+
+export interface LabelInfo {
+ label: ComAtprotoLabelDefs.Label
+ def: InterpretedLabelValueDefinition
+ strings: ComAtprotoLabelDefs.LabelValueDefinitionStrings
+ labeler: AppBskyLabelerDefs.LabelerViewDetailed | undefined
+}
+
+export function useLabelInfo(label: ComAtprotoLabelDefs.Label): LabelInfo {
+ const {i18n} = useLingui()
+ const {labelDefs, labelers} = useLabelDefinitions()
+ const globalLabelStrings = useGlobalLabelStrings()
+ const def = getDefinition(labelDefs, label)
+ return {
+ label,
+ def,
+ strings: getLabelStrings(i18n.locale, globalLabelStrings, def),
+ labeler: labelers.find(labeler => label.src === labeler.creator.did),
+ }
+}
+
+export function getDefinition(
+ labelDefs: Record,
+ label: ComAtprotoLabelDefs.Label,
+): InterpretedLabelValueDefinition {
+ // check local definitions
+ const customDef =
+ !label.val.startsWith('!') &&
+ labelDefs[label.src]?.find(
+ def => def.identifier === label.val && def.definedBy === label.src,
+ )
+ if (customDef) {
+ return customDef
+ }
+
+ // check global definitions
+ const globalDef = LABELS[label.val as keyof typeof LABELS]
+ if (globalDef) {
+ return globalDef
+ }
+
+ // fallback to a noop definition
+ return interpretLabelValueDefinition(
+ {
+ identifier: label.val,
+ severity: 'none',
+ blurs: 'none',
+ defaultSetting: 'ignore',
+ locales: [],
+ },
+ label.src,
+ )
+}
+
+export function getLabelStrings(
+ locale: string,
+ globalLabelStrings: GlobalLabelStrings,
+ def: InterpretedLabelValueDefinition,
+): ComAtprotoLabelDefs.LabelValueDefinitionStrings {
+ if (!def.definedBy) {
+ // global definition, look up strings
+ if (def.identifier in globalLabelStrings) {
+ return globalLabelStrings[
+ def.identifier
+ ] as ComAtprotoLabelDefs.LabelValueDefinitionStrings
+ }
+ } else {
+ // try to find locale match in the definition's strings
+ const localeMatch = def.locales.find(
+ strings => bcp47Match.basicFilter(locale, strings.lang).length > 0,
+ )
+ if (localeMatch) {
+ return localeMatch
+ }
+ // fall back to the zero item if no match
+ if (def.locales[0]) {
+ return def.locales[0]
+ }
+ }
+ return {
+ lang: locale,
+ name: def.identifier,
+ description: `Labeled "${def.identifier}"`,
+ }
+}
diff --git a/src/lib/moderation/useModerationCauseDescription.ts b/src/lib/moderation/useModerationCauseDescription.ts
new file mode 100644
index 0000000000..d4760cca46
--- /dev/null
+++ b/src/lib/moderation/useModerationCauseDescription.ts
@@ -0,0 +1,150 @@
+import React from 'react'
+import {
+ BSKY_LABELER_DID,
+ ModerationCause,
+ ModerationCauseSource,
+} from '@atproto/api'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {useLabelDefinitions} from '#/state/preferences'
+import {CircleBanSign_Stroke2_Corner0_Rounded as CircleBanSign} from '#/components/icons/CircleBanSign'
+import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
+import {Props as SVGIconProps} from '#/components/icons/common'
+import {EyeSlash_Stroke2_Corner0_Rounded as EyeSlash} from '#/components/icons/EyeSlash'
+import {Warning_Stroke2_Corner0_Rounded as Warning} from '#/components/icons/Warning'
+import {useGlobalLabelStrings} from './useGlobalLabelStrings'
+import {getDefinition, getLabelStrings} from './useLabelInfo'
+
+export interface ModerationCauseDescription {
+ icon: React.ComponentType
+ name: string
+ description: string
+ source?: string
+ sourceType?: ModerationCauseSource['type']
+}
+
+export function useModerationCauseDescription(
+ cause: ModerationCause | undefined,
+): ModerationCauseDescription {
+ const {_, i18n} = useLingui()
+ const {labelDefs, labelers} = useLabelDefinitions()
+ const globalLabelStrings = useGlobalLabelStrings()
+
+ return React.useMemo(() => {
+ if (!cause) {
+ return {
+ icon: Warning,
+ name: _(msg`Content Warning`),
+ description: _(
+ msg`Moderator has chosen to set a general warning on the content.`,
+ ),
+ }
+ }
+ if (cause.type === 'blocking') {
+ if (cause.source.type === 'list') {
+ return {
+ icon: CircleBanSign,
+ name: _(msg`User Blocked by "${cause.source.list.name}"`),
+ description: _(
+ msg`You have blocked this user. You cannot view their content.`,
+ ),
+ }
+ } else {
+ return {
+ icon: CircleBanSign,
+ name: _(msg`User Blocked`),
+ description: _(
+ msg`You have blocked this user. You cannot view their content.`,
+ ),
+ }
+ }
+ }
+ if (cause.type === 'blocked-by') {
+ return {
+ icon: CircleBanSign,
+ name: _(msg`User Blocking You`),
+ description: _(
+ msg`This user has blocked you. You cannot view their content.`,
+ ),
+ }
+ }
+ if (cause.type === 'block-other') {
+ return {
+ icon: CircleBanSign,
+ name: _(msg`Content Not Available`),
+ description: _(
+ msg`This content is not available because one of the users involved has blocked the other.`,
+ ),
+ }
+ }
+ if (cause.type === 'muted') {
+ if (cause.source.type === 'list') {
+ return {
+ icon: EyeSlash,
+ name: _(msg`Muted by "${cause.source.list.name}"`),
+ description: _(msg`You have muted this user`),
+ }
+ } else {
+ return {
+ icon: EyeSlash,
+ name: _(msg`Account Muted`),
+ description: _(msg`You have muted this account.`),
+ }
+ }
+ }
+ if (cause.type === 'mute-word') {
+ return {
+ icon: EyeSlash,
+ name: _(msg`Post Hidden by Muted Word`),
+ description: _(
+ msg`You've chosen to hide a word or tag within this post.`,
+ ),
+ }
+ }
+ if (cause.type === 'hidden') {
+ return {
+ icon: EyeSlash,
+ name: _(msg`Post Hidden by You`),
+ description: _(msg`You have hidden this post`),
+ }
+ }
+ if (cause.type === 'label') {
+ const def = cause.labelDef || getDefinition(labelDefs, cause.label)
+ const strings = getLabelStrings(i18n.locale, globalLabelStrings, def)
+ const labeler = labelers.find(l => l.creator.did === cause.label.src)
+ let source =
+ labeler?.creator.displayName ||
+ (labeler?.creator.handle ? '@' + labeler?.creator.handle : undefined)
+ if (!source) {
+ if (cause.label.src === BSKY_LABELER_DID) {
+ source = 'Bluesky Moderation Service'
+ } else {
+ source = cause.label.src
+ }
+ }
+ if (def.identifier === 'porn' || def.identifier === 'sexual') {
+ strings.name = 'Adult Content'
+ }
+
+ return {
+ icon:
+ def.identifier === '!no-unauthenticated'
+ ? EyeSlash
+ : def.severity === 'alert'
+ ? Warning
+ : CircleInfo,
+ name: strings.name,
+ description: strings.description,
+ source,
+ sourceType: cause.source.type,
+ }
+ }
+ // should never happen
+ return {
+ icon: CircleInfo,
+ name: '',
+ description: ``,
+ }
+ }, [labelDefs, labelers, globalLabelStrings, cause, _, i18n.locale])
+}
diff --git a/src/lib/moderation/useReportOptions.ts b/src/lib/moderation/useReportOptions.ts
new file mode 100644
index 0000000000..a22386b991
--- /dev/null
+++ b/src/lib/moderation/useReportOptions.ts
@@ -0,0 +1,94 @@
+import {useMemo} from 'react'
+import {ComAtprotoModerationDefs} from '@atproto/api'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+export interface ReportOption {
+ reason: string
+ title: string
+ description: string
+}
+
+interface ReportOptions {
+ account: ReportOption[]
+ post: ReportOption[]
+ list: ReportOption[]
+ feedgen: ReportOption[]
+ other: ReportOption[]
+}
+
+export function useReportOptions(): ReportOptions {
+ const {_} = useLingui()
+ return useMemo(() => {
+ const other = {
+ reason: ComAtprotoModerationDefs.REASONOTHER,
+ title: _(msg`Other`),
+ description: _(msg`An issue not included in these options`),
+ }
+ const common = [
+ {
+ reason: ComAtprotoModerationDefs.REASONRUDE,
+ title: _(msg`Anti-Social Behavior`),
+ description: _(msg`Harassment, trolling, or intolerance`),
+ },
+ {
+ reason: ComAtprotoModerationDefs.REASONVIOLATION,
+ title: _(msg`Illegal and Urgent`),
+ description: _(msg`Glaring violations of law or terms of service`),
+ },
+ other,
+ ]
+ return {
+ account: [
+ {
+ reason: ComAtprotoModerationDefs.REASONMISLEADING,
+ title: _(msg`Misleading Account`),
+ description: _(
+ msg`Impersonation or false claims about identity or affiliation`,
+ ),
+ },
+ {
+ reason: ComAtprotoModerationDefs.REASONSPAM,
+ title: _(msg`Frequently Posts Unwanted Content`),
+ description: _(msg`Spam; excessive mentions or replies`),
+ },
+ {
+ reason: ComAtprotoModerationDefs.REASONVIOLATION,
+ title: _(msg`Name or Description Violates Community Standards`),
+ description: _(msg`Terms used violate community standards`),
+ },
+ other,
+ ],
+ post: [
+ {
+ reason: ComAtprotoModerationDefs.REASONSPAM,
+ title: _(msg`Spam`),
+ description: _(msg`Excessive mentions or replies`),
+ },
+ {
+ reason: ComAtprotoModerationDefs.REASONSEXUAL,
+ title: _(msg`Unwanted Sexual Content`),
+ description: _(msg`Nudity or adult content not labeled as such`),
+ },
+ ...common,
+ ],
+ list: [
+ {
+ reason: ComAtprotoModerationDefs.REASONVIOLATION,
+ title: _(msg`Name or Description Violates Community Standards`),
+ description: _(msg`Terms used violate community standards`),
+ },
+ ...common,
+ ],
+ feedgen: [
+ {
+ reason: ComAtprotoModerationDefs.REASONVIOLATION,
+ title: _(msg`Name or Description Violates Community Standards`),
+ description: _(msg`Terms used violate community standards`),
+ },
+ ...common,
+ ],
+ other: common,
+ }
+ }, [_])
+}
diff --git a/src/lib/notifications/notifications.ts b/src/lib/notifications/notifications.ts
index 62d0bfc4b1..0f628f4288 100644
--- a/src/lib/notifications/notifications.ts
+++ b/src/lib/notifications/notifications.ts
@@ -1,12 +1,15 @@
+import {useEffect} from 'react'
import * as Notifications from 'expo-notifications'
import {QueryClient} from '@tanstack/react-query'
-import {resetToTab} from '../../Navigation'
-import {devicePlatform, isIOS} from 'platform/detection'
-import {track} from 'lib/analytics/analytics'
+
import {logger} from '#/logger'
import {RQKEY as RQKEY_NOTIFS} from '#/state/queries/notifications/feed'
import {truncateAndInvalidate} from '#/state/queries/util'
-import {SessionAccount, getAgent} from '#/state/session'
+import {getAgent, SessionAccount} from '#/state/session'
+import {track} from 'lib/analytics/analytics'
+import {devicePlatform, isIOS} from 'platform/detection'
+import {resetToTab} from '../../Navigation'
+import {logEvent} from '../statsig/statsig'
const SERVICE_DID = (serviceUrl?: string) =>
serviceUrl?.includes('staging')
@@ -79,52 +82,63 @@ export function registerTokenChangeHandler(
}
}
-export function init(queryClient: QueryClient) {
- // handle notifications that are received, both in the foreground or background
- // NOTE: currently just here for debug logging
- Notifications.addNotificationReceivedListener(event => {
- logger.debug(
- 'Notifications: received',
- {event},
- logger.DebugContext.notifications,
- )
- if (event.request.trigger.type === 'push') {
- // handle payload-based deeplinks
- let payload
- if (isIOS) {
- payload = event.request.trigger.payload
- } else {
- // TODO: handle android payload deeplink
+export function useNotificationsListener(queryClient: QueryClient) {
+ useEffect(() => {
+ // handle notifications that are received, both in the foreground or background
+ // NOTE: currently just here for debug logging
+ const sub1 = Notifications.addNotificationReceivedListener(event => {
+ logger.debug(
+ 'Notifications: received',
+ {event},
+ logger.DebugContext.notifications,
+ )
+ if (event.request.trigger.type === 'push') {
+ // handle payload-based deeplinks
+ let payload
+ if (isIOS) {
+ payload = event.request.trigger.payload
+ } else {
+ // TODO: handle android payload deeplink
+ }
+ if (payload) {
+ logger.debug(
+ 'Notifications: received payload',
+ payload,
+ logger.DebugContext.notifications,
+ )
+ // TODO: deeplink notif here
+ }
}
- if (payload) {
+ })
+
+ // handle notifications that are tapped on
+ const sub2 = Notifications.addNotificationResponseReceivedListener(
+ response => {
logger.debug(
- 'Notifications: received payload',
- payload,
+ 'Notifications: response received',
+ {
+ actionIdentifier: response.actionIdentifier,
+ },
logger.DebugContext.notifications,
)
- // TODO: deeplink notif here
- }
- }
- })
-
- // handle notifications that are tapped on
- Notifications.addNotificationResponseReceivedListener(response => {
- logger.debug(
- 'Notifications: response received',
- {
- actionIdentifier: response.actionIdentifier,
+ if (
+ response.actionIdentifier === Notifications.DEFAULT_ACTION_IDENTIFIER
+ ) {
+ logger.debug(
+ 'User pressed a notification, opening notifications tab',
+ {},
+ logger.DebugContext.notifications,
+ )
+ track('Notificatons:OpenApp')
+ logEvent('notifications:openApp', {})
+ truncateAndInvalidate(queryClient, RQKEY_NOTIFS())
+ resetToTab('NotificationsTab') // open notifications tab
+ }
},
- logger.DebugContext.notifications,
)
- if (response.actionIdentifier === Notifications.DEFAULT_ACTION_IDENTIFIER) {
- logger.debug(
- 'User pressed a notification, opening notifications tab',
- {},
- logger.DebugContext.notifications,
- )
- track('Notificatons:OpenApp')
- truncateAndInvalidate(queryClient, RQKEY_NOTIFS())
- resetToTab('NotificationsTab') // open notifications tab
+ return () => {
+ sub1.remove()
+ sub2.remove()
}
- })
+ }, [queryClient])
}
diff --git a/src/lib/react-query.ts b/src/lib/react-query.ts
deleted file mode 100644
index 7fe3fe7a47..0000000000
--- a/src/lib/react-query.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-import {AppState, AppStateStatus} from 'react-native'
-import {QueryClient, focusManager} from '@tanstack/react-query'
-import {isNative} from '#/platform/detection'
-
-focusManager.setEventListener(onFocus => {
- if (isNative) {
- const subscription = AppState.addEventListener(
- 'change',
- (status: AppStateStatus) => {
- focusManager.setFocused(status === 'active')
- },
- )
-
- return () => subscription.remove()
- } else if (typeof window !== 'undefined' && window.addEventListener) {
- // these handlers are a bit redundant but focus catches when the browser window
- // is blurred/focused while visibilitychange seems to only handle when the
- // window minimizes (both of them catch tab changes)
- // there's no harm to redundant fires because refetchOnWindowFocus is only
- // used with queries that employ stale data times
- const handler = () => onFocus()
- window.addEventListener('focus', handler, false)
- window.addEventListener('visibilitychange', handler, false)
- return () => {
- window.removeEventListener('visibilitychange', handler)
- window.removeEventListener('focus', handler)
- }
- }
-})
-
-export const queryClient = new QueryClient({
- defaultOptions: {
- queries: {
- // NOTE
- // refetchOnWindowFocus breaks some UIs (like feeds)
- // so we only selectively want to enable this
- // -prf
- refetchOnWindowFocus: false,
- // Structural sharing between responses makes it impossible to rely on
- // "first seen" timestamps on objects to determine if they're fresh.
- // Disable this optimization so that we can rely on "first seen" timestamps.
- structuralSharing: false,
- // We don't want to retry queries by default, because in most cases we
- // want to fail early and show a response to the user. There are
- // exceptions, and those can be made on a per-query basis. For others, we
- // should give users controls to retry.
- retry: false,
- },
- },
-})
diff --git a/src/lib/react-query.tsx b/src/lib/react-query.tsx
new file mode 100644
index 0000000000..be507216aa
--- /dev/null
+++ b/src/lib/react-query.tsx
@@ -0,0 +1,124 @@
+import React, {useRef, useState} from 'react'
+import {AppState, AppStateStatus} from 'react-native'
+import AsyncStorage from '@react-native-async-storage/async-storage'
+import {createAsyncStoragePersister} from '@tanstack/query-async-storage-persister'
+import {focusManager, QueryClient} from '@tanstack/react-query'
+import {
+ PersistQueryClientProvider,
+ PersistQueryClientProviderProps,
+} from '@tanstack/react-query-persist-client'
+
+import {isNative} from '#/platform/detection'
+
+// any query keys in this array will be persisted to AsyncStorage
+export const labelersDetailedInfoQueryKeyRoot = 'labelers-detailed-info'
+const STORED_CACHE_QUERY_KEY_ROOTS = [labelersDetailedInfoQueryKeyRoot]
+
+focusManager.setEventListener(onFocus => {
+ if (isNative) {
+ const subscription = AppState.addEventListener(
+ 'change',
+ (status: AppStateStatus) => {
+ focusManager.setFocused(status === 'active')
+ },
+ )
+
+ return () => subscription.remove()
+ } else if (typeof window !== 'undefined' && window.addEventListener) {
+ // these handlers are a bit redundant but focus catches when the browser window
+ // is blurred/focused while visibilitychange seems to only handle when the
+ // window minimizes (both of them catch tab changes)
+ // there's no harm to redundant fires because refetchOnWindowFocus is only
+ // used with queries that employ stale data times
+ const handler = () => onFocus()
+ window.addEventListener('focus', handler, false)
+ window.addEventListener('visibilitychange', handler, false)
+ return () => {
+ window.removeEventListener('visibilitychange', handler)
+ window.removeEventListener('focus', handler)
+ }
+ }
+})
+
+const createQueryClient = () =>
+ new QueryClient({
+ defaultOptions: {
+ queries: {
+ // NOTE
+ // refetchOnWindowFocus breaks some UIs (like feeds)
+ // so we only selectively want to enable this
+ // -prf
+ refetchOnWindowFocus: false,
+ // Structural sharing between responses makes it impossible to rely on
+ // "first seen" timestamps on objects to determine if they're fresh.
+ // Disable this optimization so that we can rely on "first seen" timestamps.
+ structuralSharing: false,
+ // We don't want to retry queries by default, because in most cases we
+ // want to fail early and show a response to the user. There are
+ // exceptions, and those can be made on a per-query basis. For others, we
+ // should give users controls to retry.
+ retry: false,
+ },
+ },
+ })
+
+const dehydrateOptions: PersistQueryClientProviderProps['persistOptions']['dehydrateOptions'] =
+ {
+ shouldDehydrateMutation: (_: any) => false,
+ shouldDehydrateQuery: query => {
+ return STORED_CACHE_QUERY_KEY_ROOTS.includes(String(query.queryKey[0]))
+ },
+ }
+
+export function QueryProvider({
+ children,
+ currentDid,
+}: {
+ children: React.ReactNode
+ currentDid: string | undefined
+}) {
+ return (
+
+ {children}
+
+ )
+}
+
+function QueryProviderInner({
+ children,
+ currentDid,
+}: {
+ children: React.ReactNode
+ currentDid: string | undefined
+}) {
+ const initialDid = useRef(currentDid)
+ if (currentDid !== initialDid.current) {
+ throw Error(
+ 'Something is very wrong. Expected did to be stable due to key above.',
+ )
+ }
+ // We create the query client here so that it's scoped to a specific DID.
+ // Do not move the query client creation outside of this component.
+ const [queryClient, _setQueryClient] = useState(() => createQueryClient())
+ const [persistOptions, _setPersistOptions] = useState(() => {
+ const asyncPersister = createAsyncStoragePersister({
+ storage: AsyncStorage,
+ key: 'queryClient-' + (currentDid ?? 'logged-out'),
+ })
+ return {
+ persister: asyncPersister,
+ dehydrateOptions,
+ }
+ })
+ return (
+
+ {children}
+
+ )
+}
diff --git a/src/lib/routes/links.ts b/src/lib/routes/links.ts
index 538f30cd31..9dfdab909b 100644
--- a/src/lib/routes/links.ts
+++ b/src/lib/routes/links.ts
@@ -25,3 +25,13 @@ export function makeCustomFeedLink(
export function makeListLink(did: string, rkey: string, ...segments: string[]) {
return [`/profile`, did, 'lists', rkey, ...segments].join('/')
}
+
+export function makeTagLink(did: string) {
+ return `/search?q=${encodeURIComponent(did)}`
+}
+
+export function makeSearchLink(props: {query: string; from?: 'me' | string}) {
+ return `/search?q=${encodeURIComponent(
+ props.query + (props.from ? ` from:${props.from}` : ''),
+ )}`
+}
diff --git a/src/lib/routes/router.ts b/src/lib/routes/router.ts
index 00defaeda2..45f9c85fdb 100644
--- a/src/lib/routes/router.ts
+++ b/src/lib/routes/router.ts
@@ -1,10 +1,16 @@
-import {RouteParams, Route} from './types'
+import {Route, RouteParams} from './types'
export class Router {
routes: [string, Route][] = []
- constructor(description: Record) {
+ constructor(description: Record) {
for (const [screen, pattern] of Object.entries(description)) {
- this.routes.push([screen, createRoute(pattern)])
+ if (typeof pattern === 'string') {
+ this.routes.push([screen, createRoute(pattern)])
+ } else {
+ pattern.forEach(subPattern => {
+ this.routes.push([screen, createRoute(subPattern)])
+ })
+ }
}
}
diff --git a/src/lib/routes/types.ts b/src/lib/routes/types.ts
index 90ae758304..95af2f237d 100644
--- a/src/lib/routes/types.ts
+++ b/src/lib/routes/types.ts
@@ -21,7 +21,9 @@ export type CommonNavigatorParams = {
PostRepostedBy: {name: string; rkey: string}
ProfileFeed: {name: string; rkey: string}
ProfileFeedLikedBy: {name: string; rkey: string}
+ ProfileLabelerLikedBy: {name: string}
Debug: undefined
+ DebugMod: undefined
Log: undefined
Support: undefined
PrivacyPolicy: undefined
@@ -30,9 +32,11 @@ export type CommonNavigatorParams = {
CopyrightPolicy: undefined
AppPasswords: undefined
SavedFeeds: undefined
- PreferencesHomeFeed: undefined
+ PreferencesFollowingFeed: undefined
PreferencesThreads: undefined
PreferencesExternalEmbeds: undefined
+ Search: {q?: string}
+ Hashtag: {tag: string; author?: string}
}
export type BottomTabNavigatorParams = CommonNavigatorParams & {
@@ -68,6 +72,7 @@ export type FlatNavigatorParams = CommonNavigatorParams & {
Search: {q?: string}
Feeds: undefined
Notifications: undefined
+ Hashtag: {tag: string; author?: string}
}
export type AllNavigatorParams = CommonNavigatorParams & {
@@ -80,6 +85,7 @@ export type AllNavigatorParams = CommonNavigatorParams & {
NotificationsTab: undefined
Notifications: undefined
MyProfileTab: undefined
+ Hashtag: {tag: string; author?: string}
}
// NOTE
diff --git a/src/lib/sentry.ts b/src/lib/sentry.ts
index d0a5fe0fd5..6b6c1832d6 100644
--- a/src/lib/sentry.ts
+++ b/src/lib/sentry.ts
@@ -4,7 +4,7 @@
*/
import {Platform} from 'react-native'
-import app from 'react-native-version-number'
+import {nativeApplicationVersion, nativeBuildVersion} from 'expo-application'
import * as info from 'expo-updates'
import {init} from 'sentry-expo'
@@ -21,7 +21,7 @@ const buildChannel = (info.channel || 'development') as
* - `dev`
* - `1.57.0`
*/
-const release = app.appVersion ?? 'dev'
+const release = nativeApplicationVersion ?? 'dev'
/**
* Examples:
@@ -33,7 +33,7 @@ const release = app.appVersion ?? 'dev'
* - `android.1.57.0.46`
*/
const dist = `${Platform.OS}.${release}${
- app.buildVersion ? `.${app.buildVersion}` : ''
+ nativeBuildVersion ? `.${nativeBuildVersion}` : ''
}`
init({
diff --git a/src/lib/sharing.ts b/src/lib/sharing.ts
index b294d74649..b59e3f9946 100644
--- a/src/lib/sharing.ts
+++ b/src/lib/sharing.ts
@@ -1,8 +1,9 @@
-import {isIOS, isAndroid} from 'platform/detection'
-// import * as Sharing from 'expo-sharing'
-import Clipboard from '@react-native-clipboard/clipboard'
-import * as Toast from '../view/com/util/Toast'
import {Share} from 'react-native'
+// import * as Sharing from 'expo-sharing'
+import {setStringAsync} from 'expo-clipboard'
+
+import {isAndroid, isIOS} from 'platform/detection'
+import * as Toast from '#/view/com/util/Toast'
/**
* This function shares a URL using the native Share API if available, or copies it to the clipboard
@@ -12,13 +13,13 @@ import {Share} from 'react-native'
*/
export async function shareUrl(url: string) {
if (isAndroid) {
- Share.share({message: url})
+ await Share.share({message: url})
} else if (isIOS) {
- Share.share({url})
+ await Share.share({url})
} else {
// React Native Share is not supported by web. Web Share API
// has increasing but not full support, so default to clipboard
- Clipboard.setString(url)
+ setStringAsync(url)
Toast.show('Copied to clipboard')
}
}
diff --git a/src/lib/statsig/events.ts b/src/lib/statsig/events.ts
new file mode 100644
index 0000000000..3d650b8b73
--- /dev/null
+++ b/src/lib/statsig/events.ts
@@ -0,0 +1,112 @@
+export type LogEvents = {
+ // App events
+ init: {
+ initMs: number
+ }
+ 'account:loggedIn': {
+ logContext: 'LoginForm' | 'SwitchAccount' | 'ChooseAccountForm' | 'Settings'
+ withPassword: boolean
+ }
+ 'account:loggedOut': {
+ logContext: 'SwitchAccount' | 'Settings' | 'Deactivated'
+ }
+ 'notifications:openApp': {}
+ 'state:background': {
+ secondsActive: number
+ }
+ 'state:foreground': {}
+ 'router:navigate': {}
+
+ // Screen events
+ 'splash:signInPressed': {}
+ 'splash:createAccountPressed': {}
+ 'signup:nextPressed': {
+ activeStep: number
+ }
+ 'onboarding:interests:nextPressed': {
+ selectedInterests: string[]
+ selectedInterestsLength: number
+ }
+ 'onboarding:suggestedAccounts:nextPressed': {
+ selectedAccountsLength: number
+ skipped: boolean
+ }
+ 'onboarding:followingFeed:nextPressed': {}
+ 'onboarding:algoFeeds:nextPressed': {
+ selectedPrimaryFeeds: string[]
+ selectedPrimaryFeedsLength: number
+ selectedSecondaryFeeds: string[]
+ selectedSecondaryFeedsLength: number
+ }
+ 'onboarding:topicalFeeds:nextPressed': {
+ selectedFeeds: string[]
+ selectedFeedsLength: number
+ }
+ 'onboarding:moderation:nextPressed': {}
+ 'onboarding:finished:nextPressed': {}
+ 'home:feedDisplayed': {
+ feedUrl: string
+ feedType: string
+ index: number
+ reason: 'focus' | 'tabbar-click' | 'pager-swipe' | 'desktop-sidebar-click'
+ }
+ 'feed:endReached': {
+ feedUrl: string
+ feedType: string
+ itemCount: number
+ }
+ 'feed:refresh': {
+ feedUrl: string
+ feedType: string
+ reason: 'pull-to-refresh' | 'soft-reset' | 'load-latest'
+ }
+
+ // Data events
+ 'account:create:begin': {}
+ 'account:create:success': {}
+ 'post:create': {
+ imageCount: number
+ isReply: boolean
+ hasLink: boolean
+ hasQuote: boolean
+ langs: string
+ logContext: 'Composer'
+ }
+ 'post:like': {
+ doesLikerFollowPoster: boolean | undefined
+ doesPosterFollowLiker: boolean | undefined
+ likerClout: number | undefined
+ postClout: number | undefined
+ logContext: 'FeedItem' | 'PostThreadItem' | 'Post'
+ }
+ 'post:repost': {
+ logContext: 'FeedItem' | 'PostThreadItem' | 'Post'
+ }
+ 'post:unlike': {
+ logContext: 'FeedItem' | 'PostThreadItem' | 'Post'
+ }
+ 'post:unrepost': {
+ logContext: 'FeedItem' | 'PostThreadItem' | 'Post'
+ }
+ 'profile:follow': {
+ didBecomeMutual: boolean | undefined
+ followeeClout: number | undefined
+ followerClout: number | undefined
+ logContext:
+ | 'RecommendedFollowsItem'
+ | 'PostThreadItem'
+ | 'ProfileCard'
+ | 'ProfileHeader'
+ | 'ProfileHeaderSuggestedFollows'
+ | 'ProfileMenu'
+ }
+ 'profile:unfollow': {
+ logContext:
+ | 'RecommendedFollowsItem'
+ | 'PostThreadItem'
+ | 'ProfileCard'
+ | 'ProfileHeader'
+ | 'ProfileHeaderSuggestedFollows'
+ | 'ProfileMenu'
+ }
+}
diff --git a/src/lib/statsig/gates.ts b/src/lib/statsig/gates.ts
new file mode 100644
index 0000000000..acf0b2aff2
--- /dev/null
+++ b/src/lib/statsig/gates.ts
@@ -0,0 +1,10 @@
+export type Gate =
+ // Keep this alphabetic please.
+ | 'autoexpand_suggestions_on_profile_follow'
+ | 'disable_min_shell_on_foregrounding'
+ | 'disable_poll_on_discover'
+ | 'new_profile_scroll_component'
+ | 'new_search'
+ | 'show_follow_back_label'
+ | 'start_session_with_following'
+ | 'use_new_suggestions_endpoint'
diff --git a/src/lib/statsig/statsig.tsx b/src/lib/statsig/statsig.tsx
new file mode 100644
index 0000000000..7513b945c6
--- /dev/null
+++ b/src/lib/statsig/statsig.tsx
@@ -0,0 +1,158 @@
+import React from 'react'
+import {Platform} from 'react-native'
+import {AppState, AppStateStatus} from 'react-native'
+import {sha256} from 'js-sha256'
+import {
+ Statsig,
+ StatsigProvider,
+ useGate as useStatsigGate,
+} from 'statsig-react-native-expo'
+
+import {logger} from '#/logger'
+import {IS_TESTFLIGHT} from 'lib/app-info'
+import {useSession} from '../../state/session'
+import {LogEvents} from './events'
+import {Gate} from './gates'
+
+export type {LogEvents}
+
+const statsigOptions = {
+ environment: {
+ tier:
+ process.env.NODE_ENV === 'development'
+ ? 'development'
+ : IS_TESTFLIGHT
+ ? 'staging'
+ : 'production',
+ },
+ // Don't block on waiting for network. The fetched config will kick in on next load.
+ // This ensures the UI is always consistent and doesn't update mid-session.
+ // Note this makes cold load (no local storage) and private mode return `false` for all gates.
+ initTimeoutMs: 1,
+}
+
+type FlatJSONRecord = Record<
+ string,
+ | string
+ | number
+ | boolean
+ | null
+ | undefined
+ // Technically not scalar but Statsig will stringify it which works for us:
+ | string[]
+>
+
+let getCurrentRouteName: () => string | null | undefined = () => null
+
+export function attachRouteToLogEvents(
+ getRouteName: () => string | null | undefined,
+) {
+ getCurrentRouteName = getRouteName
+}
+
+export function toClout(n: number | null | undefined): number | undefined {
+ if (n == null) {
+ return undefined
+ } else {
+ return Math.max(0, Math.round(Math.log(n)))
+ }
+}
+
+export function logEvent(
+ eventName: E & string,
+ rawMetadata: LogEvents[E] & FlatJSONRecord,
+) {
+ try {
+ const fullMetadata = {
+ ...rawMetadata,
+ } as Record // Statsig typings are unnecessarily strict here.
+ fullMetadata.routeName = getCurrentRouteName() ?? '(Uninitialized)'
+ if (Statsig.initializeCalled()) {
+ Statsig.logEvent(eventName, null, fullMetadata)
+ }
+ } catch (e) {
+ // A log should never interrupt the calling code, whatever happens.
+ logger.error('Failed to log an event', {message: e})
+ }
+}
+
+export function useGate(gateName: Gate): boolean {
+ const {isLoading, value} = useStatsigGate(gateName)
+ if (isLoading) {
+ // This should not happen because of waitForInitialization={true}.
+ console.error('Did not expected isLoading to ever be true.')
+ }
+ // This shouldn't technically be necessary but let's get a strong
+ // guarantee that a gate value can never change while mounted.
+ const [initialValue] = React.useState(value)
+ return initialValue
+}
+
+function toStatsigUser(did: string | undefined) {
+ let userID: string | undefined
+ if (did) {
+ userID = sha256(did)
+ }
+ return {
+ userID,
+ platform: Platform.OS,
+ custom: {
+ // Need to specify here too for gating.
+ platform: Platform.OS,
+ },
+ }
+}
+
+let lastState: AppStateStatus = AppState.currentState
+let lastActive = lastState === 'active' ? performance.now() : null
+AppState.addEventListener('change', (state: AppStateStatus) => {
+ if (state === lastState) {
+ return
+ }
+ lastState = state
+ if (state === 'active') {
+ lastActive = performance.now()
+ logEvent('state:foreground', {})
+ } else {
+ let secondsActive = 0
+ if (lastActive != null) {
+ secondsActive = Math.round((performance.now() - lastActive) / 1e3)
+ }
+ lastActive = null
+ logEvent('state:background', {
+ secondsActive,
+ })
+ }
+})
+
+export function Provider({children}: {children: React.ReactNode}) {
+ const {currentAccount} = useSession()
+ const currentStatsigUser = React.useMemo(
+ () => toStatsigUser(currentAccount?.did),
+ [currentAccount?.did],
+ )
+
+ React.useEffect(() => {
+ function refresh() {
+ // Intentionally refetching the config using the JS SDK rather than React SDK
+ // so that the new config is stored in cache but isn't used during this session.
+ // It will kick in for the next reload.
+ Statsig.updateUser(currentStatsigUser)
+ }
+ const id = setInterval(refresh, 3 * 60e3 /* 3 min */)
+ return () => clearInterval(id)
+ }, [currentStatsigUser])
+
+ return (
+
+ {children}
+
+ )
+}
diff --git a/src/lib/strings/display-names.ts b/src/lib/strings/display-names.ts
index 75383dd4fd..e0f23fa2cc 100644
--- a/src/lib/strings/display-names.ts
+++ b/src/lib/strings/display-names.ts
@@ -1,5 +1,4 @@
import {ModerationUI} from '@atproto/api'
-import {describeModerationCause} from '../moderation'
// \u2705 = ✅
// \u2713 = ✓
@@ -14,7 +13,7 @@ export function sanitizeDisplayName(
moderation?: ModerationUI,
): string {
if (moderation?.blur) {
- return `⚠${describeModerationCause(moderation.cause, 'account').name}`
+ return ''
}
if (typeof str === 'string') {
return str.replace(CHECK_MARKS_RE, '').replace(CONTROL_CHARS_RE, '').trim()
diff --git a/src/lib/strings/embed-player.ts b/src/lib/strings/embed-player.ts
index 21a575b91c..d1398b2a08 100644
--- a/src/lib/strings/embed-player.ts
+++ b/src/lib/strings/embed-player.ts
@@ -1,7 +1,17 @@
import {Dimensions} from 'react-native'
+
import {isWeb} from 'platform/detection'
const {height: SCREEN_HEIGHT} = Dimensions.get('window')
+const IFRAME_HOST = isWeb
+ ? // @ts-ignore only for web
+ window.location.host === 'localhost:8100'
+ ? 'http://localhost:8100'
+ : 'https://bsky.app'
+ : __DEV__ && !process.env.JEST_WORKER_ID
+ ? 'http://localhost:8100'
+ : 'https://bsky.app'
+
export const embedPlayerSources = [
'youtube',
'youtubeShorts',
@@ -74,7 +84,7 @@ export function parseEmbedPlayerFromUrl(
return {
type: 'youtube_video',
source: 'youtube',
- playerUri: `https://bsky.app/iframe/youtube.html?videoId=${videoId}&start=${seek}`,
+ playerUri: `${IFRAME_HOST}/iframe/youtube.html?videoId=${videoId}&start=${seek}`,
}
}
}
@@ -93,7 +103,7 @@ export function parseEmbedPlayerFromUrl(
type: page === 'shorts' ? 'youtube_short' : 'youtube_video',
source: page === 'shorts' ? 'youtubeShorts' : 'youtube',
hideDetails: page === 'shorts' ? true : undefined,
- playerUri: `https://bsky.app/iframe/youtube.html?videoId=${videoId}&start=${seek}`,
+ playerUri: `${IFRAME_HOST}/iframe/youtube.html?videoId=${videoId}&start=${seek}`,
}
}
}
@@ -343,45 +353,45 @@ export function parseEmbedPlayerFromUrl(
}
}
-export function getPlayerHeight({
+export function getPlayerAspect({
type,
- width,
hasThumb,
+ width,
}: {
type: EmbedPlayerParams['type']
- width: number
hasThumb: boolean
-}) {
- if (!hasThumb) return (width / 16) * 9
+ width: number
+}): {aspectRatio?: number; height?: number} {
+ if (!hasThumb) return {aspectRatio: 16 / 9}
switch (type) {
case 'youtube_video':
case 'twitch_video':
case 'vimeo_video':
- return (width / 16) * 9
+ return {aspectRatio: 16 / 9}
case 'youtube_short':
if (SCREEN_HEIGHT < 600) {
- return ((width / 9) * 16) / 1.75
+ return {aspectRatio: (9 / 16) * 1.75}
} else {
- return ((width / 9) * 16) / 1.5
+ return {aspectRatio: (9 / 16) * 1.5}
}
case 'spotify_album':
case 'apple_music_album':
case 'apple_music_playlist':
case 'spotify_playlist':
case 'soundcloud_set':
- return 380
+ return {height: 380}
case 'spotify_song':
if (width <= 300) {
- return 155
+ return {height: 155}
}
- return 232
+ return {height: 232}
case 'soundcloud_track':
- return 165
+ return {height: 165}
case 'apple_music_song':
- return 150
+ return {height: 150}
default:
- return width
+ return {aspectRatio: 16 / 9}
}
}
diff --git a/src/lib/strings/handles.ts b/src/lib/strings/handles.ts
index 6ce4624357..bc07b32ec6 100644
--- a/src/lib/strings/handles.ts
+++ b/src/lib/strings/handles.ts
@@ -1,3 +1,8 @@
+// Regex from the go implementation
+// https://github.com/bluesky-social/indigo/blob/main/atproto/syntax/handle.go#L10
+const VALIDATE_REGEX =
+ /^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$/
+
export function makeValidHandle(str: string): string {
if (str.length > 20) {
str = str.slice(0, 20)
@@ -19,3 +24,29 @@ export function isInvalidHandle(handle: string): boolean {
export function sanitizeHandle(handle: string, prefix = ''): string {
return isInvalidHandle(handle) ? '⚠Invalid Handle' : `${prefix}${handle}`
}
+
+export interface IsValidHandle {
+ handleChars: boolean
+ hyphenStartOrEnd: boolean
+ frontLength: boolean
+ totalLength: boolean
+ overall: boolean
+}
+
+// More checks from https://github.com/bluesky-social/atproto/blob/main/packages/pds/src/handle/index.ts#L72
+export function validateHandle(str: string, userDomain: string): IsValidHandle {
+ const fullHandle = createFullHandle(str, userDomain)
+
+ const results = {
+ handleChars:
+ !str || (VALIDATE_REGEX.test(fullHandle) && !str.includes('.')),
+ hyphenStartOrEnd: !str.startsWith('-') && !str.endsWith('-'),
+ frontLength: str.length >= 3,
+ totalLength: fullHandle.length <= 253,
+ }
+
+ return {
+ ...results,
+ overall: !Object.values(results).includes(false),
+ }
+}
diff --git a/src/lib/strings/helpers.ts b/src/lib/strings/helpers.ts
index e2abe90195..de4562d2c8 100644
--- a/src/lib/strings/helpers.ts
+++ b/src/lib/strings/helpers.ts
@@ -8,10 +8,27 @@ export function pluralize(n: number, base: string, plural?: string): string {
return base + 's'
}
-export function enforceLen(str: string, len: number, ellipsis = false): string {
+export function enforceLen(
+ str: string,
+ len: number,
+ ellipsis = false,
+ mode: 'end' | 'middle' = 'end',
+): string {
str = str || ''
if (str.length > len) {
- return str.slice(0, len) + (ellipsis ? '...' : '')
+ if (ellipsis) {
+ if (mode === 'end') {
+ return str.slice(0, len) + '…'
+ } else if (mode === 'middle') {
+ const half = Math.floor(len / 2)
+ return str.slice(0, half) + '…' + str.slice(-half)
+ } else {
+ // fallback
+ return str.slice(0, len)
+ }
+ } else {
+ return str.slice(0, len)
+ }
}
return str
}
diff --git a/src/lib/strings/time.ts b/src/lib/strings/time.ts
index 05a60e94bc..3e162af1a2 100644
--- a/src/lib/strings/time.ts
+++ b/src/lib/strings/time.ts
@@ -23,7 +23,7 @@ export function ago(date: number | string | Date): string {
} else if (diffSeconds < DAY) {
return `${Math.floor(diffSeconds / HOUR)}h`
} else if (diffSeconds < MONTH) {
- return `${Math.floor(diffSeconds / DAY)}d`
+ return `${Math.round(diffSeconds / DAY)}d`
} else if (diffSeconds < YEAR) {
return `${Math.floor(diffSeconds / MONTH)}mo`
} else {
diff --git a/src/lib/strings/url-helpers.ts b/src/lib/strings/url-helpers.ts
index 8a71718c8d..10c673520d 100644
--- a/src/lib/strings/url-helpers.ts
+++ b/src/lib/strings/url-helpers.ts
@@ -1,7 +1,27 @@
import {AtUri} from '@atproto/api'
-import {PROD_SERVICE} from 'lib/constants'
-import TLDs from 'tlds'
import psl from 'psl'
+import TLDs from 'tlds'
+
+import {BSKY_SERVICE} from 'lib/constants'
+
+export const BSKY_APP_HOST = 'https://bsky.app'
+const BSKY_TRUSTED_HOSTS = [
+ 'bsky.app',
+ 'bsky.social',
+ 'blueskyweb.xyz',
+ 'blueskyweb.zendesk.com',
+ ...(__DEV__ ? ['localhost:19006', 'localhost:8100'] : []),
+]
+
+/*
+ * This will allow any BSKY_TRUSTED_HOSTS value by itself or with a subdomain.
+ * It will also allow relative paths like /profile as well as #.
+ */
+const TRUSTED_REGEX = new RegExp(
+ `^(http(s)?://(([\\w-]+\\.)?${BSKY_TRUSTED_HOSTS.join(
+ '|([\\w-]+\\.)?',
+ )})|/|#)`,
+)
export function isValidDomain(str: string): boolean {
return !!TLDs.find(tld => {
@@ -28,7 +48,7 @@ export function makeRecordUri(
export function toNiceDomain(url: string): string {
try {
const urlp = new URL(url)
- if (`https://${urlp.host}` === PROD_SERVICE) {
+ if (`https://${urlp.host}` === BSKY_SERVICE) {
return 'Bluesky Social'
}
return urlp.host ? urlp.host : url
@@ -67,8 +87,25 @@ export function isBskyAppUrl(url: string): boolean {
return url.startsWith('https://bsky.app/')
}
+export function isRelativeUrl(url: string): boolean {
+ return /^\/[^/]/.test(url)
+}
+
+export function isBskyRSSUrl(url: string): boolean {
+ return (
+ (url.startsWith('https://bsky.app/') || isRelativeUrl(url)) &&
+ /\/rss\/?$/.test(url)
+ )
+}
+
export function isExternalUrl(url: string): boolean {
- return !isBskyAppUrl(url) && url.startsWith('http')
+ const external = !isBskyAppUrl(url) && url.startsWith('http')
+ const rss = isBskyRSSUrl(url)
+ return external || rss
+}
+
+export function isTrustedUrl(url: string): boolean {
+ return TRUSTED_REGEX.test(url)
}
export function isBskyPostUrl(url: string): boolean {
@@ -148,6 +185,11 @@ export function feedUriToHref(url: string): string {
export function linkRequiresWarning(uri: string, label: string) {
const labelDomain = labelToDomain(label)
+ // We should trust any relative URL or a # since we know it links to internal content
+ if (isRelativeUrl(uri) || uri === '#') {
+ return false
+ }
+
let urip
try {
urip = new URL(uri)
@@ -156,21 +198,11 @@ export function linkRequiresWarning(uri: string, label: string) {
}
const host = urip.hostname.toLowerCase()
-
- if (host === 'bsky.app') {
- // if this is a link to internal content,
- // warn if it represents itself as a URL to another app
- if (
- labelDomain &&
- labelDomain !== 'bsky.app' &&
- isPossiblyAUrl(labelDomain)
- ) {
- return true
- }
- return false
+ if (isTrustedUrl(uri)) {
+ // if this is a link to internal content, warn if it represents itself as a URL to another app
+ return !!labelDomain && labelDomain !== host && isPossiblyAUrl(labelDomain)
} else {
- // if this is a link to external content,
- // warn if the label doesnt match the target
+ // if this is a link to external content, warn if the label doesnt match the target
if (!labelDomain) {
return true
}
@@ -220,3 +252,8 @@ export function splitApexDomain(hostname: string): [string, string] {
hostnamep.domain,
]
}
+
+export function createBskyAppAbsoluteUrl(path: string): string {
+ const sanitizedPath = path.replace(BSKY_APP_HOST, '').replace(/^\/+/, '')
+ return `${BSKY_APP_HOST.replace(/\/$/, '')}/${sanitizedPath}`
+}
diff --git a/src/lib/themes.ts b/src/lib/themes.ts
index 9a3880b92c..ab9334a9b0 100644
--- a/src/lib/themes.ts
+++ b/src/lib/themes.ts
@@ -1,15 +1,15 @@
import {Platform} from 'react-native'
-import type {Theme} from './ThemeContext'
-import {colors} from './styles'
-import {darkPalette, lightPalette, dimPalette} from '#/alf/themes'
+import {darkPalette, dimPalette, lightPalette} from '#/alf/themes'
+import {colors} from './styles'
+import type {Theme} from './ThemeContext'
export const defaultTheme: Theme = {
colorScheme: 'light',
palette: {
default: {
background: lightPalette.white,
- backgroundLight: lightPalette.contrast_50,
+ backgroundLight: lightPalette.contrast_25,
text: lightPalette.black,
textLight: lightPalette.contrast_700,
textInverted: lightPalette.white,
@@ -306,7 +306,7 @@ export const darkTheme: Theme = {
// non-standard
textVeryLight: darkPalette.contrast_400,
- replyLine: darkPalette.contrast_100,
+ replyLine: darkPalette.contrast_200,
replyLineDot: darkPalette.contrast_200,
unreadNotifBg: darkPalette.primary_975,
unreadNotifBorder: darkPalette.primary_900,
@@ -344,6 +344,25 @@ export const dimTheme: Theme = {
default: {
...darkTheme.palette.default,
background: dimPalette.black,
+ backgroundLight: dimPalette.contrast_50,
+ text: dimPalette.white,
+ textLight: dimPalette.contrast_700,
+ textInverted: dimPalette.black,
+ link: dimPalette.primary_500,
+ border: dimPalette.contrast_100,
+ borderDark: dimPalette.contrast_200,
+ icon: dimPalette.contrast_500,
+
+ // non-standard
+ textVeryLight: dimPalette.contrast_400,
+ replyLine: dimPalette.contrast_200,
+ replyLineDot: dimPalette.contrast_200,
+ unreadNotifBg: dimPalette.primary_975,
+ unreadNotifBorder: dimPalette.primary_900,
+ postCtrl: dimPalette.contrast_500,
+ brandText: dimPalette.primary_500,
+ emptyStateIcon: dimPalette.contrast_300,
+ borderLinkHover: dimPalette.contrast_300,
},
},
}
diff --git a/src/locale/helpers.ts b/src/locale/helpers.ts
index c73242e707..24ab678934 100644
--- a/src/locale/helpers.ts
+++ b/src/locale/helpers.ts
@@ -1,7 +1,8 @@
import {AppBskyFeedDefs, AppBskyFeedPost} from '@atproto/api'
+import * as bcp47Match from 'bcp-47-match'
import lande from 'lande'
+
import {hasProp} from 'lib/type-guards'
-import * as bcp47Match from 'bcp-47-match'
import {
AppLanguage,
LANGUAGES_MAP_CODE2,
@@ -118,30 +119,38 @@ export function sanitizeAppLanguageSetting(appLanguage: string): AppLanguage {
switch (lang) {
case 'en':
return AppLanguage.en
+ case 'ca':
+ return AppLanguage.ca
case 'de':
return AppLanguage.de
case 'es':
return AppLanguage.es
+ case 'fi':
+ return AppLanguage.fi
case 'fr':
return AppLanguage.fr
+ case 'ga':
+ return AppLanguage.ga
case 'hi':
return AppLanguage.hi
case 'id':
return AppLanguage.id
+ case 'it':
+ return AppLanguage.it
case 'ja':
return AppLanguage.ja
case 'ko':
return AppLanguage.ko
case 'pt-BR':
return AppLanguage.pt_BR
+ case 'tr':
+ return AppLanguage.tr
case 'uk':
return AppLanguage.uk
- case 'ca':
- return AppLanguage.ca
case 'zh-CN':
return AppLanguage.zh_CN
- case 'it':
- return AppLanguage.it
+ case 'zh-TW':
+ return AppLanguage.zh_TW
default:
continue
}
diff --git a/src/locale/i18n.ts b/src/locale/i18n.ts
index e8addb0b4f..725332de01 100644
--- a/src/locale/i18n.ts
+++ b/src/locale/i18n.ts
@@ -1,29 +1,36 @@
import {useEffect} from 'react'
import {i18n} from '@lingui/core'
-import {useLanguagePrefs} from '#/state/preferences'
-import {messages as messagesEn} from '#/locale/locales/en/messages'
+import {sanitizeAppLanguageSetting} from '#/locale/helpers'
+import {AppLanguage} from '#/locale/languages'
+import {messages as messagesCa} from '#/locale/locales/ca/messages'
import {messages as messagesDe} from '#/locale/locales/de/messages'
-import {messages as messagesId} from '#/locale/locales/id/messages'
+import {messages as messagesEn} from '#/locale/locales/en/messages'
import {messages as messagesEs} from '#/locale/locales/es/messages'
+import {messages as messagesFi} from '#/locale/locales/fi/messages'
import {messages as messagesFr} from '#/locale/locales/fr/messages'
+import {messages as messagesGa} from '#/locale/locales/ga/messages'
import {messages as messagesHi} from '#/locale/locales/hi/messages'
+import {messages as messagesId} from '#/locale/locales/id/messages'
+import {messages as messagesIt} from '#/locale/locales/it/messages'
import {messages as messagesJa} from '#/locale/locales/ja/messages'
import {messages as messagesKo} from '#/locale/locales/ko/messages'
import {messages as messagesPt_BR} from '#/locale/locales/pt-BR/messages'
+import {messages as messagesTr} from '#/locale/locales/tr/messages'
import {messages as messagesUk} from '#/locale/locales/uk/messages'
-import {messages as messagesCa} from '#/locale/locales/ca/messages'
import {messages as messagesZh_CN} from '#/locale/locales/zh-CN/messages'
-import {messages as messagesIt} from '#/locale/locales/it/messages'
-
-import {sanitizeAppLanguageSetting} from '#/locale/helpers'
-import {AppLanguage} from '#/locale/languages'
+import {messages as messagesZh_TW} from '#/locale/locales/zh-TW/messages'
+import {useLanguagePrefs} from '#/state/preferences'
/**
* We do a dynamic import of just the catalog that we need
*/
export async function dynamicActivate(locale: AppLanguage) {
switch (locale) {
+ case AppLanguage.ca: {
+ i18n.loadAndActivate({locale, messages: messagesCa})
+ break
+ }
case AppLanguage.de: {
i18n.loadAndActivate({locale, messages: messagesDe})
break
@@ -32,10 +39,18 @@ export async function dynamicActivate(locale: AppLanguage) {
i18n.loadAndActivate({locale, messages: messagesEs})
break
}
+ case AppLanguage.fi: {
+ i18n.loadAndActivate({locale, messages: messagesFi})
+ break
+ }
case AppLanguage.fr: {
i18n.loadAndActivate({locale, messages: messagesFr})
break
}
+ case AppLanguage.ga: {
+ i18n.loadAndActivate({locale, messages: messagesGa})
+ break
+ }
case AppLanguage.hi: {
i18n.loadAndActivate({locale, messages: messagesHi})
break
@@ -44,6 +59,10 @@ export async function dynamicActivate(locale: AppLanguage) {
i18n.loadAndActivate({locale, messages: messagesId})
break
}
+ case AppLanguage.it: {
+ i18n.loadAndActivate({locale, messages: messagesIt})
+ break
+ }
case AppLanguage.ja: {
i18n.loadAndActivate({locale, messages: messagesJa})
break
@@ -56,20 +75,20 @@ export async function dynamicActivate(locale: AppLanguage) {
i18n.loadAndActivate({locale, messages: messagesPt_BR})
break
}
- case AppLanguage.uk: {
- i18n.loadAndActivate({locale, messages: messagesUk})
+ case AppLanguage.tr: {
+ i18n.loadAndActivate({locale, messages: messagesTr})
break
}
- case AppLanguage.ca: {
- i18n.loadAndActivate({locale, messages: messagesCa})
+ case AppLanguage.uk: {
+ i18n.loadAndActivate({locale, messages: messagesUk})
break
}
case AppLanguage.zh_CN: {
i18n.loadAndActivate({locale, messages: messagesZh_CN})
break
}
- case AppLanguage.it: {
- i18n.loadAndActivate({locale, messages: messagesIt})
+ case AppLanguage.zh_TW: {
+ i18n.loadAndActivate({locale, messages: messagesZh_TW})
break
}
default: {
diff --git a/src/locale/i18n.web.ts b/src/locale/i18n.web.ts
index d8e51723ff..87c3c590e9 100644
--- a/src/locale/i18n.web.ts
+++ b/src/locale/i18n.web.ts
@@ -1,9 +1,9 @@
import {useEffect} from 'react'
import {i18n} from '@lingui/core'
-import {useLanguagePrefs} from '#/state/preferences'
import {sanitizeAppLanguageSetting} from '#/locale/helpers'
import {AppLanguage} from '#/locale/languages'
+import {useLanguagePrefs} from '#/state/preferences'
/**
* We do a dynamic import of just the catalog that we need
@@ -12,6 +12,10 @@ export async function dynamicActivate(locale: AppLanguage) {
let mod: any
switch (locale) {
+ case AppLanguage.ca: {
+ mod = await import(`./locales/ca/messages`)
+ break
+ }
case AppLanguage.de: {
mod = await import(`./locales/de/messages`)
break
@@ -20,10 +24,18 @@ export async function dynamicActivate(locale: AppLanguage) {
mod = await import(`./locales/es/messages`)
break
}
+ case AppLanguage.fi: {
+ mod = await import(`./locales/fi/messages`)
+ break
+ }
case AppLanguage.fr: {
mod = await import(`./locales/fr/messages`)
break
}
+ case AppLanguage.ga: {
+ mod = await import(`./locales/ga/messages`)
+ break
+ }
case AppLanguage.hi: {
mod = await import(`./locales/hi/messages`)
break
@@ -32,6 +44,10 @@ export async function dynamicActivate(locale: AppLanguage) {
mod = await import(`./locales/id/messages`)
break
}
+ case AppLanguage.it: {
+ mod = await import(`./locales/it/messages`)
+ break
+ }
case AppLanguage.ja: {
mod = await import(`./locales/ja/messages`)
break
@@ -44,20 +60,20 @@ export async function dynamicActivate(locale: AppLanguage) {
mod = await import(`./locales/pt-BR/messages`)
break
}
- case AppLanguage.uk: {
- mod = await import(`./locales/uk/messages`)
+ case AppLanguage.tr: {
+ mod = await import(`./locales/tr/messages`)
break
}
- case AppLanguage.ca: {
- mod = await import(`./locales/ca/messages`)
+ case AppLanguage.uk: {
+ mod = await import(`./locales/uk/messages`)
break
}
case AppLanguage.zh_CN: {
mod = await import(`./locales/zh-CN/messages`)
break
}
- case AppLanguage.it: {
- mod = await import(`./locales/it/messages`)
+ case AppLanguage.zh_TW: {
+ mod = await import(`./locales/zh-TW/messages`)
break
}
default: {
diff --git a/src/locale/languages.ts b/src/locale/languages.ts
index 3fdabd02ec..626c00f389 100644
--- a/src/locale/languages.ts
+++ b/src/locale/languages.ts
@@ -6,18 +6,22 @@ interface Language {
export enum AppLanguage {
en = 'en',
+ ca = 'ca',
de = 'de',
es = 'es',
+ fi = 'fi',
fr = 'fr',
+ ga = 'ga',
hi = 'hi',
id = 'id',
+ it = 'it',
ja = 'ja',
ko = 'ko',
pt_BR = 'pt-BR',
+ tr = 'tr',
uk = 'uk',
- ca = 'ca',
zh_CN = 'zh-CN',
- it = 'it',
+ zh_TW = 'zh-TW',
}
interface AppLanguageConfig {
@@ -27,18 +31,22 @@ interface AppLanguageConfig {
export const APP_LANGUAGES: AppLanguageConfig[] = [
{code2: AppLanguage.en, name: 'English'},
+ {code2: AppLanguage.ca, name: 'Català – Catalan'},
{code2: AppLanguage.de, name: 'Deutsch – German'},
{code2: AppLanguage.es, name: 'Español – Spanish'},
+ {code2: AppLanguage.fi, name: 'Suomi – Finnish'},
{code2: AppLanguage.fr, name: 'Français – French'},
+ {code2: AppLanguage.ga, name: 'Gaeilge – Irish'},
{code2: AppLanguage.hi, name: 'हिंदी – Hindi'},
{code2: AppLanguage.id, name: 'Bahasa Indonesia – Indonesian'},
+ {code2: AppLanguage.it, name: 'Italiano – Italian'},
{code2: AppLanguage.ja, name: '日本語 – Japanese'},
{code2: AppLanguage.ko, name: '한국어 – Korean'},
{code2: AppLanguage.pt_BR, name: 'Português (BR) – Portuguese (BR)'},
+ {code2: AppLanguage.tr, name: 'Türkçe – Turkish'},
{code2: AppLanguage.uk, name: 'Українська – Ukrainian'},
- {code2: AppLanguage.ca, name: 'Català – Catalan'},
- {code2: AppLanguage.zh_CN, name: '简体中文(中国) – Chinese (Simplified)'},
- {code2: AppLanguage.it, name: 'Italiano - Italian'},
+ {code2: AppLanguage.zh_CN, name: '简体中文(中国)– Chinese (Simplified)'},
+ {code2: AppLanguage.zh_TW, name: '繁體中文(臺灣)– Chinese (Traditional)'},
]
export const LANGUAGES: Language[] = [
diff --git a/src/locale/locales/ca/messages.po b/src/locale/locales/ca/messages.po
index cec44e512d..7945fe8b59 100644
--- a/src/locale/locales/ca/messages.po
+++ b/src/locale/locales/ca/messages.po
@@ -32,7 +32,7 @@ msgstr "(sense correu)"
#~ msgid "{0} {purposeLabel} List"
#~ msgstr "Llista {purposeLabel} {0}"
-#: src/view/com/profile/ProfileHeader.tsx:592
+#: src/screens/Profile/Header/Metrics.tsx:44
msgid "{following} following"
msgstr "{following} seguint"
@@ -54,7 +54,7 @@ msgstr "{following} seguint"
#~ msgid "{message}"
#~ msgstr "{message}"
-#: src/view/shell/Drawer.tsx:440
+#: src/view/shell/Drawer.tsx:443
msgid "{numUnreadNotifications} unread"
msgstr "{numUnreadNotifications} no llegides"
@@ -62,7 +62,11 @@ msgstr "{numUnreadNotifications} no llegides"
msgid "<0/> members"
msgstr "<0/> membres"
-#: src/view/com/profile/ProfileHeader.tsx:594
+#: src/view/shell/Drawer.tsx:97
+msgid "<0>{0}0> following"
+msgstr "<0>{0}0> seguint"
+
+#: src/screens/Profile/Header/Metrics.tsx:45
msgid "<0>{following} 0><1>following1>"
msgstr "<0>{following} 0><1>seguint1>"
@@ -76,53 +80,62 @@ msgstr "<0>Segueix alguns0><1>usuaris1><2>recomanats2>"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:21
msgid "<0>Welcome to0><1>Bluesky1>"
-msgstr "<0>Benvingut a0><1>Bluesky1>"
+msgstr "<0>Us donem la benvinguda a0><1>Bluesky1>"
-#: src/view/com/profile/ProfileHeader.tsx:557
+#: src/screens/Profile/Header/Handle.tsx:42
msgid "⚠Invalid Handle"
msgstr "⚠Identificador invàlid"
#: src/view/com/util/moderation/LabelInfo.tsx:45
-msgid "A content warning has been applied to this {0}."
-msgstr "S'ha aplicat una advertència de contingut a {0}."
+#~ msgid "A content warning has been applied to this {0}."
+#~ msgstr "S'ha aplicat una advertència de contingut a {0}."
#: src/lib/hooks/useOTAUpdate.ts:16
-msgid "A new version of the app is available. Please update to continue using the app."
-msgstr "Hi ha una nova versió d'aquesta aplicació. Actualitza-la per continuar."
+#~ msgid "A new version of the app is available. Please update to continue using the app."
+#~ msgstr "Hi ha una nova versió d'aquesta aplicació. Actualitza-la per a continuar."
-#: src/view/com/util/ViewHeader.tsx:83
-#: src/view/screens/Search/Search.tsx:624
+#: src/view/com/util/ViewHeader.tsx:89
+#: src/view/screens/Search/Search.tsx:649
msgid "Access navigation links and settings"
msgstr "Accedeix als enllaços de navegació i configuració"
-#: src/view/com/pager/FeedsTabBarMobile.tsx:89
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:52
msgid "Access profile and other navigation links"
msgstr "Accedeix al perfil i altres enllaços de navegació"
-#: src/view/com/modals/EditImage.tsx:299
-#: src/view/screens/Settings/index.tsx:451
+#: src/view/com/modals/EditImage.tsx:300
+#: src/view/screens/Settings/index.tsx:470
msgid "Accessibility"
msgstr "Accessibilitat"
-#: src/view/com/auth/login/LoginForm.tsx:166
-#: src/view/screens/Settings/index.tsx:308
-#: src/view/screens/Settings/index.tsx:721
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "account"
+msgstr "compte"
+
+#: src/screens/Login/LoginForm.tsx:144
+#: src/view/screens/Settings/index.tsx:327
+#: src/view/screens/Settings/index.tsx:743
msgid "Account"
msgstr "Compte"
-#: src/view/com/profile/ProfileHeader.tsx:245
+#: src/view/com/profile/ProfileMenu.tsx:139
msgid "Account blocked"
msgstr "Compte bloquejat"
-#: src/view/com/profile/ProfileHeader.tsx:212
+#: src/view/com/profile/ProfileMenu.tsx:153
+msgid "Account followed"
+msgstr "Compte seguit"
+
+#: src/view/com/profile/ProfileMenu.tsx:113
msgid "Account muted"
msgstr "Compte silenciat"
-#: src/view/com/modals/ModerationDetails.tsx:86
+#: src/components/moderation/ModerationDetailsDialog.tsx:93
+#: src/lib/moderation/useModerationCauseDescription.ts:91
msgid "Account Muted"
msgstr "Compte silenciat"
-#: src/view/com/modals/ModerationDetails.tsx:72
+#: src/components/moderation/ModerationDetailsDialog.tsx:82
msgid "Account Muted by List"
msgstr "Compte silenciat per una llista"
@@ -134,18 +147,24 @@ msgstr "Opcions del compte"
msgid "Account removed from quick access"
msgstr "Compte eliminat de l'accés ràpid"
-#: src/view/com/profile/ProfileHeader.tsx:267
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:137
+#: src/view/com/profile/ProfileMenu.tsx:128
msgid "Account unblocked"
msgstr "Compte desbloquejat"
-#: src/view/com/profile/ProfileHeader.tsx:225
+#: src/view/com/profile/ProfileMenu.tsx:166
+msgid "Account unfollowed"
+msgstr "Compte no seguit"
+
+#: src/view/com/profile/ProfileMenu.tsx:102
msgid "Account unmuted"
msgstr "Compte no silenciat"
+#: src/components/dialogs/MutedWords.tsx:164
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:150
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/screens/ProfileList.tsx:812
+#: src/view/screens/ProfileList.tsx:827
msgid "Add"
msgstr "Afegeix"
@@ -153,54 +172,63 @@ msgstr "Afegeix"
msgid "Add a content warning"
msgstr "Afegeix una advertència de contingut"
-#: src/view/screens/ProfileList.tsx:802
+#: src/view/screens/ProfileList.tsx:817
msgid "Add a user to this list"
msgstr "Afegeix un usuari a aquesta llista"
-#: src/view/screens/Settings/index.tsx:383
-#: src/view/screens/Settings/index.tsx:392
+#: src/components/dialogs/SwitchAccount.tsx:55
+#: src/view/screens/Settings/index.tsx:402
+#: src/view/screens/Settings/index.tsx:411
msgid "Add account"
msgstr "Afegeix un compte"
#: src/view/com/composer/photos/Gallery.tsx:119
#: src/view/com/composer/photos/Gallery.tsx:180
-#: src/view/com/modals/AltImage.tsx:116
+#: src/view/com/modals/AltImage.tsx:117
msgid "Add alt text"
msgstr "Afegeix text alternatiu"
-#: src/view/screens/AppPasswords.tsx:102
-#: src/view/screens/AppPasswords.tsx:143
-#: src/view/screens/AppPasswords.tsx:156
+#: src/view/screens/AppPasswords.tsx:104
+#: src/view/screens/AppPasswords.tsx:145
+#: src/view/screens/AppPasswords.tsx:158
msgid "Add App Password"
msgstr "Afegeix una contrasenya d'aplicació"
#: src/view/com/modals/report/InputIssueDetails.tsx:41
#: src/view/com/modals/report/Modal.tsx:191
-msgid "Add details"
-msgstr "Afegeix detalls"
+#~ msgid "Add details"
+#~ msgstr "Afegeix detalls"
#: src/view/com/modals/report/Modal.tsx:194
-msgid "Add details to report"
-msgstr "Afegeix detalls a l'informe"
+#~ msgid "Add details to report"
+#~ msgstr "Afegeix detalls a l'informe"
-#: src/view/com/composer/Composer.tsx:446
+#: src/view/com/composer/Composer.tsx:467
msgid "Add link card"
msgstr "Afegeix una targeta a l'enllaç"
-#: src/view/com/composer/Composer.tsx:451
+#: src/view/com/composer/Composer.tsx:472
msgid "Add link card:"
msgstr "Afegeix una targeta a l'enllaç:"
-#: src/view/com/modals/ChangeHandle.tsx:417
+#: src/components/dialogs/MutedWords.tsx:157
+msgid "Add mute word for configured settings"
+msgstr "Afegeix paraula silenciada a la configuració"
+
+#: src/components/dialogs/MutedWords.tsx:86
+msgid "Add muted words and tags"
+msgstr "Afegeix les paraules i etiquetes silenciades"
+
+#: src/view/com/modals/ChangeHandle.tsx:416
msgid "Add the following DNS record to your domain:"
msgstr "Afegeix el següent registre DNS al teu domini:"
-#: src/view/com/profile/ProfileHeader.tsx:309
+#: src/view/com/profile/ProfileMenu.tsx:263
+#: src/view/com/profile/ProfileMenu.tsx:266
msgid "Add to Lists"
msgstr "Afegeix a les llistes"
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/feeds/FeedSourceCard.tsx:234
msgid "Add to my feeds"
msgstr "Afegeix als meus canals"
@@ -213,32 +241,43 @@ msgstr "Afegit"
msgid "Added to list"
msgstr "Afegit a la llista"
-#: src/view/com/feeds/FeedSourceCard.tsx:125
+#: src/view/com/feeds/FeedSourceCard.tsx:108
msgid "Added to my feeds"
msgstr "Afegit als meus canals"
-#: src/view/screens/PreferencesHomeFeed.tsx:173
+#: src/view/screens/PreferencesFollowingFeed.tsx:173
msgid "Adjust the number of likes a reply must have to be shown in your feed."
-msgstr "Ajusta el nombre de m'agrades que hagi de tenir una resposta per aparèixer al teu canal."
+msgstr "Ajusta el nombre de m'agrades que hagi de tenir una resposta per a aparèixer al teu canal."
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:117
#: src/view/com/modals/SelfLabel.tsx:75
msgid "Adult Content"
msgstr "Contingut per a adults"
#: src/view/com/modals/ContentFilteringSettings.tsx:141
-msgid "Adult content can only be enabled via the Web at <0/>."
-msgstr "El contingut per a adults només es pot habilitar via web a <0/>."
+#~ msgid "Adult content can only be enabled via the Web at <0/>."
+#~ msgstr "El contingut per a adults només es pot habilitar via web a <0/>."
+
+#: src/components/moderation/LabelPreference.tsx:242
+msgid "Adult content is disabled."
+msgstr "El contingut per adults està deshabilitat."
-#: src/view/screens/Settings/index.tsx:664
+#: src/screens/Moderation/index.tsx:375
+#: src/view/screens/Settings/index.tsx:684
msgid "Advanced"
msgstr "Avançat"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:221
-#: src/view/com/modals/ChangePassword.tsx:168
+#: src/view/screens/Feeds.tsx:666
+msgid "All the feeds you've saved, right in one place."
+msgstr "Tots els canals que has desat, en un sol lloc."
+
+#: src/screens/Login/ForgotPasswordForm.tsx:178
+#: src/view/com/modals/ChangePassword.tsx:170
msgid "Already have a code?"
-msgstr ""
+msgstr "Ja tens un codi?"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:98
+#: src/screens/Login/ChooseAccountForm.tsx:39
msgid "Already signed in as @{0}"
msgstr "Ja estàs registrat com a @{0}"
@@ -246,7 +285,7 @@ msgstr "Ja estàs registrat com a @{0}"
msgid "ALT"
msgstr "ALT"
-#: src/view/com/modals/EditImage.tsx:315
+#: src/view/com/modals/EditImage.tsx:316
msgid "Alt text"
msgstr "Text alternatiu"
@@ -262,37 +301,47 @@ msgstr "S'ha enviat un correu a {0}. Inclou un codi de confirmació que has d'en
msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below."
msgstr "S'ha enviat un correu a la teva adreça prèvia, {0}. Inclou un codi de confirmació que has d'entrar aquí sota."
-#: src/view/com/profile/FollowButton.tsx:30
-#: src/view/com/profile/FollowButton.tsx:40
+#: src/lib/moderation/useReportOptions.ts:26
+msgid "An issue not included in these options"
+msgstr "Un problema que no està inclòs en aquestes opcions"
+
+#: src/view/com/profile/FollowButton.tsx:35
+#: src/view/com/profile/FollowButton.tsx:45
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:188
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:198
msgid "An issue occurred, please try again."
-msgstr "Hi ha hagut un problema, prova-ho de nou"
+msgstr "Hi ha hagut un problema, prova-ho de nou."
-#: src/view/com/notifications/FeedItem.tsx:236
+#: src/view/com/notifications/FeedItem.tsx:240
#: src/view/com/threadgate/WhoCanReply.tsx:178
msgid "and"
msgstr "i"
#: src/screens/Onboarding/index.tsx:32
msgid "Animals"
-msgstr ""
+msgstr "Animals"
+
+#: src/lib/moderation/useReportOptions.ts:31
+msgid "Anti-Social Behavior"
+msgstr "Comportament antisocial"
#: src/view/screens/LanguageSettings.tsx:95
msgid "App Language"
msgstr "Idioma de l'aplicació"
-#: src/view/screens/AppPasswords.tsx:228
+#: src/view/screens/AppPasswords.tsx:223
msgid "App password deleted"
msgstr "Contrasenya de l'aplicació esborrada"
-#: src/view/com/modals/AddAppPasswords.tsx:134
+#: src/view/com/modals/AddAppPasswords.tsx:135
msgid "App Password names can only contain letters, numbers, spaces, dashes, and underscores."
msgstr "La contrasenya de l'aplicació només pot estar formada per lletres, números, espais, guions i guions baixos."
-#: src/view/com/modals/AddAppPasswords.tsx:99
+#: src/view/com/modals/AddAppPasswords.tsx:100
msgid "App Password names must be at least 4 characters long."
-msgstr "La contrasenya de l'aplicació ha de ser d'almenys 4 caràcters"
+msgstr "La contrasenya de l'aplicació ha de ser d'almenys 4 caràcters."
-#: src/view/screens/Settings/index.tsx:675
+#: src/view/screens/Settings/index.tsx:695
msgid "App password settings"
msgstr "Configuració de la contrasenya d'aplicació"
@@ -300,50 +349,68 @@ msgstr "Configuració de la contrasenya d'aplicació"
#~ msgid "App passwords"
#~ msgstr "Contrasenyes de l'aplicació"
-#: src/Navigation.tsx:237
-#: src/view/screens/AppPasswords.tsx:187
-#: src/view/screens/Settings/index.tsx:684
+#: src/Navigation.tsx:251
+#: src/view/screens/AppPasswords.tsx:189
+#: src/view/screens/Settings/index.tsx:704
msgid "App Passwords"
msgstr "Contrasenyes de l'aplicació"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:250
-msgid "Appeal content warning"
-msgstr "Advertència d'apel·lació sobre el contingut"
+#: src/components/moderation/LabelsOnMeDialog.tsx:133
+#: src/components/moderation/LabelsOnMeDialog.tsx:136
+msgid "Appeal"
+msgstr "Apel·la"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:201
+msgid "Appeal \"{0}\" label"
+msgstr "Apel·la \"{0}\" etiqueta"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:337
+#: src/view/com/util/forms/PostDropdownBtn.tsx:346
+#~ msgid "Appeal content warning"
+#~ msgstr "Advertència d'apel·lació sobre el contingut"
#: src/view/com/modals/AppealLabel.tsx:65
-msgid "Appeal Content Warning"
-msgstr "Advertència d'apel·lació sobre el contingut"
+#~ msgid "Appeal Content Warning"
+#~ msgstr "Advertència d'apel·lació sobre el contingut"
#~ msgid "Appeal Decision"
#~ msgstr "Decisión de apelación"
+#: src/components/moderation/LabelsOnMeDialog.tsx:192
+msgid "Appeal submitted."
+msgstr "Apel·lació enviada."
+
#: src/view/com/util/moderation/LabelInfo.tsx:52
-msgid "Appeal this decision"
-msgstr "Apel·la aquesta decisió"
+#~ msgid "Appeal this decision"
+#~ msgstr "Apel·la aquesta decisió"
#: src/view/com/util/moderation/LabelInfo.tsx:56
-msgid "Appeal this decision."
-msgstr "Apel·la aquesta decisió."
+#~ msgid "Appeal this decision."
+#~ msgstr "Apel·la aquesta decisió."
-#: src/view/screens/Settings/index.tsx:466
+#: src/view/screens/Settings/index.tsx:485
msgid "Appearance"
msgstr "Aparença"
-#: src/view/screens/AppPasswords.tsx:224
+#: src/view/screens/AppPasswords.tsx:265
msgid "Are you sure you want to delete the app password \"{name}\"?"
msgstr "Confirmes que vols eliminar la contrasenya de l'aplicació \"{name}\"?"
-#: src/view/com/composer/Composer.tsx:143
+#: src/view/com/feeds/FeedSourceCard.tsx:280
+msgid "Are you sure you want to remove {0} from your feeds?"
+msgstr "Confirmes que vols eliminar {0} dels teus canals?"
+
+#: src/view/com/composer/Composer.tsx:509
msgid "Are you sure you'd like to discard this draft?"
msgstr "Confirmes que vols descartar aquest esborrany?"
-#: src/view/screens/ProfileList.tsx:364
+#: src/components/dialogs/MutedWords.tsx:281
msgid "Are you sure?"
msgstr "Ho confirmes?"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:233
-msgid "Are you sure? This cannot be undone."
-msgstr "Ho confirmes? Aquesta acció no es pot desfer."
+#: src/view/com/util/forms/PostDropdownBtn.tsx:322
+#~ msgid "Are you sure? This cannot be undone."
+#~ msgstr "Ho confirmes? Aquesta acció no es pot desfer."
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:60
msgid "Are you writing in <0>{0}0>?"
@@ -351,84 +418,99 @@ msgstr "Estàs escrivint en <0>{0}0>?"
#: src/screens/Onboarding/index.tsx:26
msgid "Art"
-msgstr ""
+msgstr "Art"
#: src/view/com/modals/SelfLabel.tsx:123
msgid "Artistic or non-erotic nudity."
msgstr "Nuesa artística o no eròtica."
-#: src/view/com/auth/create/CreateAccount.tsx:147
-#: src/view/com/auth/login/ChooseAccountForm.tsx:151
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:174
-#: src/view/com/auth/login/LoginForm.tsx:259
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:179
-#: src/view/com/modals/report/InputIssueDetails.tsx:46
-#: src/view/com/post-thread/PostThread.tsx:408
-#: src/view/com/post-thread/PostThread.tsx:458
-#: src/view/com/post-thread/PostThread.tsx:466
-#: src/view/com/profile/ProfileHeader.tsx:648
-#: src/view/com/util/ViewHeader.tsx:81
-msgid "Back"
-msgstr "Endarrere"
+#: src/screens/Signup/StepHandle.tsx:118
+msgid "At least 3 characters"
+msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:416
-msgctxt "action"
+#: src/components/moderation/LabelsOnMeDialog.tsx:246
+#: src/components/moderation/LabelsOnMeDialog.tsx:247
+#: src/screens/Login/ChooseAccountForm.tsx:73
+#: src/screens/Login/ChooseAccountForm.tsx:78
+#: src/screens/Login/ForgotPasswordForm.tsx:129
+#: src/screens/Login/ForgotPasswordForm.tsx:135
+#: src/screens/Login/LoginForm.tsx:221
+#: src/screens/Login/LoginForm.tsx:227
+#: src/screens/Login/SetNewPasswordForm.tsx:160
+#: src/screens/Login/SetNewPasswordForm.tsx:166
+#: src/screens/Profile/Header/Shell.tsx:96
+#: src/screens/Signup/index.tsx:179
+#: src/view/com/util/ViewHeader.tsx:87
msgid "Back"
msgstr "Endarrere"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:136
+#: src/view/com/post-thread/PostThread.tsx:480
+#~ msgctxt "action"
+#~ msgid "Back"
+#~ msgstr "Endarrere"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:144
msgid "Based on your interest in {interestsText}"
-msgstr ""
+msgstr "Segons els teus interessos en {interestsText}"
-#: src/view/screens/Settings/index.tsx:523
+#: src/view/screens/Settings/index.tsx:542
msgid "Basics"
msgstr "Conceptes bàsics"
-#: src/view/com/auth/create/Step1.tsx:246
-#: src/view/com/modals/BirthDateSettings.tsx:73
+#: src/components/dialogs/BirthDateSettings.tsx:107
msgid "Birthday"
msgstr "Aniversari"
-#: src/view/screens/Settings/index.tsx:340
+#: src/view/screens/Settings/index.tsx:359
msgid "Birthday:"
msgstr "Aniversari:"
-#: src/view/com/profile/ProfileHeader.tsx:238
-#: src/view/com/profile/ProfileHeader.tsx:345
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+msgid "Block"
+msgstr "Bloqueja"
+
+#: src/view/com/profile/ProfileMenu.tsx:300
+#: src/view/com/profile/ProfileMenu.tsx:307
msgid "Block Account"
msgstr "Bloqueja el compte"
-#: src/view/screens/ProfileList.tsx:555
+#: src/view/com/profile/ProfileMenu.tsx:344
+msgid "Block Account?"
+msgstr "Vols bloquejar el compte?"
+
+#: src/view/screens/ProfileList.tsx:530
msgid "Block accounts"
msgstr "Bloqueja comptes"
-#: src/view/screens/ProfileList.tsx:505
+#: src/view/screens/ProfileList.tsx:478
+#: src/view/screens/ProfileList.tsx:634
msgid "Block list"
msgstr "Bloqueja una llista"
-#: src/view/screens/ProfileList.tsx:315
+#: src/view/screens/ProfileList.tsx:629
msgid "Block these accounts?"
msgstr "Vols bloquejar aquests comptes?"
-#: src/view/screens/ProfileList.tsx:319
-msgid "Block this List"
-msgstr "Bloqueja la llista"
+#: src/view/screens/ProfileList.tsx:320
+#~ msgid "Block this List"
+#~ msgstr "Bloqueja la llista"
-#: src/view/com/lists/ListCard.tsx:109
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:60
+#: src/view/com/lists/ListCard.tsx:110
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:55
msgid "Blocked"
msgstr "Bloquejada"
-#: src/view/screens/Moderation.tsx:123
+#: src/screens/Moderation/index.tsx:267
msgid "Blocked accounts"
msgstr "Comptes bloquejats"
-#: src/Navigation.tsx:130
+#: src/Navigation.tsx:134
#: src/view/screens/ModerationBlockedAccounts.tsx:107
msgid "Blocked Accounts"
msgstr "Comptes bloquejats"
-#: src/view/com/profile/ProfileHeader.tsx:240
+#: src/view/com/profile/ProfileMenu.tsx:356
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
msgstr "Els comptes bloquejats no poden respondre cap fil teu, ni anomenar-te ni interactuar amb tu de cap manera."
@@ -436,48 +518,57 @@ msgstr "Els comptes bloquejats no poden respondre cap fil teu, ni anomenar-te ni
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours."
msgstr "Els comptes bloquejats no poden respondre a cap fil teu, ni anomenar-te ni interactuar amb tu de cap manera. No veuràs mai el seu contingut ni ells el teu."
-#: src/view/com/post-thread/PostThread.tsx:267
+#: src/view/com/post-thread/PostThread.tsx:313
msgid "Blocked post."
msgstr "Publicació bloquejada."
-#: src/view/screens/ProfileList.tsx:317
+#: src/screens/Profile/Sections/Labels.tsx:152
+msgid "Blocking does not prevent this labeler from placing labels on your account."
+msgstr "El bloqueig no evita que aquest etiquetador apliqui etiquetes al teu compte."
+
+#: src/view/screens/ProfileList.tsx:631
msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
msgstr "El bloqueig és públic. Els comptes bloquejats no poden respondre els teus fils, ni mencionar-te ni interactuar amb tu de cap manera."
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:93
+#: src/view/com/profile/ProfileMenu.tsx:353
+msgid "Blocking will not prevent labels from being applied on your account, but it will stop this account from replying in your threads or interacting with you."
+msgstr "Bloquejar no evitarà que s'apliquin etiquetes al teu compte, però no deixarà que aquest compte respongui els teus fils ni interactui amb tu."
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:98
+#: src/view/com/auth/SplashScreen.web.tsx:169
msgid "Blog"
msgstr "Blog"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:31
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:32
#: src/view/com/auth/server-input/index.tsx:89
-#: src/view/com/auth/server-input/index.tsx:90
+#: src/view/com/auth/server-input/index.tsx:91
msgid "Bluesky"
msgstr "Bluesky"
-#: src/view/com/auth/server-input/index.tsx:150
+#: src/view/com/auth/server-input/index.tsx:154
msgid "Bluesky is an open network where you can choose your hosting provider. Custom hosting is now available in beta for developers."
-msgstr ""
+msgstr "Bluesky és una xarxa oberta on pots escollir el teu proveïdor d'allotjament. L'allotjament personalitzat està disponible en beta per a desenvolupadors."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:80
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:80
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:82
msgid "Bluesky is flexible."
msgstr "Bluesky és flexible."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:69
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:69
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:71
msgid "Bluesky is open."
msgstr "Bluesky és obert."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:56
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:56
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:58
msgid "Bluesky is public."
msgstr "Bluesky és públic."
#: src/view/com/modals/Waitlist.tsx:70
-msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
-msgstr "Bluesky utilitza les invitacions per construir una comunitat saludable. Si no coneixes ningú amb invitacions, pots apuntar-te a la llista d'espera i te n'enviarem una aviat."
+#~ msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
+#~ msgstr "Bluesky utilitza les invitacions per construir una comunitat saludable. Si no coneixes ningú amb invitacions, pots apuntar-te a la llista d'espera i te n'enviarem una aviat."
-#: src/view/screens/Moderation.tsx:226
+#: src/screens/Moderation/index.tsx:533
msgid "Bluesky will not show your profile and posts to logged-out users. Other apps may not honor this request. This does not make your account private."
msgstr "Bluesky no mostrarà el teu perfil ni les publicacions als usuaris que no estiguin registrats. Altres aplicacions poden no seguir aquesta demanda. Això no fa que el teu compte sigui privat."
@@ -485,21 +576,30 @@ msgstr "Bluesky no mostrarà el teu perfil ni les publicacions als usuaris que n
#~ msgid "Bluesky.Social"
#~ msgstr "Bluesky.Social"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:53
+msgid "Blur images"
+msgstr "Difumina les imatges"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:51
+msgid "Blur images and filter from feeds"
+msgstr "Difumina les imatges i filtra-ho dels canals"
+
#: src/screens/Onboarding/index.tsx:33
msgid "Books"
-msgstr ""
+msgstr "Llibres"
-#: src/view/screens/Settings/index.tsx:859
-msgid "Build version {0} {1}"
-msgstr "Versió {0} {1}"
+#: src/view/screens/Settings/index.tsx:893
+#~ msgid "Build version {0} {1}"
+#~ msgstr "Versió {0} {1}"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:87
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:92
+#: src/view/com/auth/SplashScreen.web.tsx:166
msgid "Business"
msgstr "Negocis"
#: src/view/com/modals/ServerInput.tsx:115
#~ msgid "Button disabled. Input custom domain to proceed."
-#~ msgstr "Botó deshabilitat. Entra el domini personalitzat per continuar."
+#~ msgstr "Botó deshabilitat. Entra el domini personalitzat per a continuar."
#: src/view/com/profile/ProfileSubpageHeader.tsx:157
msgid "by —"
@@ -509,56 +609,66 @@ msgstr "per -"
msgid "by {0}"
msgstr "per {0}"
+#: src/components/LabelingServiceCard/index.tsx:57
+msgid "By {0}"
+msgstr "Per {0}"
+
#: src/view/com/profile/ProfileSubpageHeader.tsx:161
msgid "by <0/>"
msgstr "per <0/>"
+#: src/screens/Signup/StepInfo/Policies.tsx:74
+msgid "By creating an account you agree to the {els}."
+msgstr "Creant el compte indiques que estàs d'acord amb {els}."
+
#: src/view/com/profile/ProfileSubpageHeader.tsx:159
msgid "by you"
msgstr "per tu"
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:60
-#: src/view/com/util/UserAvatar.tsx:224
-#: src/view/com/util/UserBanner.tsx:40
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:77
msgid "Camera"
msgstr "Càmera"
-#: src/view/com/modals/AddAppPasswords.tsx:216
+#: src/view/com/modals/AddAppPasswords.tsx:217
msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long."
msgstr "Només pot tenir lletres, números, espais, guions i guions baixos. Ha de tenir almenys 4 caràcters i no més de 32."
-#: src/components/Prompt.tsx:91
-#: src/view/com/composer/Composer.tsx:300
-#: src/view/com/composer/Composer.tsx:305
+#: src/components/Menu/index.tsx:213
+#: src/components/Prompt.tsx:113
+#: src/components/Prompt.tsx:115
+#: src/components/TagMenu/index.tsx:268
+#: src/view/com/composer/Composer.tsx:317
+#: src/view/com/composer/Composer.tsx:322
#: src/view/com/modals/ChangeEmail.tsx:218
#: src/view/com/modals/ChangeEmail.tsx:220
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
-#: src/view/com/modals/CreateOrEditList.tsx:355
-#: src/view/com/modals/EditImage.tsx:323
-#: src/view/com/modals/EditProfile.tsx:249
+#: src/view/com/modals/ChangeHandle.tsx:154
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
+#: src/view/com/modals/CreateOrEditList.tsx:356
+#: src/view/com/modals/crop-image/CropImage.web.tsx:138
+#: src/view/com/modals/EditImage.tsx:324
+#: src/view/com/modals/EditProfile.tsx:250
#: src/view/com/modals/InAppBrowserConsent.tsx:78
-#: src/view/com/modals/LinkWarning.tsx:87
-#: src/view/com/modals/Repost.tsx:87
+#: src/view/com/modals/InAppBrowserConsent.tsx:80
+#: src/view/com/modals/LinkWarning.tsx:105
+#: src/view/com/modals/LinkWarning.tsx:107
+#: src/view/com/modals/Repost.tsx:88
#: src/view/com/modals/VerifyEmail.tsx:247
#: src/view/com/modals/VerifyEmail.tsx:253
-#: src/view/com/modals/Waitlist.tsx:142
-#: src/view/screens/Search/Search.tsx:693
-#: src/view/shell/desktop/Search.tsx:238
+#: src/view/screens/Search/Search.tsx:718
+#: src/view/shell/desktop/Search.tsx:239
msgid "Cancel"
msgstr "Cancel·la"
-#: src/view/com/modals/Confirm.tsx:88
-#: src/view/com/modals/Confirm.tsx:91
-#: src/view/com/modals/CreateOrEditList.tsx:360
-#: src/view/com/modals/DeleteAccount.tsx:156
-#: src/view/com/modals/DeleteAccount.tsx:234
+#: src/view/com/modals/CreateOrEditList.tsx:361
+#: src/view/com/modals/DeleteAccount.tsx:155
+#: src/view/com/modals/DeleteAccount.tsx:233
msgctxt "action"
msgid "Cancel"
msgstr "Cancel·la"
-#: src/view/com/modals/DeleteAccount.tsx:152
-#: src/view/com/modals/DeleteAccount.tsx:230
+#: src/view/com/modals/DeleteAccount.tsx:151
+#: src/view/com/modals/DeleteAccount.tsx:229
msgid "Cancel account deletion"
msgstr "Cancel·la la supressió del compte"
@@ -566,46 +676,50 @@ msgstr "Cancel·la la supressió del compte"
#~ msgid "Cancel add image alt text"
#~ msgstr "Cancel·la afegir text a la imatge"
-#: src/view/com/modals/ChangeHandle.tsx:149
+#: src/view/com/modals/ChangeHandle.tsx:150
msgid "Cancel change handle"
msgstr "Cancel·la el canvi d'identificador"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:134
+#: src/view/com/modals/crop-image/CropImage.web.tsx:135
msgid "Cancel image crop"
msgstr "Cancel·la la retallada de la imatge"
-#: src/view/com/modals/EditProfile.tsx:244
+#: src/view/com/modals/EditProfile.tsx:245
msgid "Cancel profile editing"
msgstr "Cancel·la l'edició del perfil"
-#: src/view/com/modals/Repost.tsx:78
+#: src/view/com/modals/Repost.tsx:79
msgid "Cancel quote post"
msgstr "Cancel·la la citació de la publicació"
#: src/view/com/modals/ListAddRemoveUsers.tsx:87
-#: src/view/shell/desktop/Search.tsx:234
+#: src/view/shell/desktop/Search.tsx:235
msgid "Cancel search"
msgstr "Cancel·la la cerca"
#: src/view/com/modals/Waitlist.tsx:136
-msgid "Cancel waitlist signup"
-msgstr "Cancel·la la inscripció a la llista d'espera"
+#~ msgid "Cancel waitlist signup"
+#~ msgstr "Cancel·la la inscripció a la llista d'espera"
-#: src/view/screens/Settings/index.tsx:334
-msgctxt "action"
+#: src/view/com/modals/LinkWarning.tsx:106
+msgid "Cancels opening the linked website"
+msgstr "Cancel·la obrir la web enllaçada"
+
+#: src/view/com/modals/VerifyEmail.tsx:152
msgid "Change"
msgstr "Canvia"
-#: src/view/screens/Settings.tsx:306
-#~ msgid "Change"
-#~ msgstr "Canvia"
+#: src/view/screens/Settings/index.tsx:353
+msgctxt "action"
+msgid "Change"
+msgstr "Canvia"
-#: src/view/screens/Settings/index.tsx:696
+#: src/view/screens/Settings/index.tsx:716
msgid "Change handle"
msgstr "Canvia l'identificador"
-#: src/view/com/modals/ChangeHandle.tsx:161
-#: src/view/screens/Settings/index.tsx:705
+#: src/view/com/modals/ChangeHandle.tsx:162
+#: src/view/screens/Settings/index.tsx:727
msgid "Change Handle"
msgstr "Canvia l'identificador"
@@ -613,21 +727,22 @@ msgstr "Canvia l'identificador"
msgid "Change my email"
msgstr "Canvia el meu correu"
-#: src/view/screens/Settings/index.tsx:732
+#: src/view/screens/Settings/index.tsx:754
msgid "Change password"
-msgstr ""
+msgstr "Canvia la contrasenya"
-#: src/view/screens/Settings/index.tsx:741
+#: src/view/com/modals/ChangePassword.tsx:141
+#: src/view/screens/Settings/index.tsx:765
msgid "Change Password"
-msgstr ""
+msgstr "Canvia la contrasenya"
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:73
msgid "Change post language to {0}"
msgstr "Canvia l'idioma de la publicació a {0}"
#: src/view/screens/Settings/index.tsx:733
-msgid "Change your Bluesky password"
-msgstr ""
+#~ msgid "Change your Bluesky password"
+#~ msgstr "Canvia la teva contrasenya de Bluesky"
#: src/view/com/modals/ChangeEmail.tsx:109
msgid "Change Your Email"
@@ -636,147 +751,171 @@ msgstr "Canvia el teu correu"
#: src/screens/Deactivated.tsx:72
#: src/screens/Deactivated.tsx:76
msgid "Check my status"
-msgstr ""
+msgstr "Comprova el meu estat"
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:121
msgid "Check out some recommended feeds. Tap + to add them to your list of pinned feeds."
-msgstr "Mira alguns canals recomanats. Prem + per afegir-los als teus canals fixats."
+msgstr "Mira alguns canals recomanats. Prem + per a afegir-los als teus canals fixats."
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:185
msgid "Check out some recommended users. Follow them to see similar users."
-msgstr "Mira alguns usuaris recomanats. Segueix-los per veure altres usuaris similars."
+msgstr "Mira alguns usuaris recomanats. Segueix-los per a veure altres usuaris similars."
-#: src/view/com/modals/DeleteAccount.tsx:169
+#: src/view/com/modals/DeleteAccount.tsx:168
msgid "Check your inbox for an email with the confirmation code to enter below:"
-msgstr "Comprova el teu correu per rebre el codi de confirmació i entra'l aquí sota:"
+msgstr "Comprova el teu correu per a rebre el codi de confirmació i entra'l aquí sota:"
#: src/view/com/modals/Threadgate.tsx:72
msgid "Choose \"Everybody\" or \"Nobody\""
msgstr "Tria \"Tothom\" or \"Ningú\""
#: src/view/screens/Settings/index.tsx:697
-msgid "Choose a new Bluesky username or create"
-msgstr "Tria un nou nom d'usuari de Bluesky o crea'l"
+#~ msgid "Choose a new Bluesky username or create"
+#~ msgstr "Tria un nou nom d'usuari de Bluesky o crea'l"
#: src/view/com/auth/server-input/index.tsx:79
msgid "Choose Service"
msgstr "Tria un servei"
-#: src/screens/Onboarding/StepFinished.tsx:135
+#: src/screens/Onboarding/StepFinished.tsx:139
msgid "Choose the algorithms that power your custom feeds."
-msgstr ""
+msgstr "Tria els algoritmes que alimentaran els teus canals personalitzats."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:83
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:83
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:85
msgid "Choose the algorithms that power your experience with custom feeds."
msgstr "Tria els algoritmes que potenciaran la teva experiència amb els canals personalitzats."
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:103
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:104
msgid "Choose your main feeds"
-msgstr ""
+msgstr "Tria els teus canals principals"
-#: src/view/com/auth/create/Step1.tsx:215
+#: src/screens/Signup/StepInfo/index.tsx:112
msgid "Choose your password"
msgstr "Tria la teva contrasenya"
-#: src/view/screens/Settings/index.tsx:834
-#: src/view/screens/Settings/index.tsx:835
+#: src/view/screens/Settings/index.tsx:868
msgid "Clear all legacy storage data"
msgstr "Esborra totes les dades antigues emmagatzemades"
-#: src/view/screens/Settings/index.tsx:837
+#: src/view/screens/Settings/index.tsx:871
msgid "Clear all legacy storage data (restart after this)"
msgstr "Esborra totes les dades antigues emmagatzemades (i després reinicia)"
-#: src/view/screens/Settings/index.tsx:846
-#: src/view/screens/Settings/index.tsx:847
+#: src/view/screens/Settings/index.tsx:880
msgid "Clear all storage data"
msgstr "Esborra totes les dades emmagatzemades"
-#: src/view/screens/Settings/index.tsx:849
+#: src/view/screens/Settings/index.tsx:883
msgid "Clear all storage data (restart after this)"
msgstr "Esborra totes les dades emmagatzemades (i després reinicia)"
#: src/view/com/util/forms/SearchInput.tsx:88
-#: src/view/screens/Search/Search.tsx:674
+#: src/view/screens/Search/Search.tsx:699
msgid "Clear search query"
msgstr "Esborra la cerca"
+#: src/view/screens/Settings/index.tsx:869
+msgid "Clears all legacy storage data"
+msgstr "Esborra totes les dades antigues emmagatzemades"
+
+#: src/view/screens/Settings/index.tsx:881
+msgid "Clears all storage data"
+msgstr "Esborra totes les dades emmagatzemades"
+
#: src/view/screens/Support.tsx:40
msgid "click here"
msgstr "clica aquí"
+#: src/components/TagMenu/index.web.tsx:138
+msgid "Click here to open tag menu for {tag}"
+msgstr "Clica aquí per obrir el menú d'etiquetes per {tag}"
+
+#: src/components/RichText.tsx:192
+msgid "Click here to open tag menu for #{tag}"
+msgstr "Clica aquí per obrir el menú d'etiquetes per #{tag}"
+
#: src/screens/Onboarding/index.tsx:35
msgid "Climate"
-msgstr ""
+msgstr "Clima"
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
msgid "Close"
-msgstr ""
+msgstr "Tanca"
-#: src/components/Dialog/index.web.tsx:78
+#: src/components/Dialog/index.web.tsx:106
+#: src/components/Dialog/index.web.tsx:218
msgid "Close active dialog"
msgstr "Tanca el diàleg actiu"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:38
+#: src/screens/Login/PasswordUpdatedForm.tsx:38
msgid "Close alert"
msgstr "Tanca l'advertència"
-#: src/view/com/util/BottomSheetCustomBackdrop.tsx:33
+#: src/view/com/util/BottomSheetCustomBackdrop.tsx:36
msgid "Close bottom drawer"
msgstr "Tanca el calaix inferior"
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:26
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:36
msgid "Close image"
msgstr "Tanca la imatge"
-#: src/view/com/lightbox/Lightbox.web.tsx:119
+#: src/view/com/lightbox/Lightbox.web.tsx:129
msgid "Close image viewer"
msgstr "Tanca el visor d'imatges"
-#: src/view/shell/index.web.tsx:49
+#: src/view/shell/index.web.tsx:55
msgid "Close navigation footer"
msgstr "Tanca el peu de la navegació"
-#: src/view/shell/index.web.tsx:50
+#: src/components/Menu/index.tsx:207
+#: src/components/TagMenu/index.tsx:262
+msgid "Close this dialog"
+msgstr "Tanca aquest diàleg"
+
+#: src/view/shell/index.web.tsx:56
msgid "Closes bottom navigation bar"
msgstr "Tanca la barra de navegació inferior"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:39
+#: src/screens/Login/PasswordUpdatedForm.tsx:39
msgid "Closes password update alert"
msgstr "Tanca l'alerta d'actualització de contrasenya"
-#: src/view/com/composer/Composer.tsx:302
+#: src/view/com/composer/Composer.tsx:319
msgid "Closes post composer and discards post draft"
msgstr "Tanca l'editor de la publicació i descarta l'esborrany"
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:27
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:37
msgid "Closes viewer for header image"
msgstr "Tanca la visualització de la imatge de la capçalera"
-#: src/view/com/notifications/FeedItem.tsx:317
+#: src/view/com/notifications/FeedItem.tsx:321
msgid "Collapses list of users for a given notification"
msgstr "Plega la llista d'usuaris per una notificació concreta"
#: src/screens/Onboarding/index.tsx:41
msgid "Comedy"
-msgstr ""
+msgstr "Comèdia"
#: src/screens/Onboarding/index.tsx:27
msgid "Comics"
-msgstr ""
+msgstr "Còmics"
-#: src/Navigation.tsx:227
+#: src/Navigation.tsx:241
#: src/view/screens/CommunityGuidelines.tsx:32
msgid "Community Guidelines"
msgstr "Directrius de la comunitat"
-#: src/screens/Onboarding/StepFinished.tsx:148
+#: src/screens/Onboarding/StepFinished.tsx:152
msgid "Complete onboarding and start using your account"
-msgstr ""
+msgstr "Finalitza el registre i comença a utilitzar el teu compte"
+
+#: src/screens/Signup/index.tsx:154
+msgid "Complete the challenge"
+msgstr "Completa la prova"
-#: src/view/com/composer/Composer.tsx:417
+#: src/view/com/composer/Composer.tsx:438
msgid "Compose posts up to {MAX_GRAPHEME_LENGTH} characters in length"
msgstr "Crea publicacions de fins a {MAX_GRAPHEME_LENGTH} caràcters"
@@ -784,81 +923,112 @@ msgstr "Crea publicacions de fins a {MAX_GRAPHEME_LENGTH} caràcters"
msgid "Compose reply"
msgstr "Redacta una resposta"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:67
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:81
msgid "Configure content filtering setting for category: {0}"
+msgstr "Configura els filtres de continguts per la categoria: {0}"
+
+#: src/components/moderation/LabelPreference.tsx:81
+msgid "Configure content filtering setting for category: {name}"
msgstr ""
-#: src/components/Prompt.tsx:113
-#: src/view/com/modals/AppealLabel.tsx:98
+#: src/components/moderation/LabelPreference.tsx:244
+msgid "Configured in <0>moderation settings0>."
+msgstr "Configurat a <0>configuració de moderació0>."
+
+#: src/components/Prompt.tsx:153
+#: src/components/Prompt.tsx:156
#: src/view/com/modals/SelfLabel.tsx:154
#: src/view/com/modals/VerifyEmail.tsx:231
#: src/view/com/modals/VerifyEmail.tsx:233
-#: src/view/screens/PreferencesHomeFeed.tsx:308
+#: src/view/screens/PreferencesFollowingFeed.tsx:308
#: src/view/screens/PreferencesThreads.tsx:159
msgid "Confirm"
msgstr "Confirma"
#: src/view/com/modals/Confirm.tsx:75
#: src/view/com/modals/Confirm.tsx:78
-msgctxt "action"
-msgid "Confirm"
-msgstr "Confirma"
+#~ msgctxt "action"
+#~ msgid "Confirm"
+#~ msgstr "Confirma"
#: src/view/com/modals/ChangeEmail.tsx:193
#: src/view/com/modals/ChangeEmail.tsx:195
msgid "Confirm Change"
msgstr "Confirma el canvi"
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:34
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:35
msgid "Confirm content language settings"
msgstr "Confirma la configuració de l'idioma del contingut"
-#: src/view/com/modals/DeleteAccount.tsx:220
+#: src/view/com/modals/DeleteAccount.tsx:219
msgid "Confirm delete account"
msgstr "Confirma l'eliminació del compte"
#: src/view/com/modals/ContentFilteringSettings.tsx:156
-msgid "Confirm your age to enable adult content."
-msgstr "Confirma la teva edat per habilitar el contingut per a adults"
+#~ msgid "Confirm your age to enable adult content."
+#~ msgstr "Confirma la teva edat per a habilitar el contingut per a adults"
+
+#: src/screens/Moderation/index.tsx:301
+msgid "Confirm your age:"
+msgstr "Confirma la teva edat:"
+
+#: src/screens/Moderation/index.tsx:292
+msgid "Confirm your birthdate"
+msgstr "Confirma la teva data de naixement"
#: src/view/com/modals/ChangeEmail.tsx:157
-#: src/view/com/modals/DeleteAccount.tsx:182
+#: src/view/com/modals/DeleteAccount.tsx:175
+#: src/view/com/modals/DeleteAccount.tsx:181
#: src/view/com/modals/VerifyEmail.tsx:165
msgid "Confirmation code"
msgstr "Codi de confirmació"
#: src/view/com/modals/Waitlist.tsx:120
-msgid "Confirms signing up {email} to the waitlist"
-msgstr "Confirma afegir {email} a la llista d'espera"
+#~ msgid "Confirms signing up {email} to the waitlist"
+#~ msgstr "Confirma afegir {email} a la llista d'espera"
-#: src/view/com/auth/create/CreateAccount.tsx:182
-#: src/view/com/auth/login/LoginForm.tsx:278
+#: src/screens/Login/LoginForm.tsx:248
msgid "Connecting..."
msgstr "Connectant…"
-#: src/view/com/auth/create/CreateAccount.tsx:202
+#: src/screens/Signup/index.tsx:219
msgid "Contact support"
msgstr "Contacta amb suport"
-#: src/view/screens/Moderation.tsx:81
-msgid "Content filtering"
-msgstr "Filtre de contingut"
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "content"
+msgstr "contingut"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:18
+msgid "Content Blocked"
+msgstr "Contingut bloquejat"
+
+#: src/view/screens/Moderation.tsx:83
+#~ msgid "Content filtering"
+#~ msgstr "Filtre de contingut"
#: src/view/com/modals/ContentFilteringSettings.tsx:44
-msgid "Content Filtering"
-msgstr "Filtre de contingut"
+#~ msgid "Content Filtering"
+#~ msgstr "Filtre de contingut"
+
+#: src/screens/Moderation/index.tsx:285
+msgid "Content filters"
+msgstr "Filtres de contingut"
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74
#: src/view/screens/LanguageSettings.tsx:278
msgid "Content Languages"
msgstr "Idiomes del contingut"
-#: src/view/com/modals/ModerationDetails.tsx:65
+#: src/components/moderation/ModerationDetailsDialog.tsx:75
+#: src/lib/moderation/useModerationCauseDescription.ts:75
msgid "Content Not Available"
msgstr "Contingut no disponible"
-#: src/view/com/modals/ModerationDetails.tsx:33
-#: src/view/com/util/moderation/ScreenHider.tsx:78
+#: src/components/moderation/ModerationDetailsDialog.tsx:46
+#: src/components/moderation/ScreenHider.tsx:99
+#: src/lib/moderation/useGlobalLabelStrings.ts:22
+#: src/lib/moderation/useModerationCauseDescription.ts:38
msgid "Content Warning"
msgstr "Advertència del contingut"
@@ -866,157 +1036,180 @@ msgstr "Advertència del contingut"
msgid "Content warnings"
msgstr "Advertències del contingut"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:170
-#: src/screens/Onboarding/StepFollowingFeed.tsx:153
-#: src/screens/Onboarding/StepInterests/index.tsx:248
-#: src/screens/Onboarding/StepModeration/index.tsx:118
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:108
+#: src/components/Menu/index.web.tsx:84
+msgid "Context menu backdrop, click to close the menu."
+msgstr "Teló de fons del menú contextual, fes clic per tancar-lo."
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:161
+#: src/screens/Onboarding/StepFollowingFeed.tsx:154
+#: src/screens/Onboarding/StepInterests/index.tsx:252
+#: src/screens/Onboarding/StepModeration/index.tsx:103
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:118
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:96
msgid "Continue"
msgstr "Continua"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:150
-#: src/screens/Onboarding/StepInterests/index.tsx:245
-#: src/screens/Onboarding/StepModeration/index.tsx:115
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:105
-msgid "Continue to next step"
+#: src/components/AccountList.tsx:108
+msgid "Continue as {0} (currently signed in)"
msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:167
+#: src/screens/Onboarding/StepFollowingFeed.tsx:151
+#: src/screens/Onboarding/StepInterests/index.tsx:249
+#: src/screens/Onboarding/StepModeration/index.tsx:100
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:115
+#: src/screens/Signup/index.tsx:198
+msgid "Continue to next step"
+msgstr "Continua"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:158
msgid "Continue to the next step"
-msgstr ""
+msgstr "Continua"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:191
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:199
msgid "Continue to the next step without following any accounts"
-msgstr ""
+msgstr "Continua sense seguir cap compte"
#: src/screens/Onboarding/index.tsx:44
msgid "Cooking"
-msgstr ""
+msgstr "Cuina"
-#: src/view/com/modals/AddAppPasswords.tsx:195
-#: src/view/com/modals/InviteCodes.tsx:182
+#: src/view/com/modals/AddAppPasswords.tsx:196
+#: src/view/com/modals/InviteCodes.tsx:183
msgid "Copied"
msgstr "Copiat"
-#: src/view/screens/Settings/index.tsx:241
+#: src/view/screens/Settings/index.tsx:251
msgid "Copied build version to clipboard"
msgstr "Número de versió copiat en memòria"
-#: src/view/com/modals/AddAppPasswords.tsx:76
-#: src/view/com/modals/InviteCodes.tsx:152
-#: src/view/com/util/forms/PostDropdownBtn.tsx:112
+#: src/view/com/modals/AddAppPasswords.tsx:77
+#: src/view/com/modals/ChangeHandle.tsx:326
+#: src/view/com/modals/InviteCodes.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:158
msgid "Copied to clipboard"
msgstr "Copiat en memòria"
-#: src/view/com/modals/AddAppPasswords.tsx:189
+#: src/view/com/modals/AddAppPasswords.tsx:190
msgid "Copies app password"
msgstr "Copia la contrasenya d'aplicació"
-#: src/view/com/modals/AddAppPasswords.tsx:188
+#: src/view/com/modals/AddAppPasswords.tsx:189
msgid "Copy"
msgstr "Copia"
-#: src/view/screens/ProfileList.tsx:417
+#: src/view/com/modals/ChangeHandle.tsx:480
+msgid "Copy {0}"
+msgstr "Copia {0}"
+
+#: src/view/screens/ProfileList.tsx:388
msgid "Copy link to list"
msgstr "Copia l'enllaç a la llista"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
msgid "Copy link to post"
msgstr "Copia l'enllaç a la publicació"
-#: src/view/com/profile/ProfileHeader.tsx:294
-msgid "Copy link to profile"
-msgstr "Copia l'enllaç al perfil"
+#: src/view/com/profile/ProfileHeader.tsx:295
+#~ msgid "Copy link to profile"
+#~ msgstr "Copia l'enllaç al perfil"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:139
+#: src/view/com/util/forms/PostDropdownBtn.tsx:220
+#: src/view/com/util/forms/PostDropdownBtn.tsx:222
msgid "Copy post text"
msgstr "Copia el text de la publicació"
-#: src/Navigation.tsx:232
+#: src/Navigation.tsx:246
#: src/view/screens/CopyrightPolicy.tsx:29
msgid "Copyright Policy"
msgstr "Política de drets d'autor"
-#: src/view/screens/ProfileFeed.tsx:96
+#: src/view/screens/ProfileFeed.tsx:103
msgid "Could not load feed"
msgstr "No es pot carregar el canal"
-#: src/view/screens/ProfileList.tsx:888
+#: src/view/screens/ProfileList.tsx:907
msgid "Could not load list"
msgstr "No es pot carregar la llista"
#: src/view/com/auth/create/Step2.tsx:91
-msgid "Country"
-msgstr "País"
+#~ msgid "Country"
+#~ msgstr "País"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:62
-#: src/view/com/auth/SplashScreen.tsx:46
-#: src/view/com/auth/SplashScreen.web.tsx:77
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:65
+#: src/view/com/auth/SplashScreen.tsx:75
+#: src/view/com/auth/SplashScreen.web.tsx:104
msgid "Create a new account"
msgstr "Crea un nou compte"
-#: src/view/screens/Settings/index.tsx:384
+#: src/view/screens/Settings/index.tsx:403
msgid "Create a new Bluesky account"
msgstr "Crea un nou compte de Bluesky"
-#: src/view/com/auth/create/CreateAccount.tsx:122
+#: src/screens/Signup/index.tsx:129
msgid "Create Account"
msgstr "Crea un compte"
-#: src/view/com/modals/AddAppPasswords.tsx:226
+#: src/view/com/modals/AddAppPasswords.tsx:227
msgid "Create App Password"
msgstr "Crea una contrasenya d'aplicació"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:54
-#: src/view/com/auth/SplashScreen.tsx:43
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:55
+#: src/view/com/auth/SplashScreen.tsx:66
+#: src/view/com/auth/SplashScreen.web.tsx:95
msgid "Create new account"
msgstr "Crea un nou compte"
-#: src/view/screens/AppPasswords.tsx:249
+#: src/components/ReportDialog/SelectReportOptionView.tsx:93
+msgid "Create report for {0}"
+msgstr "Crea un informe per a {0}"
+
+#: src/view/screens/AppPasswords.tsx:246
msgid "Created {0}"
msgstr "Creat {0}"
#: src/view/screens/ProfileFeed.tsx:616
-msgid "Created by <0/>"
-msgstr "Creat per <0/>"
+#~ msgid "Created by <0/>"
+#~ msgstr "Creat per <0/>"
#: src/view/screens/ProfileFeed.tsx:614
-msgid "Created by you"
-msgstr "Creat per tu"
+#~ msgid "Created by you"
+#~ msgstr "Creat per tu"
-#: src/view/com/composer/Composer.tsx:448
+#: src/view/com/composer/Composer.tsx:469
msgid "Creates a card with a thumbnail. The card links to {url}"
-msgstr "Crea una targeta amb una minuatura. La targeta enllaça a {url}"
+msgstr "Crea una targeta amb una miniatura. La targeta enllaça a {url}"
#: src/screens/Onboarding/index.tsx:29
msgid "Culture"
-msgstr ""
+msgstr "Cultura"
-#: src/view/com/auth/server-input/index.tsx:95
-#: src/view/com/auth/server-input/index.tsx:96
+#: src/view/com/auth/server-input/index.tsx:97
+#: src/view/com/auth/server-input/index.tsx:99
msgid "Custom"
-msgstr ""
+msgstr "Personalitzat"
-#: src/view/com/modals/ChangeHandle.tsx:389
+#: src/view/com/modals/ChangeHandle.tsx:388
msgid "Custom domain"
msgstr "Domini personalitzat"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:107
+#: src/view/screens/Feeds.tsx:692
msgid "Custom feeds built by the community bring you new experiences and help you find the content you love."
-msgstr ""
+msgstr "Els canals personalitzats fets per la comunitat et porten noves experiències i t'ajuden a trobar contingut que t'agradarà."
#: src/view/screens/PreferencesExternalEmbeds.tsx:55
msgid "Customize media from external sites."
-msgstr "Personalitza el contingut dels llocs externs"
+msgstr "Personalitza el contingut dels llocs externs."
#: src/view/screens/Settings.tsx:687
#~ msgid "Danger Zone"
#~ msgstr "Zona de perill"
-#: src/view/screens/Settings/index.tsx:485
-#: src/view/screens/Settings/index.tsx:511
+#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:530
msgid "Dark"
msgstr "Fosc"
@@ -1024,33 +1217,49 @@ msgstr "Fosc"
msgid "Dark mode"
msgstr "Mode fosc"
-#: src/view/screens/Settings/index.tsx:498
+#: src/view/screens/Settings/index.tsx:517
msgid "Dark Theme"
+msgstr "Tema fosc"
+
+#: src/screens/Signup/StepInfo/index.tsx:132
+msgid "Date of birth"
msgstr ""
+#: src/view/screens/Settings/index.tsx:841
+msgid "Debug Moderation"
+msgstr "Moderació de depuració"
+
#: src/view/screens/Debug.tsx:83
msgid "Debug panel"
msgstr "Panell de depuració"
-#: src/view/screens/Settings/index.tsx:772
+#: src/view/com/util/forms/PostDropdownBtn.tsx:319
+#: src/view/screens/AppPasswords.tsx:268
+#: src/view/screens/ProfileList.tsx:613
+msgid "Delete"
+msgstr "Elimina"
+
+#: src/view/screens/Settings/index.tsx:796
msgid "Delete account"
msgstr "Elimina el compte"
-#: src/view/com/modals/DeleteAccount.tsx:87
+#: src/view/com/modals/DeleteAccount.tsx:86
msgid "Delete Account"
msgstr "Elimina el compte"
-#: src/view/screens/AppPasswords.tsx:222
-#: src/view/screens/AppPasswords.tsx:242
+#: src/view/screens/AppPasswords.tsx:239
msgid "Delete app password"
msgstr "Elimina la contrasenya d'aplicació"
-#: src/view/screens/ProfileList.tsx:363
-#: src/view/screens/ProfileList.tsx:444
+#: src/view/screens/AppPasswords.tsx:263
+msgid "Delete app password?"
+msgstr "Vols eliminar la contrasenya d'aplicació?"
+
+#: src/view/screens/ProfileList.tsx:415
msgid "Delete List"
msgstr "Elimina la llista"
-#: src/view/com/modals/DeleteAccount.tsx:223
+#: src/view/com/modals/DeleteAccount.tsx:222
msgid "Delete my account"
msgstr "Elimina el meu compte"
@@ -1058,30 +1267,35 @@ msgstr "Elimina el meu compte"
#~ msgid "Delete my account…"
#~ msgstr "Elimina el meu compte…"
-#: src/view/screens/Settings/index.tsx:784
+#: src/view/screens/Settings/index.tsx:808
msgid "Delete My Account…"
-msgstr ""
+msgstr "Elimina el meu compte…"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:302
+#: src/view/com/util/forms/PostDropdownBtn.tsx:304
msgid "Delete post"
msgstr "Elimina la publicació"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:232
+#: src/view/screens/ProfileList.tsx:608
+msgid "Delete this list?"
+msgstr "Vols eliminar aquesta llista?"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:314
msgid "Delete this post?"
msgstr "Vols eliminar aquesta publicació?"
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:69
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:64
msgid "Deleted"
msgstr "Eliminat"
-#: src/view/com/post-thread/PostThread.tsx:259
+#: src/view/com/post-thread/PostThread.tsx:305
msgid "Deleted post."
msgstr "Publicació eliminada."
-#: src/view/com/modals/CreateOrEditList.tsx:300
-#: src/view/com/modals/CreateOrEditList.tsx:321
-#: src/view/com/modals/EditProfile.tsx:198
-#: src/view/com/modals/EditProfile.tsx:210
+#: src/view/com/modals/CreateOrEditList.tsx:301
+#: src/view/com/modals/CreateOrEditList.tsx:322
+#: src/view/com/modals/EditProfile.tsx:199
+#: src/view/com/modals/EditProfile.tsx:211
msgid "Description"
msgstr "Descripció"
@@ -1093,23 +1307,35 @@ msgstr "Descripció"
#~ msgid "Developer Tools"
#~ msgstr "Eines de desenvolupador"
-#: src/view/com/composer/Composer.tsx:211
+#: src/view/com/composer/Composer.tsx:218
msgid "Did you want to say anything?"
msgstr "Vols dir alguna cosa?"
-#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:523
msgid "Dim"
-msgstr ""
+msgstr "Tènue"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:32
+#: src/lib/moderation/useLabelBehaviorDescription.ts:42
+#: src/lib/moderation/useLabelBehaviorDescription.ts:68
+#: src/screens/Moderation/index.tsx:341
+msgid "Disabled"
+msgstr "Deshabilitat"
-#: src/view/com/composer/Composer.tsx:144
+#: src/view/com/composer/Composer.tsx:511
msgid "Discard"
msgstr "Descarta"
-#: src/view/com/composer/Composer.tsx:138
-msgid "Discard draft"
-msgstr "Descarta l'esborrany"
+#: src/view/com/composer/Composer.tsx:145
+#~ msgid "Discard draft"
+#~ msgstr "Descarta l'esborrany"
-#: src/view/screens/Moderation.tsx:207
+#: src/view/com/composer/Composer.tsx:508
+msgid "Discard draft?"
+msgstr "Vols descartar l'esborrany?"
+
+#: src/screens/Moderation/index.tsx:518
+#: src/screens/Moderation/index.tsx:522
msgid "Discourage apps from showing my account to logged-out users"
msgstr "Evita que les aplicacions mostrin el meu compte als usuaris no connectats"
@@ -1119,27 +1345,65 @@ msgid "Discover new custom feeds"
msgstr "Descobreix nous canals personalitzats"
#: src/view/screens/Feeds.tsx:473
-msgid "Discover new feeds"
+#~ msgid "Discover new feeds"
+#~ msgstr "Descobreix nous canals"
+
+#: src/view/screens/Feeds.tsx:689
+msgid "Discover New Feeds"
msgstr "Descobreix nous canals"
-#: src/view/com/modals/EditProfile.tsx:192
+#: src/view/com/modals/EditProfile.tsx:193
msgid "Display name"
msgstr "Nom mostrat"
-#: src/view/com/modals/EditProfile.tsx:180
+#: src/view/com/modals/EditProfile.tsx:181
msgid "Display Name"
msgstr "Nom mostrat"
-#: src/view/com/modals/ChangeHandle.tsx:487
+#: src/view/com/modals/ChangeHandle.tsx:397
+msgid "DNS Panel"
+msgstr "Panell de DNS"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:39
+msgid "Does not include nudity."
+msgstr "No inclou nuesa."
+
+#: src/screens/Signup/StepHandle.tsx:104
+msgid "Doesn't begin or end with a hyphen"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "Domain Value"
+msgstr "valor del domini"
+
+#: src/view/com/modals/ChangeHandle.tsx:488
msgid "Domain verified!"
msgstr "Domini verificat!"
-#: src/view/com/auth/create/Step1.tsx:166
-msgid "Don't have an invite code?"
-msgstr "No tens un codi d'invitació?"
+#: src/view/com/auth/create/Step1.tsx:170
+#~ msgid "Don't have an invite code?"
+#~ msgstr "No tens un codi d'invitació?"
+
+#: src/components/dialogs/BirthDateSettings.tsx:119
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/components/forms/DateField/index.tsx:74
+#: src/components/forms/DateField/index.tsx:80
+#: src/view/com/auth/server-input/index.tsx:169
+#: src/view/com/auth/server-input/index.tsx:170
+#: src/view/com/modals/AddAppPasswords.tsx:227
+#: src/view/com/modals/AltImage.tsx:140
+#: src/view/com/modals/crop-image/CropImage.web.tsx:153
+#: src/view/com/modals/InviteCodes.tsx:81
+#: src/view/com/modals/InviteCodes.tsx:124
+#: src/view/com/modals/ListAddRemoveUsers.tsx:142
+#: src/view/screens/PreferencesFollowingFeed.tsx:311
+#: src/view/screens/Settings/ExportCarDialog.tsx:94
+#: src/view/screens/Settings/ExportCarDialog.tsx:96
+msgid "Done"
+msgstr "Fet"
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86
-#: src/view/com/modals/EditImage.tsx:333
+#: src/view/com/modals/EditImage.tsx:334
#: src/view/com/modals/ListAddRemoveUsers.tsx:144
#: src/view/com/modals/SelfLabel.tsx:157
#: src/view/com/modals/Threadgate.tsx:129
@@ -1151,72 +1415,68 @@ msgctxt "action"
msgid "Done"
msgstr "Fet"
-#: src/view/com/auth/server-input/index.tsx:165
-#: src/view/com/auth/server-input/index.tsx:166
-#: src/view/com/modals/AddAppPasswords.tsx:226
-#: src/view/com/modals/AltImage.tsx:139
-#: src/view/com/modals/ContentFilteringSettings.tsx:88
-#: src/view/com/modals/ContentFilteringSettings.tsx:96
-#: src/view/com/modals/crop-image/CropImage.web.tsx:152
-#: src/view/com/modals/InviteCodes.tsx:80
-#: src/view/com/modals/InviteCodes.tsx:123
-#: src/view/com/modals/ListAddRemoveUsers.tsx:142
-#: src/view/screens/PreferencesHomeFeed.tsx:311
-#: src/view/screens/Settings/ExportCarDialog.tsx:93
-#: src/view/screens/Settings/ExportCarDialog.tsx:94
-msgid "Done"
-msgstr "Fet"
-
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:42
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:43
msgid "Done{extraText}"
msgstr "Fet{extraText}"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:45
-msgid "Double tap to sign in"
-msgstr "Fes doble toc per iniciar la sessió"
+#: src/view/com/auth/login/ChooseAccountForm.tsx:46
+#~ msgid "Double tap to sign in"
+#~ msgstr "Fes doble toc per a iniciar la sessió"
#: src/view/screens/Settings/index.tsx:755
-msgid "Download Bluesky account data (repository)"
-msgstr ""
+#~ msgid "Download Bluesky account data (repository)"
+#~ msgstr "Descarrega les dades del compte de Bluesky (repositori)"
#: src/view/screens/Settings/ExportCarDialog.tsx:59
#: src/view/screens/Settings/ExportCarDialog.tsx:63
msgid "Download CAR file"
-msgstr ""
+msgstr "Descarrega el fitxer CAR"
-#: src/view/com/composer/text-input/TextInput.web.tsx:247
+#: src/view/com/composer/text-input/TextInput.web.tsx:249
msgid "Drop to add images"
-msgstr ""
+msgstr "Deixa anar a afegir imatges"
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:111
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:120
msgid "Due to Apple policies, adult content can only be enabled on the web after completing sign up."
-msgstr ""
+msgstr "A causa de les polítiques d'Apple, el contingut a adults només es pot habilitar a la web després de registrar-se."
-#: src/view/com/modals/EditProfile.tsx:185
+#: src/view/com/modals/ChangeHandle.tsx:258
+msgid "e.g. alice"
+msgstr "p. ex.jordi"
+
+#: src/view/com/modals/EditProfile.tsx:186
msgid "e.g. Alice Roberts"
-msgstr "p.ex. Jordi Guix"
+msgstr "p. ex.Jordi Guix"
+
+#: src/view/com/modals/ChangeHandle.tsx:380
+msgid "e.g. alice.com"
+msgstr "p. ex.jordi.com"
-#: src/view/com/modals/EditProfile.tsx:203
+#: src/view/com/modals/EditProfile.tsx:204
msgid "e.g. Artist, dog-lover, and avid reader."
-msgstr "p.ex. Artista, amant dels gossos i amant de la lectura."
+msgstr "p. ex.Artista, amant dels gossos i amant de la lectura."
-#: src/view/com/modals/CreateOrEditList.tsx:283
-msgid "e.g. Great Posters"
-msgstr "p.ex. Gent interessant"
+#: src/lib/moderation/useGlobalLabelStrings.ts:43
+msgid "E.g. artistic nudes."
+msgstr "p. ex.nuesa artística"
#: src/view/com/modals/CreateOrEditList.tsx:284
+msgid "e.g. Great Posters"
+msgstr "p. ex.Gent interessant"
+
+#: src/view/com/modals/CreateOrEditList.tsx:285
msgid "e.g. Spammers"
-msgstr "p.ex. Spammers"
+msgstr "p. ex.Spammers"
-#: src/view/com/modals/CreateOrEditList.tsx:312
+#: src/view/com/modals/CreateOrEditList.tsx:313
msgid "e.g. The posters who never miss."
-msgstr "p.ex. Els que mai fallen"
+msgstr "p. ex.Els que mai fallen"
-#: src/view/com/modals/CreateOrEditList.tsx:313
+#: src/view/com/modals/CreateOrEditList.tsx:314
msgid "e.g. Users that repeatedly reply with ads."
-msgstr "p.ex. Usuaris que sempre responen amb anuncis"
+msgstr "p. ex.Usuaris que sempre responen amb anuncis"
-#: src/view/com/modals/InviteCodes.tsx:96
+#: src/view/com/modals/InviteCodes.tsx:97
msgid "Each code works once. You'll receive more invite codes periodically."
msgstr "Cada codi funciona un cop. Rebràs més codis d'invitació periòdicament."
@@ -1225,68 +1485,71 @@ msgctxt "action"
msgid "Edit"
msgstr "Edita"
+#: src/view/com/util/UserAvatar.tsx:299
+#: src/view/com/util/UserBanner.tsx:85
+msgid "Edit avatar"
+msgstr "Edita l'avatar"
+
#: src/view/com/composer/photos/Gallery.tsx:144
-#: src/view/com/modals/EditImage.tsx:207
+#: src/view/com/modals/EditImage.tsx:208
msgid "Edit image"
msgstr "Edita la imatge"
-#: src/view/screens/ProfileList.tsx:432
+#: src/view/screens/ProfileList.tsx:403
msgid "Edit list details"
msgstr "Edita els detalls de la llista"
-#: src/view/com/modals/CreateOrEditList.tsx:250
+#: src/view/com/modals/CreateOrEditList.tsx:251
msgid "Edit Moderation List"
msgstr "Edita la llista de moderació"
-#: src/Navigation.tsx:242
+#: src/Navigation.tsx:256
#: src/view/screens/Feeds.tsx:434
#: src/view/screens/SavedFeeds.tsx:84
msgid "Edit My Feeds"
msgstr "Edita els meus canals"
-#: src/view/com/modals/EditProfile.tsx:152
+#: src/view/com/modals/EditProfile.tsx:153
msgid "Edit my profile"
msgstr "Edita el meu perfil"
-#: src/view/com/profile/ProfileHeader.tsx:417
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:171
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:168
msgid "Edit profile"
msgstr "Edita el perfil"
-#: src/view/com/profile/ProfileHeader.tsx:422
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:174
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:171
msgid "Edit Profile"
msgstr "Edita el perfil"
-#: src/view/screens/Feeds.tsx:356
+#: src/view/com/home/HomeHeaderLayout.web.tsx:62
+#: src/view/screens/Feeds.tsx:355
msgid "Edit Saved Feeds"
msgstr "Edita els meus canals guardats"
-#: src/view/com/modals/CreateOrEditList.tsx:245
+#: src/view/com/modals/CreateOrEditList.tsx:246
msgid "Edit User List"
msgstr "Edita la llista d'usuaris"
-#: src/view/com/modals/EditProfile.tsx:193
+#: src/view/com/modals/EditProfile.tsx:194
msgid "Edit your display name"
msgstr "Edita el teu nom mostrat"
-#: src/view/com/modals/EditProfile.tsx:211
+#: src/view/com/modals/EditProfile.tsx:212
msgid "Edit your profile description"
msgstr "Edita la descripció del teu perfil"
#: src/screens/Onboarding/index.tsx:34
msgid "Education"
-msgstr ""
+msgstr "Ensenyament"
-#: src/view/com/auth/create/Step1.tsx:195
-#: src/view/com/auth/create/Step2.tsx:194
-#: src/view/com/auth/create/Step2.tsx:269
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:156
+#: src/screens/Signup/StepInfo/index.tsx:80
#: src/view/com/modals/ChangeEmail.tsx:141
-#: src/view/com/modals/Waitlist.tsx:88
msgid "Email"
msgstr "Correu"
-#: src/view/com/auth/create/Step1.tsx:186
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:147
+#: src/screens/Login/ForgotPasswordForm.tsx:99
msgid "Email address"
msgstr "Adreça de correu"
@@ -1303,43 +1566,69 @@ msgstr "Correu actualitzat"
msgid "Email verified"
msgstr "Correu verificat"
-#: src/view/screens/Settings/index.tsx:312
+#: src/view/screens/Settings/index.tsx:331
msgid "Email:"
msgstr "Correu:"
-#: src/view/com/modals/EmbedConsent.tsx:113
+#: src/components/dialogs/EmbedConsent.tsx:101
msgid "Enable {0} only"
msgstr "Habilita només {0}"
-#: src/view/com/modals/ContentFilteringSettings.tsx:167
+#: src/screens/Moderation/index.tsx:329
+msgid "Enable adult content"
+msgstr "Habilita el contingut per adults"
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:94
msgid "Enable Adult Content"
-msgstr "Habilita el contingut per a adults"
+msgstr "Habilita el contingut per adults"
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:76
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:77
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:79
msgid "Enable adult content in your feeds"
+msgstr "Habilita veure el contingut per adults als teus canals"
+
+#: src/components/dialogs/EmbedConsent.tsx:82
+#: src/components/dialogs/EmbedConsent.tsx:89
+msgid "Enable external media"
msgstr ""
#: src/view/com/modals/EmbedConsent.tsx:97
-msgid "Enable External Media"
-msgstr "Habilita el contingut extern"
+#~ msgid "Enable External Media"
+#~ msgstr "Habilita el contingut extern"
#: src/view/screens/PreferencesExternalEmbeds.tsx:75
msgid "Enable media players for"
msgstr "Habilita reproductors de contingut per"
-#: src/view/screens/PreferencesHomeFeed.tsx:147
+#: src/view/screens/PreferencesFollowingFeed.tsx:147
msgid "Enable this setting to only see replies between people you follow."
-msgstr "Activa aquesta opció per veure només les respostes entre els comptes que segueixes."
+msgstr "Activa aquesta opció per a veure només les respostes entre els comptes que segueixes."
+
+#: src/components/dialogs/EmbedConsent.tsx:94
+msgid "Enable this source only"
+msgstr ""
-#: src/view/screens/Profile.tsx:455
+#: src/screens/Moderation/index.tsx:339
+msgid "Enabled"
+msgstr "Habilitat"
+
+#: src/screens/Profile/Sections/Feed.tsx:84
msgid "End of feed"
msgstr "Fi del canal"
-#: src/view/com/modals/AddAppPasswords.tsx:166
+#: src/view/com/modals/AddAppPasswords.tsx:167
msgid "Enter a name for this App Password"
msgstr "Posa un nom a aquesta contrasenya d'aplicació"
+#: src/screens/Login/SetNewPasswordForm.tsx:139
+msgid "Enter a password"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:99
+#: src/components/dialogs/MutedWords.tsx:100
+msgid "Enter a word or tag"
+msgstr "Introdueix una lletra o etiqueta"
+
#: src/view/com/modals/VerifyEmail.tsx:105
msgid "Enter Confirmation Code"
msgstr "Entra el codi de confirmació"
@@ -1348,28 +1637,28 @@ msgstr "Entra el codi de confirmació"
#~ msgid "Enter the address of your provider:"
#~ msgstr "Introdueix l'adreça del teu proveïdor:"
-#: src/view/com/modals/ChangePassword.tsx:151
+#: src/view/com/modals/ChangePassword.tsx:153
msgid "Enter the code you received to change your password."
-msgstr ""
+msgstr "Introdueix el codi que has rebut per a canviar la teva contrasenya."
-#: src/view/com/modals/ChangeHandle.tsx:371
+#: src/view/com/modals/ChangeHandle.tsx:370
msgid "Enter the domain you want to use"
msgstr "Introdueix el domini que vols utilitzar"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:107
+#: src/screens/Login/ForgotPasswordForm.tsx:119
msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password."
-msgstr "Introdueix el correu que vas fer servir per crear el teu compte. T'enviarem un \"codi de restabliment\" perquè puguis posar una nova contrasenya."
+msgstr "Introdueix el correu que vas fer servir per a crear el teu compte. T'enviarem un \"codi de restabliment\" perquè puguis posar una nova contrasenya."
-#: src/view/com/auth/create/Step1.tsx:247
-#: src/view/com/modals/BirthDateSettings.tsx:74
+#: src/components/dialogs/BirthDateSettings.tsx:108
msgid "Enter your birth date"
msgstr "Introdueix la teva data de naixement"
#: src/view/com/modals/Waitlist.tsx:78
-msgid "Enter your email"
-msgstr "Introdueix el teu correu"
+#~ msgid "Enter your email"
+#~ msgstr "Introdueix el teu correu"
-#: src/view/com/auth/create/Step1.tsx:191
+#: src/screens/Login/ForgotPasswordForm.tsx:105
+#: src/screens/Signup/StepInfo/index.tsx:91
msgid "Enter your email address"
msgstr "Introdueix el teu correu"
@@ -1382,14 +1671,18 @@ msgid "Enter your new email address below."
msgstr "Introdueix el teu nou correu a continuació."
#: src/view/com/auth/create/Step2.tsx:188
-msgid "Enter your phone number"
-msgstr "Introdueix el teu telèfon"
+#~ msgid "Enter your phone number"
+#~ msgstr "Introdueix el teu telèfon"
-#: src/view/com/auth/login/Login.tsx:99
+#: src/screens/Login/index.tsx:101
msgid "Enter your username and password"
msgstr "Introdueix el teu usuari i contrasenya"
-#: src/view/screens/Search/Search.tsx:109
+#: src/screens/Signup/StepCaptcha/index.tsx:49
+msgid "Error receiving captcha response."
+msgstr "Erro en rebre la resposta al captcha."
+
+#: src/view/screens/Search/Search.tsx:111
msgid "Error:"
msgstr "Error:"
@@ -1397,24 +1690,36 @@ msgstr "Error:"
msgid "Everybody"
msgstr "Tothom"
-#: src/view/com/modals/ChangeHandle.tsx:150
+#: src/lib/moderation/useReportOptions.ts:66
+msgid "Excessive mentions or replies"
+msgstr "Mencions o respostes excessives"
+
+#: src/view/com/modals/DeleteAccount.tsx:230
+msgid "Exits account deletion process"
+msgstr "Surt del procés d'eliminació del compte"
+
+#: src/view/com/modals/ChangeHandle.tsx:151
msgid "Exits handle change process"
msgstr "Surt del procés de canvi d'identificador"
-#: src/view/com/lightbox/Lightbox.web.tsx:120
+#: src/view/com/modals/crop-image/CropImage.web.tsx:136
+msgid "Exits image cropping process"
+msgstr "Surt del procés de retallar l'imatge"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:130
msgid "Exits image view"
msgstr "Surt de la visualització de la imatge"
#: src/view/com/modals/ListAddRemoveUsers.tsx:88
-#: src/view/shell/desktop/Search.tsx:235
+#: src/view/shell/desktop/Search.tsx:236
msgid "Exits inputting search query"
msgstr "Surt de la cerca"
#: src/view/com/modals/Waitlist.tsx:138
-msgid "Exits signing up for waitlist with {email}"
-msgstr "Surt de la llista d'espera amb el correu {email}"
+#~ msgid "Exits signing up for waitlist with {email}"
+#~ msgstr "Surt de la llista d'espera amb el correu {email}"
-#: src/view/com/lightbox/Lightbox.web.tsx:163
+#: src/view/com/lightbox/Lightbox.web.tsx:183
msgid "Expand alt text"
msgstr "Expandeix el text alternatiu"
@@ -1423,44 +1728,53 @@ msgstr "Expandeix el text alternatiu"
msgid "Expand or collapse the full post you are replying to"
msgstr "Expandeix o replega la publicació completa a la qual estàs responent"
-#: src/view/screens/Settings/index.tsx:753
+#: src/lib/moderation/useGlobalLabelStrings.ts:47
+msgid "Explicit or potentially disturbing media."
+msgstr "Contingut explícit o potencialment pertorbador."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:35
+msgid "Explicit sexual images."
+msgstr "Imatges sexuals explícites."
+
+#: src/view/screens/Settings/index.tsx:777
msgid "Export my data"
-msgstr ""
+msgstr "Exporta les meves dades"
#: src/view/screens/Settings/ExportCarDialog.tsx:44
-#: src/view/screens/Settings/index.tsx:764
+#: src/view/screens/Settings/index.tsx:788
msgid "Export My Data"
-msgstr ""
+msgstr "Exporta les meves dades"
-#: src/view/com/modals/EmbedConsent.tsx:64
+#: src/components/dialogs/EmbedConsent.tsx:55
+#: src/components/dialogs/EmbedConsent.tsx:59
msgid "External Media"
msgstr "Contingut extern"
-#: src/view/com/modals/EmbedConsent.tsx:75
+#: src/components/dialogs/EmbedConsent.tsx:71
#: src/view/screens/PreferencesExternalEmbeds.tsx:66
msgid "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."
msgstr "El contingut extern pot permetre que algunes webs recullin informació sobre tu i el teu dispositiu. No s'envia ni es demana cap informació fins que premis el botó \"reproduir\"."
-#: src/Navigation.tsx:258
+#: src/Navigation.tsx:275
#: src/view/screens/PreferencesExternalEmbeds.tsx:52
-#: src/view/screens/Settings/index.tsx:657
+#: src/view/screens/Settings/index.tsx:677
msgid "External Media Preferences"
msgstr "Preferència del contingut extern"
-#: src/view/screens/Settings/index.tsx:648
+#: src/view/screens/Settings/index.tsx:668
msgid "External media settings"
msgstr "Configuració del contingut extern"
-#: src/view/com/modals/AddAppPasswords.tsx:115
-#: src/view/com/modals/AddAppPasswords.tsx:119
+#: src/view/com/modals/AddAppPasswords.tsx:116
+#: src/view/com/modals/AddAppPasswords.tsx:120
msgid "Failed to create app password."
-msgstr "No s'ha pogut crear la contrasenya d'aplicació"
+msgstr "No s'ha pogut crear la contrasenya d'aplicació."
-#: src/view/com/modals/CreateOrEditList.tsx:206
+#: src/view/com/modals/CreateOrEditList.tsx:207
msgid "Failed to create the list. Check your internet connection and try again."
msgstr "No s'ha pogut crear la llista. Comprova la teva connexió a internet i torna-ho a provar."
-#: src/view/com/util/forms/PostDropdownBtn.tsx:88
+#: src/view/com/util/forms/PostDropdownBtn.tsx:125
msgid "Failed to delete post, please try again"
msgstr "No s'ha pogut esborrar la publicació, torna-ho a provar"
@@ -1469,74 +1783,91 @@ msgstr "No s'ha pogut esborrar la publicació, torna-ho a provar"
msgid "Failed to load recommended feeds"
msgstr "Error en carregar els canals recomanats"
-#: src/Navigation.tsx:192
+#: src/view/com/lightbox/Lightbox.tsx:83
+msgid "Failed to save image: {0}"
+msgstr "Error en desar la imatge: {0}"
+
+#: src/Navigation.tsx:196
msgid "Feed"
msgstr "Canal"
-#: src/view/com/feeds/FeedSourceCard.tsx:229
+#: src/view/com/feeds/FeedSourceCard.tsx:218
msgid "Feed by {0}"
msgstr "Canal per {0}"
-#: src/view/screens/Feeds.tsx:631
+#: src/view/screens/Feeds.tsx:605
msgid "Feed offline"
msgstr "Canal fora de línia"
#: src/view/com/feeds/FeedPage.tsx:143
-msgid "Feed Preferences"
-msgstr "Preferències del canal"
+#~ msgid "Feed Preferences"
+#~ msgstr "Preferències del canal"
-#: src/view/shell/desktop/RightNav.tsx:69
-#: src/view/shell/Drawer.tsx:311
+#: src/view/shell/desktop/RightNav.tsx:61
+#: src/view/shell/Drawer.tsx:314
msgid "Feedback"
msgstr "Comentaris"
-#: src/Navigation.tsx:442
-#: src/view/screens/Feeds.tsx:548
-#: src/view/screens/Profile.tsx:184
-#: src/view/shell/bottom-bar/BottomBar.tsx:181
-#: src/view/shell/desktop/LeftNav.tsx:342
-#: src/view/shell/Drawer.tsx:476
-#: src/view/shell/Drawer.tsx:477
+#: src/Navigation.tsx:464
+#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:524
+#: src/view/screens/Profile.tsx:194
+#: src/view/shell/bottom-bar/BottomBar.tsx:191
+#: src/view/shell/desktop/LeftNav.tsx:346
+#: src/view/shell/Drawer.tsx:479
+#: src/view/shell/Drawer.tsx:480
msgid "Feeds"
msgstr "Canals"
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:57
msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting."
-msgstr "Els canals són creats pels usuaris per curar contingut. Tria els canals que trobis interessants."
+msgstr "Els canals són creats pels usuaris per a curar contingut. Tria els canals que trobis interessants."
#: src/view/screens/SavedFeeds.tsx:156
msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information."
msgstr "Els canals són algoritmes personalitzats creats per usuaris que coneixen una mica de codi. <0/> per a més informació."
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:70
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:80
msgid "Feeds can be topical as well!"
-msgstr ""
+msgstr "Els canals també poden ser d'actualitat!"
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "File Contents"
+msgstr "Continguts del fitxer"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:66
+msgid "Filter from feeds"
+msgstr "Filtra-ho dels canals"
-#: src/screens/Onboarding/StepFinished.tsx:151
+#: src/screens/Onboarding/StepFinished.tsx:155
msgid "Finalizing"
-msgstr ""
+msgstr "Finalitzant"
#: src/view/com/posts/CustomFeedEmptyState.tsx:47
#: src/view/com/posts/FollowingEmptyState.tsx:57
#: src/view/com/posts/FollowingEndOfFeed.tsx:58
msgid "Find accounts to follow"
-msgstr "Troba comptes per seguir"
+msgstr "Troba comptes per a seguir"
-#: src/view/screens/Search/Search.tsx:439
+#: src/view/screens/Search/Search.tsx:442
msgid "Find users on Bluesky"
msgstr "Troba usuaris a Bluesky"
-#: src/view/screens/Search/Search.tsx:437
+#: src/view/screens/Search/Search.tsx:440
msgid "Find users with the search tool on the right"
msgstr "Troba usuaris amb l'eina de cerca de la dreta"
-#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:155
msgid "Finding similar accounts..."
msgstr "Troba comptes similars…"
+#: src/view/screens/PreferencesFollowingFeed.tsx:111
+msgid "Fine-tune the content you see on your Following feed."
+msgstr "Ajusta el contingut que veus al teu canal Seguint."
+
#: src/view/screens/PreferencesHomeFeed.tsx:111
-msgid "Fine-tune the content you see on your home screen."
-msgstr "Ajusta el contingut que es veu a la teva pantalla d'inici."
+#~ msgid "Fine-tune the content you see on your home screen."
+#~ msgstr "Ajusta el contingut que es veu a la teva pantalla d'inici."
#: src/view/screens/PreferencesThreads.tsx:60
msgid "Fine-tune the discussion threads."
@@ -1544,51 +1875,62 @@ msgstr "Ajusta els fils de debat."
#: src/screens/Onboarding/index.tsx:38
msgid "Fitness"
-msgstr ""
+msgstr "Exercici"
-#: src/screens/Onboarding/StepFinished.tsx:131
+#: src/screens/Onboarding/StepFinished.tsx:135
msgid "Flexible"
-msgstr ""
+msgstr "Flexible"
-#: src/view/com/modals/EditImage.tsx:115
+#: src/view/com/modals/EditImage.tsx:116
msgid "Flip horizontal"
msgstr "Gira horitzontalment"
-#: src/view/com/modals/EditImage.tsx:120
-#: src/view/com/modals/EditImage.tsx:287
+#: src/view/com/modals/EditImage.tsx:121
+#: src/view/com/modals/EditImage.tsx:288
msgid "Flip vertically"
msgstr "Gira verticalment"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:181
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:512
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:189
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:236
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:146
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
msgid "Follow"
msgstr "Segueix"
-#: src/view/com/profile/FollowButton.tsx:64
+#: src/view/com/profile/FollowButton.tsx:69
msgctxt "action"
msgid "Follow"
msgstr "Segueix"
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:58
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:122
-#: src/view/com/profile/ProfileHeader.tsx:503
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:221
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:128
msgid "Follow {0}"
msgstr "Segueix {0}"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:179
+#: src/view/com/profile/ProfileMenu.tsx:242
+#: src/view/com/profile/ProfileMenu.tsx:253
+msgid "Follow Account"
+msgstr "Segueix el compte"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:187
msgid "Follow All"
+msgstr "Segueix-los a tots"
+
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:144
+msgid "Follow Back"
msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:174
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:182
msgid "Follow selected accounts and continue to the next step"
-msgstr ""
+msgstr "Segueix els comptes seleccionats i continua"
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:64
msgid "Follow some users to get started. We can recommend you more users based on who you find interesting."
-msgstr "Segueix a alguns usuaris per començar. Te'n podem recomanar més basant-nos en els que trobes interessants."
+msgstr "Segueix a alguns usuaris per a començar. Te'n podem recomanar més basant-nos en els que trobes interessants."
-#: src/view/com/profile/ProfileCard.tsx:194
+#: src/view/com/profile/ProfileCard.tsx:216
msgid "Followed by {0}"
msgstr "Seguit per {0}"
@@ -1596,14 +1938,15 @@ msgstr "Seguit per {0}"
msgid "Followed users"
msgstr "Usuaris seguits"
-#: src/view/screens/PreferencesHomeFeed.tsx:154
+#: src/view/screens/PreferencesFollowingFeed.tsx:154
msgid "Followed users only"
msgstr "Només els usuaris seguits"
-#: src/view/com/notifications/FeedItem.tsx:166
+#: src/view/com/notifications/FeedItem.tsx:170
msgid "followed you"
msgstr "et segueix"
+#: src/view/com/profile/ProfileFollowers.tsx:104
#: src/view/screens/ProfileFollowers.tsx:25
msgid "Followers"
msgstr "Seguidors"
@@ -1612,17 +1955,30 @@ msgstr "Seguidors"
#~ msgid "following"
#~ msgstr "seguint"
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:494
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:234
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:149
+#: src/view/com/profile/ProfileFollows.tsx:104
#: src/view/screens/ProfileFollows.tsx:25
msgid "Following"
msgstr "Seguint"
-#: src/view/com/profile/ProfileHeader.tsx:148
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:93
msgid "Following {0}"
msgstr "Seguint {0}"
-#: src/view/com/profile/ProfileHeader.tsx:545
+#: src/view/screens/Settings/index.tsx:553
+msgid "Following feed preferences"
+msgstr "Preferències del canal Seguint"
+
+#: src/Navigation.tsx:262
+#: src/view/com/home/HomeHeaderLayout.web.tsx:50
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:84
+#: src/view/screens/PreferencesFollowingFeed.tsx:104
+#: src/view/screens/Settings/index.tsx:562
+msgid "Following Feed Preferences"
+msgstr "Preferències del canal Seguint"
+
+#: src/screens/Profile/Header/Handle.tsx:24
msgid "Follows you"
msgstr "Et segueix"
@@ -1632,30 +1988,47 @@ msgstr "Et segueix"
#: src/screens/Onboarding/index.tsx:43
msgid "Food"
-msgstr ""
+msgstr "Menjar"
-#: src/view/com/modals/DeleteAccount.tsx:111
+#: src/view/com/modals/DeleteAccount.tsx:110
msgid "For security reasons, we'll need to send a confirmation code to your email address."
msgstr "Per motius de seguretat necessitem enviar-te un codi de confirmació al teu correu."
-#: src/view/com/modals/AddAppPasswords.tsx:209
+#: src/view/com/modals/AddAppPasswords.tsx:210
msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one."
msgstr "Per motius de seguretat no podràs tornar-la a veure. Si perds aquesta contrasenya necessitaràs generar-ne una de nova."
-#: src/view/com/auth/login/LoginForm.tsx:241
-msgid "Forgot"
-msgstr "L'he oblidat"
+#: src/view/com/auth/login/LoginForm.tsx:244
+#~ msgid "Forgot"
+#~ msgstr "L'he oblidat"
-#: src/view/com/auth/login/LoginForm.tsx:238
-msgid "Forgot password"
-msgstr "He oblidat la contrasenya"
+#: src/view/com/auth/login/LoginForm.tsx:241
+#~ msgid "Forgot password"
+#~ msgstr "He oblidat la contrasenya"
-#: src/view/com/auth/login/Login.tsx:127
-#: src/view/com/auth/login/Login.tsx:143
+#: src/screens/Login/index.tsx:129
+#: src/screens/Login/index.tsx:144
msgid "Forgot Password"
msgstr "He oblidat la contrasenya"
-#: src/view/com/posts/FeedItem.tsx:189
+#: src/screens/Login/LoginForm.tsx:201
+msgid "Forgot password?"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:212
+msgid "Forgot?"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:52
+msgid "Frequently Posts Unwanted Content"
+msgstr "Publica contingut no dessitjat freqüentment"
+
+#: src/screens/Hashtag.tsx:109
+#: src/screens/Hashtag.tsx:149
+msgid "From @{sanitizedAuthor}"
+msgstr "De @{sanitizedAuthor}"
+
+#: src/view/com/posts/FeedItem.tsx:179
msgctxt "from-feed"
msgid "From <0/>"
msgstr "De <0/>"
@@ -1669,100 +2042,144 @@ msgstr "Galeria"
msgid "Get Started"
msgstr "Comença"
-#: src/view/com/auth/LoggedOut.tsx:81
+#: src/lib/moderation/useReportOptions.ts:37
+msgid "Glaring violations of law or terms of service"
+msgstr "Infraccions flagrants de la llei o les condicions del servei"
+
+#: src/components/moderation/ScreenHider.tsx:151
+#: src/components/moderation/ScreenHider.tsx:160
#: src/view/com/auth/LoggedOut.tsx:82
-#: src/view/com/util/moderation/ScreenHider.tsx:123
-#: src/view/shell/desktop/LeftNav.tsx:104
+#: src/view/com/auth/LoggedOut.tsx:83
+#: src/view/screens/NotFound.tsx:55
+#: src/view/screens/ProfileFeed.tsx:112
+#: src/view/screens/ProfileList.tsx:916
+#: src/view/shell/desktop/LeftNav.tsx:108
msgid "Go back"
msgstr "Ves enrere"
-#: src/view/screens/ProfileFeed.tsx:105
-#: src/view/screens/ProfileFeed.tsx:110
-#: src/view/screens/ProfileList.tsx:897
-#: src/view/screens/ProfileList.tsx:902
+#: src/components/Error.tsx:91
+#: src/screens/Profile/ErrorState.tsx:62
+#: src/screens/Profile/ErrorState.tsx:66
+#: src/view/screens/NotFound.tsx:54
+#: src/view/screens/ProfileFeed.tsx:117
+#: src/view/screens/ProfileList.tsx:921
msgid "Go Back"
msgstr "Ves enrere"
-#: src/screens/Onboarding/Layout.tsx:104
-#: src/screens/Onboarding/Layout.tsx:193
+#: src/components/ReportDialog/SelectReportOptionView.tsx:73
+#: src/components/ReportDialog/SubmitView.tsx:104
+#: src/screens/Onboarding/Layout.tsx:102
+#: src/screens/Onboarding/Layout.tsx:191
+#: src/screens/Signup/index.tsx:173
msgid "Go back to previous step"
-msgstr ""
+msgstr "Ves al pas anterior"
-#: src/view/screens/Search/Search.tsx:724
-#: src/view/shell/desktop/Search.tsx:262
+#: src/view/screens/NotFound.tsx:55
+msgid "Go home"
+msgstr "Ves a l'inici"
+
+#: src/view/screens/NotFound.tsx:54
+msgid "Go Home"
+msgstr "Ves a l'inici"
+
+#: src/view/screens/Search/Search.tsx:749
+#: src/view/shell/desktop/Search.tsx:263
msgid "Go to @{queryMaybeHandle}"
-msgstr "Vés a @{queryMaybeHandle}"
+msgstr "Ves a @{queryMaybeHandle}"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:189
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:218
-#: src/view/com/auth/login/LoginForm.tsx:288
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:195
-#: src/view/com/modals/ChangePassword.tsx:165
+#: src/screens/Login/ForgotPasswordForm.tsx:172
+#: src/view/com/modals/ChangePassword.tsx:167
msgid "Go to next"
msgstr "Ves al següent"
-#: src/view/com/modals/ChangeHandle.tsx:265
+#: src/lib/moderation/useGlobalLabelStrings.ts:46
+msgid "Graphic Media"
+msgstr "Mitjans gràfics"
+
+#: src/view/com/modals/ChangeHandle.tsx:266
msgid "Handle"
msgstr "Identificador"
-#: src/view/com/auth/create/CreateAccount.tsx:197
+#: src/lib/moderation/useReportOptions.ts:32
+msgid "Harassment, trolling, or intolerance"
+msgstr "Assetjament, troleig o intolerància"
+
+#: src/Navigation.tsx:282
+msgid "Hashtag"
+msgstr "Etiqueta"
+
+#: src/components/RichText.tsx:188
+#~ msgid "Hashtag: {tag}"
+#~ msgstr "Etiqueta: {tag}"
+
+#: src/components/RichText.tsx:191
+msgid "Hashtag: #{tag}"
+msgstr "Etiqueta: #{tag}"
+
+#: src/screens/Signup/index.tsx:217
msgid "Having trouble?"
msgstr "Tens problemes?"
-#: src/view/shell/desktop/RightNav.tsx:98
-#: src/view/shell/Drawer.tsx:321
+#: src/view/shell/desktop/RightNav.tsx:90
+#: src/view/shell/Drawer.tsx:324
msgid "Help"
msgstr "Ajuda"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:132
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:140
msgid "Here are some accounts for you to follow"
-msgstr ""
+msgstr "Aquí tens uns quants comptes que pots seguir"
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:79
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:89
msgid "Here are some popular topical feeds. You can choose to follow as many as you like."
-msgstr ""
+msgstr "Aquí tens alguns canals d'actualitat populars. Pots seguir-ne tants com vulguis."
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:74
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:84
msgid "Here are some topical feeds based on your interests: {interestsText}. You can choose to follow as many as you like."
-msgstr ""
+msgstr "Aquí tens uns quants canals d'actualitat basats en els teus interessos: {interestsText}. Pots seguir-ne tants com vulguis."
-#: src/view/com/modals/AddAppPasswords.tsx:153
+#: src/view/com/modals/AddAppPasswords.tsx:154
msgid "Here is your app password."
msgstr "Aquí tens la teva contrasenya d'aplicació."
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:41
-#: src/view/com/modals/ContentFilteringSettings.tsx:251
-#: src/view/com/util/moderation/ContentHider.tsx:105
-#: src/view/com/util/moderation/PostHider.tsx:108
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:134
+#: src/components/moderation/PostHider.tsx:107
+#: src/lib/moderation/useLabelBehaviorDescription.ts:15
+#: src/lib/moderation/useLabelBehaviorDescription.ts:20
+#: src/lib/moderation/useLabelBehaviorDescription.ts:25
+#: src/lib/moderation/useLabelBehaviorDescription.ts:30
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:52
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:76
+#: src/view/com/util/forms/PostDropdownBtn.tsx:328
msgid "Hide"
msgstr "Amaga"
-#: src/view/com/modals/ContentFilteringSettings.tsx:224
-#: src/view/com/notifications/FeedItem.tsx:325
+#: src/view/com/notifications/FeedItem.tsx:329
msgctxt "action"
msgid "Hide"
msgstr "Amaga"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:187
+#: src/view/com/util/forms/PostDropdownBtn.tsx:276
+#: src/view/com/util/forms/PostDropdownBtn.tsx:278
msgid "Hide post"
msgstr "Amaga l'entrada"
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:67
+#: src/components/moderation/PostHider.tsx:64
msgid "Hide the content"
msgstr "Amaga el contingut"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:191
+#: src/view/com/util/forms/PostDropdownBtn.tsx:325
msgid "Hide this post?"
msgstr "Vols amagar aquesta entrada?"
-#: src/view/com/notifications/FeedItem.tsx:315
+#: src/view/com/notifications/FeedItem.tsx:319
msgid "Hide user list"
msgstr "Amaga la llista d'usuaris"
-#: src/view/com/profile/ProfileHeader.tsx:486
-msgid "Hides posts from {0} in your feed"
-msgstr "Amaga les publicacions de {0} al teu canal"
+#: src/view/com/profile/ProfileHeader.tsx:487
+#~ msgid "Hides posts from {0} in your feed"
+#~ msgstr "Amaga les publicacions de {0} al teu canal"
#: src/view/com/posts/FeedErrorMessage.tsx:111
msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue."
@@ -1782,13 +2199,21 @@ msgstr "El servidor del canal ha donat una resposta incorrecta. Avisa al propiet
#: src/view/com/posts/FeedErrorMessage.tsx:96
msgid "Hmm, we're having trouble finding this feed. It may have been deleted."
-msgstr "Tenim problemes per trobar aquest canal. Potser ha estat eliminat."
+msgstr "Tenim problemes per a trobar aquest canal. Potser ha estat eliminat."
+
+#: src/screens/Moderation/index.tsx:59
+msgid "Hmmmm, it seems we're having trouble loading this data. See below for more details. If this issue persists, please contact us."
+msgstr "Tenim problemes per a carregar aquestes dades. Mira a continuació per a veure més detalls. Contacta'ns si aquest problema continua."
-#: src/Navigation.tsx:432
-#: src/view/shell/bottom-bar/BottomBar.tsx:137
-#: src/view/shell/desktop/LeftNav.tsx:306
-#: src/view/shell/Drawer.tsx:398
-#: src/view/shell/Drawer.tsx:399
+#: src/screens/Profile/ErrorState.tsx:31
+msgid "Hmmmm, we couldn't load that moderation service."
+msgstr "No podem carregar el servei de moderació."
+
+#: src/Navigation.tsx:454
+#: src/view/shell/bottom-bar/BottomBar.tsx:147
+#: src/view/shell/desktop/LeftNav.tsx:310
+#: src/view/shell/Drawer.tsx:401
+#: src/view/shell/Drawer.tsx:402
msgid "Home"
msgstr "Inici"
@@ -1796,11 +2221,17 @@ msgstr "Inici"
#: src/view/com/pager/FeedsTabBarMobile.tsx:123
#: src/view/screens/PreferencesHomeFeed.tsx:104
#: src/view/screens/Settings/index.tsx:543
-msgid "Home Feed Preferences"
-msgstr "Preferències dels canals a l'inici"
+#~ msgid "Home Feed Preferences"
+#~ msgstr "Preferències dels canals a l'inici"
+
+#: src/view/com/modals/ChangeHandle.tsx:420
+msgid "Host:"
+msgstr "Allotjament:"
-#: src/view/com/auth/create/Step1.tsx:78
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:120
+#: src/screens/Login/ForgotPasswordForm.tsx:89
+#: src/screens/Login/LoginForm.tsx:134
+#: src/screens/Signup/StepInfo/index.tsx:40
+#: src/view/com/modals/ChangeHandle.tsx:281
msgid "Hosting provider"
msgstr "Proveïdor d'allotjament"
@@ -1821,11 +2252,11 @@ msgstr "Tinc un codi"
msgid "I have a confirmation code"
msgstr "Tinc un codi de confirmació"
-#: src/view/com/modals/ChangeHandle.tsx:283
+#: src/view/com/modals/ChangeHandle.tsx:284
msgid "I have my own domain"
msgstr "Tinc el meu propi domini"
-#: src/view/com/lightbox/Lightbox.web.tsx:165
+#: src/view/com/lightbox/Lightbox.web.tsx:185
msgid "If alt text is long, toggles alt text expanded state"
msgstr "Si el text alternatiu és llarg, canvia l'estat expandit del text alternatiu"
@@ -1833,84 +2264,108 @@ msgstr "Si el text alternatiu és llarg, canvia l'estat expandit del text altern
msgid "If none are selected, suitable for all ages."
msgstr "Si no en selecciones cap, és apropiat per a totes les edats."
-#: src/view/com/modals/ChangePassword.tsx:146
+#: src/screens/Signup/StepInfo/Policies.tsx:83
+msgid "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."
+msgstr "Si encara no ets un adult segons les lleis del teu país, el teu tutor legal haurà de llegir aquests Termes en el teu lloc."
+
+#: src/view/screens/ProfileList.tsx:610
+msgid "If you delete this list, you won't be able to recover it."
+msgstr "Si esborres aquesta llista no la podràs recuperar."
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:316
+msgid "If you remove this post, you won't be able to recover it."
+msgstr "Si esborres aquesta publicació no la podràs recuperar."
+
+#: src/view/com/modals/ChangePassword.tsx:148
msgid "If you want to change your password, we will send you a code to verify that this is your account."
-msgstr ""
+msgstr "Si vols canviar la contrasenya t'enviarem un codi per a verificar que aquest compte és teu."
+
+#: src/lib/moderation/useReportOptions.ts:36
+msgid "Illegal and Urgent"
+msgstr "Il·legal i urgent"
#: src/view/com/util/images/Gallery.tsx:38
msgid "Image"
msgstr "Imatge"
-#: src/view/com/modals/AltImage.tsx:120
+#: src/view/com/modals/AltImage.tsx:121
msgid "Image alt text"
msgstr "Text alternatiu de la imatge"
#: src/view/com/util/UserAvatar.tsx:311
#: src/view/com/util/UserBanner.tsx:118
-msgid "Image options"
-msgstr "Opcions de la imatge"
+#~ msgid "Image options"
+#~ msgstr "Opcions de la imatge"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:138
+#: src/lib/moderation/useReportOptions.ts:47
+msgid "Impersonation or false claims about identity or affiliation"
+msgstr "Suplantació d'identitat o afirmacions falses sobre identitat o afiliació"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:127
msgid "Input code sent to your email for password reset"
-msgstr "Introdueix el codi que s'ha enviat al teu correu per restablir la contrasenya"
+msgstr "Introdueix el codi que s'ha enviat al teu correu per a restablir la contrasenya"
-#: src/view/com/modals/DeleteAccount.tsx:184
+#: src/view/com/modals/DeleteAccount.tsx:183
msgid "Input confirmation code for account deletion"
-msgstr "Introdueix el codi de confirmació per eliminar el compte"
+msgstr "Introdueix el codi de confirmació per a eliminar el compte"
-#: src/view/com/auth/create/Step1.tsx:196
-msgid "Input email for Bluesky account"
-msgstr "Introdueix el correu del compte de Bluesky"
+#: src/view/com/auth/create/Step1.tsx:177
+#~ msgid "Input email for Bluesky account"
+#~ msgstr "Introdueix el correu del compte de Bluesky"
-#: src/view/com/auth/create/Step1.tsx:154
-msgid "Input invite code to proceed"
-msgstr "Introdueix el codi d'invitació per continuar"
+#: src/view/com/auth/create/Step1.tsx:151
+#~ msgid "Input invite code to proceed"
+#~ msgstr "Introdueix el codi d'invitació per a continuar"
-#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/AddAppPasswords.tsx:181
msgid "Input name for app password"
msgstr "Introdueix un nom per la contrasenya d'aplicació"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:162
+#: src/screens/Login/SetNewPasswordForm.tsx:151
msgid "Input new password"
msgstr "Introdueix una nova contrasenya"
-#: src/view/com/modals/DeleteAccount.tsx:203
+#: src/view/com/modals/DeleteAccount.tsx:202
msgid "Input password for account deletion"
-msgstr "Introdueix la contrasenya per elimiar el compte"
+msgstr "Introdueix la contrasenya per a eliminar el compte"
#: src/view/com/auth/create/Step2.tsx:196
-msgid "Input phone number for SMS verification"
-msgstr "Introdueix el telèfon per la verificació per SMS"
+#~ msgid "Input phone number for SMS verification"
+#~ msgstr "Introdueix el telèfon per la verificació per SMS"
-#: src/view/com/auth/login/LoginForm.tsx:230
+#: src/screens/Login/LoginForm.tsx:195
msgid "Input the password tied to {identifier}"
msgstr "Introdueix la contrasenya lligada a {identifier}"
-#: src/view/com/auth/login/LoginForm.tsx:197
+#: src/screens/Login/LoginForm.tsx:168
msgid "Input the username or email address you used at signup"
-msgstr "Introdueix el nom d'usuari o correu que vas utilitzar per registrar-te"
+msgstr "Introdueix el nom d'usuari o correu que vas utilitzar per a registrar-te"
#: src/view/com/auth/create/Step2.tsx:271
-msgid "Input the verification code we have texted to you"
-msgstr "Introdueix el codi de verificació que t'hem enviat"
+#~ msgid "Input the verification code we have texted to you"
+#~ msgstr "Introdueix el codi de verificació que t'hem enviat"
#: src/view/com/modals/Waitlist.tsx:90
-msgid "Input your email to get on the Bluesky waitlist"
-msgstr "Introdueix el teu correu per afegir-te a la llista d'espera de Bluesky"
+#~ msgid "Input your email to get on the Bluesky waitlist"
+#~ msgstr "Introdueix el teu correu per a afegir-te a la llista d'espera de Bluesky"
-#: src/view/com/auth/login/LoginForm.tsx:229
+#: src/screens/Login/LoginForm.tsx:194
msgid "Input your password"
msgstr "Introdueix la teva contrasenya"
-#: src/view/com/auth/create/Step3.tsx:42
+#: src/view/com/modals/ChangeHandle.tsx:389
+msgid "Input your preferred hosting provider"
+msgstr "Introdeix el teu proveïdor d'allotjament preferit"
+
+#: src/screens/Signup/StepHandle.tsx:62
msgid "Input your user handle"
msgstr "Introdueix el teu identificador d'usuari"
-#: src/view/com/post-thread/PostThreadItem.tsx:225
+#: src/view/com/post-thread/PostThreadItem.tsx:221
msgid "Invalid or unsupported post record"
msgstr "Registre de publicació no vàlid o no admès"
-#: src/view/com/auth/login/LoginForm.tsx:113
+#: src/screens/Login/LoginForm.tsx:114
msgid "Invalid username or password"
msgstr "Nom d'usuari o contrasenya incorrectes"
@@ -1918,20 +2373,19 @@ msgstr "Nom d'usuari o contrasenya incorrectes"
#~ msgid "Invite"
#~ msgstr "Convida"
-#: src/view/com/modals/InviteCodes.tsx:93
+#: src/view/com/modals/InviteCodes.tsx:94
msgid "Invite a Friend"
msgstr "Convida un amic"
-#: src/view/com/auth/create/Step1.tsx:144
-#: src/view/com/auth/create/Step1.tsx:153
+#: src/screens/Signup/StepInfo/index.tsx:58
msgid "Invite code"
msgstr "Codi d'invitació"
-#: src/view/com/auth/create/state.ts:199
+#: src/screens/Signup/state.ts:278
msgid "Invite code not accepted. Check that you input it correctly and try again."
msgstr "Codi d'invitació rebutjat. Comprova que l'has entrat correctament i torna-ho a provar."
-#: src/view/com/modals/InviteCodes.tsx:170
+#: src/view/com/modals/InviteCodes.tsx:171
msgid "Invite codes: {0} available"
msgstr "Codis d'invitació: {0} disponible"
@@ -1939,151 +2393,197 @@ msgstr "Codis d'invitació: {0} disponible"
#~ msgid "Invite codes: {invitesAvailable} available"
#~ msgstr "Codis d'invitació: {invitesAvailable} disponibles"
-#: src/view/com/modals/InviteCodes.tsx:169
+#: src/view/com/modals/InviteCodes.tsx:170
msgid "Invite codes: 1 available"
msgstr "Codis d'invitació: 1 disponible"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:64
+#: src/screens/Onboarding/StepFollowingFeed.tsx:65
msgid "It shows posts from the people you follow as they happen."
-msgstr ""
+msgstr "Mostra les publicacions de les persones que segueixes cronològicament."
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:99
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:104
+#: src/view/com/auth/SplashScreen.web.tsx:172
msgid "Jobs"
msgstr "Feines"
#: src/view/com/modals/Waitlist.tsx:67
-msgid "Join the waitlist"
-msgstr "Uneix-te a la llista d'espera"
+#~ msgid "Join the waitlist"
+#~ msgstr "Uneix-te a la llista d'espera"
-#: src/view/com/auth/create/Step1.tsx:170
#: src/view/com/auth/create/Step1.tsx:174
-msgid "Join the waitlist."
-msgstr "Uneix-te a la llista d'espera."
+#: src/view/com/auth/create/Step1.tsx:178
+#~ msgid "Join the waitlist."
+#~ msgstr "Uneix-te a la llista d'espera."
#: src/view/com/modals/Waitlist.tsx:128
-msgid "Join Waitlist"
-msgstr "Uneix-te a la llista d'espera"
+#~ msgid "Join Waitlist"
+#~ msgstr "Uneix-te a la llista d'espera"
#: src/screens/Onboarding/index.tsx:24
msgid "Journalism"
-msgstr ""
+msgstr "Periodisme"
+
+#: src/components/moderation/LabelsOnMe.tsx:59
+msgid "label has been placed on this {labelTarget}"
+msgstr "S'ha posat l'etiqueta a aquest {labelTarget}"
+
+#: src/components/moderation/ContentHider.tsx:144
+msgid "Labeled by {0}."
+msgstr "Etiquetat per {0}."
+
+#: src/components/moderation/ContentHider.tsx:142
+msgid "Labeled by the author."
+msgstr "Etiquetat per l'autor."
+
+#: src/view/screens/Profile.tsx:188
+msgid "Labels"
+msgstr "Etiquetes"
+
+#: src/screens/Profile/Sections/Labels.tsx:142
+msgid "Labels are annotations on users and content. They can be used to hide, warn, and categorize the network."
+msgstr "Les etiquetes son anotacions sobre els usuaris i el contingut. Poden ser utilitzades per a ocultar, advertir i categoritxar la xarxa."
+
+#: src/components/moderation/LabelsOnMe.tsx:61
+msgid "labels have been placed on this {labelTarget}"
+msgstr "S'han posat etiquetes a aquest {labelTarget}"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:62
+msgid "Labels on your account"
+msgstr "Etiquetes al teu compte"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:64
+msgid "Labels on your content"
+msgstr "Etiquetes al teu contingut"
#: src/view/com/composer/select-language/SelectLangBtn.tsx:104
msgid "Language selection"
msgstr "Tria l'idioma"
-#: src/view/screens/Settings/index.tsx:594
+#: src/view/screens/Settings/index.tsx:614
msgid "Language settings"
msgstr "Configuració d'idioma"
-#: src/Navigation.tsx:140
+#: src/Navigation.tsx:144
#: src/view/screens/LanguageSettings.tsx:89
msgid "Language Settings"
msgstr "Configuració d'idioma"
-#: src/view/screens/Settings/index.tsx:603
+#: src/view/screens/Settings/index.tsx:623
msgid "Languages"
msgstr "Idiomes"
#: src/view/com/auth/create/StepHeader.tsx:20
-msgid "Last step!"
-msgstr "Últim pas"
+#~ msgid "Last step!"
+#~ msgstr "Últim pas"
#: src/view/com/util/moderation/ContentHider.tsx:103
-msgid "Learn more"
-msgstr "Més informació"
+#~ msgid "Learn more"
+#~ msgstr "Més informació"
-#: src/view/com/util/moderation/PostAlerts.tsx:47
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:65
-#: src/view/com/util/moderation/ScreenHider.tsx:104
+#: src/components/moderation/ScreenHider.tsx:136
msgid "Learn More"
msgstr "Més informació"
-#: src/view/com/util/moderation/ContentHider.tsx:85
-#: src/view/com/util/moderation/PostAlerts.tsx:40
-#: src/view/com/util/moderation/PostHider.tsx:78
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:49
-#: src/view/com/util/moderation/ScreenHider.tsx:101
+#: src/components/moderation/ContentHider.tsx:65
+#: src/components/moderation/ContentHider.tsx:128
+msgid "Learn more about the moderation applied to this content."
+msgstr "Més informació sobre la moderació que s'ha aplicat a aquest contingut."
+
+#: src/components/moderation/PostHider.tsx:85
+#: src/components/moderation/ScreenHider.tsx:125
msgid "Learn more about this warning"
msgstr "Més informació d'aquesta advertència"
-#: src/view/screens/Moderation.tsx:243
+#: src/screens/Moderation/index.tsx:549
msgid "Learn more about what is public on Bluesky."
msgstr "Més informació sobre què és públic a Bluesky."
+#: src/components/moderation/ContentHider.tsx:152
+msgid "Learn more."
+msgstr "Més informació."
+
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82
msgid "Leave them all unchecked to see any language."
-msgstr "Deixa'ls tots sense marcar per veure tots els idiomes."
+msgstr "Deixa'ls tots sense marcar per a veure tots els idiomes."
-#: src/view/com/modals/LinkWarning.tsx:51
+#: src/view/com/modals/LinkWarning.tsx:65
msgid "Leaving Bluesky"
msgstr "Sortint de Bluesky"
#: src/screens/Deactivated.tsx:128
msgid "left to go."
-msgstr ""
+msgstr "queda."
-#: src/view/screens/Settings/index.tsx:278
+#: src/view/screens/Settings/index.tsx:296
msgid "Legacy storage cleared, you need to restart the app now."
msgstr "L'emmagatzematge heretat s'ha esborrat, cal que reinicieu l'aplicació ara."
-#: src/view/com/auth/login/Login.tsx:128
-#: src/view/com/auth/login/Login.tsx:144
+#: src/screens/Login/index.tsx:130
+#: src/screens/Login/index.tsx:145
msgid "Let's get your password reset!"
msgstr "Restablirem la teva contrasenya!"
-#: src/screens/Onboarding/StepFinished.tsx:151
+#: src/screens/Onboarding/StepFinished.tsx:155
msgid "Let's go!"
-msgstr ""
+msgstr "Som-hi!"
#: src/view/com/util/UserAvatar.tsx:248
#: src/view/com/util/UserBanner.tsx:62
-msgid "Library"
-msgstr "Biblioteca"
+#~ msgid "Library"
+#~ msgstr "Biblioteca"
-#: src/view/screens/Settings/index.tsx:479
+#: src/view/screens/Settings/index.tsx:498
msgid "Light"
msgstr "Clar"
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Like"
msgstr "M'agrada"
-#: src/view/screens/ProfileFeed.tsx:591
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:258
+#: src/view/screens/ProfileFeed.tsx:573
msgid "Like this feed"
msgstr "Fes m'agrada a aquest canal"
-#: src/Navigation.tsx:197
+#: src/components/LikesDialog.tsx:87
+#: src/Navigation.tsx:201
+#: src/Navigation.tsx:206
msgid "Liked by"
msgstr "Li ha agradat a"
+#: src/screens/Profile/ProfileLabelerLikedBy.tsx:29
#: src/view/screens/PostLikedBy.tsx:27
#: src/view/screens/ProfileFeedLikedBy.tsx:27
msgid "Liked By"
-msgstr ""
+msgstr "Li ha agradat a"
-#: src/view/com/feeds/FeedSourceCard.tsx:277
+#: src/view/com/feeds/FeedSourceCard.tsx:268
msgid "Liked by {0} {1}"
msgstr "Li ha agradat a {0} {1}"
-#: src/view/screens/ProfileFeed.tsx:606
+#: src/components/LabelingServiceCard/index.tsx:72
+msgid "Liked by {count} {0}"
+msgstr "Li ha agradat a {count} {0}"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:278
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:292
+#: src/view/screens/ProfileFeed.tsx:588
msgid "Liked by {likeCount} {0}"
msgstr "Li ha agradat a {likeCount} {0}"
-#: src/view/com/notifications/FeedItem.tsx:170
+#: src/view/com/notifications/FeedItem.tsx:174
msgid "liked your custom feed"
-msgstr ""
+msgstr "els hi ha agradat el teu canal personalitzat"
#: src/view/com/notifications/FeedItem.tsx:171
#~ msgid "liked your custom feed{0}"
#~ msgstr "i ha agradat el teu canal personalitzat{0}"
-#: src/view/com/notifications/FeedItem.tsx:155
+#: src/view/com/notifications/FeedItem.tsx:159
msgid "liked your post"
msgstr "li ha agradat la teva publicació"
-#: src/view/screens/Profile.tsx:183
+#: src/view/screens/Profile.tsx:193
msgid "Likes"
msgstr "M'agrades"
@@ -2091,67 +2591,68 @@ msgstr "M'agrades"
msgid "Likes on this post"
msgstr "M'agrades a aquesta publicació"
-#: src/Navigation.tsx:166
+#: src/Navigation.tsx:170
msgid "List"
msgstr "Llista"
-#: src/view/com/modals/CreateOrEditList.tsx:261
+#: src/view/com/modals/CreateOrEditList.tsx:262
msgid "List Avatar"
msgstr "Avatar de la llista"
-#: src/view/screens/ProfileList.tsx:323
+#: src/view/screens/ProfileList.tsx:311
msgid "List blocked"
msgstr "Llista bloquejada"
-#: src/view/com/feeds/FeedSourceCard.tsx:231
+#: src/view/com/feeds/FeedSourceCard.tsx:220
msgid "List by {0}"
msgstr "Llista per {0}"
-#: src/view/screens/ProfileList.tsx:377
+#: src/view/screens/ProfileList.tsx:355
msgid "List deleted"
msgstr "Llista eliminada"
-#: src/view/screens/ProfileList.tsx:282
+#: src/view/screens/ProfileList.tsx:283
msgid "List muted"
msgstr "Llista silenciada"
-#: src/view/com/modals/CreateOrEditList.tsx:275
+#: src/view/com/modals/CreateOrEditList.tsx:276
msgid "List Name"
msgstr "Nom de la llista"
-#: src/view/screens/ProfileList.tsx:342
+#: src/view/screens/ProfileList.tsx:325
msgid "List unblocked"
msgstr "Llista desbloquejada"
-#: src/view/screens/ProfileList.tsx:301
+#: src/view/screens/ProfileList.tsx:297
msgid "List unmuted"
msgstr "Llista no silenciada"
-#: src/Navigation.tsx:110
-#: src/view/screens/Profile.tsx:185
-#: src/view/shell/desktop/LeftNav.tsx:379
-#: src/view/shell/Drawer.tsx:492
-#: src/view/shell/Drawer.tsx:493
+#: src/Navigation.tsx:114
+#: src/view/screens/Profile.tsx:189
+#: src/view/screens/Profile.tsx:195
+#: src/view/shell/desktop/LeftNav.tsx:383
+#: src/view/shell/Drawer.tsx:495
+#: src/view/shell/Drawer.tsx:496
msgid "Lists"
msgstr "Llistes"
-#: src/view/com/post-thread/PostThread.tsx:276
-#: src/view/com/post-thread/PostThread.tsx:284
-msgid "Load more posts"
-msgstr "Carrega més publicacions"
+#: src/view/com/post-thread/PostThread.tsx:333
+#: src/view/com/post-thread/PostThread.tsx:341
+#~ msgid "Load more posts"
+#~ msgstr "Carrega més publicacions"
#: src/view/screens/Notifications.tsx:159
msgid "Load new notifications"
msgstr "Carrega noves notificacions"
-#: src/view/com/feeds/FeedPage.tsx:190
-#: src/view/screens/Profile.tsx:440
-#: src/view/screens/ProfileFeed.tsx:494
-#: src/view/screens/ProfileList.tsx:680
+#: src/screens/Profile/Sections/Feed.tsx:70
+#: src/view/com/feeds/FeedPage.tsx:138
+#: src/view/screens/ProfileFeed.tsx:496
+#: src/view/screens/ProfileList.tsx:695
msgid "Load new posts"
msgstr "Carrega noves publicacions"
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:99
msgid "Loading..."
msgstr "Carregant…"
@@ -2159,7 +2660,7 @@ msgstr "Carregant…"
#~ msgid "Local dev server"
#~ msgstr "Servidor de desenvolupament local"
-#: src/Navigation.tsx:207
+#: src/Navigation.tsx:221
msgid "Log"
msgstr "Registre"
@@ -2168,24 +2669,40 @@ msgstr "Registre"
#: src/screens/Deactivated.tsx:178
#: src/screens/Deactivated.tsx:181
msgid "Log out"
-msgstr ""
+msgstr "Desconnecta"
-#: src/view/screens/Moderation.tsx:136
+#: src/screens/Moderation/index.tsx:442
msgid "Logged-out visibility"
msgstr "Visibilitat pels usuaris no connectats"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:133
+#: src/components/AccountList.tsx:54
msgid "Login to account that is not listed"
msgstr "Accedeix a un compte que no està llistat"
#~ msgid "Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!"
#~ msgstr "Parece que este canal de noticias sólo está disponible para usuarios con una cuenta Bluesky. Por favor, ¡regístrate o inicia sesión para ver este canal!"
-#: src/view/com/modals/LinkWarning.tsx:65
+#: src/screens/Login/SetNewPasswordForm.tsx:116
+msgid "Looks like XXXXX-XXXXX"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:79
msgid "Make sure this is where you intend to go!"
msgstr "Assegura't que és aquí on vols anar!"
-#: src/view/screens/Profile.tsx:182
+#: src/components/dialogs/MutedWords.tsx:82
+msgid "Manage your muted words and tags"
+msgstr "Gestiona les teves etiquetes i paraules silenciades"
+
+#: src/view/com/auth/create/Step2.tsx:118
+#~ msgid "May not be longer than 253 characters"
+#~ msgstr "No pot ser més llarg de 253 caràcters"
+
+#: src/view/com/auth/create/Step2.tsx:109
+#~ msgid "May only contain letters and numbers"
+#~ msgstr "Només pot tenir lletres i números"
+
+#: src/view/screens/Profile.tsx:192
msgid "Media"
msgstr "Contingut"
@@ -2197,8 +2714,8 @@ msgstr "usuaris mencionats"
msgid "Mentioned users"
msgstr "Usuaris mencionats"
-#: src/view/com/util/ViewHeader.tsx:81
-#: src/view/screens/Search/Search.tsx:623
+#: src/view/com/util/ViewHeader.tsx:87
+#: src/view/screens/Search/Search.tsx:648
msgid "Menu"
msgstr "Menú"
@@ -2206,110 +2723,173 @@ msgstr "Menú"
#~ msgid "Message from server"
#~ msgstr "Missatge del servidor"
-#: src/view/com/posts/FeedErrorMessage.tsx:197
+#: src/view/com/posts/FeedErrorMessage.tsx:192
msgid "Message from server: {0}"
msgstr "Missatge del servidor: {0}"
-#: src/Navigation.tsx:115
-#: src/view/screens/Moderation.tsx:64
-#: src/view/screens/Settings/index.tsx:625
-#: src/view/shell/desktop/LeftNav.tsx:397
-#: src/view/shell/Drawer.tsx:511
-#: src/view/shell/Drawer.tsx:512
+#: src/lib/moderation/useReportOptions.ts:45
+msgid "Misleading Account"
+msgstr "Compte enganyòs"
+
+#: src/Navigation.tsx:119
+#: src/screens/Moderation/index.tsx:104
+#: src/view/screens/Settings/index.tsx:645
+#: src/view/shell/desktop/LeftNav.tsx:401
+#: src/view/shell/Drawer.tsx:514
+#: src/view/shell/Drawer.tsx:515
msgid "Moderation"
msgstr "Moderació"
-#: src/view/com/lists/ListCard.tsx:92
+#: src/components/moderation/ModerationDetailsDialog.tsx:112
+msgid "Moderation details"
+msgstr "Detalls de la moderació"
+
+#: src/view/com/lists/ListCard.tsx:93
#: src/view/com/modals/UserAddRemoveLists.tsx:206
msgid "Moderation list by {0}"
msgstr "Llista de moderació per {0}"
-#: src/view/screens/ProfileList.tsx:774
+#: src/view/screens/ProfileList.tsx:789
msgid "Moderation list by <0/>"
msgstr "Llista de moderació per <0/>"
-#: src/view/com/lists/ListCard.tsx:90
+#: src/view/com/lists/ListCard.tsx:91
#: src/view/com/modals/UserAddRemoveLists.tsx:204
-#: src/view/screens/ProfileList.tsx:772
+#: src/view/screens/ProfileList.tsx:787
msgid "Moderation list by you"
msgstr "Llista de moderació teva"
-#: src/view/com/modals/CreateOrEditList.tsx:197
+#: src/view/com/modals/CreateOrEditList.tsx:198
msgid "Moderation list created"
msgstr "S'ha creat la llista de moderació"
-#: src/view/com/modals/CreateOrEditList.tsx:183
+#: src/view/com/modals/CreateOrEditList.tsx:184
msgid "Moderation list updated"
msgstr "S'ha actualitzat la llista de moderació"
-#: src/view/screens/Moderation.tsx:95
+#: src/screens/Moderation/index.tsx:243
msgid "Moderation lists"
msgstr "Llistes de moderació"
-#: src/Navigation.tsx:120
+#: src/Navigation.tsx:124
#: src/view/screens/ModerationModlists.tsx:58
msgid "Moderation Lists"
msgstr "Llistes de moderació"
-#: src/view/screens/Settings/index.tsx:619
+#: src/view/screens/Settings/index.tsx:639
msgid "Moderation settings"
msgstr "Configuració de moderació"
-#: src/view/com/modals/ModerationDetails.tsx:35
+#: src/Navigation.tsx:216
+msgid "Moderation states"
+msgstr "Estats de moderació"
+
+#: src/screens/Moderation/index.tsx:215
+msgid "Moderation tools"
+msgstr "Eines de moderació"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:48
+#: src/lib/moderation/useModerationCauseDescription.ts:40
msgid "Moderator has chosen to set a general warning on the content."
-msgstr "El moderador ha decidit establir un advertiment general sobre el contingut"
+msgstr "El moderador ha decidit establir un advertiment general sobre el contingut."
+
+#: src/view/com/post-thread/PostThreadItem.tsx:541
+msgid "More"
+msgstr "Més"
-#: src/view/shell/desktop/Feeds.tsx:63
+#: src/view/shell/desktop/Feeds.tsx:65
msgid "More feeds"
msgstr "Més canals"
-#: src/view/com/profile/ProfileHeader.tsx:522
-#: src/view/screens/ProfileFeed.tsx:362
-#: src/view/screens/ProfileList.tsx:616
+#: src/view/screens/ProfileList.tsx:599
msgid "More options"
msgstr "Més opcions"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:270
-msgid "More post options"
-msgstr "Més opcions de publicació"
+#: src/view/com/util/forms/PostDropdownBtn.tsx:315
+#~ msgid "More post options"
+#~ msgstr "Més opcions de publicació"
#: src/view/screens/PreferencesThreads.tsx:82
msgid "Most-liked replies first"
msgstr "Respostes amb més m'agrada primer"
-#: src/view/com/profile/ProfileHeader.tsx:326
+#: src/view/com/auth/create/Step2.tsx:122
+#~ msgid "Must be at least 3 characters"
+#~ msgstr "Ha de tenir almenys 3 caràcters"
+
+#: src/components/TagMenu/index.tsx:249
+msgid "Mute"
+msgstr "Silencia"
+
+#: src/components/TagMenu/index.web.tsx:105
+msgid "Mute {truncatedTag}"
+msgstr "Silencia {truncatedTag}"
+
+#: src/view/com/profile/ProfileMenu.tsx:279
+#: src/view/com/profile/ProfileMenu.tsx:286
msgid "Mute Account"
msgstr "Silenciar el compte"
-#: src/view/screens/ProfileList.tsx:543
+#: src/view/screens/ProfileList.tsx:518
msgid "Mute accounts"
msgstr "Silencia els comptes"
-#: src/view/screens/ProfileList.tsx:490
+#: src/components/TagMenu/index.tsx:209
+msgid "Mute all {displayTag} posts"
+msgstr "Silencia totes les publicacions {displayTag}"
+
+#: src/components/TagMenu/index.tsx:211
+#~ msgid "Mute all {tag} posts"
+#~ msgstr "Silencia totes les publicacions {tag}"
+
+#: src/components/dialogs/MutedWords.tsx:148
+msgid "Mute in tags only"
+msgstr "Silencia només a les etiquetes"
+
+#: src/components/dialogs/MutedWords.tsx:133
+msgid "Mute in text & tags"
+msgstr "Silencia a les etiquetes i al text"
+
+#: src/view/screens/ProfileList.tsx:461
+#: src/view/screens/ProfileList.tsx:624
msgid "Mute list"
msgstr "Silencia la llista"
-#: src/view/screens/ProfileList.tsx:274
+#: src/view/screens/ProfileList.tsx:619
msgid "Mute these accounts?"
msgstr "Vols silenciar aquests comptes?"
-#: src/view/screens/ProfileList.tsx:278
-msgid "Mute this List"
-msgstr "Silencia aquesta llista"
+#: src/view/screens/ProfileList.tsx:279
+#~ msgid "Mute this List"
+#~ msgstr "Silencia aquesta llista"
+
+#: src/components/dialogs/MutedWords.tsx:126
+msgid "Mute this word in post text and tags"
+msgstr "Silencia aquesta paraula en el text de les publicacions i a les etiquetes"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/components/dialogs/MutedWords.tsx:141
+msgid "Mute this word in tags only"
+msgstr "Silencia aquesta paraula només a les etiquetes"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:257
msgid "Mute thread"
msgstr "Silencia el fil de debat"
-#: src/view/com/lists/ListCard.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:267
+#: src/view/com/util/forms/PostDropdownBtn.tsx:269
+msgid "Mute words & tags"
+msgstr "Silencia paraules i etiquetes"
+
+#: src/view/com/lists/ListCard.tsx:102
msgid "Muted"
msgstr "Silenciada"
-#: src/view/screens/Moderation.tsx:109
+#: src/screens/Moderation/index.tsx:255
msgid "Muted accounts"
msgstr "Comptes silenciats"
-#: src/Navigation.tsx:125
+#: src/Navigation.tsx:129
#: src/view/screens/ModerationMutedAccounts.tsx:107
msgid "Muted Accounts"
msgstr "Comptes silenciats"
@@ -2318,15 +2898,24 @@ msgstr "Comptes silenciats"
msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private."
msgstr "Les publicacions dels comptes silenciats seran eliminats del teu canal i de les teves notificacions. Silenciar comptes és completament privat."
-#: src/view/screens/ProfileList.tsx:276
+#: src/lib/moderation/useModerationCauseDescription.ts:85
+msgid "Muted by \"{0}\""
+msgstr "Silenciat per \"{0}\""
+
+#: src/screens/Moderation/index.tsx:231
+msgid "Muted words & tags"
+msgstr "Paraules i etiquetes silenciades"
+
+#: src/view/screens/ProfileList.tsx:621
msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them."
msgstr "Silenciar és privat. Els comptes silenciats poden interactuar amb tu, però tu no veuràs les seves publicacions ni rebràs notificacions seves."
-#: src/view/com/modals/BirthDateSettings.tsx:56
+#: src/components/dialogs/BirthDateSettings.tsx:35
+#: src/components/dialogs/BirthDateSettings.tsx:38
msgid "My Birthday"
msgstr "El meu aniversari"
-#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:663
msgid "My Feeds"
msgstr "Els meus canals"
@@ -2334,32 +2923,40 @@ msgstr "Els meus canals"
msgid "My Profile"
msgstr "El meu perfil"
-#: src/view/screens/Settings/index.tsx:582
+#: src/view/screens/Settings/index.tsx:596
+msgid "My saved feeds"
+msgstr "Els meus canals desats"
+
+#: src/view/screens/Settings/index.tsx:602
msgid "My Saved Feeds"
msgstr "Els meus canals desats"
#: src/view/com/auth/server-input/index.tsx:118
-msgid "my-server.com"
-msgstr ""
+#~ msgid "my-server.com"
+#~ msgstr "el-meu-servidor.com"
-#: src/view/com/modals/AddAppPasswords.tsx:179
-#: src/view/com/modals/CreateOrEditList.tsx:290
+#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/CreateOrEditList.tsx:291
msgid "Name"
msgstr "Nom"
-#: src/view/com/modals/CreateOrEditList.tsx:145
+#: src/view/com/modals/CreateOrEditList.tsx:146
msgid "Name is required"
msgstr "Es requereix un nom"
+#: src/lib/moderation/useReportOptions.ts:57
+#: src/lib/moderation/useReportOptions.ts:78
+#: src/lib/moderation/useReportOptions.ts:86
+msgid "Name or Description Violates Community Standards"
+msgstr "El nom o la descripció infringeixen els estàndards comunitaris"
+
#: src/screens/Onboarding/index.tsx:25
msgid "Nature"
-msgstr ""
+msgstr "Natura"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:190
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:219
-#: src/view/com/auth/login/LoginForm.tsx:289
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:196
-#: src/view/com/modals/ChangePassword.tsx:166
+#: src/screens/Login/ForgotPasswordForm.tsx:173
+#: src/screens/Login/LoginForm.tsx:254
+#: src/view/com/modals/ChangePassword.tsx:168
msgid "Navigates to the next screen"
msgstr "Navega a la pantalla següent"
@@ -2367,19 +2964,31 @@ msgstr "Navega a la pantalla següent"
msgid "Navigates to your profile"
msgstr "Navega al teu perfil"
+#: src/components/ReportDialog/SelectReportOptionView.tsx:122
+msgid "Need to report a copyright violation?"
+msgstr "Necessites informar d'una infracció dels drets d'autor?"
+
#: src/view/com/modals/EmbedConsent.tsx:107
#: src/view/com/modals/EmbedConsent.tsx:123
-msgid "Never load embeds from {0}"
-msgstr "No carreguis mai les incrustacions de {0} "
+#~ msgid "Never load embeds from {0}"
+#~ msgstr "No carreguis mai les incrustacions de {0}"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:72
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:72
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:74
msgid "Never lose access to your followers and data."
msgstr "No perdis mai accés als teus seguidors ni a les teves dades."
-#: src/screens/Onboarding/StepFinished.tsx:119
+#: src/screens/Onboarding/StepFinished.tsx:123
msgid "Never lose access to your followers or data."
-msgstr ""
+msgstr "No perdis mai accés als teus seguidors i les teves dades."
+
+#: src/components/dialogs/MutedWords.tsx:293
+#~ msgid "Nevermind"
+#~ msgstr "Tant hi fa"
+
+#: src/view/com/modals/ChangeHandle.tsx:519
+msgid "Nevermind, create a handle for me"
+msgstr "Tant hi fa, crea'm un identificador"
#: src/view/screens/Lists.tsx:76
msgctxt "action"
@@ -2390,34 +2999,34 @@ msgstr "Nova"
msgid "New"
msgstr "Nova"
-#: src/view/com/modals/CreateOrEditList.tsx:252
+#: src/view/com/modals/CreateOrEditList.tsx:253
msgid "New Moderation List"
msgstr "Nova llista de moderació"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:150
+#: src/view/com/modals/ChangePassword.tsx:212
msgid "New password"
msgstr "Nova contrasenya"
-#: src/view/com/modals/ChangePassword.tsx:215
+#: src/view/com/modals/ChangePassword.tsx:217
msgid "New Password"
-msgstr ""
+msgstr "Nova contrasenya"
-#: src/view/com/feeds/FeedPage.tsx:201
+#: src/view/com/feeds/FeedPage.tsx:149
msgctxt "action"
msgid "New post"
msgstr "Nova publicació"
-#: src/view/screens/Feeds.tsx:581
+#: src/view/screens/Feeds.tsx:555
#: src/view/screens/Notifications.tsx:168
-#: src/view/screens/Profile.tsx:382
-#: src/view/screens/ProfileFeed.tsx:432
-#: src/view/screens/ProfileList.tsx:195
-#: src/view/screens/ProfileList.tsx:223
-#: src/view/shell/desktop/LeftNav.tsx:248
+#: src/view/screens/Profile.tsx:452
+#: src/view/screens/ProfileFeed.tsx:434
+#: src/view/screens/ProfileList.tsx:199
+#: src/view/screens/ProfileList.tsx:227
+#: src/view/shell/desktop/LeftNav.tsx:252
msgid "New post"
msgstr "Nova publicació"
-#: src/view/shell/desktop/LeftNav.tsx:258
+#: src/view/shell/desktop/LeftNav.tsx:262
msgctxt "action"
msgid "New Post"
msgstr "Nova publicació"
@@ -2426,7 +3035,7 @@ msgstr "Nova publicació"
#~ msgid "New Post"
#~ msgstr "Nova publicació"
-#: src/view/com/modals/CreateOrEditList.tsx:247
+#: src/view/com/modals/CreateOrEditList.tsx:248
msgid "New User List"
msgstr "Nova llista d'usuaris"
@@ -2436,17 +3045,18 @@ msgstr "Les respostes més noves primer"
#: src/screens/Onboarding/index.tsx:23
msgid "News"
-msgstr ""
-
-#: src/view/com/auth/create/CreateAccount.tsx:161
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:182
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:192
-#: src/view/com/auth/login/LoginForm.tsx:291
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:187
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:198
+msgstr "Notícies"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:143
+#: src/screens/Login/ForgotPasswordForm.tsx:150
+#: src/screens/Login/LoginForm.tsx:253
+#: src/screens/Login/LoginForm.tsx:260
+#: src/screens/Login/SetNewPasswordForm.tsx:174
+#: src/screens/Login/SetNewPasswordForm.tsx:180
+#: src/screens/Signup/index.tsx:205
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79
-#: src/view/com/modals/ChangePassword.tsx:251
#: src/view/com/modals/ChangePassword.tsx:253
+#: src/view/com/modals/ChangePassword.tsx:255
msgid "Next"
msgstr "Següent"
@@ -2455,48 +3065,61 @@ msgctxt "action"
msgid "Next"
msgstr "Següent"
-#: src/view/com/lightbox/Lightbox.web.tsx:149
+#: src/view/com/lightbox/Lightbox.web.tsx:169
msgid "Next image"
msgstr "Següent imatge"
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:200
-#: src/view/screens/PreferencesHomeFeed.tsx:235
-#: src/view/screens/PreferencesHomeFeed.tsx:272
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:200
+#: src/view/screens/PreferencesFollowingFeed.tsx:235
+#: src/view/screens/PreferencesFollowingFeed.tsx:272
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "No"
msgstr "No"
-#: src/view/screens/ProfileFeed.tsx:584
-#: src/view/screens/ProfileList.tsx:754
+#: src/view/screens/ProfileFeed.tsx:562
+#: src/view/screens/ProfileList.tsx:769
msgid "No description"
msgstr "Cap descripció"
-#: src/view/com/profile/ProfileHeader.tsx:169
+#: src/view/com/modals/ChangeHandle.tsx:405
+msgid "No DNS Panel"
+msgstr "No hi ha panell de DNS"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:118
msgid "No longer following {0}"
msgstr "Ja no segueixes a {0}"
+#: src/screens/Signup/StepHandle.tsx:114
+msgid "No longer than 253 characters"
+msgstr ""
+
#: src/view/com/notifications/Feed.tsx:109
msgid "No notifications yet!"
msgstr "Encara no tens cap notificació"
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:97
-#: src/view/com/composer/text-input/web/Autocomplete.tsx:191
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:101
+#: src/view/com/composer/text-input/web/Autocomplete.tsx:195
msgid "No result"
msgstr "Cap resultat"
-#: src/view/screens/Feeds.tsx:524
+#: src/components/Lists.tsx:183
+msgid "No results found"
+msgstr "No s'han trobat resultats"
+
+#: src/view/screens/Feeds.tsx:495
msgid "No results found for \"{query}\""
msgstr "No s'han trobat resultats per \"{query}\""
#: src/view/com/modals/ListAddRemoveUsers.tsx:127
-#: src/view/screens/Search/Search.tsx:280
-#: src/view/screens/Search/Search.tsx:308
+#: src/view/screens/Search/Search.tsx:283
+#: src/view/screens/Search/Search.tsx:311
msgid "No results found for {query}"
msgstr "No s'han trobat resultats per {query}"
-#: src/view/com/modals/EmbedConsent.tsx:129
+#: src/components/dialogs/EmbedConsent.tsx:105
+#: src/components/dialogs/EmbedConsent.tsx:112
msgid "No thanks"
msgstr "No, gràcies"
@@ -2504,12 +3127,21 @@ msgstr "No, gràcies"
msgid "Nobody"
msgstr "Ningú"
+#: src/components/LikedByList.tsx:79
+#: src/components/LikesDialog.tsx:99
+msgid "Nobody has liked this yet. Maybe you should be the first!"
+msgstr "A ningú encara li ha agradat això. Potser hauries de ser el primer!"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:42
+msgid "Non-sexual Nudity"
+msgstr "Nuesa no sexual"
+
#: src/view/com/modals/SelfLabel.tsx:135
msgid "Not Applicable."
msgstr "No aplicable."
-#: src/Navigation.tsx:105
-#: src/view/screens/Profile.tsx:106
+#: src/Navigation.tsx:109
+#: src/view/screens/Profile.tsx:99
msgid "Not Found"
msgstr "No s'ha trobat"
@@ -2518,17 +3150,23 @@ msgstr "No s'ha trobat"
msgid "Not right now"
msgstr "Ara mateix no"
-#: src/view/screens/Moderation.tsx:233
+#: src/view/com/profile/ProfileMenu.tsx:368
+#: src/view/com/util/forms/PostDropdownBtn.tsx:342
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:246
+msgid "Note about sharing"
+msgstr "Nota sobre compartir"
+
+#: src/screens/Moderation/index.tsx:540
msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites."
msgstr "Nota: Bluesky és una xarxa oberta i pública. Aquesta configuració tan sols limita el teu contingut a l'aplicació de Bluesky i a la web, altres aplicacions poden no respectar-ho. El teu contingut pot ser mostrat a usuaris no connectats per altres aplicacions i webs."
-#: src/Navigation.tsx:447
+#: src/Navigation.tsx:469
#: src/view/screens/Notifications.tsx:124
#: src/view/screens/Notifications.tsx:148
-#: src/view/shell/bottom-bar/BottomBar.tsx:205
-#: src/view/shell/desktop/LeftNav.tsx:361
-#: src/view/shell/Drawer.tsx:435
-#: src/view/shell/Drawer.tsx:436
+#: src/view/shell/bottom-bar/BottomBar.tsx:215
+#: src/view/shell/desktop/LeftNav.tsx:365
+#: src/view/shell/Drawer.tsx:438
+#: src/view/shell/Drawer.tsx:439
msgid "Notifications"
msgstr "Notificacions"
@@ -2536,15 +3174,36 @@ msgstr "Notificacions"
msgid "Nudity"
msgstr "Nuesa"
-#: src/view/com/util/ErrorBoundary.tsx:35
+#: src/lib/moderation/useReportOptions.ts:71
+msgid "Nudity or adult content not labeled as such"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:71
+#~ msgid "Nudity or pornography not labeled as such"
+#~ msgstr "Nuesa o pornografia no etiquetada com a tal"
+
+#: src/screens/Signup/index.tsx:142
+msgid "of"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:11
+msgid "Off"
+msgstr "Apagat"
+
+#: src/view/com/util/ErrorBoundary.tsx:49
msgid "Oh no!"
msgstr "Ostres!"
-#: src/screens/Onboarding/StepInterests/index.tsx:128
+#: src/screens/Onboarding/StepInterests/index.tsx:132
msgid "Oh no! Something went wrong."
-msgstr ""
+msgstr "Ostres! Alguna cosa ha fallat."
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:126
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:327
+msgid "OK"
+msgstr "D'acord"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:41
+#: src/screens/Login/PasswordUpdatedForm.tsx:44
msgid "Okay"
msgstr "D'acord"
@@ -2552,11 +3211,11 @@ msgstr "D'acord"
msgid "Oldest replies first"
msgstr "Respostes més antigues primer"
-#: src/view/screens/Settings/index.tsx:234
+#: src/view/screens/Settings/index.tsx:244
msgid "Onboarding reset"
msgstr "Restableix la incorporació"
-#: src/view/com/composer/Composer.tsx:375
+#: src/view/com/composer/Composer.tsx:392
msgid "One or more images is missing alt text."
msgstr "Falta el text alternatiu a una o més imatges."
@@ -2564,31 +3223,65 @@ msgstr "Falta el text alternatiu a una o més imatges."
msgid "Only {0} can reply."
msgstr "Només {0} poden respondre."
-#: src/view/screens/AppPasswords.tsx:65
-#: src/view/screens/Profile.tsx:106
+#: src/screens/Signup/StepHandle.tsx:97
+msgid "Only contains letters, numbers, and hyphens"
+msgstr ""
+
+#: src/components/Lists.tsx:75
+msgid "Oops, something went wrong!"
+msgstr "Ostres, alguna cosa ha anat malament!"
+
+#: src/components/Lists.tsx:170
+#: src/view/screens/AppPasswords.tsx:67
+#: src/view/screens/Profile.tsx:99
msgid "Oops!"
msgstr "Ostres!"
-#: src/screens/Onboarding/StepFinished.tsx:115
+#: src/screens/Onboarding/StepFinished.tsx:119
msgid "Open"
-msgstr ""
+msgstr "Obre"
-#: src/view/com/composer/Composer.tsx:470
-#: src/view/com/composer/Composer.tsx:471
+#: src/view/screens/Moderation.tsx:75
+#~ msgid "Open content filtering settings"
+#~ msgstr "Obre la configuració del filtre de contingut"
+
+#: src/view/com/composer/Composer.tsx:491
+#: src/view/com/composer/Composer.tsx:492
msgid "Open emoji picker"
msgstr "Obre el selector d'emojis"
-#: src/view/screens/Settings/index.tsx:712
+#: src/view/screens/ProfileFeed.tsx:300
+msgid "Open feed options menu"
+msgstr "Obre el menú de les opcions del canal"
+
+#: src/view/screens/Settings/index.tsx:734
msgid "Open links with in-app browser"
msgstr "Obre els enllaços al navegador de l'aplicació"
-#: src/view/com/pager/FeedsTabBarMobile.tsx:87
+#: src/screens/Moderation/index.tsx:227
+msgid "Open muted words and tags settings"
+msgstr "Obre la configuració de les paraules i etiquetes silenciades"
+
+#: src/view/screens/Moderation.tsx:92
+#~ msgid "Open muted words settings"
+#~ msgstr "Obre la configuració de les paraules silenciades"
+
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:50
msgid "Open navigation"
msgstr "Obre la navegació"
-#: src/view/screens/Settings/index.tsx:804
+#: src/view/com/util/forms/PostDropdownBtn.tsx:183
+msgid "Open post options menu"
+msgstr "Obre el menú de les opcions de publicació"
+
+#: src/view/screens/Settings/index.tsx:828
+#: src/view/screens/Settings/index.tsx:838
msgid "Open storybook page"
-msgstr ""
+msgstr "Obre la pàgina d'historial"
+
+#: src/view/screens/Settings/index.tsx:816
+msgid "Open system log"
+msgstr "Obre el registre del sistema"
#: src/view/com/util/forms/DropdownButton.tsx:154
msgid "Opens {numItems} options"
@@ -2596,13 +3289,13 @@ msgstr "Obre {numItems} opcions"
#: src/view/screens/Log.tsx:54
msgid "Opens additional details for a debug entry"
-msgstr "Obre detalls adicionals per una entrada de depuració"
+msgstr "Obre detalls addicionals per una entrada de depuració"
-#: src/view/com/notifications/FeedItem.tsx:348
+#: src/view/com/notifications/FeedItem.tsx:353
msgid "Opens an expanded list of users in this notification"
msgstr "Obre una llista expandida d'usuaris en aquesta notificació"
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:61
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:78
msgid "Opens camera on device"
msgstr "Obre la càmera del dispositiu"
@@ -2610,7 +3303,7 @@ msgstr "Obre la càmera del dispositiu"
msgid "Opens composer"
msgstr "Obre el compositor"
-#: src/view/screens/Settings/index.tsx:595
+#: src/view/screens/Settings/index.tsx:615
msgid "Opens configurable language settings"
msgstr "Obre la configuració d'idioma"
@@ -2618,71 +3311,117 @@ msgstr "Obre la configuració d'idioma"
msgid "Opens device photo gallery"
msgstr "Obre la galeria fotogràfica del dispositiu"
-#: src/view/com/profile/ProfileHeader.tsx:419
-msgid "Opens editor for profile display name, avatar, background image, and description"
-msgstr "Obre l'editor del perfil per editar el nom, avatar, imatge de fons i descripció"
+#: src/view/com/profile/ProfileHeader.tsx:420
+#~ msgid "Opens editor for profile display name, avatar, background image, and description"
+#~ msgstr "Obre l'editor del perfil per a editar el nom, avatar, imatge de fons i descripció"
-#: src/view/screens/Settings/index.tsx:649
+#: src/view/screens/Settings/index.tsx:669
msgid "Opens external embeds settings"
msgstr "Obre la configuració per les incrustacions externes"
-#: src/view/com/profile/ProfileHeader.tsx:574
-msgid "Opens followers list"
-msgstr "Obre la llista de seguidors"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:57
+#: src/view/com/auth/SplashScreen.tsx:68
+#: src/view/com/auth/SplashScreen.web.tsx:97
+msgid "Opens flow to create a new Bluesky account"
+msgstr "Obre el procés per a crear un nou compte de Bluesky"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:75
+#: src/view/com/auth/SplashScreen.tsx:83
+#: src/view/com/auth/SplashScreen.web.tsx:112
+msgid "Opens flow to sign into your existing Bluesky account"
+msgstr "Obre el procés per a iniciar sessió a un compte existent de Bluesky"
+
+#: src/view/com/profile/ProfileHeader.tsx:575
+#~ msgid "Opens followers list"
+#~ msgstr "Obre la llista de seguidors"
-#: src/view/com/profile/ProfileHeader.tsx:593
-msgid "Opens following list"
-msgstr "Obre la llista de seguits"
+#: src/view/com/profile/ProfileHeader.tsx:594
+#~ msgid "Opens following list"
+#~ msgstr "Obre la llista de seguits"
#: src/view/screens/Settings.tsx:412
#~ msgid "Opens invite code list"
#~ msgstr "Obre la llista de codis d'invitació"
-#: src/view/com/modals/InviteCodes.tsx:172
+#: src/view/com/modals/InviteCodes.tsx:173
msgid "Opens list of invite codes"
msgstr "Obre la llista de codis d'invitació"
+#: src/view/screens/Settings/index.tsx:798
+msgid "Opens modal for account deletion confirmation. Requires email code"
+msgstr "Obre el modal per a la confirmació de l'eliminació del compte. Requereix codi de correu electrònic"
+
#: src/view/screens/Settings/index.tsx:774
-msgid "Opens modal for account deletion confirmation. Requires email code."
-msgstr "Obre el modal per confirmar l'eliminació del compte. Requereix un codi de correu"
+#~ msgid "Opens modal for account deletion confirmation. Requires email code."
+#~ msgstr "Obre el modal per a confirmar l'eliminació del compte. Requereix un codi de correu"
-#: src/view/com/modals/ChangeHandle.tsx:281
+#: src/view/screens/Settings/index.tsx:756
+msgid "Opens modal for changing your Bluesky password"
+msgstr "Obre el modal per a canviar la contrasenya de Bluesky"
+
+#: src/view/screens/Settings/index.tsx:718
+msgid "Opens modal for choosing a new Bluesky handle"
+msgstr "Obre el modal per a triar un nou identificador de Bluesky"
+
+#: src/view/screens/Settings/index.tsx:779
+msgid "Opens modal for downloading your Bluesky account data (repository)"
+msgstr "Obre el modal per a baixar les dades del vostre compte Bluesky (repositori)"
+
+#: src/view/screens/Settings/index.tsx:968
+msgid "Opens modal for email verification"
+msgstr "Obre el modal per a verificar el correu"
+
+#: src/view/com/modals/ChangeHandle.tsx:282
msgid "Opens modal for using custom domain"
msgstr "Obre el modal per a utilitzar un domini personalitzat"
-#: src/view/screens/Settings/index.tsx:620
+#: src/view/screens/Settings/index.tsx:640
msgid "Opens moderation settings"
msgstr "Obre la configuració de la moderació"
-#: src/view/com/auth/login/LoginForm.tsx:239
+#: src/screens/Login/LoginForm.tsx:202
msgid "Opens password reset form"
msgstr "Obre el formulari de restabliment de la contrasenya"
-#: src/view/screens/Feeds.tsx:357
+#: src/view/com/home/HomeHeaderLayout.web.tsx:63
+#: src/view/screens/Feeds.tsx:356
msgid "Opens screen to edit Saved Feeds"
-msgstr "Obre pantalla per editar els canals desats"
+msgstr "Obre pantalla per a editar els canals desats"
-#: src/view/screens/Settings/index.tsx:576
+#: src/view/screens/Settings/index.tsx:597
msgid "Opens screen with all saved feeds"
msgstr "Obre la pantalla amb tots els canals desats"
+#: src/view/screens/Settings/index.tsx:696
+msgid "Opens the app password settings"
+msgstr "Obre la configuració de les contrasenyes d'aplicació"
+
#: src/view/screens/Settings/index.tsx:676
-msgid "Opens the app password settings page"
-msgstr "Obre la pàgina de configuració de les contrasenyes d'aplicació"
+#~ msgid "Opens the app password settings page"
+#~ msgstr "Obre la pàgina de configuració de les contrasenyes d'aplicació"
+
+#: src/view/screens/Settings/index.tsx:554
+msgid "Opens the Following feed preferences"
+msgstr "Obre les preferències del canal de Seguint"
#: src/view/screens/Settings/index.tsx:535
-msgid "Opens the home feed preferences"
-msgstr "Obre les preferències de canals de l'inici"
+#~ msgid "Opens the home feed preferences"
+#~ msgstr "Obre les preferències de canals de l'inici"
+
+#: src/view/com/modals/LinkWarning.tsx:93
+msgid "Opens the linked website"
+msgstr "Obre la web enllaçada"
-#: src/view/screens/Settings/index.tsx:805
+#: src/view/screens/Settings/index.tsx:829
+#: src/view/screens/Settings/index.tsx:839
msgid "Opens the storybook page"
msgstr "Obre la pàgina de l'historial"
-#: src/view/screens/Settings/index.tsx:793
+#: src/view/screens/Settings/index.tsx:817
msgid "Opens the system log page"
msgstr "Obre la pàgina de registres del sistema"
-#: src/view/screens/Settings/index.tsx:556
+#: src/view/screens/Settings/index.tsx:575
msgid "Opens the threads preferences"
msgstr "Obre les preferències dels fils de debat"
@@ -2690,11 +3429,19 @@ msgstr "Obre les preferències dels fils de debat"
msgid "Option {0} of {numItems}"
msgstr "Opció {0} de {numItems}"
+#: src/components/ReportDialog/SubmitView.tsx:162
+msgid "Optionally provide additional information below:"
+msgstr "Opcionalment, proporciona informació addicional a continuació:"
+
#: src/view/com/modals/Threadgate.tsx:89
msgid "Or combine these options:"
msgstr "O combina aquestes opcions:"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:138
+#: src/lib/moderation/useReportOptions.ts:25
+msgid "Other"
+msgstr "Un altre"
+
+#: src/components/AccountList.tsx:73
msgid "Other account"
msgstr "Un altre compte"
@@ -2706,124 +3453,144 @@ msgstr "Un altre compte"
msgid "Other..."
msgstr "Un altre…"
+#: src/components/Lists.tsx:184
#: src/view/screens/NotFound.tsx:45
msgid "Page not found"
msgstr "Pàgina no trobada"
#: src/view/screens/NotFound.tsx:42
msgid "Page Not Found"
-msgstr ""
+msgstr "Pàgina no trobada"
-#: src/view/com/auth/create/Step1.tsx:210
-#: src/view/com/auth/create/Step1.tsx:220
-#: src/view/com/auth/login/LoginForm.tsx:226
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:161
-#: src/view/com/modals/DeleteAccount.tsx:202
+#: src/screens/Login/LoginForm.tsx:178
+#: src/screens/Signup/StepInfo/index.tsx:101
+#: src/view/com/modals/DeleteAccount.tsx:194
+#: src/view/com/modals/DeleteAccount.tsx:201
msgid "Password"
msgstr "Contrasenya"
-#: src/view/com/auth/login/Login.tsx:157
+#: src/view/com/modals/ChangePassword.tsx:142
+msgid "Password Changed"
+msgstr "Contrasenya canviada"
+
+#: src/screens/Login/index.tsx:157
msgid "Password updated"
msgstr "Contrasenya actualitzada"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:28
+#: src/screens/Login/PasswordUpdatedForm.tsx:30
msgid "Password updated!"
msgstr "Contrasenya actualitzada!"
-#: src/Navigation.tsx:160
+#: src/Navigation.tsx:164
msgid "People followed by @{0}"
msgstr "Persones seguides per @{0}"
-#: src/Navigation.tsx:153
+#: src/Navigation.tsx:157
msgid "People following @{0}"
msgstr "Persones seguint a @{0}"
#: src/view/com/lightbox/Lightbox.tsx:66
msgid "Permission to access camera roll is required."
-msgstr "Cal permís per accedir al carret de la càmera."
+msgstr "Cal permís per a accedir al carret de la càmera."
#: src/view/com/lightbox/Lightbox.tsx:72
msgid "Permission to access camera roll was denied. Please enable it in your system settings."
-msgstr "S'ha denegat el permís per accedir a la càmera. Activa'l a la configuració del teu sistema."
+msgstr "S'ha denegat el permís per a accedir a la càmera. Activa'l a la configuració del teu sistema."
#: src/screens/Onboarding/index.tsx:31
msgid "Pets"
-msgstr ""
+msgstr "Mascotes"
#: src/view/com/auth/create/Step2.tsx:183
-msgid "Phone number"
-msgstr "Telèfon"
+#~ msgid "Phone number"
+#~ msgstr "Telèfon"
#: src/view/com/modals/SelfLabel.tsx:121
msgid "Pictures meant for adults."
msgstr "Imatges destinades a adults."
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:292
+#: src/view/screens/ProfileList.tsx:563
msgid "Pin to home"
msgstr "Fixa a l'inici"
+#: src/view/screens/ProfileFeed.tsx:295
+msgid "Pin to Home"
+msgstr "Fixa a l'Inici"
+
#: src/view/screens/SavedFeeds.tsx:88
msgid "Pinned Feeds"
msgstr "Canals de notícies fixats"
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:111
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:123
msgid "Play {0}"
msgstr "Reprodueix {0}"
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:54
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:55
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:57
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:58
msgid "Play Video"
msgstr "Reprodueix el vídeo"
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:110
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:122
msgid "Plays the GIF"
msgstr "Reprodueix el GIF"
-#: src/view/com/auth/create/state.ts:177
+#: src/screens/Signup/state.ts:241
msgid "Please choose your handle."
msgstr "Tria el teu identificador."
-#: src/view/com/auth/create/state.ts:160
+#: src/screens/Signup/state.ts:234
msgid "Please choose your password."
msgstr "Tria la teva contrasenya."
+#: src/screens/Signup/state.ts:251
+msgid "Please complete the verification captcha."
+msgstr "Completa el captcha de verificació."
+
#: src/view/com/modals/ChangeEmail.tsx:67
msgid "Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed."
-msgstr "Confirma el teu correu abans de canviar-lo. Aquest és un requisit temporal mentre no s'afegeixin eines per actualitzar el correu. Aviat no serà necessari,"
+msgstr "Confirma el teu correu abans de canviar-lo. Aquest és un requisit temporal mentre no s'afegeixin eines per a actualitzar el correu. Aviat no serà necessari."
-#: src/view/com/modals/AddAppPasswords.tsx:90
+#: src/view/com/modals/AddAppPasswords.tsx:91
msgid "Please enter a name for your app password. All spaces is not allowed."
msgstr "Introdueix un nom per a la contrasenya de la vostra aplicació. No es permeten tot en espais."
#: src/view/com/auth/create/Step2.tsx:206
-msgid "Please enter a phone number that can receive SMS text messages."
-msgstr "Introdueix un telèfon que pugui rebre missatges SMS"
+#~ msgid "Please enter a phone number that can receive SMS text messages."
+#~ msgstr "Introdueix un telèfon que pugui rebre missatges SMS"
-#: src/view/com/modals/AddAppPasswords.tsx:145
+#: src/view/com/modals/AddAppPasswords.tsx:146
msgid "Please enter a unique name for this App Password or use our randomly generated one."
msgstr "Introdueix un nom únic per aquesta contrasenya d'aplicació o fes servir un nom generat aleatòriament."
+#: src/components/dialogs/MutedWords.tsx:67
+msgid "Please enter a valid word, tag, or phrase to mute"
+msgstr "Introdueix una paraula, una etiqueta o una frase vàlida per a silenciar"
+
#: src/view/com/auth/create/state.ts:170
-msgid "Please enter the code you received by SMS."
-msgstr "Introdueix el codi que has rebut per SMS"
+#~ msgid "Please enter the code you received by SMS."
+#~ msgstr "Introdueix el codi que has rebut per SMS"
#: src/view/com/auth/create/Step2.tsx:282
-msgid "Please enter the verification code sent to {phoneNumberFormatted}."
-msgstr "Introdueix el codi de verificació enviat a {phoneNumberFormatted}"
+#~ msgid "Please enter the verification code sent to {phoneNumberFormatted}."
+#~ msgstr "Introdueix el codi de verificació enviat a {phoneNumberFormatted}"
-#: src/view/com/auth/create/state.ts:146
+#: src/screens/Signup/state.ts:220
msgid "Please enter your email."
msgstr "Introdueix el teu correu."
-#: src/view/com/modals/DeleteAccount.tsx:191
+#: src/view/com/modals/DeleteAccount.tsx:190
msgid "Please enter your password as well:"
msgstr "Introdueix la teva contrasenya també:"
+#: src/components/moderation/LabelsOnMeDialog.tsx:221
+msgid "Please explain why you think this label was incorrectly applied by {0}"
+msgstr "Explica per què creieu que aquesta etiqueta ha estat aplicada incorrectament per {0}"
+
#: src/view/com/modals/AppealLabel.tsx:72
#: src/view/com/modals/AppealLabel.tsx:75
-msgid "Please tell us why you think this content warning was incorrectly applied!"
-msgstr "Digues-nos per què creus que s'ha aplicat incorrectament l'advertència de contingut."
+#~ msgid "Please tell us why you think this content warning was incorrectly applied!"
+#~ msgstr "Digues-nos per què creus que s'ha aplicat incorrectament l'advertència de contingut."
#~ msgid "Please tell us why you think this decision was incorrect."
#~ msgstr "Por favor, dinos por qué crees que esta decisión fue incorrecta."
@@ -2832,25 +3599,29 @@ msgstr "Digues-nos per què creus que s'ha aplicat incorrectament l'advertència
msgid "Please Verify Your Email"
msgstr "Verifica el teu correu"
-#: src/view/com/composer/Composer.tsx:215
+#: src/view/com/composer/Composer.tsx:222
msgid "Please wait for your link card to finish loading"
msgstr "Espera que es generi la targeta de l'enllaç"
#: src/screens/Onboarding/index.tsx:37
msgid "Politics"
-msgstr ""
+msgstr "Política"
#: src/view/com/modals/SelfLabel.tsx:111
msgid "Porn"
msgstr "Pornografia"
-#: src/view/com/composer/Composer.tsx:350
-#: src/view/com/composer/Composer.tsx:358
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#~ msgid "Pornography"
+#~ msgstr "Pornografia"
+
+#: src/view/com/composer/Composer.tsx:367
+#: src/view/com/composer/Composer.tsx:375
msgctxt "action"
msgid "Post"
msgstr "Publica"
-#: src/view/com/post-thread/PostThread.tsx:246
+#: src/view/com/post-thread/PostThread.tsx:292
msgctxt "description"
msgid "Post"
msgstr "Publicació"
@@ -2861,24 +3632,34 @@ msgstr "Publicació"
#~ msgid "Post"
#~ msgstr "Publicació"
-#: src/view/com/post-thread/PostThreadItem.tsx:174
+#: src/view/com/post-thread/PostThreadItem.tsx:175
msgid "Post by {0}"
msgstr "Publicació per {0}"
-#: src/Navigation.tsx:172
-#: src/Navigation.tsx:179
-#: src/Navigation.tsx:186
+#: src/Navigation.tsx:176
+#: src/Navigation.tsx:183
+#: src/Navigation.tsx:190
msgid "Post by @{0}"
msgstr "Publicació per @{0}"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:84
+#: src/view/com/util/forms/PostDropdownBtn.tsx:105
msgid "Post deleted"
msgstr "Publicació eliminada"
-#: src/view/com/post-thread/PostThread.tsx:398
+#: src/view/com/post-thread/PostThread.tsx:157
msgid "Post hidden"
msgstr "Publicació oculta"
+#: src/components/moderation/ModerationDetailsDialog.tsx:97
+#: src/lib/moderation/useModerationCauseDescription.ts:99
+msgid "Post Hidden by Muted Word"
+msgstr "Publicació amagada per una paraula silenciada"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:100
+#: src/lib/moderation/useModerationCauseDescription.ts:108
+msgid "Post Hidden by You"
+msgstr "Publicació amagada per tu"
+
#: src/view/com/composer/select-language/SelectLangBtn.tsx:87
msgid "Post language"
msgstr "Idioma de la publicació"
@@ -2887,23 +3668,42 @@ msgstr "Idioma de la publicació"
msgid "Post Languages"
msgstr "Idiomes de les publicacions"
-#: src/view/com/post-thread/PostThread.tsx:450
+#: src/view/com/post-thread/PostThread.tsx:152
+#: src/view/com/post-thread/PostThread.tsx:164
msgid "Post not found"
msgstr "Publicació no trobada"
-#: src/view/screens/Profile.tsx:180
+#: src/components/TagMenu/index.tsx:253
+msgid "posts"
+msgstr "publicacions"
+
+#: src/view/screens/Profile.tsx:190
msgid "Posts"
msgstr "Publicacions"
+#: src/components/dialogs/MutedWords.tsx:89
+msgid "Posts can be muted based on their text, their tags, or both."
+msgstr "Les publicacions es poder silenciar segons el seu text, etiquetes o ambdues."
+
#: src/view/com/posts/FeedErrorMessage.tsx:64
msgid "Posts hidden"
msgstr "Publicacions amagades"
-#: src/view/com/modals/LinkWarning.tsx:46
+#: src/view/com/modals/LinkWarning.tsx:60
msgid "Potentially Misleading Link"
msgstr "Enllaç potencialment enganyós"
-#: src/view/com/lightbox/Lightbox.web.tsx:135
+#: src/components/forms/HostingProvider.tsx:45
+msgid "Press to change hosting provider"
+msgstr ""
+
+#: src/components/Error.tsx:74
+#: src/components/Lists.tsx:80
+#: src/screens/Signup/index.tsx:186
+msgid "Press to retry"
+msgstr "Prem per a tornar-ho a provar"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:150
msgid "Previous image"
msgstr "Imatge anterior"
@@ -2915,59 +3715,65 @@ msgstr "Idioma principal"
msgid "Prioritize Your Follows"
msgstr "Prioritza els usuaris que segueixes"
-#: src/view/screens/Settings/index.tsx:632
-#: src/view/shell/desktop/RightNav.tsx:80
+#: src/view/screens/Settings/index.tsx:652
+#: src/view/shell/desktop/RightNav.tsx:72
msgid "Privacy"
msgstr "Privacitat"
-#: src/Navigation.tsx:217
+#: src/Navigation.tsx:231
+#: src/screens/Signup/StepInfo/Policies.tsx:56
#: src/view/screens/PrivacyPolicy.tsx:29
-#: src/view/screens/Settings/index.tsx:891
-#: src/view/shell/Drawer.tsx:262
+#: src/view/screens/Settings/index.tsx:923
+#: src/view/shell/Drawer.tsx:265
msgid "Privacy Policy"
msgstr "Política de privacitat"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:198
+#: src/screens/Login/ForgotPasswordForm.tsx:156
msgid "Processing..."
msgstr "Processant…"
-#: src/view/shell/bottom-bar/BottomBar.tsx:247
-#: src/view/shell/desktop/LeftNav.tsx:415
+#: src/view/screens/DebugMod.tsx:888
+#: src/view/screens/Profile.tsx:342
+msgid "profile"
+msgstr "perfil"
+
+#: src/view/shell/bottom-bar/BottomBar.tsx:260
+#: src/view/shell/desktop/LeftNav.tsx:419
#: src/view/shell/Drawer.tsx:70
-#: src/view/shell/Drawer.tsx:546
-#: src/view/shell/Drawer.tsx:547
+#: src/view/shell/Drawer.tsx:549
+#: src/view/shell/Drawer.tsx:550
msgid "Profile"
msgstr "Perfil"
-#: src/view/com/modals/EditProfile.tsx:128
+#: src/view/com/modals/EditProfile.tsx:129
msgid "Profile updated"
msgstr "Perfil actualitzat"
-#: src/view/screens/Settings/index.tsx:949
+#: src/view/screens/Settings/index.tsx:981
msgid "Protect your account by verifying your email."
msgstr "Protegeix el teu compte verificant el teu correu."
-#: src/screens/Onboarding/StepFinished.tsx:101
+#: src/screens/Onboarding/StepFinished.tsx:105
msgid "Public"
-msgstr ""
+msgstr "Públic"
#: src/view/screens/ModerationModlists.tsx:61
msgid "Public, shareable lists of users to mute or block in bulk."
-msgstr "Llistes d'usuaris per silenciar o bloquejar en massa, públiques i per compartir."
+msgstr "Llistes d'usuaris per a silenciar o bloquejar en massa, públiques i per a compartir."
#: src/view/screens/Lists.tsx:61
msgid "Public, shareable lists which can drive feeds."
-msgstr "Llistes que poden nodrir canals, públiques i per compartir."
+msgstr "Llistes que poden nodrir canals, públiques i per a compartir."
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish post"
msgstr "Publica"
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish reply"
msgstr "Publica la resposta"
-#: src/view/com/modals/Repost.tsx:65
+#: src/view/com/modals/Repost.tsx:66
msgctxt "action"
msgid "Quote post"
msgstr "Cita la publicació"
@@ -2976,7 +3782,7 @@ msgstr "Cita la publicació"
msgid "Quote post"
msgstr "Cita la publicació"
-#: src/view/com/modals/Repost.tsx:70
+#: src/view/com/modals/Repost.tsx:71
msgctxt "action"
msgid "Quote Post"
msgstr "Cita la publicació"
@@ -2987,12 +3793,16 @@ msgstr "Cita la publicació"
#: src/view/screens/PreferencesThreads.tsx:86
msgid "Random (aka \"Poster's Roulette\")"
-msgstr "Aleatori (també conegut com \"Poster's Roulette\")"
+msgstr "Aleatori (també conegut com a \"Poster's Roulette\")"
-#: src/view/com/modals/EditImage.tsx:236
+#: src/view/com/modals/EditImage.tsx:237
msgid "Ratios"
msgstr "Proporcions"
+#: src/view/screens/Search/Search.tsx:777
+msgid "Recent Searches"
+msgstr "Cerques recents"
+
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116
msgid "Recommended Feeds"
msgstr "Canals recomanats"
@@ -3001,35 +3811,50 @@ msgstr "Canals recomanats"
msgid "Recommended Users"
msgstr "Usuaris recomanats"
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/components/dialogs/MutedWords.tsx:286
+#: src/view/com/feeds/FeedSourceCard.tsx:283
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/SelfLabel.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/com/util/UserAvatar.tsx:285
-#: src/view/com/util/UserBanner.tsx:91
+#: src/view/com/posts/FeedErrorMessage.tsx:204
msgid "Remove"
msgstr "Elimina"
-#: src/view/com/feeds/FeedSourceCard.tsx:106
-msgid "Remove {0} from my feeds?"
-msgstr "Vols eliminar {0} dels teus canals?"
+#: src/view/com/feeds/FeedSourceCard.tsx:108
+#~ msgid "Remove {0} from my feeds?"
+#~ msgstr "Vols eliminar {0} dels teus canals?"
#: src/view/com/util/AccountDropdownBtn.tsx:22
msgid "Remove account"
msgstr "Elimina el compte"
-#: src/view/com/posts/FeedErrorMessage.tsx:131
-#: src/view/com/posts/FeedErrorMessage.tsx:166
+#: src/view/com/util/UserAvatar.tsx:358
+msgid "Remove Avatar"
+msgstr "Elimina l'avatar"
+
+#: src/view/com/util/UserBanner.tsx:148
+msgid "Remove Banner"
+msgstr "Elimina el bàner"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:160
msgid "Remove feed"
msgstr "Elimina el canal"
-#: src/view/com/feeds/FeedSourceCard.tsx:105
-#: src/view/com/feeds/FeedSourceCard.tsx:167
-#: src/view/com/feeds/FeedSourceCard.tsx:172
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/posts/FeedErrorMessage.tsx:201
+msgid "Remove feed?"
+msgstr "Vols eliminar el canal?"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:173
+#: src/view/com/feeds/FeedSourceCard.tsx:233
+#: src/view/screens/ProfileFeed.tsx:335
+#: src/view/screens/ProfileFeed.tsx:341
msgid "Remove from my feeds"
msgstr "Elimina dels meus canals"
+#: src/view/com/feeds/FeedSourceCard.tsx:278
+msgid "Remove from my feeds?"
+msgstr "Vols eliminar-lo dels teus canals?"
+
#: src/view/com/composer/photos/Gallery.tsx:167
msgid "Remove image"
msgstr "Elimina la imatge"
@@ -3038,33 +3863,44 @@ msgstr "Elimina la imatge"
msgid "Remove image preview"
msgstr "Elimina la visualització prèvia de la imatge"
-#: src/view/com/modals/Repost.tsx:47
+#: src/components/dialogs/MutedWords.tsx:329
+msgid "Remove mute word from your list"
+msgstr "Elimina la paraula silenciada de la teva llista"
+
+#: src/view/com/modals/Repost.tsx:48
msgid "Remove repost"
msgstr "Elimina la republicació"
-#: src/view/com/feeds/FeedSourceCard.tsx:173
-msgid "Remove this feed from my feeds?"
-msgstr "Vols eliminar aquest canal dels meus canals?"
+#: src/view/com/feeds/FeedSourceCard.tsx:175
+#~ msgid "Remove this feed from my feeds?"
+#~ msgstr "Vols eliminar aquest canal dels teus canals?"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:202
+msgid "Remove this feed from your saved feeds"
+msgstr "Elimina aquest canal dels meus canals"
#: src/view/com/posts/FeedErrorMessage.tsx:132
-msgid "Remove this feed from your saved feeds?"
-msgstr "Vols eliminar aquest canal dels teus canals desats?"
+#~ msgid "Remove this feed from your saved feeds?"
+#~ msgstr "Vols eliminar aquest canal dels teus canals desats?"
#: src/view/com/modals/ListAddRemoveUsers.tsx:199
#: src/view/com/modals/UserAddRemoveLists.tsx:152
msgid "Removed from list"
msgstr "Elimina de la llista"
-#: src/view/com/feeds/FeedSourceCard.tsx:111
-#: src/view/com/feeds/FeedSourceCard.tsx:178
+#: src/view/com/feeds/FeedSourceCard.tsx:121
msgid "Removed from my feeds"
msgstr "Eliminat dels meus canals"
+#: src/view/screens/ProfileFeed.tsx:209
+msgid "Removed from your feeds"
+msgstr "Eliminat dels teus canals"
+
#: src/view/com/composer/ExternalEmbed.tsx:71
msgid "Removes default thumbnail from {0}"
msgstr "Elimina la miniatura per defecte de {0}"
-#: src/view/screens/Profile.tsx:181
+#: src/view/screens/Profile.tsx:191
msgid "Replies"
msgstr "Respostes"
@@ -3072,49 +3908,75 @@ msgstr "Respostes"
msgid "Replies to this thread are disabled"
msgstr "Les respostes a aquest fil de debat estan deshabilitades"
-#: src/view/com/composer/Composer.tsx:348
+#: src/view/com/composer/Composer.tsx:365
msgctxt "action"
msgid "Reply"
msgstr "Respon"
-#: src/view/screens/PreferencesHomeFeed.tsx:144
+#: src/view/screens/PreferencesFollowingFeed.tsx:144
msgid "Reply Filters"
msgstr "Filtres de resposta"
#: src/view/com/post/Post.tsx:166
-#: src/view/com/posts/FeedItem.tsx:287
+#: src/view/com/posts/FeedItem.tsx:280
msgctxt "description"
msgid "Reply to <0/>"
msgstr "Resposta a <0/>"
#: src/view/com/modals/report/Modal.tsx:166
-msgid "Report {collectionName}"
-msgstr "Informa de {collectionName}"
+#~ msgid "Report {collectionName}"
+#~ msgstr "Informa de {collectionName}"
-#: src/view/com/profile/ProfileHeader.tsx:360
+#: src/view/com/profile/ProfileMenu.tsx:319
+#: src/view/com/profile/ProfileMenu.tsx:322
msgid "Report Account"
msgstr "Informa del compte"
-#: src/view/screens/ProfileFeed.tsx:292
+#: src/components/ReportDialog/index.tsx:49
+msgid "Report dialog"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:352
+#: src/view/screens/ProfileFeed.tsx:354
msgid "Report feed"
msgstr "Informa del canal"
-#: src/view/screens/ProfileList.tsx:458
+#: src/view/screens/ProfileList.tsx:429
msgid "Report List"
msgstr "Informa de la llista"
-#: src/view/com/modals/report/SendReportButton.tsx:37
-#: src/view/com/util/forms/PostDropdownBtn.tsx:210
+#: src/view/com/util/forms/PostDropdownBtn.tsx:292
+#: src/view/com/util/forms/PostDropdownBtn.tsx:294
msgid "Report post"
msgstr "Informa de la publicació"
-#: src/view/com/modals/Repost.tsx:43
-#: src/view/com/modals/Repost.tsx:48
-#: src/view/com/modals/Repost.tsx:53
+#: src/components/ReportDialog/SelectReportOptionView.tsx:42
+msgid "Report this content"
+msgstr "Informa d'aquest contingut"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:55
+msgid "Report this feed"
+msgstr "Informa d'aquest canal"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:52
+msgid "Report this list"
+msgstr "Informa d'aquesta llista"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:49
+msgid "Report this post"
+msgstr "Informa d'aquesta publicació"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:46
+msgid "Report this user"
+msgstr "Informa d'aquest usuari"
+
+#: src/view/com/modals/Repost.tsx:44
+#: src/view/com/modals/Repost.tsx:49
+#: src/view/com/modals/Repost.tsx:54
#: src/view/com/util/post-ctrls/RepostButton.tsx:61
msgctxt "action"
msgid "Repost"
-msgstr "Respon"
+msgstr "Republica"
#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
msgid "Repost"
@@ -3131,21 +3993,21 @@ msgstr "Republica o cita la publicació"
#: src/view/screens/PostRepostedBy.tsx:27
msgid "Reposted By"
-msgstr ""
+msgstr "Republicat per"
-#: src/view/com/posts/FeedItem.tsx:207
+#: src/view/com/posts/FeedItem.tsx:197
msgid "Reposted by {0}"
-msgstr ""
+msgstr "Republicat per {0}"
#: src/view/com/posts/FeedItem.tsx:206
#~ msgid "Reposted by {0})"
#~ msgstr "Republicada per {0}"
-#: src/view/com/posts/FeedItem.tsx:224
+#: src/view/com/posts/FeedItem.tsx:214
msgid "Reposted by <0/>"
msgstr "Republicada per <0/>"
-#: src/view/com/notifications/FeedItem.tsx:162
+#: src/view/com/notifications/FeedItem.tsx:166
msgid "reposted your post"
msgstr "ha republicat la teva publicació"
@@ -3159,60 +4021,61 @@ msgid "Request Change"
msgstr "Demana un canvi"
#: src/view/com/auth/create/Step2.tsx:219
-msgid "Request code"
-msgstr "Demana un codi"
+#~ msgid "Request code"
+#~ msgstr "Demana un codi"
-#: src/view/com/modals/ChangePassword.tsx:239
#: src/view/com/modals/ChangePassword.tsx:241
+#: src/view/com/modals/ChangePassword.tsx:243
msgid "Request Code"
-msgstr ""
+msgstr "Demana un codi"
-#: src/view/screens/Settings/index.tsx:456
+#: src/view/screens/Settings/index.tsx:475
msgid "Require alt text before posting"
msgstr "Requereix un text alternatiu abans de publicar"
-#: src/view/com/auth/create/Step1.tsx:149
+#: src/screens/Signup/StepInfo/index.tsx:69
msgid "Required for this provider"
msgstr "Requerit per aquest proveïdor"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:124
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:136
+#: src/view/com/modals/ChangePassword.tsx:185
msgid "Reset code"
msgstr "Codi de restabliment"
-#: src/view/com/modals/ChangePassword.tsx:190
+#: src/view/com/modals/ChangePassword.tsx:192
msgid "Reset Code"
-msgstr ""
+msgstr "Codi de restabliment"
#: src/view/screens/Settings/index.tsx:824
-msgid "Reset onboarding"
-msgstr "Restableix la incorporació"
+#~ msgid "Reset onboarding"
+#~ msgstr "Restableix la incorporació"
-#: src/view/screens/Settings/index.tsx:827
+#: src/view/screens/Settings/index.tsx:858
+#: src/view/screens/Settings/index.tsx:861
msgid "Reset onboarding state"
msgstr "Restableix l'estat de la incorporació"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:104
+#: src/screens/Login/ForgotPasswordForm.tsx:86
msgid "Reset password"
msgstr "Restableix la contrasenya"
#: src/view/screens/Settings/index.tsx:814
-msgid "Reset preferences"
-msgstr "Restableix les preferències"
+#~ msgid "Reset preferences"
+#~ msgstr "Restableix les preferències"
-#: src/view/screens/Settings/index.tsx:817
+#: src/view/screens/Settings/index.tsx:848
+#: src/view/screens/Settings/index.tsx:851
msgid "Reset preferences state"
msgstr "Restableix l'estat de les preferències"
-#: src/view/screens/Settings/index.tsx:825
+#: src/view/screens/Settings/index.tsx:859
msgid "Resets the onboarding state"
msgstr "Restableix l'estat de la incorporació"
-#: src/view/screens/Settings/index.tsx:815
+#: src/view/screens/Settings/index.tsx:849
msgid "Resets the preferences state"
msgstr "Restableix l'estat de les preferències"
-#: src/view/com/auth/login/LoginForm.tsx:269
+#: src/screens/Login/LoginForm.tsx:235
msgid "Retries login"
msgstr "Torna a intentar iniciar sessió"
@@ -3221,105 +4084,150 @@ msgstr "Torna a intentar iniciar sessió"
msgid "Retries the last action, which errored out"
msgstr "Torna a intentar l'última acció, que ha donat error"
-#: src/screens/Onboarding/StepInterests/index.tsx:221
-#: src/screens/Onboarding/StepInterests/index.tsx:224
-#: src/view/com/auth/create/CreateAccount.tsx:170
-#: src/view/com/auth/create/CreateAccount.tsx:175
-#: src/view/com/auth/create/Step2.tsx:255
-#: src/view/com/auth/login/LoginForm.tsx:268
-#: src/view/com/auth/login/LoginForm.tsx:271
+#: src/components/Error.tsx:79
+#: src/components/Lists.tsx:91
+#: src/screens/Login/LoginForm.tsx:234
+#: src/screens/Login/LoginForm.tsx:241
+#: src/screens/Onboarding/StepInterests/index.tsx:225
+#: src/screens/Onboarding/StepInterests/index.tsx:228
+#: src/screens/Signup/index.tsx:193
#: src/view/com/util/error/ErrorMessage.tsx:55
#: src/view/com/util/error/ErrorScreen.tsx:72
msgid "Retry"
msgstr "Torna-ho a provar"
#: src/view/com/auth/create/Step2.tsx:247
-msgid "Retry."
-msgstr "Torna-ho a provar"
+#~ msgid "Retry."
+#~ msgstr "Torna-ho a provar"
-#: src/view/screens/ProfileList.tsx:898
+#: src/components/Error.tsx:86
+#: src/view/screens/ProfileList.tsx:917
msgid "Return to previous page"
msgstr "Torna a la pàgina anterior"
+#: src/view/screens/NotFound.tsx:59
+msgid "Returns to home page"
+msgstr "Torna a la pàgina d'inici"
+
+#: src/view/screens/NotFound.tsx:58
+#: src/view/screens/ProfileFeed.tsx:113
+msgid "Returns to previous page"
+msgstr "Torna a la pàgina anterior"
+
#: src/view/shell/desktop/RightNav.tsx:55
-msgid "SANDBOX. Posts and accounts are not permanent."
-msgstr "ENTORN DE PROVES. Les publicacions i els comptes no són permanents."
+#~ msgid "SANDBOX. Posts and accounts are not permanent."
+#~ msgstr "ENTORN DE PROVES. Les publicacions i els comptes no són permanents."
-#: src/view/com/lightbox/Lightbox.tsx:132
-#: src/view/com/modals/CreateOrEditList.tsx:345
-msgctxt "action"
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/view/com/modals/ChangeHandle.tsx:174
+#: src/view/com/modals/CreateOrEditList.tsx:338
+#: src/view/com/modals/EditProfile.tsx:225
msgid "Save"
msgstr "Desa"
-#: src/view/com/modals/BirthDateSettings.tsx:94
-#: src/view/com/modals/BirthDateSettings.tsx:97
-#: src/view/com/modals/ChangeHandle.tsx:173
-#: src/view/com/modals/CreateOrEditList.tsx:337
-#: src/view/com/modals/EditProfile.tsx:224
-#: src/view/screens/ProfileFeed.tsx:345
+#: src/view/com/lightbox/Lightbox.tsx:132
+#: src/view/com/modals/CreateOrEditList.tsx:346
+msgctxt "action"
msgid "Save"
msgstr "Desa"
-#: src/view/com/modals/AltImage.tsx:130
+#: src/view/com/modals/AltImage.tsx:131
msgid "Save alt text"
msgstr "Desa el text alternatiu"
-#: src/view/com/modals/EditProfile.tsx:232
+#: src/components/dialogs/BirthDateSettings.tsx:119
+msgid "Save birthday"
+msgstr "Desa la data de naixement"
+
+#: src/view/com/modals/EditProfile.tsx:233
msgid "Save Changes"
msgstr "Desa els canvis"
-#: src/view/com/modals/ChangeHandle.tsx:170
+#: src/view/com/modals/ChangeHandle.tsx:171
msgid "Save handle change"
msgstr "Desa el canvi d'identificador"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:144
+#: src/view/com/modals/crop-image/CropImage.web.tsx:145
msgid "Save image crop"
msgstr "Desa la imatge retallada"
+#: src/view/screens/ProfileFeed.tsx:336
+#: src/view/screens/ProfileFeed.tsx:342
+msgid "Save to my feeds"
+msgstr "Desa-ho als meus canals"
+
#: src/view/screens/SavedFeeds.tsx:122
msgid "Saved Feeds"
msgstr "Canals desats"
-#: src/view/com/modals/EditProfile.tsx:225
+#: src/view/com/lightbox/Lightbox.tsx:81
+msgid "Saved to your camera roll."
+msgstr "S'ha desat a la teva galeria d'imatges."
+
+#: src/view/screens/ProfileFeed.tsx:213
+msgid "Saved to your feeds"
+msgstr "S'ha desat als teus canals."
+
+#: src/view/com/modals/EditProfile.tsx:226
msgid "Saves any changes to your profile"
msgstr "Desa qualsevol canvi al teu perfil"
-#: src/view/com/modals/ChangeHandle.tsx:171
+#: src/view/com/modals/ChangeHandle.tsx:172
msgid "Saves handle change to {handle}"
msgstr "Desa el canvi d'identificador a {handle}"
+#: src/view/com/modals/crop-image/CropImage.web.tsx:146
+msgid "Saves image crop settings"
+msgstr "Desa la configuració de retall d'imatges"
+
#: src/screens/Onboarding/index.tsx:36
msgid "Science"
-msgstr ""
+msgstr "Ciència"
-#: src/view/screens/ProfileList.tsx:854
+#: src/view/screens/ProfileList.tsx:873
msgid "Scroll to top"
msgstr "Desplaça't cap a dalt"
-#: src/Navigation.tsx:437
-#: src/view/com/auth/LoggedOut.tsx:122
+#: src/Navigation.tsx:459
+#: src/view/com/auth/LoggedOut.tsx:123
#: src/view/com/modals/ListAddRemoveUsers.tsx:75
#: src/view/com/util/forms/SearchInput.tsx:67
#: src/view/com/util/forms/SearchInput.tsx:79
-#: src/view/screens/Search/Search.tsx:418
-#: src/view/screens/Search/Search.tsx:645
-#: src/view/screens/Search/Search.tsx:663
-#: src/view/shell/bottom-bar/BottomBar.tsx:159
-#: src/view/shell/desktop/LeftNav.tsx:324
-#: src/view/shell/desktop/Search.tsx:214
-#: src/view/shell/desktop/Search.tsx:223
-#: src/view/shell/Drawer.tsx:362
-#: src/view/shell/Drawer.tsx:363
+#: src/view/screens/Search/Search.tsx:421
+#: src/view/screens/Search/Search.tsx:670
+#: src/view/screens/Search/Search.tsx:688
+#: src/view/shell/bottom-bar/BottomBar.tsx:169
+#: src/view/shell/desktop/LeftNav.tsx:328
+#: src/view/shell/desktop/Search.tsx:215
+#: src/view/shell/desktop/Search.tsx:224
+#: src/view/shell/Drawer.tsx:365
+#: src/view/shell/Drawer.tsx:366
msgid "Search"
msgstr "Cerca"
-#: src/view/screens/Search/Search.tsx:712
-#: src/view/shell/desktop/Search.tsx:255
+#: src/view/screens/Search/Search.tsx:737
+#: src/view/shell/desktop/Search.tsx:256
msgid "Search for \"{query}\""
msgstr "Cerca per \"{query}\""
-#: src/view/com/auth/LoggedOut.tsx:104
+#: src/components/TagMenu/index.tsx:145
+msgid "Search for all posts by @{authorHandle} with tag {displayTag}"
+msgstr "Cerca totes les publicacions de @{authorHandle} amb l'etiqueta {displayTag}"
+
+#: src/components/TagMenu/index.tsx:145
+#~ msgid "Search for all posts by @{authorHandle} with tag {tag}"
+#~ msgstr "Cerca totes les publicacions de @{authorHandle} amb l'etiqueta {tag}"
+
+#: src/components/TagMenu/index.tsx:94
+msgid "Search for all posts with tag {displayTag}"
+msgstr "Cerca totes les publicacions amb l'etiqueta {displayTag}"
+
+#: src/components/TagMenu/index.tsx:90
+#~ msgid "Search for all posts with tag {tag}"
+#~ msgstr "Cerca totes les publicacions amb l'etiqueta {tag}"
+
#: src/view/com/auth/LoggedOut.tsx:105
+#: src/view/com/auth/LoggedOut.tsx:106
#: src/view/com/modals/ListAddRemoveUsers.tsx:70
msgid "Search for users"
msgstr "Cerca usuaris"
@@ -3328,11 +4236,35 @@ msgstr "Cerca usuaris"
msgid "Security Step Required"
msgstr "Es requereix un pas de seguretat"
+#: src/components/TagMenu/index.web.tsx:66
+msgid "See {truncatedTag} posts"
+msgstr "Mostra les publicacions amb {truncatedTag}"
+
+#: src/components/TagMenu/index.web.tsx:83
+msgid "See {truncatedTag} posts by user"
+msgstr "Mostra les publicacions amb {truncatedTag} per usuari"
+
+#: src/components/TagMenu/index.tsx:128
+msgid "See <0>{displayTag}0> posts"
+msgstr "Mostra les publicacions amb <0>{displayTag}0>"
+
+#: src/components/TagMenu/index.tsx:187
+msgid "See <0>{displayTag}0> posts by this user"
+msgstr "Mostra les publicacions amb <0>{displayTag}0> d'aquest usuari"
+
+#: src/components/TagMenu/index.tsx:128
+#~ msgid "See <0>{tag}0> posts"
+#~ msgstr "Mostra les publicacions amb <0>{tag}0>"
+
+#: src/components/TagMenu/index.tsx:189
+#~ msgid "See <0>{tag}0> posts by this user"
+#~ msgstr "Mostra les publicacions amb <0>{tag}0> d'aquest usuari"
+
#: src/view/screens/SavedFeeds.tsx:163
msgid "See this guide"
msgstr "Consulta aquesta guia"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:39
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:40
msgid "See what's next"
msgstr "Què més hi ha"
@@ -3340,77 +4272,101 @@ msgstr "Què més hi ha"
msgid "Select {item}"
msgstr "Selecciona {item}"
+#: src/screens/Login/ChooseAccountForm.tsx:61
+msgid "Select account"
+msgstr ""
+
#: src/view/com/modals/ServerInput.tsx:75
#~ msgid "Select Bluesky Social"
#~ msgstr "Selecciona Bluesky Social"
-#: src/view/com/auth/login/Login.tsx:117
+#: src/screens/Login/index.tsx:120
msgid "Select from an existing account"
msgstr "Selecciona d'un compte existent"
+#: src/view/screens/LanguageSettings.tsx:299
+msgid "Select languages"
+msgstr "Selecciona els idiomes"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:30
+msgid "Select moderator"
+msgstr "Selecciona el moderador"
+
#: src/view/com/util/Selector.tsx:107
msgid "Select option {i} of {numItems}"
msgstr "Selecciona l'opció {i} de {numItems}"
-#: src/view/com/auth/create/Step1.tsx:99
-#: src/view/com/auth/login/LoginForm.tsx:150
-msgid "Select service"
-msgstr "Selecciona el servei"
+#: src/view/com/auth/create/Step1.tsx:96
+#: src/view/com/auth/login/LoginForm.tsx:153
+#~ msgid "Select service"
+#~ msgstr "Selecciona el servei"
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:52
msgid "Select some accounts below to follow"
-msgstr ""
+msgstr "Selecciona alguns d'aquests comptes per a seguir-los"
+
+#: src/components/ReportDialog/SubmitView.tsx:135
+msgid "Select the moderation service(s) to report to"
+msgstr "Selecciona els serveis de moderació als quals voleu informar"
#: src/view/com/auth/server-input/index.tsx:82
msgid "Select the service that hosts your data."
-msgstr ""
+msgstr "Selecciona el servei que allotja les teves dades."
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:90
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:100
msgid "Select topical feeds to follow from the list below"
-msgstr ""
+msgstr "Selecciona els canals d'actualitat per a seguir d'aquesta llista"
-#: src/screens/Onboarding/StepModeration/index.tsx:75
+#: src/screens/Onboarding/StepModeration/index.tsx:63
msgid "Select what you want to see (or not see), and we’ll handle the rest."
-msgstr ""
+msgstr "Selecciona què vols veure (o què no vols veure) i nosaltres farem la resta."
#: src/view/screens/LanguageSettings.tsx:281
msgid "Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown."
msgstr "Selecciona quins idiomes vols que incloguin els canals a què estàs subscrit. Si no en selecciones cap, es mostraran tots."
#: src/view/screens/LanguageSettings.tsx:98
-msgid "Select your app language for the default text to display in the app"
-msgstr "Selecciona l'idioma de l'aplicació perquè el text predeterminat es mostri en aquesta"
+#~ msgid "Select your app language for the default text to display in the app"
+#~ msgstr "Selecciona l'idioma de l'aplicació perquè el text predeterminat es mostri en aquesta"
-#: src/screens/Onboarding/StepInterests/index.tsx:196
-msgid "Select your interests from the options below"
+#: src/view/screens/LanguageSettings.tsx:98
+msgid "Select your app language for the default text to display in the app."
+msgstr "Selecciona l'idioma de l'aplicació perquè el text predeterminat es mostri a l'aplicació."
+
+#: src/screens/Signup/StepInfo/index.tsx:133
+msgid "Select your date of birth"
msgstr ""
+#: src/screens/Onboarding/StepInterests/index.tsx:200
+msgid "Select your interests from the options below"
+msgstr "Selecciona els teus interessos d'entre aquestes opcions"
+
#: src/view/com/auth/create/Step2.tsx:155
-msgid "Select your phone's country"
-msgstr "Selecciona el país del teu telèfon"
+#~ msgid "Select your phone's country"
+#~ msgstr "Selecciona el país del teu telèfon"
#: src/view/screens/LanguageSettings.tsx:190
msgid "Select your preferred language for translations in your feed."
msgstr "Selecciona el teu idioma preferit per a les traduccions al teu canal."
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:116
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:117
msgid "Select your primary algorithmic feeds"
-msgstr ""
+msgstr "Selecciona els teus canals algorítmics primaris"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:142
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:133
msgid "Select your secondary algorithmic feeds"
-msgstr ""
+msgstr "Selecciona els teus canals algorítmics secundaris"
#: src/view/com/modals/VerifyEmail.tsx:202
#: src/view/com/modals/VerifyEmail.tsx:204
msgid "Send Confirmation Email"
msgstr "Envia correu de confirmació"
-#: src/view/com/modals/DeleteAccount.tsx:131
+#: src/view/com/modals/DeleteAccount.tsx:130
msgid "Send email"
msgstr "Envia correu"
-#: src/view/com/modals/DeleteAccount.tsx:144
+#: src/view/com/modals/DeleteAccount.tsx:143
msgctxt "action"
msgid "Send Email"
msgstr "Envia correu"
@@ -3419,107 +4375,156 @@ msgstr "Envia correu"
#~ msgid "Send Email"
#~ msgstr "Envia correu"
-#: src/view/shell/Drawer.tsx:295
-#: src/view/shell/Drawer.tsx:316
+#: src/view/shell/Drawer.tsx:298
+#: src/view/shell/Drawer.tsx:319
msgid "Send feedback"
msgstr "Envia comentari"
-#: src/view/com/modals/report/SendReportButton.tsx:45
-msgid "Send Report"
+#: src/components/ReportDialog/SubmitView.tsx:214
+#: src/components/ReportDialog/SubmitView.tsx:218
+msgid "Send report"
msgstr "Envia informe"
-#: src/view/com/modals/DeleteAccount.tsx:133
+#: src/view/com/modals/report/SendReportButton.tsx:45
+#~ msgid "Send Report"
+#~ msgstr "Envia informe"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:44
+msgid "Send report to {0}"
+msgstr "Envia informe a {0}"
+
+#: src/view/com/modals/DeleteAccount.tsx:132
msgid "Sends email with confirmation code for account deletion"
msgstr "Envia un correu amb el codi de confirmació per l'eliminació del compte"
-#: src/view/com/auth/server-input/index.tsx:110
+#: src/view/com/auth/server-input/index.tsx:114
msgid "Server address"
-msgstr ""
+msgstr "Adreça del servidor"
#: src/view/com/modals/ContentFilteringSettings.tsx:311
-msgid "Set {value} for {labelGroup} content moderation policy"
-msgstr "Estableix {value} per a la política de moderació de contingut {labelGroup}"
+#~ msgid "Set {value} for {labelGroup} content moderation policy"
+#~ msgstr "Estableix {value} per a la política de moderació de contingut {labelGroup}"
#: src/view/com/modals/ContentFilteringSettings.tsx:160
#: src/view/com/modals/ContentFilteringSettings.tsx:179
-msgctxt "action"
-msgid "Set Age"
-msgstr "Estableix l'edat"
+#~ msgctxt "action"
+#~ msgid "Set Age"
+#~ msgstr "Estableix l'edat"
+
+#: src/screens/Moderation/index.tsx:304
+msgid "Set birthdate"
+msgstr "Estableix la data de naixement"
#: src/view/screens/Settings/index.tsx:488
-msgid "Set color theme to dark"
-msgstr "Estableix el tema de colors a fosc"
+#~ msgid "Set color theme to dark"
+#~ msgstr "Estableix el tema de colors a fosc"
#: src/view/screens/Settings/index.tsx:481
-msgid "Set color theme to light"
-msgstr "Estableix el tema de colors a clar"
+#~ msgid "Set color theme to light"
+#~ msgstr "Estableix el tema de colors a clar"
#: src/view/screens/Settings/index.tsx:475
-msgid "Set color theme to system setting"
-msgstr "Estableix el tema de colors a la configuració del sistema"
+#~ msgid "Set color theme to system setting"
+#~ msgstr "Estableix el tema de colors a la configuració del sistema"
#: src/view/screens/Settings/index.tsx:514
-msgid "Set dark theme to the dark theme"
-msgstr ""
+#~ msgid "Set dark theme to the dark theme"
+#~ msgstr "Posa el tema fosc"
#: src/view/screens/Settings/index.tsx:507
-msgid "Set dark theme to the dim theme"
-msgstr ""
+#~ msgid "Set dark theme to the dim theme"
+#~ msgstr "Posa el tema fosc al tema atenuat"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:104
+#: src/screens/Login/SetNewPasswordForm.tsx:102
msgid "Set new password"
msgstr "Estableix una nova contrasenya"
-#: src/view/com/auth/create/Step1.tsx:221
-msgid "Set password"
-msgstr "Estableix una contrasenya"
+#: src/view/com/auth/create/Step1.tsx:202
+#~ msgid "Set password"
+#~ msgstr "Estableix una contrasenya"
-#: src/view/screens/PreferencesHomeFeed.tsx:225
+#: src/view/screens/PreferencesFollowingFeed.tsx:225
msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible."
-msgstr "Posa \"No\" a aquesta opció per amagar totes les publicacions citades del teu canal. Les republicacions encara seran visibles."
+msgstr "Posa \"No\" a aquesta opció per a amagar totes les publicacions citades del teu canal. Les republicacions encara seran visibles."
-#: src/view/screens/PreferencesHomeFeed.tsx:122
+#: src/view/screens/PreferencesFollowingFeed.tsx:122
msgid "Set this setting to \"No\" to hide all replies from your feed."
-msgstr "Posa \"No\" a aquesta opció per amagar totes les respostes del teu canal."
+msgstr "Posa \"No\" a aquesta opció per a amagar totes les respostes del teu canal."
-#: src/view/screens/PreferencesHomeFeed.tsx:191
+#: src/view/screens/PreferencesFollowingFeed.tsx:191
msgid "Set this setting to \"No\" to hide all reposts from your feed."
-msgstr "Posa \"No\" a aquesta opció per amagar totes les republicacions del teu canal."
+msgstr "Posa \"No\" a aquesta opció per a amagar totes les republicacions del teu canal."
#: src/view/screens/PreferencesThreads.tsx:122
msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature."
-msgstr "Posa \"Sí\" a aquesta opció per mostrar les respostes en vista de fil de debat. Aquesta és una opció experimental."
+msgstr "Posa \"Sí\" a aquesta opció per a mostrar les respostes en vista de fil de debat. Aquesta és una opció experimental."
#: src/view/screens/PreferencesHomeFeed.tsx:261
-msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
-msgstr "Posa \"Sí\" a aquesta opció per mostrar algunes publicacions dels teus canals en el teu canal de seguits. Aquesta és una opció experimental."
+#~ msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
+#~ msgstr "Posa \"Sí\" a aquesta opció per a mostrar algunes publicacions dels teus canals en el teu canal de seguits. Aquesta és una opció experimental."
-#: src/screens/Onboarding/Layout.tsx:50
+#: src/view/screens/PreferencesFollowingFeed.tsx:261
+msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your Following feed. This is an experimental feature."
+msgstr "Estableix aquesta configuració a \"Sí\" per a mostrar mostres dels teus canals desats al teu canal Seguint. Aquesta és una característica experimental."
+
+#: src/screens/Onboarding/Layout.tsx:48
msgid "Set up your account"
-msgstr ""
+msgstr "Configura el teu compte"
-#: src/view/com/modals/ChangeHandle.tsx:266
+#: src/view/com/modals/ChangeHandle.tsx:267
msgid "Sets Bluesky username"
msgstr "Estableix un nom d'usuari de Bluesky"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:157
+#: src/view/screens/Settings/index.tsx:507
+msgid "Sets color theme to dark"
+msgstr "Estableix el tema a fosc"
+
+#: src/view/screens/Settings/index.tsx:500
+msgid "Sets color theme to light"
+msgstr "Estableix el tema a clar"
+
+#: src/view/screens/Settings/index.tsx:494
+msgid "Sets color theme to system setting"
+msgstr "Estableix el tema a la configuració del sistema"
+
+#: src/view/screens/Settings/index.tsx:533
+msgid "Sets dark theme to the dark theme"
+msgstr "Estableix el tema fosc al tema fosc"
+
+#: src/view/screens/Settings/index.tsx:526
+msgid "Sets dark theme to the dim theme"
+msgstr "Estableix el tema fosc al tema atenuat"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:113
msgid "Sets email for password reset"
-msgstr "Estableix un correu per restablir la contrasenya"
+msgstr "Estableix un correu per a restablir la contrasenya"
#: src/view/com/auth/login/ForgotPasswordForm.tsx:122
-msgid "Sets hosting provider for password reset"
-msgstr "Estableix un proveïdor d'allotjament per restablir la contrasenya"
-
-#: src/view/com/auth/create/Step1.tsx:100
-#: src/view/com/auth/login/LoginForm.tsx:151
-msgid "Sets server for the Bluesky client"
-msgstr "Estableix el servidor pel cient de Bluesky"
-
-#: src/Navigation.tsx:135
-#: src/view/screens/Settings/index.tsx:294
-#: src/view/shell/desktop/LeftNav.tsx:433
-#: src/view/shell/Drawer.tsx:567
-#: src/view/shell/Drawer.tsx:568
+#~ msgid "Sets hosting provider for password reset"
+#~ msgstr "Estableix un proveïdor d'allotjament per a restablir la contrasenya"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:124
+msgid "Sets image aspect ratio to square"
+msgstr "Estableix la relació d'aspecte de la imatge com a quadrat"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:114
+msgid "Sets image aspect ratio to tall"
+msgstr "Estableix la relació d'aspecte de la imatge com a alta"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:104
+msgid "Sets image aspect ratio to wide"
+msgstr "Estableix la relació d'aspecte de la imatge com a ampla"
+
+#: src/view/com/auth/create/Step1.tsx:97
+#: src/view/com/auth/login/LoginForm.tsx:154
+#~ msgid "Sets server for the Bluesky client"
+#~ msgstr "Estableix el servidor pel cient de Bluesky"
+
+#: src/Navigation.tsx:139
+#: src/view/screens/Settings/index.tsx:313
+#: src/view/shell/desktop/LeftNav.tsx:437
+#: src/view/shell/Drawer.tsx:570
+#: src/view/shell/Drawer.tsx:571
msgid "Settings"
msgstr "Configuració"
@@ -3527,72 +4532,105 @@ msgstr "Configuració"
msgid "Sexual activity or erotic nudity."
msgstr "Activitat sexual o nu eròtic."
+#: src/lib/moderation/useGlobalLabelStrings.ts:38
+msgid "Sexually Suggestive"
+msgstr "Suggerent sexualment"
+
#: src/view/com/lightbox/Lightbox.tsx:141
msgctxt "action"
msgid "Share"
msgstr "Comparteix"
-#: src/view/com/profile/ProfileHeader.tsx:294
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
-#: src/view/screens/ProfileList.tsx:417
+#: src/view/com/profile/ProfileMenu.tsx:215
+#: src/view/com/profile/ProfileMenu.tsx:224
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:235
+#: src/view/screens/ProfileList.tsx:388
msgid "Share"
msgstr "Comparteix"
-#: src/view/screens/ProfileFeed.tsx:304
+#: src/view/com/profile/ProfileMenu.tsx:373
+#: src/view/com/util/forms/PostDropdownBtn.tsx:347
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:251
+msgid "Share anyway"
+msgstr "Comparteix de totes maneres"
+
+#: src/view/screens/ProfileFeed.tsx:362
+#: src/view/screens/ProfileFeed.tsx:364
msgid "Share feed"
msgstr "Comparteix el canal"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:43
-#: src/view/com/modals/ContentFilteringSettings.tsx:266
-#: src/view/com/util/moderation/ContentHider.tsx:107
-#: src/view/com/util/moderation/PostHider.tsx:108
-#: src/view/screens/Settings/index.tsx:344
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
+msgid "Share Link"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:92
+msgid "Shares the linked website"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:136
+#: src/components/moderation/PostHider.tsx:107
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:54
+#: src/view/screens/Settings/index.tsx:363
msgid "Show"
msgstr "Mostra"
-#: src/view/screens/PreferencesHomeFeed.tsx:68
+#: src/view/screens/PreferencesFollowingFeed.tsx:68
msgid "Show all replies"
msgstr "Mostra totes les respostes"
-#: src/view/com/util/moderation/ScreenHider.tsx:132
+#: src/components/moderation/ScreenHider.tsx:169
+#: src/components/moderation/ScreenHider.tsx:172
msgid "Show anyway"
msgstr "Mostra igualment"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:27
+#: src/lib/moderation/useLabelBehaviorDescription.ts:63
+msgid "Show badge"
+msgstr "Mostra la insígnia"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:61
+msgid "Show badge and filter from feeds"
+msgstr "Mostra la insígnia i filtra-ho dels canals"
+
#: src/view/com/modals/EmbedConsent.tsx:87
-msgid "Show embeds from {0}"
-msgstr "Mostra els incrustats de {0}"
+#~ msgid "Show embeds from {0}"
+#~ msgstr "Mostra els incrustats de {0}"
-#: src/view/com/profile/ProfileHeader.tsx:458
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:200
msgid "Show follows similar to {0}"
msgstr "Mostra seguidors semblants a {0}"
-#: src/view/com/post-thread/PostThreadItem.tsx:539
-#: src/view/com/post/Post.tsx:197
-#: src/view/com/posts/FeedItem.tsx:363
+#: src/view/com/post-thread/PostThreadItem.tsx:507
+#: src/view/com/post/Post.tsx:201
+#: src/view/com/posts/FeedItem.tsx:355
msgid "Show More"
msgstr "Mostra més"
-#: src/view/screens/PreferencesHomeFeed.tsx:258
+#: src/view/screens/PreferencesFollowingFeed.tsx:258
msgid "Show Posts from My Feeds"
msgstr "Mostra les publicacions dels meus canals"
-#: src/view/screens/PreferencesHomeFeed.tsx:222
+#: src/view/screens/PreferencesFollowingFeed.tsx:222
msgid "Show Quote Posts"
msgstr "Mostra les publicacions citades"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:118
+#: src/screens/Onboarding/StepFollowingFeed.tsx:119
msgid "Show quote-posts in Following feed"
-msgstr ""
+msgstr "Mostra les publicacions citades en el canal Seguint"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:134
+#: src/screens/Onboarding/StepFollowingFeed.tsx:135
msgid "Show quotes in Following"
-msgstr ""
+msgstr "Mostra els citats a Seguint"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:94
+#: src/screens/Onboarding/StepFollowingFeed.tsx:95
msgid "Show re-posts in Following feed"
-msgstr ""
+msgstr "Mostra les republicacions al canal Seguint"
-#: src/view/screens/PreferencesHomeFeed.tsx:119
+#: src/view/screens/PreferencesFollowingFeed.tsx:119
msgid "Show Replies"
msgstr "Mostra les respostes"
@@ -3600,87 +4638,98 @@ msgstr "Mostra les respostes"
msgid "Show replies by people you follow before all other replies."
msgstr "Mostra les respostes dels comptes que segueixes abans que les altres."
-#: src/screens/Onboarding/StepFollowingFeed.tsx:86
+#: src/screens/Onboarding/StepFollowingFeed.tsx:87
msgid "Show replies in Following"
-msgstr ""
+msgstr "Mostra les respostes a Seguint"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:70
+#: src/screens/Onboarding/StepFollowingFeed.tsx:71
msgid "Show replies in Following feed"
-msgstr ""
+msgstr "Mostra les respostes al canal Seguint"
-#: src/view/screens/PreferencesHomeFeed.tsx:70
+#: src/view/screens/PreferencesFollowingFeed.tsx:70
msgid "Show replies with at least {value} {0}"
msgstr "Mostra respostes amb almenys {value} {0}"
-#: src/view/screens/PreferencesHomeFeed.tsx:188
+#: src/view/screens/PreferencesFollowingFeed.tsx:188
msgid "Show Reposts"
msgstr "Mostra republicacions"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:110
+#: src/screens/Onboarding/StepFollowingFeed.tsx:111
msgid "Show reposts in Following"
-msgstr ""
+msgstr "Mostra les republicacions al canal Seguint"
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:68
+#: src/components/moderation/PostHider.tsx:64
msgid "Show the content"
msgstr "Mostra el contingut"
-#: src/view/com/notifications/FeedItem.tsx:346
+#: src/view/com/notifications/FeedItem.tsx:351
msgid "Show users"
msgstr "Mostra usuaris"
-#: src/view/com/profile/ProfileHeader.tsx:461
-msgid "Shows a list of users similar to this user."
-msgstr "Mostra una llista d'usuaris semblants a aquest"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:58
+msgid "Show warning"
+msgstr "Mostra l'advertiment"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:56
+msgid "Show warning and filter from feeds"
+msgstr "Mostra l'advertiment i filtra-ho del canals"
+
+#: src/view/com/profile/ProfileHeader.tsx:462
+#~ msgid "Shows a list of users similar to this user."
+#~ msgstr "Mostra una llista d'usuaris semblants a aquest"
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:124
-#: src/view/com/profile/ProfileHeader.tsx:505
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:130
msgid "Shows posts from {0} in your feed"
msgstr "Mostra les publicacions de {0} al teu canal"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:70
-#: src/view/com/auth/login/Login.tsx:98
-#: src/view/com/auth/SplashScreen.tsx:54
-#: src/view/shell/bottom-bar/BottomBar.tsx:285
-#: src/view/shell/bottom-bar/BottomBar.tsx:286
-#: src/view/shell/bottom-bar/BottomBar.tsx:288
+#: src/screens/Login/index.tsx:100
+#: src/screens/Login/index.tsx:119
+#: src/screens/Login/LoginForm.tsx:131
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:73
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:83
+#: src/view/com/auth/SplashScreen.tsx:81
+#: src/view/com/auth/SplashScreen.tsx:90
+#: src/view/com/auth/SplashScreen.web.tsx:110
+#: src/view/com/auth/SplashScreen.web.tsx:119
+#: src/view/shell/bottom-bar/BottomBar.tsx:300
+#: src/view/shell/bottom-bar/BottomBar.tsx:301
+#: src/view/shell/bottom-bar/BottomBar.tsx:303
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:178
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:179
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:181
#: src/view/shell/NavSignupCard.tsx:58
#: src/view/shell/NavSignupCard.tsx:59
+#: src/view/shell/NavSignupCard.tsx:61
msgid "Sign in"
msgstr "Inicia sessió"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:78
-#: src/view/com/auth/SplashScreen.tsx:57
-#: src/view/com/auth/SplashScreen.web.tsx:87
-msgid "Sign In"
-msgstr "Inicia sessió"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:82
+#: src/view/com/auth/SplashScreen.tsx:86
+#: src/view/com/auth/SplashScreen.web.tsx:91
+#~ msgid "Sign In"
+#~ msgstr "Inicia sessió"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:44
+#: src/components/AccountList.tsx:109
msgid "Sign in as {0}"
msgstr "Inicia sessió com a {0}"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:118
-#: src/view/com/auth/login/Login.tsx:116
+#: src/screens/Login/ChooseAccountForm.tsx:64
msgid "Sign in as..."
msgstr "Inicia sessió com a …"
-#: src/view/com/auth/login/LoginForm.tsx:137
-msgid "Sign into"
-msgstr "Inicia sessió en"
+#: src/view/com/auth/login/LoginForm.tsx:140
+#~ msgid "Sign into"
+#~ msgstr "Inicia sessió en"
-#: src/view/com/modals/SwitchAccount.tsx:64
-#: src/view/com/modals/SwitchAccount.tsx:69
-#: src/view/screens/Settings/index.tsx:100
-#: src/view/screens/Settings/index.tsx:103
+#: src/view/screens/Settings/index.tsx:107
+#: src/view/screens/Settings/index.tsx:110
msgid "Sign out"
msgstr "Tanca sessió"
-#: src/view/shell/bottom-bar/BottomBar.tsx:275
-#: src/view/shell/bottom-bar/BottomBar.tsx:276
-#: src/view/shell/bottom-bar/BottomBar.tsx:278
+#: src/view/shell/bottom-bar/BottomBar.tsx:290
+#: src/view/shell/bottom-bar/BottomBar.tsx:291
+#: src/view/shell/bottom-bar/BottomBar.tsx:293
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:168
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:169
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:171
@@ -3692,53 +4741,64 @@ msgstr "Registra't"
#: src/view/shell/NavSignupCard.tsx:42
msgid "Sign up or sign in to join the conversation"
-msgstr "Registra't o inicia sessió per unir-te a la conversa"
+msgstr "Registra't o inicia sessió per a unir-te a la conversa"
-#: src/view/com/util/moderation/ScreenHider.tsx:76
+#: src/components/moderation/ScreenHider.tsx:97
+#: src/lib/moderation/useGlobalLabelStrings.ts:28
msgid "Sign-in Required"
msgstr "Es requereix iniciar sessió"
-#: src/view/screens/Settings/index.tsx:355
+#: src/view/screens/Settings/index.tsx:374
msgid "Signed in as"
msgstr "S'ha iniciat sessió com a"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:103
+#: src/screens/Login/ChooseAccountForm.tsx:48
msgid "Signed in as @{0}"
-msgstr "Sha iniciat sessió com a @{0}"
+msgstr "S'ha iniciat sessió com a @{0}"
-#: src/view/com/modals/SwitchAccount.tsx:66
-msgid "Signs {0} out of Bluesky"
-msgstr "Tanca la sessió de Bluesky de {0}"
+#: src/view/com/modals/SwitchAccount.tsx:70
+#~ msgid "Signs {0} out of Bluesky"
+#~ msgstr "Tanca la sessió de Bluesky de {0}"
-#: src/screens/Onboarding/StepInterests/index.tsx:235
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:195
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:33
+#: src/screens/Onboarding/StepInterests/index.tsx:239
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:203
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:35
msgid "Skip"
msgstr "Salta aquest pas"
-#: src/screens/Onboarding/StepInterests/index.tsx:232
+#: src/screens/Onboarding/StepInterests/index.tsx:236
msgid "Skip this flow"
-msgstr ""
+msgstr "Salta aquest flux"
#: src/view/com/auth/create/Step2.tsx:82
-msgid "SMS verification"
-msgstr "Verificació per SMS"
+#~ msgid "SMS verification"
+#~ msgstr "Verificació per SMS"
#: src/screens/Onboarding/index.tsx:40
msgid "Software Dev"
-msgstr ""
+msgstr "Desenvolupament de programari"
#: src/view/com/modals/ProfilePreview.tsx:62
#~ msgid "Something went wrong and we're not sure what."
#~ msgstr "Alguna cosa ha fallat i no estem segurs de què."
+#: src/components/ReportDialog/index.tsx:59
+#: src/screens/Moderation/index.tsx:114
+#: src/screens/Profile/Sections/Labels.tsx:76
+msgid "Something went wrong, please try again."
+msgstr "Alguna cosa ha fallat, torna-ho a provar."
+
+#: src/components/Lists.tsx:203
+#~ msgid "Something went wrong!"
+#~ msgstr "Alguna cosa ha fallat."
+
#: src/view/com/modals/Waitlist.tsx:51
-msgid "Something went wrong. Check your email and try again."
-msgstr "Alguna cosa ha fallat. Comprova el teu correu i torna-ho a provar."
+#~ msgid "Something went wrong. Check your email and try again."
+#~ msgstr "Alguna cosa ha fallat. Comprova el teu correu i torna-ho a provar."
-#: src/App.native.tsx:61
+#: src/App.native.tsx:66
msgid "Sorry! Your session expired. Please log in again."
-msgstr "La teva sessió ha caducat. Torna a inciar-la."
+msgstr "La teva sessió ha caducat. Torna a iniciar-la."
#: src/view/screens/PreferencesThreads.tsx:69
msgid "Sort Replies"
@@ -3748,11 +4808,23 @@ msgstr "Ordena les respostes"
msgid "Sort replies to the same post by:"
msgstr "Ordena les respostes a la mateixa publicació per:"
+#: src/components/moderation/LabelsOnMeDialog.tsx:146
+msgid "Source:"
+msgstr "Font:"
+
+#: src/lib/moderation/useReportOptions.ts:65
+msgid "Spam"
+msgstr "Brossa"
+
+#: src/lib/moderation/useReportOptions.ts:53
+msgid "Spam; excessive mentions or replies"
+msgstr "Brossa; excessives mencions o respostes"
+
#: src/screens/Onboarding/index.tsx:30
msgid "Sports"
-msgstr ""
+msgstr "Esports"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:122
+#: src/view/com/modals/crop-image/CropImage.web.tsx:123
msgid "Square"
msgstr "Quadrat"
@@ -3760,45 +4832,62 @@ msgstr "Quadrat"
#~ msgid "Staging"
#~ msgstr "Posada en escena"
-#: src/view/screens/Settings/index.tsx:871
+#: src/view/screens/Settings/index.tsx:903
msgid "Status page"
msgstr "Pàgina d'estat"
+#: src/screens/Signup/index.tsx:142
+msgid "Step"
+msgstr ""
+
#: src/view/com/auth/create/StepHeader.tsx:22
-msgid "Step {0} of {numSteps}"
-msgstr "Pas {0} de {numSteps}"
+#~ msgid "Step {0} of {numSteps}"
+#~ msgstr "Pas {0} de {numSteps}"
-#: src/view/screens/Settings/index.tsx:274
+#: src/view/screens/Settings/index.tsx:292
msgid "Storage cleared, you need to restart the app now."
msgstr "L'emmagatzematge s'ha esborrat, cal que reinicieu l'aplicació ara."
-#: src/Navigation.tsx:202
-#: src/view/screens/Settings/index.tsx:807
+#: src/Navigation.tsx:211
+#: src/view/screens/Settings/index.tsx:831
msgid "Storybook"
msgstr "Historial"
-#: src/view/com/modals/AppealLabel.tsx:101
+#: src/components/moderation/LabelsOnMeDialog.tsx:255
+#: src/components/moderation/LabelsOnMeDialog.tsx:256
msgid "Submit"
msgstr "Envia"
-#: src/view/screens/ProfileList.tsx:607
+#: src/view/screens/ProfileList.tsx:590
msgid "Subscribe"
msgstr "Subscriure's"
-#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:173
+#: src/screens/Profile/Sections/Labels.tsx:180
+msgid "Subscribe to @{0} to use these labels:"
+msgstr "Subscriu-te a @{0} per a utilitzar aquestes etiquetes:"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:221
+msgid "Subscribe to Labeler"
+msgstr "Subscriu-te a l'Etiquetador"
+
+#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:172
#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:307
msgid "Subscribe to the {0} feed"
-msgstr ""
+msgstr "Subscriu-te al canal {0}"
-#: src/view/screens/ProfileList.tsx:603
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:184
+msgid "Subscribe to this labeler"
+msgstr "Subscriu-te a aquest etiquetador"
+
+#: src/view/screens/ProfileList.tsx:586
msgid "Subscribe to this list"
msgstr "Subscriure's a la llista"
-#: src/view/screens/Search/Search.tsx:373
+#: src/view/screens/Search/Search.tsx:376
msgid "Suggested Follows"
-msgstr "Usuaris suggerits per seguir"
+msgstr "Usuaris suggerits per a seguir"
-#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:64
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:65
msgid "Suggested for you"
msgstr "Suggeriments per tu"
@@ -3806,7 +4895,7 @@ msgstr "Suggeriments per tu"
msgid "Suggestive"
msgstr "Suggerent"
-#: src/Navigation.tsx:212
+#: src/Navigation.tsx:226
#: src/view/screens/Support.tsx:30
#: src/view/screens/Support.tsx:33
msgid "Support"
@@ -3814,62 +4903,100 @@ msgstr "Suport"
#: src/view/com/modals/ProfilePreview.tsx:110
#~ msgid "Swipe up to see more"
-#~ msgstr "Llisca cap amunt per veure'n més"
+#~ msgstr "Llisca cap amunt per a veure'n més"
-#: src/view/com/modals/SwitchAccount.tsx:117
+#: src/components/dialogs/SwitchAccount.tsx:46
+#: src/components/dialogs/SwitchAccount.tsx:49
msgid "Switch Account"
msgstr "Canvia el compte"
-#: src/view/com/modals/SwitchAccount.tsx:97
-#: src/view/screens/Settings/index.tsx:130
+#: src/view/screens/Settings/index.tsx:139
msgid "Switch to {0}"
msgstr "Canvia a {0}"
-#: src/view/com/modals/SwitchAccount.tsx:98
-#: src/view/screens/Settings/index.tsx:131
+#: src/view/screens/Settings/index.tsx:140
msgid "Switches the account you are logged in to"
msgstr "Canvia en compte amb el que tens iniciada la sessió"
-#: src/view/screens/Settings/index.tsx:472
+#: src/view/screens/Settings/index.tsx:491
msgid "System"
msgstr "Sistema"
-#: src/view/screens/Settings/index.tsx:795
+#: src/view/screens/Settings/index.tsx:819
msgid "System log"
msgstr "Registres del sistema"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:112
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "tag"
+msgstr "etiqueta"
+
+#: src/components/TagMenu/index.tsx:78
+msgid "Tag menu: {displayTag}"
+msgstr "Menú d'etiquetes: {displayTag}"
+
+#: src/components/TagMenu/index.tsx:74
+#~ msgid "Tag menu: {tag}"
+#~ msgstr "Menú d'etiquetes: {displayTag}"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:113
msgid "Tall"
msgstr "Alt"
#: src/view/com/util/images/AutoSizedImage.tsx:70
msgid "Tap to view fully"
-msgstr "Toca per veure-ho completament"
+msgstr "Toca per a veure-ho completament"
#: src/screens/Onboarding/index.tsx:39
msgid "Tech"
-msgstr ""
+msgstr "Tecnologia"
-#: src/view/shell/desktop/RightNav.tsx:89
+#: src/view/shell/desktop/RightNav.tsx:81
msgid "Terms"
msgstr "Condicions"
-#: src/Navigation.tsx:222
-#: src/view/screens/Settings/index.tsx:885
+#: src/Navigation.tsx:236
+#: src/screens/Signup/StepInfo/Policies.tsx:49
+#: src/view/screens/Settings/index.tsx:917
#: src/view/screens/TermsOfService.tsx:29
-#: src/view/shell/Drawer.tsx:256
+#: src/view/shell/Drawer.tsx:259
msgid "Terms of Service"
msgstr "Condicions del servei"
-#: src/view/com/modals/AppealLabel.tsx:70
-#: src/view/com/modals/report/InputIssueDetails.tsx:51
+#: src/lib/moderation/useReportOptions.ts:58
+#: src/lib/moderation/useReportOptions.ts:79
+#: src/lib/moderation/useReportOptions.ts:87
+msgid "Terms used violate community standards"
+msgstr "Els termes utilitzats infringeixen els estàndards de la comunitat"
+
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "text"
+msgstr "text"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:219
msgid "Text input field"
msgstr "Camp d'introducció de text"
-#: src/view/com/profile/ProfileHeader.tsx:262
+#: src/components/ReportDialog/SubmitView.tsx:78
+msgid "Thank you. Your report has been sent."
+msgstr "Gràcies. El teu informe s'ha enviat."
+
+#: src/view/com/modals/ChangeHandle.tsx:465
+msgid "That contains the following:"
+msgstr "Això conté els següents:"
+
+#: src/screens/Signup/index.tsx:84
+msgid "That handle is already taken."
+msgstr "Aquest identificador ja està agafat."
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:283
+#: src/view/com/profile/ProfileMenu.tsx:349
msgid "The account will be able to interact with you after unblocking."
msgstr "El compte podrà interactuar amb tu després del desbloqueig."
+#: src/components/moderation/ModerationDetailsDialog.tsx:127
+msgid "the author"
+msgstr "l'autor"
+
#: src/view/screens/CommunityGuidelines.tsx:36
msgid "The Community Guidelines have been moved to <0/>"
msgstr "Les directrius de la comunitat han estat traslladades a <0/>"
@@ -3878,11 +5005,20 @@ msgstr "Les directrius de la comunitat han estat traslladades a <0/>"
msgid "The Copyright Policy has been moved to <0/>"
msgstr "La política de drets d'autoria ha estat traslladada a <0/>"
-#: src/screens/Onboarding/Layout.tsx:60
+#: src/components/moderation/LabelsOnMeDialog.tsx:48
+msgid "The following labels were applied to your account."
+msgstr "Les següents etiquetes s'han aplicat al teu compte."
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:49
+msgid "The following labels were applied to your content."
+msgstr "Les següents etiquetes s'han aplicat als teus continguts."
+
+#: src/screens/Onboarding/Layout.tsx:58
msgid "The following steps will help customize your Bluesky experience."
-msgstr ""
+msgstr "Els següents passos t'ajudaran a personalitzar la teva experiència a Bluesky."
-#: src/view/com/post-thread/PostThread.tsx:453
+#: src/view/com/post-thread/PostThread.tsx:153
+#: src/view/com/post-thread/PostThread.tsx:165
msgid "The post may have been deleted."
msgstr "És possible que la publicació s'hagi esborrat."
@@ -3892,124 +5028,143 @@ msgstr "La política de privacitat ha estat traslladada a <0/>"
#: src/view/screens/Support.tsx:36
msgid "The support form has been moved. If you need help, please <0/> or visit {HELP_DESK_URL} to get in touch with us."
-msgstr "El formulari de suport ha estat traslladat. Si necessites ajuda, <0/> o visita {HELP_DESK_URL} per contactar amb nosaltres."
+msgstr "El formulari de suport ha estat traslladat. Si necessites ajuda, <0/> o visita {HELP_DESK_URL} per a contactar amb nosaltres."
#: src/view/screens/Support.tsx:36
#~ msgid "The support form has been moved. If you need help, please<0/> or visit {HELP_DESK_URL} to get in touch with us."
-#~ msgstr "El formulari de suport ha estat traslladat. Si necessites ajuda, <0/> o visita {HELP_DESK_URL} per contactar amb nosaltres."
+#~ msgstr "El formulari de suport ha estat traslladat. Si necessites ajuda, <0/> o visita {HELP_DESK_URL} per a contactar amb nosaltres."
#: src/view/screens/TermsOfService.tsx:33
msgid "The Terms of Service have been moved to"
-msgstr "Les condicions del servei han estat traslladades a "
+msgstr "Les condicions del servei han estat traslladades a"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:150
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:141
msgid "There are many feeds to try:"
-msgstr ""
+msgstr "Hi ha molts canals per a provar:"
-#: src/view/screens/ProfileFeed.tsx:549
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:112
+#: src/view/screens/ProfileFeed.tsx:544
msgid "There was an an issue contacting the server, please check your internet connection and try again."
-msgstr "Hi ha hagut un problema per contactar amb el servidor, comprova la teva connexió a internet i torna-ho a provar"
+msgstr "Hi ha hagut un problema per a contactar amb el servidor, comprova la teva connexió a internet i torna-ho a provar."
-#: src/view/com/posts/FeedErrorMessage.tsx:139
+#: src/view/com/posts/FeedErrorMessage.tsx:138
msgid "There was an an issue removing this feed. Please check your internet connection and try again."
-msgstr "Hi ha hagut un problema per eliminar aquest canal, comprova la teva connexió a internet i torna-ho a provar"
+msgstr "Hi ha hagut un problema per a eliminar aquest canal, comprova la teva connexió a internet i torna-ho a provar."
-#: src/view/screens/ProfileFeed.tsx:209
+#: src/view/screens/ProfileFeed.tsx:218
msgid "There was an an issue updating your feeds, please check your internet connection and try again."
-msgstr "Hi ha hagut un problema per actualitzar els teus canals, comprova la teva connexió a internet i torna-ho a provar"
+msgstr "Hi ha hagut un problema per a actualitzar els teus canals, comprova la teva connexió a internet i torna-ho a provar."
-#: src/view/screens/ProfileFeed.tsx:236
-#: src/view/screens/ProfileList.tsx:266
+#: src/view/screens/ProfileFeed.tsx:245
+#: src/view/screens/ProfileList.tsx:275
#: src/view/screens/SavedFeeds.tsx:209
#: src/view/screens/SavedFeeds.tsx:231
#: src/view/screens/SavedFeeds.tsx:252
msgid "There was an issue contacting the server"
-msgstr "Hi ha hagut un problema per contactar amb el servidor"
+msgstr "Hi ha hagut un problema per a contactar amb el servidor"
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:57
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:66
-#: src/view/com/feeds/FeedSourceCard.tsx:113
-#: src/view/com/feeds/FeedSourceCard.tsx:127
-#: src/view/com/feeds/FeedSourceCard.tsx:181
+#: src/view/com/feeds/FeedSourceCard.tsx:110
+#: src/view/com/feeds/FeedSourceCard.tsx:123
msgid "There was an issue contacting your server"
-msgstr "Hi ha hagut un problema per contactar amb el teu servidor"
+msgstr "Hi ha hagut un problema per a contactar amb el teu servidor"
#: src/view/com/notifications/Feed.tsx:117
msgid "There was an issue fetching notifications. Tap here to try again."
-msgstr "Hi ha hagut un problema en obtenir les notificacions. Toca aquí per tornar-ho a provar."
+msgstr "Hi ha hagut un problema en obtenir les notificacions. Toca aquí per a tornar-ho a provar."
-#: src/view/com/posts/Feed.tsx:263
+#: src/view/com/posts/Feed.tsx:287
msgid "There was an issue fetching posts. Tap here to try again."
-msgstr "Hi ha hagut un problema en obtenir les notificacions. Toca aquí per tornar-ho a provar."
+msgstr "Hi ha hagut un problema en obtenir les notificacions. Toca aquí per a tornar-ho a provar."
#: src/view/com/lists/ListMembers.tsx:172
msgid "There was an issue fetching the list. Tap here to try again."
-msgstr "Hi ha hagut un problema en obtenir la llista. Toca aquí per tornar-ho a provar."
+msgstr "Hi ha hagut un problema en obtenir la llista. Toca aquí per a tornar-ho a provar."
#: src/view/com/feeds/ProfileFeedgens.tsx:148
#: src/view/com/lists/ProfileLists.tsx:155
msgid "There was an issue fetching your lists. Tap here to try again."
-msgstr "Hi ha hagut un problema en obtenir les teves llistes. Toca aquí per tornar-ho a provar."
+msgstr "Hi ha hagut un problema en obtenir les teves llistes. Toca aquí per a tornar-ho a provar."
+
+#: src/components/ReportDialog/SubmitView.tsx:83
+msgid "There was an issue sending your report. Please check your internet connection."
+msgstr "S'ha produït un problema en enviar el teu informe. Comprova la teva connexió a Internet."
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:63
-#: src/view/com/modals/ContentFilteringSettings.tsx:126
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:65
msgid "There was an issue syncing your preferences with the server"
msgstr "Hi ha hagut un problema en sincronitzar les teves preferències amb el servidor"
-#: src/view/screens/AppPasswords.tsx:66
+#: src/view/screens/AppPasswords.tsx:68
msgid "There was an issue with fetching your app passwords"
msgstr "Hi ha hagut un problema en obtenir les teves contrasenyes d'aplicació"
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:93
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:105
-#: src/view/com/profile/ProfileHeader.tsx:156
-#: src/view/com/profile/ProfileHeader.tsx:177
-#: src/view/com/profile/ProfileHeader.tsx:216
-#: src/view/com/profile/ProfileHeader.tsx:229
-#: src/view/com/profile/ProfileHeader.tsx:249
-#: src/view/com/profile/ProfileHeader.tsx:271
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:105
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:127
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:99
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:111
+#: src/view/com/profile/ProfileMenu.tsx:106
+#: src/view/com/profile/ProfileMenu.tsx:117
+#: src/view/com/profile/ProfileMenu.tsx:132
+#: src/view/com/profile/ProfileMenu.tsx:143
+#: src/view/com/profile/ProfileMenu.tsx:157
+#: src/view/com/profile/ProfileMenu.tsx:170
msgid "There was an issue! {0}"
msgstr "Hi ha hagut un problema! {0}"
-#: src/view/screens/ProfileList.tsx:287
-#: src/view/screens/ProfileList.tsx:306
-#: src/view/screens/ProfileList.tsx:328
-#: src/view/screens/ProfileList.tsx:347
+#: src/view/screens/ProfileList.tsx:288
+#: src/view/screens/ProfileList.tsx:302
+#: src/view/screens/ProfileList.tsx:316
+#: src/view/screens/ProfileList.tsx:330
msgid "There was an issue. Please check your internet connection and try again."
msgstr "Hi ha hagut un problema. Comprova la teva connexió a internet i torna-ho a provar."
-#: src/view/com/util/ErrorBoundary.tsx:36
+#: src/view/com/util/ErrorBoundary.tsx:51
msgid "There was an unexpected issue in the application. Please let us know if this happened to you!"
msgstr "S'ha produït un problema inesperat a l'aplicació. Fes-nos saber si això t'ha passat a tu!"
#: src/screens/Deactivated.tsx:106
msgid "There's been a rush of new users to Bluesky! We'll activate your account as soon as we can."
-msgstr ""
+msgstr "Hi ha hagut una gran quantitat d'usuaris nous a Bluesky! Activarem el teu compte tan aviat com puguem."
#: src/view/com/auth/create/Step2.tsx:55
-msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
-msgstr "Aquest telèfon és erroni. Tria el teu país i introdueix el teu telèfon complert"
+#~ msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
+#~ msgstr "Aquest telèfon és erroni. Tria el teu país i introdueix el teu telèfon complert"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:138
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:146
msgid "These are popular accounts you might like:"
-msgstr ""
+msgstr "Aquests són alguns comptes populars que et poden agradar:"
#~ msgid "This {0} has been labeled."
#~ msgstr "Aquest {0} ha estat etiquetat."
-#: src/view/com/util/moderation/ScreenHider.tsx:88
+#: src/components/moderation/ScreenHider.tsx:116
msgid "This {screenDescription} has been flagged:"
msgstr "Aquesta {screenDescription} ha estat etiquetada:"
-#: src/view/com/util/moderation/ScreenHider.tsx:83
+#: src/components/moderation/ScreenHider.tsx:111
msgid "This account has requested that users sign in to view their profile."
-msgstr "Aquest compte ha sol·licitat que els usuaris estiguin registrats per veure el seu perfil."
+msgstr "Aquest compte ha sol·licitat que els usuaris estiguin registrats per a veure el seu perfil."
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:204
+msgid "This appeal will be sent to <0>{0}0>."
+msgstr "Aquesta apel·lació s'enviarà a <0>{0}0>."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:19
+msgid "This content has been hidden by the moderators."
+msgstr "Aquest contingut ha estat amagat pels moderadors."
-#: src/view/com/modals/EmbedConsent.tsx:68
+#: src/lib/moderation/useGlobalLabelStrings.ts:24
+msgid "This content has received a general warning from moderators."
+msgstr "Aquest contingut ha rebut una advertència general dels moderadors."
+
+#: src/components/dialogs/EmbedConsent.tsx:64
msgid "This content is hosted by {0}. Do you want to enable external media?"
msgstr "Aquest contingut està allotjat a {0}. Vols habilitat els continguts externs?"
-#: src/view/com/modals/ModerationDetails.tsx:67
+#: src/components/moderation/ModerationDetailsDialog.tsx:77
+#: src/lib/moderation/useModerationCauseDescription.ts:77
msgid "This content is not available because one of the users involved has blocked the other."
msgstr "Aquest contingut no està disponible degut a que un dels usuaris involucrats ha bloquejat a l'altre."
@@ -4018,24 +5173,28 @@ msgid "This content is not viewable without a Bluesky account."
msgstr "Aquest contingut no es pot veure sense un compte de Bluesky."
#: src/view/screens/Settings/ExportCarDialog.tsx:75
-msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
-msgstr ""
+#~ msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
+#~ msgstr "Aquesta funcionalitat està en beta. En <0>aquesta entrada al blog0> tens més informació."
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:75
+msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost0>."
+msgstr "Aquesta funció està en versió beta. Podeu obtenir més informació sobre les exportacions de repositoris en <0>aquesta entrada de bloc0>."
#: src/view/com/posts/FeedErrorMessage.tsx:114
msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later."
msgstr "Aquest canal està rebent moltes visites actualment i està temporalment inactiu. Prova-ho més tard."
-#: src/view/screens/Profile.tsx:420
-#: src/view/screens/ProfileFeed.tsx:475
-#: src/view/screens/ProfileList.tsx:660
+#: src/screens/Profile/Sections/Feed.tsx:50
+#: src/view/screens/ProfileFeed.tsx:477
+#: src/view/screens/ProfileList.tsx:675
msgid "This feed is empty!"
msgstr "Aquest canal està buit!"
#: src/view/com/posts/CustomFeedEmptyState.tsx:37
msgid "This feed is empty! You may need to follow more users or tune your language settings."
-msgstr "Aquest canal està buit! Necessites seguir més usuaris o modificar la teva configuració d'idiomes"
+msgstr "Aquest canal està buit! Necessites seguir més usuaris o modificar la teva configuració d'idiomes."
-#: src/view/com/modals/BirthDateSettings.tsx:61
+#: src/components/dialogs/BirthDateSettings.tsx:41
msgid "This information is not shared with other users."
msgstr "Aquesta informació no es comparteix amb altres usuaris."
@@ -4047,48 +5206,110 @@ msgstr "Això és important si mai necessites canviar el teu correu o restablir
#~ msgid "This is the service that keeps you online."
#~ msgstr "Aquest és el servei que et manté connectat."
-#: src/view/com/modals/LinkWarning.tsx:58
+#: src/components/moderation/ModerationDetailsDialog.tsx:124
+msgid "This label was applied by {0}."
+msgstr "Aquesta etiqueta l'ha aplicat {0}."
+
+#: src/screens/Profile/Sections/Labels.tsx:167
+msgid "This labeler hasn't declared what labels it publishes, and may not be active."
+msgstr "Aquest etiquetador no ha declarat quines etiquetes publica i pot ser que no estigui actiu."
+
+#: src/view/com/modals/LinkWarning.tsx:72
msgid "This link is taking you to the following website:"
msgstr "Aquest enllaç et porta a la web:"
-#: src/view/screens/ProfileList.tsx:834
+#: src/view/screens/ProfileList.tsx:853
msgid "This list is empty!"
msgstr "Aquesta llista està buida!"
-#: src/view/com/modals/AddAppPasswords.tsx:106
+#: src/screens/Profile/ErrorState.tsx:40
+msgid "This moderation service is unavailable. See below for more details. If this issue persists, contact us."
+msgstr "Aquest servei de moderació no està disponible. Mira a continuació per obtenir més detalls. Si aquest problema persisteix, posa't en contacte amb nosaltres."
+
+#: src/view/com/modals/AddAppPasswords.tsx:107
msgid "This name is already in use"
msgstr "Aquest nom ja està en ús"
-#: src/view/com/post-thread/PostThreadItem.tsx:122
+#: src/view/com/post-thread/PostThreadItem.tsx:125
msgid "This post has been deleted."
msgstr "Aquesta publicació ha estat esborrada."
-#: src/view/com/modals/ModerationDetails.tsx:62
+#: src/view/com/util/forms/PostDropdownBtn.tsx:344
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:248
+msgid "This post is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr "Aquesta publicació només és visible per als usuaris que han iniciat sessió. No serà visible per a les persones que no hagin iniciat sessió."
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:326
+msgid "This post will be hidden from feeds."
+msgstr "Aqeusta publicació no es mostrarà als canals."
+
+#: src/view/com/profile/ProfileMenu.tsx:370
+msgid "This profile is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr "Aquest perfil només és visible per als usuaris que han iniciat sessió. No serà visible per a les persones que no hagin iniciat sessió."
+
+#: src/screens/Signup/StepInfo/Policies.tsx:37
+msgid "This service has not provided terms of service or a privacy policy."
+msgstr "Aquest servei no ha proporcionat termes de servei ni una política de privadesa."
+
+#: src/view/com/modals/ChangeHandle.tsx:445
+msgid "This should create a domain record at:"
+msgstr "Això hauria de crear un registre de domini a:"
+
+#: src/view/com/profile/ProfileFollowers.tsx:87
+msgid "This user doesn't have any followers."
+msgstr "Aquest usuari no té cap seguidor."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:72
+#: src/lib/moderation/useModerationCauseDescription.ts:68
msgid "This user has blocked you. You cannot view their content."
msgstr "Aquest usuari t'ha bloquejat. No pots veure les seves publicacions."
+#: src/lib/moderation/useGlobalLabelStrings.ts:30
+msgid "This user has requested that their content only be shown to signed-in users."
+msgstr "Aquest usuari ha sol·licitat que el seu contingut només es mostri als usuaris que hagin iniciat la sessió."
+
#: src/view/com/modals/ModerationDetails.tsx:42
-msgid "This user is included in the <0/> list which you have blocked."
-msgstr "Aquest usuari està inclós a la llista <0/> que tens bloquejada"
+#~ msgid "This user is included in the <0/> list which you have blocked."
+#~ msgstr "Aquest usuari està inclós a la llista <0/> que tens bloquejada"
#: src/view/com/modals/ModerationDetails.tsx:74
-msgid "This user is included in the <0/> list which you have muted."
-msgstr ""
+#~ msgid "This user is included in the <0/> list which you have muted."
+#~ msgstr "Aquest usuari està inclòs a la llista <0/> que has silenciat."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:55
+msgid "This user is included in the <0>{0}0> list which you have blocked."
+msgstr "Aquest usuari està inclòs a la llista <0>{0}0> que has bloquejat."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:84
+msgid "This user is included in the <0>{0}0> list which you have muted."
+msgstr "Aquest usuari està inclòs a la llista <0>{0}0> que has silenciat."
#: src/view/com/modals/ModerationDetails.tsx:74
#~ msgid "This user is included the <0/> list which you have muted."
#~ msgstr "Aquest usuari està inclós a la llista <0/> que tens silenciada"
+#: src/view/com/profile/ProfileFollows.tsx:87
+msgid "This user isn't following anyone."
+msgstr "Aquest usuari no segueix a ningú."
+
#: src/view/com/modals/SelfLabel.tsx:137
msgid "This warning is only available for posts with media attached."
msgstr "Aquesta advertència només està disponible per publicacions amb contingut adjuntat."
-#: src/view/com/util/forms/PostDropdownBtn.tsx:192
-msgid "This will hide this post from your feeds."
-msgstr "Això amagarà aquesta publicació dels teus canals."
+#: src/components/dialogs/MutedWords.tsx:283
+msgid "This will delete {0} from your muted words. You can always add it back later."
+msgstr "Això suprimirà {0} de les teves paraules silenciades. Sempre la pots tornar a afegir més tard."
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:282
+#~ msgid "This will hide this post from your feeds."
+#~ msgstr "Això amagarà aquesta publicació dels teus canals."
+
+#: src/view/screens/Settings/index.tsx:574
+msgid "Thread preferences"
+msgstr "Preferències dels fils de debat"
#: src/view/screens/PreferencesThreads.tsx:53
-#: src/view/screens/Settings/index.tsx:565
+#: src/view/screens/Settings/index.tsx:584
msgid "Thread Preferences"
msgstr "Preferències dels fils de debat"
@@ -4096,21 +5317,34 @@ msgstr "Preferències dels fils de debat"
msgid "Threaded Mode"
msgstr "Mode fils de debat"
-#: src/Navigation.tsx:252
+#: src/Navigation.tsx:269
msgid "Threads Preferences"
msgstr "Preferències dels fils de debat"
+#: src/components/ReportDialog/SelectLabelerView.tsx:33
+msgid "To whom would you like to send this report?"
+msgstr "A qui vols enviar aquest informe?"
+
+#: src/components/dialogs/MutedWords.tsx:112
+msgid "Toggle between muted word options."
+msgstr "Commuta entre les opcions de paraules silenciades."
+
#: src/view/com/util/forms/DropdownButton.tsx:246
msgid "Toggle dropdown"
msgstr "Commuta el menú desplegable"
-#: src/view/com/modals/EditImage.tsx:271
+#: src/screens/Moderation/index.tsx:332
+msgid "Toggle to enable or disable adult content"
+msgstr "Communta per a habilitar o deshabilitar el contingut per adults"
+
+#: src/view/com/modals/EditImage.tsx:272
msgid "Transformations"
msgstr "Transformacions"
-#: src/view/com/post-thread/PostThreadItem.tsx:686
-#: src/view/com/post-thread/PostThreadItem.tsx:688
-#: src/view/com/util/forms/PostDropdownBtn.tsx:125
+#: src/view/com/post-thread/PostThreadItem.tsx:644
+#: src/view/com/post-thread/PostThreadItem.tsx:646
+#: src/view/com/util/forms/PostDropdownBtn.tsx:212
+#: src/view/com/util/forms/PostDropdownBtn.tsx:214
msgid "Translate"
msgstr "Tradueix"
@@ -4123,108 +5357,195 @@ msgstr "Torna-ho a provar"
#~ msgid "Try again"
#~ msgstr "Torna-ho a provar"
-#: src/view/screens/ProfileList.tsx:505
+#: src/view/com/modals/ChangeHandle.tsx:428
+msgid "Type:"
+msgstr "Tipus:"
+
+#: src/view/screens/ProfileList.tsx:478
msgid "Un-block list"
msgstr "Desbloqueja la llista"
-#: src/view/screens/ProfileList.tsx:490
+#: src/view/screens/ProfileList.tsx:461
msgid "Un-mute list"
msgstr "Deixa de silenciar la llista"
-#: src/view/com/auth/create/CreateAccount.tsx:66
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:87
-#: src/view/com/auth/login/Login.tsx:76
-#: src/view/com/auth/login/LoginForm.tsx:118
+#: src/screens/Login/ForgotPasswordForm.tsx:74
+#: src/screens/Login/index.tsx:78
+#: src/screens/Login/LoginForm.tsx:119
+#: src/screens/Login/SetNewPasswordForm.tsx:77
+#: src/screens/Signup/index.tsx:63
#: src/view/com/modals/ChangePassword.tsx:70
msgid "Unable to contact your service. Please check your Internet connection."
msgstr "No es pot contactar amb el teu servei. Comprova la teva connexió a internet."
-#: src/view/com/profile/ProfileHeader.tsx:432
-#: src/view/screens/ProfileList.tsx:589
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:181
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+#: src/view/screens/ProfileList.tsx:572
msgid "Unblock"
msgstr "Desbloqueja"
-#: src/view/com/profile/ProfileHeader.tsx:435
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:186
msgctxt "action"
msgid "Unblock"
msgstr "Desbloqueja"
-#: src/view/com/profile/ProfileHeader.tsx:260
-#: src/view/com/profile/ProfileHeader.tsx:344
+#: src/view/com/profile/ProfileMenu.tsx:299
+#: src/view/com/profile/ProfileMenu.tsx:305
msgid "Unblock Account"
msgstr "Desbloqueja el compte"
-#: src/view/com/modals/Repost.tsx:42
-#: src/view/com/modals/Repost.tsx:55
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:281
+#: src/view/com/profile/ProfileMenu.tsx:343
+msgid "Unblock Account?"
+msgstr "Vols desbloquejar el compte?"
+
+#: src/view/com/modals/Repost.tsx:43
+#: src/view/com/modals/Repost.tsx:56
#: src/view/com/util/post-ctrls/RepostButton.tsx:60
#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
msgid "Undo repost"
msgstr "Desfés la republicació"
-#: src/view/com/profile/FollowButton.tsx:55
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
+msgid "Unfollow"
+msgstr "Deixa de seguir"
+
+#: src/view/com/profile/FollowButton.tsx:60
msgctxt "action"
msgid "Unfollow"
msgstr "Deixa de seguir"
-#: src/view/com/profile/ProfileHeader.tsx:484
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:220
msgid "Unfollow {0}"
msgstr "Deixa de seguir a {0}"
-#: src/view/com/auth/create/state.ts:300
-msgid "Unfortunately, you do not meet the requirements to create an account."
-msgstr "No compleixes les condicions per crear un compte."
+#: src/view/com/profile/ProfileMenu.tsx:241
+#: src/view/com/profile/ProfileMenu.tsx:251
+msgid "Unfollow Account"
+msgstr "Deixa de seguir el compte"
+
+#: src/view/com/auth/create/state.ts:262
+#~ msgid "Unfortunately, you do not meet the requirements to create an account."
+#~ msgstr "No compleixes les condicions per a crear un compte."
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Unlike"
msgstr "Desfés el m'agrada"
-#: src/view/screens/ProfileList.tsx:596
+#: src/view/screens/ProfileFeed.tsx:573
+msgid "Unlike this feed"
+msgstr "Desfés el m'agrada a aquest canal"
+
+#: src/components/TagMenu/index.tsx:249
+#: src/view/screens/ProfileList.tsx:579
msgid "Unmute"
msgstr "Deixa de silenciar"
-#: src/view/com/profile/ProfileHeader.tsx:325
+#: src/components/TagMenu/index.web.tsx:104
+msgid "Unmute {truncatedTag}"
+msgstr "Deixa de silenciar {truncatedTag}"
+
+#: src/view/com/profile/ProfileMenu.tsx:278
+#: src/view/com/profile/ProfileMenu.tsx:284
msgid "Unmute Account"
msgstr "Deixa de silenciar el compte"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/components/TagMenu/index.tsx:208
+msgid "Unmute all {displayTag} posts"
+msgstr "Deixa de silenciar totes les publicacions amb {displayTag}"
+
+#: src/components/TagMenu/index.tsx:210
+#~ msgid "Unmute all {tag} posts"
+#~ msgstr "Deixa de silenciar totes les publicacions amb {tag}"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:256
msgid "Unmute thread"
msgstr "Deixa de silenciar el fil de debat"
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:295
+#: src/view/screens/ProfileList.tsx:563
msgid "Unpin"
msgstr "Deixa de fixar"
-#: src/view/screens/ProfileList.tsx:473
+#: src/view/screens/ProfileFeed.tsx:292
+msgid "Unpin from home"
+msgstr "Deixa de fixar a l'inici"
+
+#: src/view/screens/ProfileList.tsx:444
msgid "Unpin moderation list"
msgstr "Desancora la llista de moderació"
-#: src/view/screens/ProfileFeed.tsx:345
-msgid "Unsave"
-msgstr "No desis"
+#: src/view/screens/ProfileFeed.tsx:346
+#~ msgid "Unsave"
+#~ msgstr "No desis"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:219
+msgid "Unsubscribe"
+msgstr "Dona't de baixa"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:183
+msgid "Unsubscribe from this labeler"
+msgstr "Dona't de baixa d'aquest etiquetador"
+
+#: src/lib/moderation/useReportOptions.ts:70
+msgid "Unwanted Sexual Content"
+msgstr "Contingut sexual no dessitjat"
#: src/view/com/modals/UserAddRemoveLists.tsx:70
msgid "Update {displayName} in Lists"
msgstr "Actualitza {displayName} a les Llistes"
#: src/lib/hooks/useOTAUpdate.ts:15
-msgid "Update Available"
-msgstr "Actualització disponible"
+#~ msgid "Update Available"
+#~ msgstr "Actualització disponible"
+
+#: src/view/com/modals/ChangeHandle.tsx:508
+msgid "Update to {handle}"
+msgstr "Actualitza a {handle}"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:204
+#: src/screens/Login/SetNewPasswordForm.tsx:186
msgid "Updating..."
msgstr "Actualitzant…"
-#: src/view/com/modals/ChangeHandle.tsx:455
+#: src/view/com/modals/ChangeHandle.tsx:454
msgid "Upload a text file to:"
msgstr "Puja un fitxer de text a:"
-#: src/view/screens/AppPasswords.tsx:195
+#: src/view/com/util/UserAvatar.tsx:326
+#: src/view/com/util/UserAvatar.tsx:329
+#: src/view/com/util/UserBanner.tsx:116
+#: src/view/com/util/UserBanner.tsx:119
+msgid "Upload from Camera"
+msgstr "Puja de la càmera"
+
+#: src/view/com/util/UserAvatar.tsx:343
+#: src/view/com/util/UserBanner.tsx:133
+msgid "Upload from Files"
+msgstr "Puja dels Arxius"
+
+#: src/view/com/util/UserAvatar.tsx:337
+#: src/view/com/util/UserAvatar.tsx:341
+#: src/view/com/util/UserBanner.tsx:127
+#: src/view/com/util/UserBanner.tsx:131
+msgid "Upload from Library"
+msgstr "Puja de la biblioteca"
+
+#: src/view/com/modals/ChangeHandle.tsx:408
+msgid "Use a file on your server"
+msgstr "Utilitza un fitxer del teu servidor"
+
+#: src/view/screens/AppPasswords.tsx:197
msgid "Use app passwords to login to other Bluesky clients without giving full access to your account or password."
-msgstr "Utilitza les contrasenyes d'aplicació per iniciar sessió en altres clients de Bluesky, sense haver de donar accés total al teu compte o contrasenya."
+msgstr "Utilitza les contrasenyes d'aplicació per a iniciar sessió en altres clients de Bluesky, sense haver de donar accés total al teu compte o contrasenya."
+
+#: src/view/com/modals/ChangeHandle.tsx:517
+msgid "Use bsky.social as hosting provider"
+msgstr "Utilitza bsky.social com a proveïdor d'allotjament"
-#: src/view/com/modals/ChangeHandle.tsx:515
+#: src/view/com/modals/ChangeHandle.tsx:516
msgid "Use default provider"
msgstr "Utilitza el proveïdor predeterminat"
@@ -4238,54 +5559,67 @@ msgstr "Utilitza el navegador de l'aplicació"
msgid "Use my default browser"
msgstr "Utilitza el meu navegador predeterminat"
-#: src/view/com/modals/AddAppPasswords.tsx:155
+#: src/view/com/modals/ChangeHandle.tsx:400
+msgid "Use the DNS panel"
+msgstr "Utilitza el panell de DNS"
+
+#: src/view/com/modals/AddAppPasswords.tsx:156
msgid "Use this to sign into the other app along with your handle."
-msgstr "Utilitza-ho per iniciar sessió a l'altra aplicació, juntament amb el teu identificador."
+msgstr "Utilitza-ho per a iniciar sessió a l'altra aplicació, juntament amb el teu identificador."
#: src/view/com/modals/ServerInput.tsx:105
#~ msgid "Use your domain as your Bluesky client service provider"
#~ msgstr "Utilitza el teu domini com a client proveïdor del servei de Bluesky"
-#: src/view/com/modals/InviteCodes.tsx:200
+#: src/view/com/modals/InviteCodes.tsx:201
msgid "Used by:"
msgstr "Utilitzat per:"
-#: src/view/com/modals/ModerationDetails.tsx:54
+#: src/components/moderation/ModerationDetailsDialog.tsx:64
+#: src/lib/moderation/useModerationCauseDescription.ts:56
msgid "User Blocked"
msgstr "Usuari bloquejat"
-#: src/view/com/modals/ModerationDetails.tsx:40
+#: src/lib/moderation/useModerationCauseDescription.ts:48
+msgid "User Blocked by \"{0}\""
+msgstr "Usuari bloquejat per \"{0}\""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:53
msgid "User Blocked by List"
msgstr "Usuari bloquejat per una llista"
-#: src/view/com/modals/ModerationDetails.tsx:60
+#: src/lib/moderation/useModerationCauseDescription.ts:66
+msgid "User Blocking You"
+msgstr "L'usuari t'ha bloquejat"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:70
msgid "User Blocks You"
msgstr "L'usuari t'ha bloquejat"
-#: src/view/com/auth/create/Step3.tsx:41
-msgid "User handle"
-msgstr "Identificador d'usuari"
+#: src/view/com/auth/create/Step2.tsx:79
+#~ msgid "User handle"
+#~ msgstr "Identificador d'usuari"
-#: src/view/com/lists/ListCard.tsx:84
+#: src/view/com/lists/ListCard.tsx:85
#: src/view/com/modals/UserAddRemoveLists.tsx:198
msgid "User list by {0}"
msgstr "Llista d'usuaris per {0}"
-#: src/view/screens/ProfileList.tsx:762
+#: src/view/screens/ProfileList.tsx:777
msgid "User list by <0/>"
msgstr "Llista d'usuaris feta per <0/>"
-#: src/view/com/lists/ListCard.tsx:82
+#: src/view/com/lists/ListCard.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:196
-#: src/view/screens/ProfileList.tsx:760
+#: src/view/screens/ProfileList.tsx:775
msgid "User list by you"
-msgstr "Llista d'usaris feta per tu"
+msgstr "Llista d'usuaris feta per tu"
-#: src/view/com/modals/CreateOrEditList.tsx:196
+#: src/view/com/modals/CreateOrEditList.tsx:197
msgid "User list created"
msgstr "Llista d'usuaris creada"
-#: src/view/com/modals/CreateOrEditList.tsx:182
+#: src/view/com/modals/CreateOrEditList.tsx:183
msgid "User list updated"
msgstr "Llista d'usuaris actualitzada"
@@ -4293,12 +5627,11 @@ msgstr "Llista d'usuaris actualitzada"
msgid "User Lists"
msgstr "Llistes d'usuaris"
-#: src/view/com/auth/login/LoginForm.tsx:177
-#: src/view/com/auth/login/LoginForm.tsx:195
+#: src/screens/Login/LoginForm.tsx:151
msgid "Username or email address"
msgstr "Nom d'usuari o correu"
-#: src/view/screens/ProfileList.tsx:796
+#: src/view/screens/ProfileList.tsx:811
msgid "Users"
msgstr "Usuaris"
@@ -4310,19 +5643,31 @@ msgstr "usuaris seguits per <0/>"
msgid "Users in \"{0}\""
msgstr "Usuaris a \"{0}\""
+#: src/components/LikesDialog.tsx:85
+msgid "Users that have liked this content or profile"
+msgstr "Usuaris a qui els ha agradat aquest contingut o perfil"
+
+#: src/view/com/modals/ChangeHandle.tsx:436
+msgid "Value:"
+msgstr "Valor:"
+
#: src/view/com/auth/create/Step2.tsx:243
-msgid "Verification code"
-msgstr "Codi de verificació"
+#~ msgid "Verification code"
+#~ msgstr "Codi de verificació"
+
+#: src/view/com/modals/ChangeHandle.tsx:509
+msgid "Verify {0}"
+msgstr "Verifica {0}"
-#: src/view/screens/Settings/index.tsx:910
+#: src/view/screens/Settings/index.tsx:942
msgid "Verify email"
msgstr "Verifica el correu"
-#: src/view/screens/Settings/index.tsx:935
+#: src/view/screens/Settings/index.tsx:967
msgid "Verify my email"
msgstr "Verifica el meu correu"
-#: src/view/screens/Settings/index.tsx:944
+#: src/view/screens/Settings/index.tsx:976
msgid "Verify My Email"
msgstr "Verifica el meu correu"
@@ -4335,11 +5680,15 @@ msgstr "Verifica el correu nou"
msgid "Verify Your Email"
msgstr "Verifica el teu correu"
+#: src/view/screens/Settings/index.tsx:893
+msgid "Version {0}"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:42
msgid "Video Games"
-msgstr ""
+msgstr "Videojocs"
-#: src/view/com/profile/ProfileHeader.tsx:661
+#: src/screens/Profile/Header/Shell.tsx:107
msgid "View {0}'s avatar"
msgstr "Veure l'avatar de {0}"
@@ -4347,11 +5696,23 @@ msgstr "Veure l'avatar de {0}"
msgid "View debug entry"
msgstr "Veure el registre de depuració"
-#: src/view/com/posts/FeedSlice.tsx:103
+#: src/components/ReportDialog/SelectReportOptionView.tsx:131
+msgid "View details"
+msgstr "Veure els detalls"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:126
+msgid "View details for reporting a copyright violation"
+msgstr "Veure els detalls per a informar d'una infracció dels drets d'autor"
+
+#: src/view/com/posts/FeedSlice.tsx:99
msgid "View full thread"
msgstr "Veure el fil de debat complet"
-#: src/view/com/posts/FeedErrorMessage.tsx:172
+#: src/components/moderation/LabelsOnMe.tsx:51
+msgid "View information about these labels"
+msgstr "Mostra informació sobre aquestes etiquetes"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:166
msgid "View profile"
msgstr "Veure el perfil"
@@ -4359,84 +5720,129 @@ msgstr "Veure el perfil"
msgid "View the avatar"
msgstr "Veure l'avatar"
-#: src/view/com/modals/LinkWarning.tsx:75
+#: src/components/LabelingServiceCard/index.tsx:140
+msgid "View the labeling service provided by @{0}"
+msgstr "Veure el servei d'etiquetatge proporcionat per @{0}"
+
+#: src/view/screens/ProfileFeed.tsx:585
+msgid "View users who like this feed"
+msgstr "Veure els usuaris a qui els agrada aquest canal"
+
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
msgid "Visit Site"
msgstr "Visita el lloc web"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:42
-#: src/view/com/modals/ContentFilteringSettings.tsx:259
+#: src/components/moderation/LabelPreference.tsx:135
+#: src/lib/moderation/useLabelBehaviorDescription.ts:17
+#: src/lib/moderation/useLabelBehaviorDescription.ts:22
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:53
msgid "Warn"
msgstr "Adverteix"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:48
+msgid "Warn content"
+msgstr "Adverteix del contingut"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:46
+msgid "Warn content and filter from feeds"
+msgstr "Adverteix del contingut i filtra-ho dels canals"
+
#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:134
-msgid "We also think you'll like \"For You\" by Skygaze:"
-msgstr ""
+#~ msgid "We also think you'll like \"For You\" by Skygaze:"
+#~ msgstr "També creiem que t'agradarà el canal \"For You\" d'Skygaze:"
+
+#: src/screens/Hashtag.tsx:133
+msgid "We couldn't find any results for that hashtag."
+msgstr "No hem trobat cap resultat per a aquest hashtag."
#: src/screens/Deactivated.tsx:133
msgid "We estimate {estimatedTime} until your account is ready."
-msgstr ""
+msgstr "Calculem {estimatedTime} fins que el teu compte estigui llest."
-#: src/screens/Onboarding/StepFinished.tsx:93
+#: src/screens/Onboarding/StepFinished.tsx:97
msgid "We hope you have a wonderful time. Remember, Bluesky is:"
-msgstr ""
+msgstr "Esperem que t'ho passis pipa. Recorda que Bluesky és:"
#: src/view/com/posts/DiscoverFallbackHeader.tsx:29
msgid "We ran out of posts from your follows. Here's the latest from <0/>."
msgstr "Ja no hi ha més publicacions dels usuaris que segueixes. Aquí n'hi ha altres de <0/>."
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:124
+#: src/components/dialogs/MutedWords.tsx:203
+msgid "We recommend avoiding common words that appear in many posts, since it can result in no posts being shown."
+msgstr "Recomanem evitar les paraules habituals que apareixen en moltes publicacions, ja que pot provocar que no es mostri cap publicació."
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:125
msgid "We recommend our \"Discover\" feed:"
-msgstr ""
+msgstr "Et recomanem el nostre canal \"Discover\":"
+
+#: src/components/dialogs/BirthDateSettings.tsx:52
+msgid "We were unable to load your birth date preferences. Please try again."
+msgstr "No hem pogut carregar les teves preferències de data de naixement. Torna-ho a provar."
-#: src/screens/Onboarding/StepInterests/index.tsx:133
+#: src/screens/Moderation/index.tsx:385
+msgid "We were unable to load your configured labelers at this time."
+msgstr "En aquest moment no hem pogut carregar els teus etiquetadors configurats."
+
+#: src/screens/Onboarding/StepInterests/index.tsx:137
msgid "We weren't able to connect. Please try again to continue setting up your account. If it continues to fail, you can skip this flow."
-msgstr ""
+msgstr "No ens hem pogut connectar. Torna-ho a provar per a continuar configurant el teu compte. Si continua fallant, pots ometre aquest flux."
#: src/screens/Deactivated.tsx:137
msgid "We will let you know when your account is ready."
-msgstr ""
+msgstr "T'informarem quan el teu compte estigui llest."
#: src/view/com/modals/AppealLabel.tsx:48
-msgid "We'll look into your appeal promptly."
-msgstr "Analitzarem la teva apel·lació ràpidament."
+#~ msgid "We'll look into your appeal promptly."
+#~ msgstr "Analitzarem la teva apel·lació ràpidament."
-#: src/screens/Onboarding/StepInterests/index.tsx:138
+#: src/screens/Onboarding/StepInterests/index.tsx:142
msgid "We'll use this to help customize your experience."
-msgstr ""
+msgstr "Ho farem servir per a personalitzar la teva experiència."
-#: src/view/com/auth/create/CreateAccount.tsx:123
+#: src/screens/Signup/index.tsx:130
msgid "We're so excited to have you join us!"
msgstr "Ens fa molta il·lusió que t'uneixis a nosaltres!"
-#: src/view/screens/ProfileList.tsx:85
+#: src/view/screens/ProfileList.tsx:89
msgid "We're sorry, but we were unable to resolve this list. If this persists, please contact the list creator, @{handleOrDid}."
msgstr "Ho sentim, però no hem pogut resoldre aquesta llista. Si això continua, posa't en contacte amb el creador de la llista, @{handleOrDid}."
-#: src/view/screens/Search/Search.tsx:253
+#: src/components/dialogs/MutedWords.tsx:229
+msgid "We're sorry, but we weren't able to load your muted words at this time. Please try again."
+msgstr "Ho sentim, però no hem pogut carregar les teves paraules silenciades en aquest moment. Torna-ho a provar."
+
+#: src/view/screens/Search/Search.tsx:256
msgid "We're sorry, but your search could not be completed. Please try again in a few minutes."
msgstr "Ens sap greu, però la teva cerca no s'ha pogut fer. Prova-ho d'aquí una estona."
+#: src/components/Lists.tsx:188
#: src/view/screens/NotFound.tsx:48
msgid "We're sorry! We can't find the page you were looking for."
msgstr "Ens sap greu! No podem trobar la pàgina que estàs cercant."
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:46
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:321
+msgid "We're sorry! You can only subscribe to ten labelers, and you've reached your limit of ten."
+msgstr "Ho sentim! Només et pots subscriure a deu etiquetadors i has arribat al teu límit de deu."
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:48
msgid "Welcome to <0>Bluesky0>"
-msgstr "Benvingut a <0>Bluesky0>"
+msgstr "Us donem la benvinguda a <0>Bluesky0>"
-#: src/screens/Onboarding/StepInterests/index.tsx:130
+#: src/screens/Onboarding/StepInterests/index.tsx:134
msgid "What are your interests?"
-msgstr ""
+msgstr "Quins són els teus interesos?"
#: src/view/com/modals/report/Modal.tsx:169
-msgid "What is the issue with this {collectionName}?"
-msgstr "Quin problema hi ha amb {collectionName}?"
+#~ msgid "What is the issue with this {collectionName}?"
+#~ msgstr "Quin problema hi ha amb {collectionName}?"
#~ msgid "What's next?"
#~ msgstr "¿Qué sigue?"
-#: src/view/com/auth/SplashScreen.tsx:34
-#: src/view/com/composer/Composer.tsx:279
+#: src/view/com/auth/SplashScreen.tsx:58
+#: src/view/com/auth/SplashScreen.web.tsx:84
+#: src/view/com/composer/Composer.tsx:296
msgid "What's up?"
msgstr "Què hi ha de nou"
@@ -4453,32 +5859,52 @@ msgstr "Quins idiomes t'agradaria veure en els teus canals algorítmics?"
msgid "Who can reply"
msgstr "Qui hi pot respondre"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:102
+#: src/components/ReportDialog/SelectReportOptionView.tsx:43
+msgid "Why should this content be reviewed?"
+msgstr "Per què s'hauria de revisar aquest contingut?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:56
+msgid "Why should this feed be reviewed?"
+msgstr "Per què s'hauria de revisar aquest canal?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:53
+msgid "Why should this list be reviewed?"
+msgstr "Per què s'hauria de revisar aquesta llista?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:50
+msgid "Why should this post be reviewed?"
+msgstr "Per què s'hauria de revisar aquesta publicació?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:47
+msgid "Why should this user be reviewed?"
+msgstr "Per què s'hauria de revisar aquest usuari?"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:103
msgid "Wide"
msgstr "Amplada"
-#: src/view/com/composer/Composer.tsx:415
+#: src/view/com/composer/Composer.tsx:436
msgid "Write post"
msgstr "Escriu una publicació"
-#: src/view/com/composer/Composer.tsx:278
-#: src/view/com/composer/Prompt.tsx:33
+#: src/view/com/composer/Composer.tsx:295
+#: src/view/com/composer/Prompt.tsx:37
msgid "Write your reply"
msgstr "Escriu la teva resposta"
#: src/screens/Onboarding/index.tsx:28
msgid "Writers"
-msgstr ""
+msgstr "Escriptors"
#: src/view/com/auth/create/Step2.tsx:263
-msgid "XXXXXX"
-msgstr "XXXXXX"
+#~ msgid "XXXXXX"
+#~ msgstr "XXXXXX"
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:77
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:201
-#: src/view/screens/PreferencesHomeFeed.tsx:236
-#: src/view/screens/PreferencesHomeFeed.tsx:271
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:201
+#: src/view/screens/PreferencesFollowingFeed.tsx:236
+#: src/view/screens/PreferencesFollowingFeed.tsx:271
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "Yes"
@@ -4486,27 +5912,35 @@ msgstr "Sí"
#: src/screens/Deactivated.tsx:130
msgid "You are in line."
-msgstr ""
+msgstr "Estàs a la cua."
+
+#: src/view/com/profile/ProfileFollows.tsx:86
+msgid "You are not following anyone."
+msgstr "No segueixes a ningú."
#: src/view/com/posts/FollowingEmptyState.tsx:67
#: src/view/com/posts/FollowingEndOfFeed.tsx:68
msgid "You can also discover new Custom Feeds to follow."
-msgstr "També pots descobrir nous canals personalitzats per seguir."
+msgstr "També pots descobrir nous canals personalitzats per a seguir."
#: src/view/com/auth/create/Step1.tsx:106
#~ msgid "You can change hosting providers at any time."
#~ msgstr "Pots canviar el teu proveïdor d'allotjament quan vulguis."
-#: src/screens/Onboarding/StepFollowingFeed.tsx:142
+#: src/screens/Onboarding/StepFollowingFeed.tsx:143
msgid "You can change these settings later."
-msgstr ""
+msgstr "Pots canviar aquests paràmetres més endavant."
-#: src/view/com/auth/login/Login.tsx:158
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:31
+#: src/screens/Login/index.tsx:158
+#: src/screens/Login/PasswordUpdatedForm.tsx:33
msgid "You can now sign in with your new password."
msgstr "Ara pots iniciar sessió amb la nova contrasenya."
-#: src/view/com/modals/InviteCodes.tsx:66
+#: src/view/com/profile/ProfileFollowers.tsx:86
+msgid "You do not have any followers."
+msgstr "No tens cap seguidor."
+
+#: src/view/com/modals/InviteCodes.tsx:67
msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer."
msgstr "Encara no tens codis d'invitació! Te n'enviarem quan portis una mica més de temps a Bluesky."
@@ -4514,7 +5948,7 @@ msgstr "Encara no tens codis d'invitació! Te n'enviarem quan portis una mica m
msgid "You don't have any pinned feeds."
msgstr "No tens cap canal fixat."
-#: src/view/screens/Feeds.tsx:451
+#: src/view/screens/Feeds.tsx:452
msgid "You don't have any saved feeds!"
msgstr "No tens cap canal desat!"
@@ -4522,24 +5956,43 @@ msgstr "No tens cap canal desat!"
msgid "You don't have any saved feeds."
msgstr "No tens cap canal desat."
-#: src/view/com/post-thread/PostThread.tsx:401
+#: src/view/com/post-thread/PostThread.tsx:159
msgid "You have blocked the author or you have been blocked by the author."
msgstr "Has bloquejat l'autor o has estat bloquejat per ell."
-#: src/view/com/modals/ModerationDetails.tsx:56
+#: src/components/moderation/ModerationDetailsDialog.tsx:66
+#: src/lib/moderation/useModerationCauseDescription.ts:50
+#: src/lib/moderation/useModerationCauseDescription.ts:58
msgid "You have blocked this user. You cannot view their content."
msgstr "Has bloquejat aquest usuari. No pots veure el seu contingut."
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:57
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:92
+#: src/screens/Login/SetNewPasswordForm.tsx:54
+#: src/screens/Login/SetNewPasswordForm.tsx:91
#: src/view/com/modals/ChangePassword.tsx:87
#: src/view/com/modals/ChangePassword.tsx:121
msgid "You have entered an invalid code. It should look like XXXXX-XXXXX."
-msgstr ""
+msgstr "Has entrat un codi invàlid. Hauria de ser tipus XXXXX-XXXXX."
+
+#: src/lib/moderation/useModerationCauseDescription.ts:109
+msgid "You have hidden this post"
+msgstr "Has amagat aquesta publicació"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:101
+msgid "You have hidden this post."
+msgstr "Has amagat aquesta publicació."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:94
+#: src/lib/moderation/useModerationCauseDescription.ts:92
+msgid "You have muted this account."
+msgstr "Has silenciat aquest compte."
+
+#: src/lib/moderation/useModerationCauseDescription.ts:86
+msgid "You have muted this user"
+msgstr "Has silenciat aquest usuari"
#: src/view/com/modals/ModerationDetails.tsx:87
-msgid "You have muted this user."
-msgstr "Has silenciat aquest usuari."
+#~ msgid "You have muted this user."
+#~ msgstr "Has silenciat aquest usuari."
#: src/view/com/feeds/ProfileFeedgens.tsx:136
msgid "You have no feeds."
@@ -4551,68 +6004,97 @@ msgid "You have no lists."
msgstr "No tens llistes."
#: src/view/screens/ModerationBlockedAccounts.tsx:132
-msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
-msgstr "Encara no has bloquejat cap compte. Per fer-ho, vés al seu perfil i selecciona \"Bloqueja el compte\" en el menú del seu compte."
+msgid "You have not blocked any accounts yet. To block an account, go to their profile and select \"Block account\" from the menu on their account."
+msgstr "Encara no has bloquejat cap compte. Per a bloquejar un compte, ves al seu perfil i selecciona \"Bloqueja el compte\" al menú del seu compte."
+
+#: src/view/screens/ModerationBlockedAccounts.tsx:132
+#~ msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
+#~ msgstr "Encara no has bloquejat cap compte. Per a fer-ho, ves al seu perfil i selecciona \"Bloqueja el compte\" en el menú del seu compte."
-#: src/view/screens/AppPasswords.tsx:87
+#: src/view/screens/AppPasswords.tsx:89
msgid "You have not created any app passwords yet. You can create one by pressing the button below."
msgstr "Encara no has creat cap contrasenya d'aplicació. Pots fer-ho amb el botó d'aquí sota."
#: src/view/screens/ModerationMutedAccounts.tsx:131
-msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
-msgstr "Encara no has silenciat cap compte. Per fer-ho, vés al seu perfil i selecciona \"Silencia compte\" en el menú del seu compte."
+msgid "You have not muted any accounts yet. To mute an account, go to their profile and select \"Mute account\" from the menu on their account."
+msgstr "Encara no has silenciat cap compte. per a silenciar un compte, ves al seu perfil i selecciona \"Silencia el compte\" al menú del seu compte."
+
+#: src/view/screens/ModerationMutedAccounts.tsx:131
+#~ msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
+#~ msgstr "Encara no has silenciat cap compte. Per a fer-ho, al seu perfil i selecciona \"Silencia compte\" en el menú del seu compte."
+
+#: src/components/dialogs/MutedWords.tsx:249
+msgid "You haven't muted any words or tags yet"
+msgstr "Encara no has silenciat cap paraula ni etiqueta"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:68
+msgid "You may appeal these labels if you feel they were placed in error."
+msgstr "Pots apel·lar aquestes etiquetes si creus que s'han col·locat per error,"
+
+#: src/screens/Signup/StepInfo/Policies.tsx:79
+msgid "You must be 13 years of age or older to sign up."
+msgstr ""
#: src/view/com/modals/ContentFilteringSettings.tsx:175
-msgid "You must be 18 or older to enable adult content."
-msgstr "Has de tenir 18 anys o més per habilitar el contingut per a adults."
+#~ msgid "You must be 18 or older to enable adult content."
+#~ msgstr "Has de tenir 18 anys o més per a habilitar el contingut per a adults."
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:103
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:110
msgid "You must be 18 years or older to enable adult content"
-msgstr ""
+msgstr "Has de tenir 18 anys o més per a habilitar el contingut per a adults"
+
+#: src/components/ReportDialog/SubmitView.tsx:205
+msgid "You must select at least one labeler for a report"
+msgstr "Has d'escollir almenys un etiquetador per a un informe"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:98
+#: src/view/com/util/forms/PostDropdownBtn.tsx:144
msgid "You will no longer receive notifications for this thread"
msgstr "Ja no rebràs més notificacions d'aquest debat"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:147
msgid "You will now receive notifications for this thread"
msgstr "Ara rebràs notificacions d'aquest debat"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:107
+#: src/screens/Login/SetNewPasswordForm.tsx:104
msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password."
msgstr "Rebràs un correu amb un \"codi de restabliment\". Introdueix aquí el codi i després la teva contrasenya nova."
-#: src/screens/Onboarding/StepModeration/index.tsx:72
+#: src/screens/Onboarding/StepModeration/index.tsx:60
msgid "You're in control"
-msgstr ""
+msgstr "Tu tens el control"
#: src/screens/Deactivated.tsx:87
#: src/screens/Deactivated.tsx:88
#: src/screens/Deactivated.tsx:103
msgid "You're in line"
-msgstr ""
+msgstr "Estàs a la cua"
-#: src/screens/Onboarding/StepFinished.tsx:90
+#: src/screens/Onboarding/StepFinished.tsx:94
msgid "You're ready to go!"
-msgstr ""
+msgstr "Ja està tot llest!"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:98
+#: src/lib/moderation/useModerationCauseDescription.ts:101
+msgid "You've chosen to hide a word or tag within this post."
+msgstr "Has triat amagar una paraula o una etiqueta d'aquesta publicació."
#: src/view/com/posts/FollowingEndOfFeed.tsx:48
msgid "You've reached the end of your feed! Find some more accounts to follow."
-msgstr "Has arribat al final del vostre cabal! Cerca alguns comptes més per seguir."
+msgstr "Has arribat al final del vostre cabal! Cerca alguns comptes més per a seguir."
-#: src/view/com/auth/create/Step1.tsx:74
+#: src/screens/Signup/index.tsx:150
msgid "Your account"
msgstr "El teu compte"
-#: src/view/com/modals/DeleteAccount.tsx:67
+#: src/view/com/modals/DeleteAccount.tsx:68
msgid "Your account has been deleted"
msgstr "El teu compte s'ha eliminat"
#: src/view/screens/Settings/ExportCarDialog.tsx:47
msgid "Your account repository, containing all public data records, can be downloaded as a \"CAR\" file. This file does not include media embeds, such as images, or your private data, which must be fetched separately."
-msgstr ""
+msgstr "El repositori del teu compte, que conté tots els registres de dades públiques, es pot baixar com a fitxer \"CAR\". Aquest fitxer no inclou incrustacions multimèdia, com ara imatges, ni les teves dades privades, que s'han d'obtenir per separat."
-#: src/view/com/auth/create/Step1.tsx:234
+#: src/screens/Signup/StepInfo/index.tsx:121
msgid "Your birth date"
msgstr "La teva data de naixement"
@@ -4620,19 +6102,19 @@ msgstr "La teva data de naixement"
msgid "Your choice will be saved, but can be changed later in settings."
msgstr "La teva elecció es desarà, però es pot canviar més endavant a la configuració."
-#: src/screens/Onboarding/StepFollowingFeed.tsx:61
+#: src/screens/Onboarding/StepFollowingFeed.tsx:62
msgid "Your default feed is \"Following\""
-msgstr ""
+msgstr "El teu canal per defecte és \"Seguint\""
-#: src/view/com/auth/create/state.ts:153
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:70
+#: src/screens/Login/ForgotPasswordForm.tsx:57
+#: src/screens/Signup/state.ts:227
#: src/view/com/modals/ChangePassword.tsx:54
msgid "Your email appears to be invalid."
msgstr "El teu correu no sembla vàlid."
#: src/view/com/modals/Waitlist.tsx:109
-msgid "Your email has been saved! We'll be in touch soon."
-msgstr "Hem desat el teu correu! Aviat ens posarem en contacte amb tu."
+#~ msgid "Your email has been saved! We'll be in touch soon."
+#~ msgstr "Hem desat el teu correu! Aviat ens posarem en contacte amb tu."
#: src/view/com/modals/ChangeEmail.tsx:125
msgid "Your email has been updated but not verified. As a next step, please verify your new email."
@@ -4644,13 +6126,13 @@ msgstr "El teu correu encara no s'ha verificat. Et recomanem fer-ho per segureta
#: src/view/com/posts/FollowingEmptyState.tsx:47
msgid "Your following feed is empty! Follow more users to see what's happening."
-msgstr "El teu canal de seguint està buit! Segueix a més usuaris per saber què està passant."
+msgstr "El teu canal de seguint està buit! Segueix a més usuaris per a saber què està passant."
-#: src/view/com/auth/create/Step3.tsx:45
+#: src/screens/Signup/StepHandle.tsx:72
msgid "Your full handle will be"
msgstr "El teu identificador complet serà"
-#: src/view/com/modals/ChangeHandle.tsx:270
+#: src/view/com/modals/ChangeHandle.tsx:271
msgid "Your full handle will be <0>@{0}0>"
msgstr "El teu identificador complet serà <0>@{0}0>"
@@ -4664,29 +6146,32 @@ msgstr "El teu identificador complet serà <0>@{0}0>"
#~ msgid "Your invite codes are hidden when logged in using an App Password"
#~ msgstr "Els teus codis d'invitació no es mostren quan has iniciat sessió amb una contrasenya d'aplicació"
-#: src/view/com/modals/ChangePassword.tsx:155
+#: src/components/dialogs/MutedWords.tsx:220
+msgid "Your muted words"
+msgstr "Les teves paraules silenciades"
+
+#: src/view/com/modals/ChangePassword.tsx:157
msgid "Your password has been changed successfully!"
-msgstr ""
+msgstr "S'ha canviat la teva contrasenya!"
-#: src/view/com/composer/Composer.tsx:267
+#: src/view/com/composer/Composer.tsx:284
msgid "Your post has been published"
msgstr "S'ha publicat"
-#: src/screens/Onboarding/StepFinished.tsx:105
+#: src/screens/Onboarding/StepFinished.tsx:109
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:59
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:59
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:61
msgid "Your posts, likes, and blocks are public. Mutes are private."
msgstr "Les teves publicacions, m'agrades i bloquejos són públics. Els comptes silenciats són privats."
-#: src/view/com/modals/SwitchAccount.tsx:84
-#: src/view/screens/Settings/index.tsx:118
+#: src/view/screens/Settings/index.tsx:125
msgid "Your profile"
msgstr "El teu perfil"
-#: src/view/com/composer/Composer.tsx:266
+#: src/view/com/composer/Composer.tsx:283
msgid "Your reply has been published"
-msgstr "S'ha publicat a teva resposta"
+msgstr "S'ha publicat la teva resposta"
-#: src/view/com/auth/create/Step3.tsx:28
+#: src/screens/Signup/index.tsx:152
msgid "Your user handle"
msgstr "El teu identificador d'usuari"
diff --git a/src/locale/locales/de/messages.po b/src/locale/locales/de/messages.po
index f57972c923..28fd2256b6 100644
--- a/src/locale/locales/de/messages.po
+++ b/src/locale/locales/de/messages.po
@@ -8,49 +8,35 @@ msgstr ""
"Language: de\n"
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: \n"
+"PO-Revision-Date: 2024-03-12 13:00+0000\n"
"Last-Translator: \n"
-"Language-Team: \n"
+"Language-Team: Translators in PR 2319, PythooonUser, cdfzo\n"
"Plural-Forms: \n"
#: src/view/com/modals/VerifyEmail.tsx:142
msgid "(no email)"
-msgstr ""
-
-#: src/view/shell/desktop/RightNav.tsx:168
-#~ msgid "{0, plural, one {# invite code available} other {# invite codes available}}"
-#~ msgstr ""
+msgstr "(keine E-Mail)"
-#: src/view/com/profile/ProfileHeader.tsx:592
+#: src/screens/Profile/Header/Metrics.tsx:44
msgid "{following} following"
-msgstr ""
-
-#: src/view/shell/desktop/RightNav.tsx:151
-#~ msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}"
-#~ msgstr ""
-
-#: src/view/screens/Settings.tsx:435
-#: src/view/shell/Drawer.tsx:664
-#~ msgid "{invitesAvailable} invite code available"
-#~ msgstr "{invitesAvailable} Einladungscode verfügbar"
-
-#: src/view/screens/Settings.tsx:437
-#: src/view/shell/Drawer.tsx:666
-#~ msgid "{invitesAvailable} invite codes available"
-#~ msgstr "{invitesAvailable} Einladungscodes verfügbar"
+msgstr "{following} folge ich"
-#: src/view/shell/Drawer.tsx:440
+#: src/view/shell/Drawer.tsx:443
msgid "{numUnreadNotifications} unread"
-msgstr ""
+msgstr "{numUnreadNotifications} ungelesen"
#: src/view/com/threadgate/WhoCanReply.tsx:158
msgid "<0/> members"
msgstr "<0/> Mitglieder"
-#: src/view/com/profile/ProfileHeader.tsx:594
-msgid "<0>{following} 0><1>following1>"
+#: src/view/shell/Drawer.tsx:97
+msgid "<0>{0}0> following"
msgstr ""
+#: src/screens/Profile/Header/Metrics.tsx:45
+msgid "<0>{following} 0><1>following1>"
+msgstr "<0>{following} 0><1>folge ich1>"
+
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:30
msgid "<0>Choose your0><1>Recommended1><2>Feeds2>"
msgstr "<0>Wähle deine0><1>empfohlenen1><2>Feeds2>"
@@ -61,55 +47,64 @@ msgstr "<0>Folge einigen0><1>empfohlenen1><2>Nutzern2>"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:21
msgid "<0>Welcome to0><1>Bluesky1>"
-msgstr ""
+msgstr "<0>Willkommen bei0><1>Bluesky1>"
-#: src/view/com/profile/ProfileHeader.tsx:557
+#: src/screens/Profile/Header/Handle.tsx:42
msgid "⚠Invalid Handle"
-msgstr ""
+msgstr "⚠Ungültiger Handle"
#: src/view/com/util/moderation/LabelInfo.tsx:45
-msgid "A content warning has been applied to this {0}."
-msgstr "Diese Seite wurde mit einer Inhaltswarnung versehen {0}."
+#~ msgid "A content warning has been applied to this {0}."
+#~ msgstr "Diese Seite wurde mit einer Inhaltswarnung versehen {0}."
#: src/lib/hooks/useOTAUpdate.ts:16
-msgid "A new version of the app is available. Please update to continue using the app."
-msgstr "Eine neue Version der App ist verfügbar. Bitte aktualisiere die App, um sie weiter nutzen zu können."
+#~ msgid "A new version of the app is available. Please update to continue using the app."
+#~ msgstr "Eine neue Version der App ist verfügbar. Bitte aktualisiere die App, um sie weiter nutzen zu können."
-#: src/view/com/util/ViewHeader.tsx:83
-#: src/view/screens/Search/Search.tsx:624
+#: src/view/com/util/ViewHeader.tsx:89
+#: src/view/screens/Search/Search.tsx:649
msgid "Access navigation links and settings"
-msgstr ""
+msgstr "Zugriff auf Navigationslinks und Einstellungen"
-#: src/view/com/pager/FeedsTabBarMobile.tsx:89
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:52
msgid "Access profile and other navigation links"
-msgstr ""
+msgstr "Zugang zum Profil und anderen Navigationslinks"
-#: src/view/com/modals/EditImage.tsx:299
-#: src/view/screens/Settings/index.tsx:451
+#: src/view/com/modals/EditImage.tsx:300
+#: src/view/screens/Settings/index.tsx:470
msgid "Accessibility"
msgstr "Barrierefreiheit"
-#: src/view/com/auth/login/LoginForm.tsx:166
-#: src/view/screens/Settings/index.tsx:308
-#: src/view/screens/Settings/index.tsx:721
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "account"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:144
+#: src/view/screens/Settings/index.tsx:327
+#: src/view/screens/Settings/index.tsx:743
msgid "Account"
msgstr "Konto"
-#: src/view/com/profile/ProfileHeader.tsx:245
+#: src/view/com/profile/ProfileMenu.tsx:139
msgid "Account blocked"
+msgstr "Konto blockiert"
+
+#: src/view/com/profile/ProfileMenu.tsx:153
+msgid "Account followed"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:212
+#: src/view/com/profile/ProfileMenu.tsx:113
msgid "Account muted"
-msgstr ""
+msgstr "Konto stummgeschaltet"
-#: src/view/com/modals/ModerationDetails.tsx:86
+#: src/components/moderation/ModerationDetailsDialog.tsx:93
+#: src/lib/moderation/useModerationCauseDescription.ts:91
msgid "Account Muted"
-msgstr ""
+msgstr "Konto Stummgeschaltet"
-#: src/view/com/modals/ModerationDetails.tsx:72
+#: src/components/moderation/ModerationDetailsDialog.tsx:82
msgid "Account Muted by List"
-msgstr ""
+msgstr "Konto stummgeschaltet nach Liste"
#: src/view/com/util/AccountDropdownBtn.tsx:41
msgid "Account options"
@@ -117,20 +112,26 @@ msgstr "Kontoeinstellungen"
#: src/view/com/util/AccountDropdownBtn.tsx:25
msgid "Account removed from quick access"
-msgstr ""
+msgstr "Konto aus dem Schnellzugriff entfernt"
-#: src/view/com/profile/ProfileHeader.tsx:267
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:137
+#: src/view/com/profile/ProfileMenu.tsx:128
msgid "Account unblocked"
+msgstr "Konto entblockiert"
+
+#: src/view/com/profile/ProfileMenu.tsx:166
+msgid "Account unfollowed"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:225
+#: src/view/com/profile/ProfileMenu.tsx:102
msgid "Account unmuted"
-msgstr ""
+msgstr "Konto Stummschaltung aufgehoben"
+#: src/components/dialogs/MutedWords.tsx:164
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:150
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/screens/ProfileList.tsx:812
+#: src/view/screens/ProfileList.tsx:827
msgid "Add"
msgstr "Hinzufügen"
@@ -138,104 +139,120 @@ msgstr "Hinzufügen"
msgid "Add a content warning"
msgstr "Eine Inhaltswarnung hinzufügen"
-#: src/view/screens/ProfileList.tsx:802
+#: src/view/screens/ProfileList.tsx:817
msgid "Add a user to this list"
msgstr "Einen Nutzer zu dieser Liste hinzufügen"
-#: src/view/screens/Settings/index.tsx:383
-#: src/view/screens/Settings/index.tsx:392
+#: src/components/dialogs/SwitchAccount.tsx:55
+#: src/view/screens/Settings/index.tsx:402
+#: src/view/screens/Settings/index.tsx:411
msgid "Add account"
msgstr "Konto hinzufügen"
#: src/view/com/composer/photos/Gallery.tsx:119
#: src/view/com/composer/photos/Gallery.tsx:180
-#: src/view/com/modals/AltImage.tsx:116
+#: src/view/com/modals/AltImage.tsx:117
msgid "Add alt text"
msgstr "Alt-Text hinzufügen"
-#: src/view/screens/AppPasswords.tsx:102
-#: src/view/screens/AppPasswords.tsx:143
-#: src/view/screens/AppPasswords.tsx:156
+#: src/view/screens/AppPasswords.tsx:104
+#: src/view/screens/AppPasswords.tsx:145
+#: src/view/screens/AppPasswords.tsx:158
msgid "Add App Password"
-msgstr ""
+msgstr "App-Passwort hinzufügen"
#: src/view/com/modals/report/InputIssueDetails.tsx:41
#: src/view/com/modals/report/Modal.tsx:191
-msgid "Add details"
-msgstr "Details hinzufügen"
+#~ msgid "Add details"
+#~ msgstr "Details hinzufügen"
#: src/view/com/modals/report/Modal.tsx:194
-msgid "Add details to report"
-msgstr "Details zum Report hinzufügen"
+#~ msgid "Add details to report"
+#~ msgstr "Details zum Report hinzufügen"
-#: src/view/com/composer/Composer.tsx:446
+#: src/view/com/composer/Composer.tsx:467
msgid "Add link card"
msgstr "Link-Karte hinzufügen"
-#: src/view/com/composer/Composer.tsx:451
+#: src/view/com/composer/Composer.tsx:472
msgid "Add link card:"
msgstr "Link-Karte hinzufügen:"
-#: src/view/com/modals/ChangeHandle.tsx:417
+#: src/components/dialogs/MutedWords.tsx:157
+msgid "Add mute word for configured settings"
+msgstr "Stummgeschaltetes Wort für konfigurierte Einstellungen hinzufügen"
+
+#: src/components/dialogs/MutedWords.tsx:86
+msgid "Add muted words and tags"
+msgstr "Füge stummgeschaltete Wörter und Tags hinzu"
+
+#: src/view/com/modals/ChangeHandle.tsx:416
msgid "Add the following DNS record to your domain:"
msgstr "Füge den folgenden DNS-Eintrag zu deiner Domain hinzu:"
-#: src/view/com/profile/ProfileHeader.tsx:309
+#: src/view/com/profile/ProfileMenu.tsx:263
+#: src/view/com/profile/ProfileMenu.tsx:266
msgid "Add to Lists"
msgstr "Zu Listen hinzufügen"
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/feeds/FeedSourceCard.tsx:234
msgid "Add to my feeds"
msgstr "Zu meinen Feeds hinzufügen"
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:139
msgid "Added"
-msgstr ""
+msgstr "Hinzugefügt"
#: src/view/com/modals/ListAddRemoveUsers.tsx:191
#: src/view/com/modals/UserAddRemoveLists.tsx:144
msgid "Added to list"
msgstr "Zur Liste hinzugefügt"
-#: src/view/com/feeds/FeedSourceCard.tsx:125
+#: src/view/com/feeds/FeedSourceCard.tsx:108
msgid "Added to my feeds"
-msgstr ""
+msgstr "Zu meinen Feeds hinzugefügt"
-#: src/view/screens/PreferencesHomeFeed.tsx:173
+#: src/view/screens/PreferencesFollowingFeed.tsx:173
msgid "Adjust the number of likes a reply must have to be shown in your feed."
msgstr "Passe die Anzahl der Likes an, die eine Antwort haben muss, um in deinem Feed angezeigt zu werden."
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:117
#: src/view/com/modals/SelfLabel.tsx:75
msgid "Adult Content"
msgstr "Inhalt für Erwachsene"
#: src/view/com/modals/ContentFilteringSettings.tsx:141
-msgid "Adult content can only be enabled via the Web at <0/>."
-msgstr ""
+#~ msgid "Adult content can only be enabled via the Web at <0/>."
+#~ msgstr "Inhalte für Erwachsene können nur über das Web unter <0/> aktiviert werden."
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
-#~ msgid "Adult content can only be enabled via the Web at <0>bsky.app0>."
-#~ msgstr ""
+#: src/components/moderation/LabelPreference.tsx:242
+msgid "Adult content is disabled."
+msgstr ""
-#: src/view/screens/Settings/index.tsx:664
+#: src/screens/Moderation/index.tsx:375
+#: src/view/screens/Settings/index.tsx:684
msgid "Advanced"
msgstr "Erweitert"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:221
-#: src/view/com/modals/ChangePassword.tsx:168
+#: src/view/screens/Feeds.tsx:666
+msgid "All the feeds you've saved, right in one place."
+msgstr "All deine gespeicherten Feeds an einem Ort."
+
+#: src/screens/Login/ForgotPasswordForm.tsx:178
+#: src/view/com/modals/ChangePassword.tsx:170
msgid "Already have a code?"
-msgstr ""
+msgstr "Hast du bereits einen Code?"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:98
+#: src/screens/Login/ChooseAccountForm.tsx:39
msgid "Already signed in as @{0}"
-msgstr ""
+msgstr "Bereits angemeldet als @{0}"
#: src/view/com/composer/photos/Gallery.tsx:130
msgid "ALT"
msgstr "ALT"
-#: src/view/com/modals/EditImage.tsx:315
+#: src/view/com/modals/EditImage.tsx:316
msgid "Alt text"
msgstr "Alt-Text"
@@ -245,176 +262,215 @@ msgstr "Alt-Text beschreibt Bilder für blinde und sehbehinderte Nutzer und hilf
#: src/view/com/modals/VerifyEmail.tsx:124
msgid "An email has been sent to {0}. It includes a confirmation code which you can enter below."
-msgstr "Eine E-Mail wurde an {0} gesendet . Sie enthält einen Bestätigungscode, den du unten eingeben kannst."
+msgstr "Eine E-Mail wurde an {0} gesendet. Sie enthält einen Bestätigungscode, den du unten eingeben kannst."
#: src/view/com/modals/ChangeEmail.tsx:119
msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below."
msgstr "Eine E-Mail wurde an deine vorherige Adresse {0} gesendet. Sie enthält einen Bestätigungscode, den du unten eingeben kannst."
-#: src/view/com/profile/FollowButton.tsx:30
-#: src/view/com/profile/FollowButton.tsx:40
-msgid "An issue occurred, please try again."
+#: src/lib/moderation/useReportOptions.ts:26
+msgid "An issue not included in these options"
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:236
+#: src/view/com/profile/FollowButton.tsx:35
+#: src/view/com/profile/FollowButton.tsx:45
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:188
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:198
+msgid "An issue occurred, please try again."
+msgstr "Es ist ein Problem aufgetreten, bitte versuche es erneut."
+
+#: src/view/com/notifications/FeedItem.tsx:240
#: src/view/com/threadgate/WhoCanReply.tsx:178
msgid "and"
msgstr "und"
#: src/screens/Onboarding/index.tsx:32
msgid "Animals"
+msgstr "Tiere"
+
+#: src/lib/moderation/useReportOptions.ts:31
+msgid "Anti-Social Behavior"
msgstr ""
#: src/view/screens/LanguageSettings.tsx:95
msgid "App Language"
msgstr "App-Sprache"
-#: src/view/screens/AppPasswords.tsx:228
+#: src/view/screens/AppPasswords.tsx:223
msgid "App password deleted"
-msgstr ""
+msgstr "App-Passwort gelöscht"
-#: src/view/com/modals/AddAppPasswords.tsx:134
+#: src/view/com/modals/AddAppPasswords.tsx:135
msgid "App Password names can only contain letters, numbers, spaces, dashes, and underscores."
-msgstr ""
+msgstr "App-Passwortnamen dürfen nur Buchstaben, Zahlen, Leerzeichen, Bindestriche und Unterstriche enthalten."
-#: src/view/com/modals/AddAppPasswords.tsx:99
+#: src/view/com/modals/AddAppPasswords.tsx:100
msgid "App Password names must be at least 4 characters long."
-msgstr ""
+msgstr "App-Passwortnamen müssen mindestens 4 Zeichen lang sein."
-#: src/view/screens/Settings/index.tsx:675
+#: src/view/screens/Settings/index.tsx:695
msgid "App password settings"
-msgstr ""
+msgstr "App-Passwort-Einstellungen"
-#: src/view/screens/Settings.tsx:650
-#~ msgid "App passwords"
-#~ msgstr "App-Passwörter"
-
-#: src/Navigation.tsx:237
-#: src/view/screens/AppPasswords.tsx:187
-#: src/view/screens/Settings/index.tsx:684
+#: src/Navigation.tsx:251
+#: src/view/screens/AppPasswords.tsx:189
+#: src/view/screens/Settings/index.tsx:704
msgid "App Passwords"
msgstr "App-Passwörter"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:250
-msgid "Appeal content warning"
+#: src/components/moderation/LabelsOnMeDialog.tsx:133
+#: src/components/moderation/LabelsOnMeDialog.tsx:136
+msgid "Appeal"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:201
+msgid "Appeal \"{0}\" label"
msgstr ""
+#: src/view/com/util/forms/PostDropdownBtn.tsx:337
+#: src/view/com/util/forms/PostDropdownBtn.tsx:346
+#~ msgid "Appeal content warning"
+#~ msgstr "Inhaltswarnungseinspruch"
+
#: src/view/com/modals/AppealLabel.tsx:65
-msgid "Appeal Content Warning"
+#~ msgid "Appeal Content Warning"
+#~ msgstr "Inhaltswarnungseinspruch"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:192
+msgid "Appeal submitted."
msgstr ""
#: src/view/com/util/moderation/LabelInfo.tsx:52
-msgid "Appeal this decision"
-msgstr "Einspruch gegen diese Entscheidung"
+#~ msgid "Appeal this decision"
+#~ msgstr "Einspruch gegen diese Entscheidung"
#: src/view/com/util/moderation/LabelInfo.tsx:56
-msgid "Appeal this decision."
-msgstr "Einspruch gegen diese Entscheidung."
+#~ msgid "Appeal this decision."
+#~ msgstr "Einspruch gegen diese Entscheidung."
-#: src/view/screens/Settings/index.tsx:466
+#: src/view/screens/Settings/index.tsx:485
msgid "Appearance"
msgstr "Erscheinungsbild"
-#: src/view/screens/AppPasswords.tsx:224
+#: src/view/screens/AppPasswords.tsx:265
msgid "Are you sure you want to delete the app password \"{name}\"?"
msgstr "Bist du sicher, dass du das App-Passwort \"{name}\" löschen möchtest?"
-#: src/view/com/composer/Composer.tsx:143
+#: src/view/com/feeds/FeedSourceCard.tsx:280
+msgid "Are you sure you want to remove {0} from your feeds?"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:509
msgid "Are you sure you'd like to discard this draft?"
msgstr "Bist du sicher, dass du diesen Entwurf verwerfen möchtest?"
-#: src/view/screens/ProfileList.tsx:364
+#: src/components/dialogs/MutedWords.tsx:281
msgid "Are you sure?"
msgstr "Bist du sicher?"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:233
-msgid "Are you sure? This cannot be undone."
-msgstr "Bist du sicher? Dies kann nicht rückgängig gemacht werden."
+#: src/view/com/util/forms/PostDropdownBtn.tsx:322
+#~ msgid "Are you sure? This cannot be undone."
+#~ msgstr "Bist du sicher? Dies kann nicht rückgängig gemacht werden."
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:60
msgid "Are you writing in <0>{0}0>?"
-msgstr ""
+msgstr "Schreibst du auf <0>{0}0>?"
#: src/screens/Onboarding/index.tsx:26
msgid "Art"
-msgstr ""
+msgstr "Kunst"
#: src/view/com/modals/SelfLabel.tsx:123
msgid "Artistic or non-erotic nudity."
msgstr "Künstlerische oder nicht-erotische Nacktheit."
-#: src/view/com/auth/create/CreateAccount.tsx:147
-#: src/view/com/auth/login/ChooseAccountForm.tsx:151
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:174
-#: src/view/com/auth/login/LoginForm.tsx:259
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:179
-#: src/view/com/modals/report/InputIssueDetails.tsx:46
-#: src/view/com/post-thread/PostThread.tsx:408
-#: src/view/com/post-thread/PostThread.tsx:458
-#: src/view/com/post-thread/PostThread.tsx:466
-#: src/view/com/profile/ProfileHeader.tsx:648
-#: src/view/com/util/ViewHeader.tsx:81
+#: src/screens/Signup/StepHandle.tsx:118
+msgid "At least 3 characters"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:246
+#: src/components/moderation/LabelsOnMeDialog.tsx:247
+#: src/screens/Login/ChooseAccountForm.tsx:73
+#: src/screens/Login/ChooseAccountForm.tsx:78
+#: src/screens/Login/ForgotPasswordForm.tsx:129
+#: src/screens/Login/ForgotPasswordForm.tsx:135
+#: src/screens/Login/LoginForm.tsx:221
+#: src/screens/Login/LoginForm.tsx:227
+#: src/screens/Login/SetNewPasswordForm.tsx:160
+#: src/screens/Login/SetNewPasswordForm.tsx:166
+#: src/screens/Profile/Header/Shell.tsx:96
+#: src/screens/Signup/index.tsx:179
+#: src/view/com/util/ViewHeader.tsx:87
msgid "Back"
msgstr "Zurück"
-#: src/view/com/post-thread/PostThread.tsx:416
-msgctxt "action"
-msgid "Back"
-msgstr ""
+#: src/view/com/post-thread/PostThread.tsx:480
+#~ msgctxt "action"
+#~ msgid "Back"
+#~ msgstr "Zurück"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:136
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:144
msgid "Based on your interest in {interestsText}"
-msgstr ""
+msgstr "Ausgehend von deinem Interesse an {interestsText}"
-#: src/view/screens/Settings/index.tsx:523
+#: src/view/screens/Settings/index.tsx:542
msgid "Basics"
msgstr "Grundlagen"
-#: src/view/com/auth/create/Step1.tsx:246
-#: src/view/com/modals/BirthDateSettings.tsx:73
+#: src/components/dialogs/BirthDateSettings.tsx:107
msgid "Birthday"
msgstr "Geburtstag"
-#: src/view/screens/Settings/index.tsx:340
+#: src/view/screens/Settings/index.tsx:359
msgid "Birthday:"
msgstr "Geburtstag:"
-#: src/view/com/profile/ProfileHeader.tsx:238
-#: src/view/com/profile/ProfileHeader.tsx:345
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+msgid "Block"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:300
+#: src/view/com/profile/ProfileMenu.tsx:307
msgid "Block Account"
+msgstr "Konto blockieren"
+
+#: src/view/com/profile/ProfileMenu.tsx:344
+msgid "Block Account?"
msgstr ""
-#: src/view/screens/ProfileList.tsx:555
+#: src/view/screens/ProfileList.tsx:530
msgid "Block accounts"
-msgstr ""
+msgstr "Konten blockieren"
-#: src/view/screens/ProfileList.tsx:505
+#: src/view/screens/ProfileList.tsx:478
+#: src/view/screens/ProfileList.tsx:634
msgid "Block list"
msgstr "Blockliste"
-#: src/view/screens/ProfileList.tsx:315
+#: src/view/screens/ProfileList.tsx:629
msgid "Block these accounts?"
msgstr "Diese Konten blockieren?"
-#: src/view/screens/ProfileList.tsx:319
-msgid "Block this List"
-msgstr ""
+#: src/view/screens/ProfileList.tsx:320
+#~ msgid "Block this List"
+#~ msgstr "Diese Liste blockieren"
-#: src/view/com/lists/ListCard.tsx:109
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:60
+#: src/view/com/lists/ListCard.tsx:110
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:55
msgid "Blocked"
-msgstr ""
+msgstr "Blockiert"
-#: src/view/screens/Moderation.tsx:123
+#: src/screens/Moderation/index.tsx:267
msgid "Blocked accounts"
msgstr "Blockierte Konten"
-#: src/Navigation.tsx:130
+#: src/Navigation.tsx:134
#: src/view/screens/ModerationBlockedAccounts.tsx:107
msgid "Blocked Accounts"
msgstr "Blockierte Konten"
-#: src/view/com/profile/ProfileHeader.tsx:240
+#: src/view/com/profile/ProfileMenu.tsx:356
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
msgstr "Blockierte Konten können nicht in deinen Threads antworten, dich erwähnen oder anderweitig mit dir interagieren."
@@ -422,168 +478,188 @@ msgstr "Blockierte Konten können nicht in deinen Threads antworten, dich erwäh
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours."
msgstr "Blockierte Konten können nicht in deinen Threads antworten, dich erwähnen oder anderweitig mit dir interagieren. Du wirst ihre Inhalte nicht sehen und sie werden daran gehindert, deine zu sehen."
-#: src/view/com/post-thread/PostThread.tsx:267
+#: src/view/com/post-thread/PostThread.tsx:313
msgid "Blocked post."
msgstr "Gesperrter Beitrag."
-#: src/view/screens/ProfileList.tsx:317
+#: src/screens/Profile/Sections/Labels.tsx:152
+msgid "Blocking does not prevent this labeler from placing labels on your account."
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:631
msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
msgstr "Die Sperrung ist öffentlich. Gesperrte Konten können nicht in deinen Threads antworten, dich erwähnen oder anderweitig mit dir interagieren."
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:93
+#: src/view/com/profile/ProfileMenu.tsx:353
+msgid "Blocking will not prevent labels from being applied on your account, but it will stop this account from replying in your threads or interacting with you."
+msgstr ""
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:98
+#: src/view/com/auth/SplashScreen.web.tsx:169
msgid "Blog"
msgstr "Blog"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:31
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:32
#: src/view/com/auth/server-input/index.tsx:89
-#: src/view/com/auth/server-input/index.tsx:90
+#: src/view/com/auth/server-input/index.tsx:91
msgid "Bluesky"
msgstr "Bluesky"
-#: src/view/com/auth/server-input/index.tsx:150
+#: src/view/com/auth/server-input/index.tsx:154
msgid "Bluesky is an open network where you can choose your hosting provider. Custom hosting is now available in beta for developers."
-msgstr ""
+msgstr "Bluesky ist ein offenes Netzwerk, in dem du deinen Hosting-Anbieter wählen kannst. Benutzerdefiniertes Hosting ist jetzt in der Beta-Phase für Entwickler verfügbar."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:80
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:80
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:82
msgid "Bluesky is flexible."
msgstr "Bluesky ist flexibel."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:69
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:69
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:71
msgid "Bluesky is open."
msgstr "Bluesky ist offen."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:56
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:56
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:58
msgid "Bluesky is public."
msgstr "Bluesky ist öffentlich."
-#: src/view/com/modals/Waitlist.tsx:70
-msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
-msgstr "Bluesky nutzt Einladungen, um eine gesündere Community aufzubauen. Wenn du niemanden kennst, der eine Einladung hat, kannst du dich auf die Warteliste setzen lassen und wir schicken dir bald eine zu."
-
-#: src/view/screens/Moderation.tsx:226
+#: src/screens/Moderation/index.tsx:533
msgid "Bluesky will not show your profile and posts to logged-out users. Other apps may not honor this request. This does not make your account private."
msgstr "Bluesky zeigt dein Profil und deine Beiträge nicht für abgemeldete Nutzer an. Andere Apps kommen dieser Aufforderung möglicherweise nicht nach."
-#: src/view/com/modals/ServerInput.tsx:78
-#~ msgid "Bluesky.Social"
-#~ msgstr "Bluesky.Social"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:53
+msgid "Blur images"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:51
+msgid "Blur images and filter from feeds"
+msgstr ""
#: src/screens/Onboarding/index.tsx:33
msgid "Books"
-msgstr ""
+msgstr "Bücher"
-#: src/view/screens/Settings/index.tsx:859
-msgid "Build version {0} {1}"
-msgstr "Build-Version {0} {1}"
+#: src/view/screens/Settings/index.tsx:893
+#~ msgid "Build version {0} {1}"
+#~ msgstr "Build-Version {0} {1}"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:87
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:92
+#: src/view/com/auth/SplashScreen.web.tsx:166
msgid "Business"
msgstr "Business"
-#: src/view/com/modals/ServerInput.tsx:115
-#~ msgid "Button disabled. Input custom domain to proceed."
-#~ msgstr ""
-
#: src/view/com/profile/ProfileSubpageHeader.tsx:157
msgid "by —"
-msgstr ""
+msgstr "von —"
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:100
msgid "by {0}"
+msgstr "von {0}"
+
+#: src/components/LabelingServiceCard/index.tsx:57
+msgid "By {0}"
msgstr ""
#: src/view/com/profile/ProfileSubpageHeader.tsx:161
msgid "by <0/>"
+msgstr "von <0/>"
+
+#: src/screens/Signup/StepInfo/Policies.tsx:74
+msgid "By creating an account you agree to the {els}."
msgstr ""
#: src/view/com/profile/ProfileSubpageHeader.tsx:159
msgid "by you"
-msgstr ""
+msgstr "von dir"
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:60
-#: src/view/com/util/UserAvatar.tsx:224
-#: src/view/com/util/UserBanner.tsx:40
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:77
msgid "Camera"
msgstr "Kamera"
-#: src/view/com/modals/AddAppPasswords.tsx:216
+#: src/view/com/modals/AddAppPasswords.tsx:217
msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long."
msgstr "Darf nur Buchstaben, Zahlen, Leerzeichen, Bindestriche und Unterstriche enthalten. Muss mindestens 4 Zeichen lang sein, darf aber nicht länger als 32 Zeichen sein."
-#: src/components/Prompt.tsx:91
-#: src/view/com/composer/Composer.tsx:300
-#: src/view/com/composer/Composer.tsx:305
+#: src/components/Menu/index.tsx:213
+#: src/components/Prompt.tsx:113
+#: src/components/Prompt.tsx:115
+#: src/components/TagMenu/index.tsx:268
+#: src/view/com/composer/Composer.tsx:317
+#: src/view/com/composer/Composer.tsx:322
#: src/view/com/modals/ChangeEmail.tsx:218
#: src/view/com/modals/ChangeEmail.tsx:220
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
-#: src/view/com/modals/CreateOrEditList.tsx:355
-#: src/view/com/modals/EditImage.tsx:323
-#: src/view/com/modals/EditProfile.tsx:249
+#: src/view/com/modals/ChangeHandle.tsx:154
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
+#: src/view/com/modals/CreateOrEditList.tsx:356
+#: src/view/com/modals/crop-image/CropImage.web.tsx:138
+#: src/view/com/modals/EditImage.tsx:324
+#: src/view/com/modals/EditProfile.tsx:250
#: src/view/com/modals/InAppBrowserConsent.tsx:78
-#: src/view/com/modals/LinkWarning.tsx:87
-#: src/view/com/modals/Repost.tsx:87
+#: src/view/com/modals/InAppBrowserConsent.tsx:80
+#: src/view/com/modals/LinkWarning.tsx:105
+#: src/view/com/modals/LinkWarning.tsx:107
+#: src/view/com/modals/Repost.tsx:88
#: src/view/com/modals/VerifyEmail.tsx:247
#: src/view/com/modals/VerifyEmail.tsx:253
-#: src/view/com/modals/Waitlist.tsx:142
-#: src/view/screens/Search/Search.tsx:693
-#: src/view/shell/desktop/Search.tsx:238
+#: src/view/screens/Search/Search.tsx:718
+#: src/view/shell/desktop/Search.tsx:239
msgid "Cancel"
msgstr "Abbrechen"
-#: src/view/com/modals/Confirm.tsx:88
-#: src/view/com/modals/Confirm.tsx:91
-#: src/view/com/modals/CreateOrEditList.tsx:360
-#: src/view/com/modals/DeleteAccount.tsx:156
-#: src/view/com/modals/DeleteAccount.tsx:234
+#: src/view/com/modals/CreateOrEditList.tsx:361
+#: src/view/com/modals/DeleteAccount.tsx:155
+#: src/view/com/modals/DeleteAccount.tsx:233
msgctxt "action"
msgid "Cancel"
-msgstr ""
+msgstr "Abbrechen"
-#: src/view/com/modals/DeleteAccount.tsx:152
-#: src/view/com/modals/DeleteAccount.tsx:230
+#: src/view/com/modals/DeleteAccount.tsx:151
+#: src/view/com/modals/DeleteAccount.tsx:229
msgid "Cancel account deletion"
msgstr "Konto-Löschung abbrechen"
-#: src/view/com/modals/ChangeHandle.tsx:149
+#: src/view/com/modals/ChangeHandle.tsx:150
msgid "Cancel change handle"
-msgstr ""
+msgstr "Handle ändern abbrechen"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:134
+#: src/view/com/modals/crop-image/CropImage.web.tsx:135
msgid "Cancel image crop"
-msgstr ""
+msgstr "Bildbeschneidung abbrechen"
-#: src/view/com/modals/EditProfile.tsx:244
+#: src/view/com/modals/EditProfile.tsx:245
msgid "Cancel profile editing"
-msgstr ""
+msgstr "Profilbearbeitung abbrechen"
-#: src/view/com/modals/Repost.tsx:78
+#: src/view/com/modals/Repost.tsx:79
msgid "Cancel quote post"
-msgstr ""
+msgstr "Beitrag zitieren abbrechen"
#: src/view/com/modals/ListAddRemoveUsers.tsx:87
-#: src/view/shell/desktop/Search.tsx:234
+#: src/view/shell/desktop/Search.tsx:235
msgid "Cancel search"
msgstr "Suche abbrechen"
-#: src/view/com/modals/Waitlist.tsx:136
-msgid "Cancel waitlist signup"
-msgstr "Anmeldung zur Warteliste abbrechen"
+#: src/view/com/modals/LinkWarning.tsx:106
+msgid "Cancels opening the linked website"
+msgstr ""
+
+#: src/view/com/modals/VerifyEmail.tsx:152
+msgid "Change"
+msgstr ""
-#: src/view/screens/Settings/index.tsx:334
+#: src/view/screens/Settings/index.tsx:353
msgctxt "action"
msgid "Change"
msgstr "Ändern"
-#: src/view/screens/Settings/index.tsx:696
+#: src/view/screens/Settings/index.tsx:716
msgid "Change handle"
msgstr "Handle ändern"
-#: src/view/com/modals/ChangeHandle.tsx:161
-#: src/view/screens/Settings/index.tsx:705
+#: src/view/com/modals/ChangeHandle.tsx:162
+#: src/view/screens/Settings/index.tsx:727
msgid "Change Handle"
msgstr "Handle ändern"
@@ -591,21 +667,22 @@ msgstr "Handle ändern"
msgid "Change my email"
msgstr "Meine E-Mail ändern"
-#: src/view/screens/Settings/index.tsx:732
+#: src/view/screens/Settings/index.tsx:754
msgid "Change password"
-msgstr ""
+msgstr "Passwort ändern"
-#: src/view/screens/Settings/index.tsx:741
+#: src/view/com/modals/ChangePassword.tsx:141
+#: src/view/screens/Settings/index.tsx:765
msgid "Change Password"
-msgstr ""
+msgstr "Passwort Ändern"
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:73
msgid "Change post language to {0}"
-msgstr ""
+msgstr "Beitragssprache in {0} ändern"
#: src/view/screens/Settings/index.tsx:733
-msgid "Change your Bluesky password"
-msgstr ""
+#~ msgid "Change your Bluesky password"
+#~ msgstr "Ändere dein Bluesky-Passwort"
#: src/view/com/modals/ChangeEmail.tsx:109
msgid "Change Your Email"
@@ -614,7 +691,7 @@ msgstr "Deine E-Mail ändern"
#: src/screens/Deactivated.tsx:72
#: src/screens/Deactivated.tsx:76
msgid "Check my status"
-msgstr ""
+msgstr "Meinen Status prüfen"
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:121
msgid "Check out some recommended feeds. Tap + to add them to your list of pinned feeds."
@@ -624,223 +701,270 @@ msgstr "Schau dir einige empfohlene Feeds an. Tippe auf +, um sie zu deiner List
msgid "Check out some recommended users. Follow them to see similar users."
msgstr "Schau dir einige empfohlene Nutzer an. Folge ihnen, um ähnliche Nutzer zu sehen."
-#: src/view/com/modals/DeleteAccount.tsx:169
+#: src/view/com/modals/DeleteAccount.tsx:168
msgid "Check your inbox for an email with the confirmation code to enter below:"
msgstr "Überprüfe deinen Posteingang auf eine E-Mail mit dem Bestätigungscode, den du unten eingeben musst:"
#: src/view/com/modals/Threadgate.tsx:72
msgid "Choose \"Everybody\" or \"Nobody\""
-msgstr ""
+msgstr "Wähle \"Alle\" oder \"Niemand\""
#: src/view/screens/Settings/index.tsx:697
-msgid "Choose a new Bluesky username or create"
-msgstr ""
+#~ msgid "Choose a new Bluesky username or create"
+#~ msgstr "Wähle oder erstelle einen neuen Bluesky-Benutzernamen"
#: src/view/com/auth/server-input/index.tsx:79
msgid "Choose Service"
msgstr "Service wählen"
-#: src/screens/Onboarding/StepFinished.tsx:135
+#: src/screens/Onboarding/StepFinished.tsx:139
msgid "Choose the algorithms that power your custom feeds."
-msgstr ""
+msgstr "Wähle die Algorithmen aus, welche deine benutzerdefinierten Feeds generieren."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:83
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:83
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:85
msgid "Choose the algorithms that power your experience with custom feeds."
-msgstr ""
+msgstr "Wähle die Algorithmen aus, welche dein Erlebnis mit benutzerdefinierten Feeds unterstützen."
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:103
-#~ msgid "Choose your algorithmic feeds"
-#~ msgstr ""
-
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:103
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:104
msgid "Choose your main feeds"
-msgstr ""
+msgstr "Wähle deine Haupt-Feeds"
-#: src/view/com/auth/create/Step1.tsx:215
+#: src/screens/Signup/StepInfo/index.tsx:112
msgid "Choose your password"
msgstr "Wähle dein Passwort"
-#: src/view/screens/Settings/index.tsx:834
-#: src/view/screens/Settings/index.tsx:835
+#: src/view/screens/Settings/index.tsx:868
msgid "Clear all legacy storage data"
msgstr "Alle alten Speicherdaten löschen"
-#: src/view/screens/Settings/index.tsx:837
+#: src/view/screens/Settings/index.tsx:871
msgid "Clear all legacy storage data (restart after this)"
msgstr "Alle alten Speicherdaten löschen (danach neu starten)"
-#: src/view/screens/Settings/index.tsx:846
-#: src/view/screens/Settings/index.tsx:847
+#: src/view/screens/Settings/index.tsx:880
msgid "Clear all storage data"
msgstr "Alle Speicherdaten löschen"
-#: src/view/screens/Settings/index.tsx:849
+#: src/view/screens/Settings/index.tsx:883
msgid "Clear all storage data (restart after this)"
msgstr "Alle Speicherdaten löschen (danach neu starten)"
#: src/view/com/util/forms/SearchInput.tsx:88
-#: src/view/screens/Search/Search.tsx:674
+#: src/view/screens/Search/Search.tsx:699
msgid "Clear search query"
msgstr "Suchanfrage löschen"
+#: src/view/screens/Settings/index.tsx:869
+msgid "Clears all legacy storage data"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:881
+msgid "Clears all storage data"
+msgstr ""
+
#: src/view/screens/Support.tsx:40
msgid "click here"
-msgstr ""
+msgstr "hier klicken"
+
+#: src/components/TagMenu/index.web.tsx:138
+msgid "Click here to open tag menu for {tag}"
+msgstr "Klicke hier, um das Tag-Menü für {tag} zu öffnen"
+
+#: src/components/RichText.tsx:192
+msgid "Click here to open tag menu for #{tag}"
+msgstr "Klicke hier, um das Tag-Menü für #{tag} zu öffnen"
#: src/screens/Onboarding/index.tsx:35
msgid "Climate"
-msgstr ""
+msgstr "Klima"
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
msgid "Close"
-msgstr ""
+msgstr "Schließen"
-#: src/components/Dialog/index.web.tsx:78
+#: src/components/Dialog/index.web.tsx:106
+#: src/components/Dialog/index.web.tsx:218
msgid "Close active dialog"
-msgstr ""
+msgstr "Aktiven Dialog schließen"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:38
+#: src/screens/Login/PasswordUpdatedForm.tsx:38
msgid "Close alert"
-msgstr ""
+msgstr "Meldung schließen"
-#: src/view/com/util/BottomSheetCustomBackdrop.tsx:33
+#: src/view/com/util/BottomSheetCustomBackdrop.tsx:36
msgid "Close bottom drawer"
-msgstr ""
+msgstr "Untere Schublade schließen"
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:26
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:36
msgid "Close image"
msgstr "Bild schließen"
-#: src/view/com/lightbox/Lightbox.web.tsx:119
+#: src/view/com/lightbox/Lightbox.web.tsx:129
msgid "Close image viewer"
-msgstr ""
+msgstr "Bildbetrachter schließen"
-#: src/view/shell/index.web.tsx:49
+#: src/view/shell/index.web.tsx:55
msgid "Close navigation footer"
-msgstr ""
+msgstr "Fußzeile der Navigation schließen"
+
+#: src/components/Menu/index.tsx:207
+#: src/components/TagMenu/index.tsx:262
+msgid "Close this dialog"
+msgstr "Diesen Dialog schließen"
-#: src/view/shell/index.web.tsx:50
+#: src/view/shell/index.web.tsx:56
msgid "Closes bottom navigation bar"
-msgstr ""
+msgstr "Schließt die untere Navigationsleiste"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:39
+#: src/screens/Login/PasswordUpdatedForm.tsx:39
msgid "Closes password update alert"
-msgstr ""
+msgstr "Schließt die Kennwortaktualisierungsmeldung"
-#: src/view/com/composer/Composer.tsx:302
+#: src/view/com/composer/Composer.tsx:319
msgid "Closes post composer and discards post draft"
-msgstr ""
+msgstr "Schließt den Beitragsverfasser und verwirft den Beitragsentwurf"
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:27
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:37
msgid "Closes viewer for header image"
-msgstr ""
+msgstr "Schließt den Betrachter für das Banner"
-#: src/view/com/notifications/FeedItem.tsx:317
+#: src/view/com/notifications/FeedItem.tsx:321
msgid "Collapses list of users for a given notification"
-msgstr ""
+msgstr "Klappt die Liste der Benutzer für eine bestimmte Meldung zusammen"
#: src/screens/Onboarding/index.tsx:41
msgid "Comedy"
-msgstr ""
+msgstr "Komödie"
#: src/screens/Onboarding/index.tsx:27
msgid "Comics"
-msgstr ""
+msgstr "Comics"
-#: src/Navigation.tsx:227
+#: src/Navigation.tsx:241
#: src/view/screens/CommunityGuidelines.tsx:32
msgid "Community Guidelines"
msgstr "Community-Richtlinien"
-#: src/screens/Onboarding/StepFinished.tsx:148
+#: src/screens/Onboarding/StepFinished.tsx:152
msgid "Complete onboarding and start using your account"
-msgstr ""
+msgstr "Schließe das Onboarding ab und nutze dein Konto"
-#: src/view/com/composer/Composer.tsx:417
+#: src/screens/Signup/index.tsx:154
+msgid "Complete the challenge"
+msgstr "Beende die Herausforderung"
+
+#: src/view/com/composer/Composer.tsx:438
msgid "Compose posts up to {MAX_GRAPHEME_LENGTH} characters in length"
-msgstr ""
+msgstr "Verfasse Beiträge mit einer Länge von bis zu {MAX_GRAPHEME_LENGTH} Zeichen"
#: src/view/com/composer/Prompt.tsx:24
msgid "Compose reply"
msgstr "Antwort verfassen"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:67
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:81
msgid "Configure content filtering setting for category: {0}"
+msgstr "Inhaltsfilterungseinstellung der Kategorie {0} konfigurieren"
+
+#: src/components/moderation/LabelPreference.tsx:81
+msgid "Configure content filtering setting for category: {name}"
msgstr ""
-#: src/components/Prompt.tsx:113
-#: src/view/com/modals/AppealLabel.tsx:98
+#: src/components/moderation/LabelPreference.tsx:244
+msgid "Configured in <0>moderation settings0>."
+msgstr ""
+
+#: src/components/Prompt.tsx:153
+#: src/components/Prompt.tsx:156
#: src/view/com/modals/SelfLabel.tsx:154
#: src/view/com/modals/VerifyEmail.tsx:231
#: src/view/com/modals/VerifyEmail.tsx:233
-#: src/view/screens/PreferencesHomeFeed.tsx:308
+#: src/view/screens/PreferencesFollowingFeed.tsx:308
#: src/view/screens/PreferencesThreads.tsx:159
msgid "Confirm"
msgstr "Bestätigen"
#: src/view/com/modals/Confirm.tsx:75
#: src/view/com/modals/Confirm.tsx:78
-msgctxt "action"
-msgid "Confirm"
-msgstr ""
+#~ msgctxt "action"
+#~ msgid "Confirm"
+#~ msgstr "Bestätigen"
#: src/view/com/modals/ChangeEmail.tsx:193
#: src/view/com/modals/ChangeEmail.tsx:195
msgid "Confirm Change"
msgstr "Änderung bestätigen"
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:34
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:35
msgid "Confirm content language settings"
msgstr "Bestätige die Spracheinstellungen für den Inhalt"
-#: src/view/com/modals/DeleteAccount.tsx:220
+#: src/view/com/modals/DeleteAccount.tsx:219
msgid "Confirm delete account"
msgstr "Bestätige das Löschen des Kontos"
#: src/view/com/modals/ContentFilteringSettings.tsx:156
-msgid "Confirm your age to enable adult content."
+#~ msgid "Confirm your age to enable adult content."
+#~ msgstr "Bestätige dein Alter, um Inhalte für Erwachsene zu aktivieren."
+
+#: src/screens/Moderation/index.tsx:301
+msgid "Confirm your age:"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:292
+msgid "Confirm your birthdate"
msgstr ""
#: src/view/com/modals/ChangeEmail.tsx:157
-#: src/view/com/modals/DeleteAccount.tsx:182
+#: src/view/com/modals/DeleteAccount.tsx:175
+#: src/view/com/modals/DeleteAccount.tsx:181
#: src/view/com/modals/VerifyEmail.tsx:165
msgid "Confirmation code"
msgstr "Bestätigungscode"
-#: src/view/com/modals/Waitlist.tsx:120
-msgid "Confirms signing up {email} to the waitlist"
-msgstr ""
-
-#: src/view/com/auth/create/CreateAccount.tsx:182
-#: src/view/com/auth/login/LoginForm.tsx:278
+#: src/screens/Login/LoginForm.tsx:248
msgid "Connecting..."
msgstr "Verbinden..."
-#: src/view/com/auth/create/CreateAccount.tsx:202
+#: src/screens/Signup/index.tsx:219
msgid "Contact support"
+msgstr "Support kontaktieren"
+
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "content"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:18
+msgid "Content Blocked"
msgstr ""
-#: src/view/screens/Moderation.tsx:81
-msgid "Content filtering"
-msgstr "Inhaltsfilterung"
+#: src/view/screens/Moderation.tsx:83
+#~ msgid "Content filtering"
+#~ msgstr "Inhaltsfilterung"
#: src/view/com/modals/ContentFilteringSettings.tsx:44
-msgid "Content Filtering"
-msgstr "Inhaltsfilterung"
+#~ msgid "Content Filtering"
+#~ msgstr "Inhaltsfilterung"
+
+#: src/screens/Moderation/index.tsx:285
+msgid "Content filters"
+msgstr ""
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74
#: src/view/screens/LanguageSettings.tsx:278
msgid "Content Languages"
-msgstr ""
+msgstr "Inhaltssprachen"
-#: src/view/com/modals/ModerationDetails.tsx:65
+#: src/components/moderation/ModerationDetailsDialog.tsx:75
+#: src/lib/moderation/useModerationCauseDescription.ts:75
msgid "Content Not Available"
-msgstr ""
+msgstr "Inhalt nicht verfügbar"
-#: src/view/com/modals/ModerationDetails.tsx:33
-#: src/view/com/util/moderation/ScreenHider.tsx:78
+#: src/components/moderation/ModerationDetailsDialog.tsx:46
+#: src/components/moderation/ScreenHider.tsx:99
+#: src/lib/moderation/useGlobalLabelStrings.ts:22
+#: src/lib/moderation/useModerationCauseDescription.ts:38
msgid "Content Warning"
msgstr "Inhaltswarnung"
@@ -848,276 +972,346 @@ msgstr "Inhaltswarnung"
msgid "Content warnings"
msgstr "Inhaltswarnungen"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:170
-#: src/screens/Onboarding/StepFollowingFeed.tsx:153
-#: src/screens/Onboarding/StepInterests/index.tsx:248
-#: src/screens/Onboarding/StepModeration/index.tsx:118
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:108
+#: src/components/Menu/index.web.tsx:84
+msgid "Context menu backdrop, click to close the menu."
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:161
+#: src/screens/Onboarding/StepFollowingFeed.tsx:154
+#: src/screens/Onboarding/StepInterests/index.tsx:252
+#: src/screens/Onboarding/StepModeration/index.tsx:103
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:118
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:96
msgid "Continue"
msgstr "Fortfahren"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:150
-#: src/screens/Onboarding/StepInterests/index.tsx:245
-#: src/screens/Onboarding/StepModeration/index.tsx:115
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:105
-msgid "Continue to next step"
+#: src/components/AccountList.tsx:108
+msgid "Continue as {0} (currently signed in)"
msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:167
+#: src/screens/Onboarding/StepFollowingFeed.tsx:151
+#: src/screens/Onboarding/StepInterests/index.tsx:249
+#: src/screens/Onboarding/StepModeration/index.tsx:100
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:115
+#: src/screens/Signup/index.tsx:198
+msgid "Continue to next step"
+msgstr "Weiter zum nächsten Schritt"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:158
msgid "Continue to the next step"
-msgstr ""
+msgstr "Weiter zum nächsten Schritt"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:191
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:199
msgid "Continue to the next step without following any accounts"
-msgstr ""
+msgstr "Fahre mit dem nächsten Schritt fort, ohne Konten zu folgen"
#: src/screens/Onboarding/index.tsx:44
msgid "Cooking"
-msgstr ""
+msgstr "Kochen"
-#: src/view/com/modals/AddAppPasswords.tsx:195
-#: src/view/com/modals/InviteCodes.tsx:182
+#: src/view/com/modals/AddAppPasswords.tsx:196
+#: src/view/com/modals/InviteCodes.tsx:183
msgid "Copied"
msgstr "Kopiert"
-#: src/view/screens/Settings/index.tsx:241
+#: src/view/screens/Settings/index.tsx:251
msgid "Copied build version to clipboard"
-msgstr ""
+msgstr "Die Build-Version wurde in die Zwischenablage kopiert"
-#: src/view/com/modals/AddAppPasswords.tsx:76
-#: src/view/com/modals/InviteCodes.tsx:152
-#: src/view/com/util/forms/PostDropdownBtn.tsx:112
+#: src/view/com/modals/AddAppPasswords.tsx:77
+#: src/view/com/modals/ChangeHandle.tsx:326
+#: src/view/com/modals/InviteCodes.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:158
msgid "Copied to clipboard"
-msgstr ""
+msgstr "In die Zwischenablage kopiert"
-#: src/view/com/modals/AddAppPasswords.tsx:189
+#: src/view/com/modals/AddAppPasswords.tsx:190
msgid "Copies app password"
-msgstr ""
+msgstr "Kopiert das App-Passwort"
-#: src/view/com/modals/AddAppPasswords.tsx:188
+#: src/view/com/modals/AddAppPasswords.tsx:189
msgid "Copy"
msgstr "Kopieren"
-#: src/view/screens/ProfileList.tsx:417
+#: src/view/com/modals/ChangeHandle.tsx:480
+msgid "Copy {0}"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:388
msgid "Copy link to list"
msgstr "Link zur Liste kopieren"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
msgid "Copy link to post"
msgstr "Link zum Beitrag kopieren"
-#: src/view/com/profile/ProfileHeader.tsx:294
-msgid "Copy link to profile"
-msgstr "Link zum Profil kopieren"
+#: src/view/com/profile/ProfileHeader.tsx:295
+#~ msgid "Copy link to profile"
+#~ msgstr "Link zum Profil kopieren"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:139
+#: src/view/com/util/forms/PostDropdownBtn.tsx:220
+#: src/view/com/util/forms/PostDropdownBtn.tsx:222
msgid "Copy post text"
-msgstr ""
+msgstr "Beitragstext kopieren"
-#: src/Navigation.tsx:232
+#: src/Navigation.tsx:246
#: src/view/screens/CopyrightPolicy.tsx:29
msgid "Copyright Policy"
-msgstr ""
+msgstr "Urheberrechtsbestimmungen"
-#: src/view/screens/ProfileFeed.tsx:96
+#: src/view/screens/ProfileFeed.tsx:103
msgid "Could not load feed"
msgstr "Feed konnte nicht geladen werden"
-#: src/view/screens/ProfileList.tsx:888
+#: src/view/screens/ProfileList.tsx:907
msgid "Could not load list"
msgstr "Liste konnte nicht geladen werden"
-#: src/view/com/auth/create/Step2.tsx:91
-msgid "Country"
-msgstr ""
-
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:62
-#: src/view/com/auth/SplashScreen.tsx:46
-#: src/view/com/auth/SplashScreen.web.tsx:77
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:65
+#: src/view/com/auth/SplashScreen.tsx:75
+#: src/view/com/auth/SplashScreen.web.tsx:104
msgid "Create a new account"
msgstr "Ein neues Konto erstellen"
-#: src/view/screens/Settings/index.tsx:384
+#: src/view/screens/Settings/index.tsx:403
msgid "Create a new Bluesky account"
-msgstr ""
+msgstr "Erstelle ein neues Bluesky-Konto"
-#: src/view/com/auth/create/CreateAccount.tsx:122
+#: src/screens/Signup/index.tsx:129
msgid "Create Account"
msgstr "Konto erstellen"
-#: src/view/com/modals/AddAppPasswords.tsx:226
+#: src/view/com/modals/AddAppPasswords.tsx:227
msgid "Create App Password"
-msgstr ""
+msgstr "App-Passwort erstellen"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:54
-#: src/view/com/auth/SplashScreen.tsx:43
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:55
+#: src/view/com/auth/SplashScreen.tsx:66
+#: src/view/com/auth/SplashScreen.web.tsx:95
msgid "Create new account"
msgstr "Neues Konto erstellen"
-#: src/view/screens/AppPasswords.tsx:249
+#: src/components/ReportDialog/SelectReportOptionView.tsx:93
+msgid "Create report for {0}"
+msgstr ""
+
+#: src/view/screens/AppPasswords.tsx:246
msgid "Created {0}"
msgstr "Erstellt {0}"
#: src/view/screens/ProfileFeed.tsx:616
-msgid "Created by <0/>"
-msgstr ""
+#~ msgid "Created by <0/>"
+#~ msgstr "Erstellt von <0/>"
#: src/view/screens/ProfileFeed.tsx:614
-msgid "Created by you"
-msgstr ""
+#~ msgid "Created by you"
+#~ msgstr "Erstellt von dir"
-#: src/view/com/composer/Composer.tsx:448
+#: src/view/com/composer/Composer.tsx:469
msgid "Creates a card with a thumbnail. The card links to {url}"
-msgstr ""
+msgstr "Erzeugt eine Karte mit Vorschaubild und verlinkt auf {url}"
#: src/screens/Onboarding/index.tsx:29
msgid "Culture"
-msgstr ""
+msgstr "Kultur"
-#: src/view/com/auth/server-input/index.tsx:95
-#: src/view/com/auth/server-input/index.tsx:96
+#: src/view/com/auth/server-input/index.tsx:97
+#: src/view/com/auth/server-input/index.tsx:99
msgid "Custom"
-msgstr ""
+msgstr "Benutzerdefiniert"
-#: src/view/com/modals/ChangeHandle.tsx:389
+#: src/view/com/modals/ChangeHandle.tsx:388
msgid "Custom domain"
msgstr "Benutzerdefinierte Domain"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:107
+#: src/view/screens/Feeds.tsx:692
msgid "Custom feeds built by the community bring you new experiences and help you find the content you love."
-msgstr ""
+msgstr "Benutzerdefinierte Feeds, die von der Community erstellt wurden, bringen dir neue Erfahrungen und helfen dir, die Inhalte zu finden, die du liebst."
#: src/view/screens/PreferencesExternalEmbeds.tsx:55
msgid "Customize media from external sites."
-msgstr ""
-
-#: src/view/screens/Settings.tsx:687
-#~ msgid "Danger Zone"
-#~ msgstr ""
+msgstr "Passe die Einstellungen für Medien von externen Websites an."
-#: src/view/screens/Settings/index.tsx:485
-#: src/view/screens/Settings/index.tsx:511
+#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:530
msgid "Dark"
-msgstr ""
+msgstr "Dunkel"
#: src/view/screens/Debug.tsx:63
msgid "Dark mode"
-msgstr ""
+msgstr "Dunkelmodus"
-#: src/view/screens/Settings/index.tsx:498
+#: src/view/screens/Settings/index.tsx:517
msgid "Dark Theme"
+msgstr "Dunkles Thema"
+
+#: src/screens/Signup/StepInfo/index.tsx:132
+msgid "Date of birth"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:841
+msgid "Debug Moderation"
msgstr ""
#: src/view/screens/Debug.tsx:83
msgid "Debug panel"
+msgstr "Debug-Panel"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:319
+#: src/view/screens/AppPasswords.tsx:268
+#: src/view/screens/ProfileList.tsx:613
+msgid "Delete"
msgstr ""
-#: src/view/screens/Settings/index.tsx:772
+#: src/view/screens/Settings/index.tsx:796
msgid "Delete account"
msgstr "Konto löschen"
-#: src/view/com/modals/DeleteAccount.tsx:87
+#: src/view/com/modals/DeleteAccount.tsx:86
msgid "Delete Account"
msgstr "Konto löschen"
-#: src/view/screens/AppPasswords.tsx:222
-#: src/view/screens/AppPasswords.tsx:242
+#: src/view/screens/AppPasswords.tsx:239
msgid "Delete app password"
msgstr "App-Passwort löschen"
-#: src/view/screens/ProfileList.tsx:363
-#: src/view/screens/ProfileList.tsx:444
+#: src/view/screens/AppPasswords.tsx:263
+msgid "Delete app password?"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:415
msgid "Delete List"
msgstr "Liste löschen"
-#: src/view/com/modals/DeleteAccount.tsx:223
+#: src/view/com/modals/DeleteAccount.tsx:222
msgid "Delete my account"
msgstr "Mein Konto löschen"
-#: src/view/screens/Settings.tsx:706
-#~ msgid "Delete my account…"
-#~ msgstr "Mein Konto löschen…"
-
-#: src/view/screens/Settings/index.tsx:784
+#: src/view/screens/Settings/index.tsx:808
msgid "Delete My Account…"
-msgstr ""
+msgstr "Mein Konto Löschen…"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:302
+#: src/view/com/util/forms/PostDropdownBtn.tsx:304
msgid "Delete post"
msgstr "Beitrag löschen"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:232
+#: src/view/screens/ProfileList.tsx:608
+msgid "Delete this list?"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:314
msgid "Delete this post?"
msgstr "Diesen Beitrag löschen?"
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:69
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:64
msgid "Deleted"
-msgstr ""
+msgstr "Gelöscht"
-#: src/view/com/post-thread/PostThread.tsx:259
+#: src/view/com/post-thread/PostThread.tsx:305
msgid "Deleted post."
msgstr "Gelöschter Beitrag."
-#: src/view/com/modals/CreateOrEditList.tsx:300
-#: src/view/com/modals/CreateOrEditList.tsx:321
-#: src/view/com/modals/EditProfile.tsx:198
-#: src/view/com/modals/EditProfile.tsx:210
+#: src/view/com/modals/CreateOrEditList.tsx:301
+#: src/view/com/modals/CreateOrEditList.tsx:322
+#: src/view/com/modals/EditProfile.tsx:199
+#: src/view/com/modals/EditProfile.tsx:211
msgid "Description"
msgstr "Beschreibung"
-#: src/view/screens/Settings.tsx:760
-#~ msgid "Developer Tools"
-#~ msgstr "Entwickler-Tools"
-
-#: src/view/com/composer/Composer.tsx:211
+#: src/view/com/composer/Composer.tsx:218
msgid "Did you want to say anything?"
-msgstr ""
+msgstr "Wolltest du etwas sagen?"
-#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:523
msgid "Dim"
+msgstr "Dimmen"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:32
+#: src/lib/moderation/useLabelBehaviorDescription.ts:42
+#: src/lib/moderation/useLabelBehaviorDescription.ts:68
+#: src/screens/Moderation/index.tsx:341
+msgid "Disabled"
msgstr ""
-#: src/view/com/composer/Composer.tsx:144
+#: src/view/com/composer/Composer.tsx:511
msgid "Discard"
msgstr "Verwerfen"
-#: src/view/com/composer/Composer.tsx:138
-msgid "Discard draft"
-msgstr "Entwurf verwerfen"
+#: src/view/com/composer/Composer.tsx:145
+#~ msgid "Discard draft"
+#~ msgstr "Entwurf verwerfen"
+
+#: src/view/com/composer/Composer.tsx:508
+msgid "Discard draft?"
+msgstr ""
-#: src/view/screens/Moderation.tsx:207
+#: src/screens/Moderation/index.tsx:518
+#: src/screens/Moderation/index.tsx:522
msgid "Discourage apps from showing my account to logged-out users"
msgstr "Apps daran hindern, abgemeldeten Nutzern mein Konto zu zeigen"
#: src/view/com/posts/FollowingEmptyState.tsx:74
#: src/view/com/posts/FollowingEndOfFeed.tsx:75
msgid "Discover new custom feeds"
-msgstr ""
+msgstr "Entdecke neue benutzerdefinierte Feeds"
-#: src/view/screens/Feeds.tsx:473
-msgid "Discover new feeds"
+#: src/view/screens/Feeds.tsx:689
+msgid "Discover New Feeds"
msgstr "Entdecke neue Feeds"
-#: src/view/com/modals/EditProfile.tsx:192
+#: src/view/com/modals/EditProfile.tsx:193
msgid "Display name"
msgstr "Anzeigename"
-#: src/view/com/modals/EditProfile.tsx:180
+#: src/view/com/modals/EditProfile.tsx:181
msgid "Display Name"
msgstr "Anzeigename"
-#: src/view/com/modals/ChangeHandle.tsx:487
+#: src/view/com/modals/ChangeHandle.tsx:397
+msgid "DNS Panel"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:39
+msgid "Does not include nudity."
+msgstr ""
+
+#: src/screens/Signup/StepHandle.tsx:104
+msgid "Doesn't begin or end with a hyphen"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "Domain Value"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:488
msgid "Domain verified!"
msgstr "Domain verifiziert!"
-#: src/view/com/auth/create/Step1.tsx:166
-msgid "Don't have an invite code?"
-msgstr ""
+#: src/components/dialogs/BirthDateSettings.tsx:119
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/components/forms/DateField/index.tsx:74
+#: src/components/forms/DateField/index.tsx:80
+#: src/view/com/auth/server-input/index.tsx:169
+#: src/view/com/auth/server-input/index.tsx:170
+#: src/view/com/modals/AddAppPasswords.tsx:227
+#: src/view/com/modals/AltImage.tsx:140
+#: src/view/com/modals/crop-image/CropImage.web.tsx:153
+#: src/view/com/modals/InviteCodes.tsx:81
+#: src/view/com/modals/InviteCodes.tsx:124
+#: src/view/com/modals/ListAddRemoveUsers.tsx:142
+#: src/view/screens/PreferencesFollowingFeed.tsx:311
+#: src/view/screens/Settings/ExportCarDialog.tsx:94
+#: src/view/screens/Settings/ExportCarDialog.tsx:96
+msgid "Done"
+msgstr "Erledigt"
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86
-#: src/view/com/modals/EditImage.tsx:333
+#: src/view/com/modals/EditImage.tsx:334
#: src/view/com/modals/ListAddRemoveUsers.tsx:144
#: src/view/com/modals/SelfLabel.tsx:157
#: src/view/com/modals/Threadgate.tsx:129
@@ -1127,151 +1321,150 @@ msgstr ""
#: src/view/screens/PreferencesThreads.tsx:162
msgctxt "action"
msgid "Done"
-msgstr ""
-
-#: src/view/com/auth/server-input/index.tsx:165
-#: src/view/com/auth/server-input/index.tsx:166
-#: src/view/com/modals/AddAppPasswords.tsx:226
-#: src/view/com/modals/AltImage.tsx:139
-#: src/view/com/modals/ContentFilteringSettings.tsx:88
-#: src/view/com/modals/ContentFilteringSettings.tsx:96
-#: src/view/com/modals/crop-image/CropImage.web.tsx:152
-#: src/view/com/modals/InviteCodes.tsx:80
-#: src/view/com/modals/InviteCodes.tsx:123
-#: src/view/com/modals/ListAddRemoveUsers.tsx:142
-#: src/view/screens/PreferencesHomeFeed.tsx:311
-#: src/view/screens/Settings/ExportCarDialog.tsx:93
-#: src/view/screens/Settings/ExportCarDialog.tsx:94
-msgid "Done"
msgstr "Erledigt"
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:42
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:43
msgid "Done{extraText}"
msgstr "Erledigt{extraText}"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:45
-msgid "Double tap to sign in"
-msgstr ""
+#: src/view/com/auth/login/ChooseAccountForm.tsx:46
+#~ msgid "Double tap to sign in"
+#~ msgstr "Doppeltippen zum Anmelden"
#: src/view/screens/Settings/index.tsx:755
-msgid "Download Bluesky account data (repository)"
-msgstr ""
+#~ msgid "Download Bluesky account data (repository)"
+#~ msgstr "Öffnet ein Modal zum Herunterladen deiner Bluesky-Kontodaten (Kontodepot)"
#: src/view/screens/Settings/ExportCarDialog.tsx:59
#: src/view/screens/Settings/ExportCarDialog.tsx:63
msgid "Download CAR file"
-msgstr ""
+msgstr "CAR-Datei herunterladen"
-#: src/view/com/composer/text-input/TextInput.web.tsx:247
+#: src/view/com/composer/text-input/TextInput.web.tsx:249
msgid "Drop to add images"
-msgstr ""
+msgstr "Ablegen zum Hinzufügen von Bildern"
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:111
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:120
msgid "Due to Apple policies, adult content can only be enabled on the web after completing sign up."
+msgstr "Aufgrund der Apple-Richtlinien können Inhalte für Erwachsene erst nach Abschluss der Registrierung auf der Website aktiviert werden."
+
+#: src/view/com/modals/ChangeHandle.tsx:258
+msgid "e.g. alice"
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:185
+#: src/view/com/modals/EditProfile.tsx:186
msgid "e.g. Alice Roberts"
+msgstr "z.B. Alice Roberts"
+
+#: src/view/com/modals/ChangeHandle.tsx:380
+msgid "e.g. alice.com"
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:203
+#: src/view/com/modals/EditProfile.tsx:204
msgid "e.g. Artist, dog-lover, and avid reader."
-msgstr ""
+msgstr "z.B. Künstlerin, Hundeliebhaberin und begeisterte Leserin."
-#: src/view/com/modals/CreateOrEditList.tsx:283
-msgid "e.g. Great Posters"
+#: src/lib/moderation/useGlobalLabelStrings.ts:43
+msgid "E.g. artistic nudes."
msgstr ""
#: src/view/com/modals/CreateOrEditList.tsx:284
+msgid "e.g. Great Posters"
+msgstr "z.B. Große Poster"
+
+#: src/view/com/modals/CreateOrEditList.tsx:285
msgid "e.g. Spammers"
-msgstr ""
+msgstr "z.B. Spammer"
-#: src/view/com/modals/CreateOrEditList.tsx:312
+#: src/view/com/modals/CreateOrEditList.tsx:313
msgid "e.g. The posters who never miss."
-msgstr ""
+msgstr "z.B. Die Poster, die immer ins Schwarze treffen."
-#: src/view/com/modals/CreateOrEditList.tsx:313
+#: src/view/com/modals/CreateOrEditList.tsx:314
msgid "e.g. Users that repeatedly reply with ads."
-msgstr ""
+msgstr "z.B. Nutzer, die wiederholt mit Werbung antworten."
-#: src/view/com/modals/InviteCodes.tsx:96
+#: src/view/com/modals/InviteCodes.tsx:97
msgid "Each code works once. You'll receive more invite codes periodically."
msgstr "Jeder Code funktioniert einmal. Du erhältst regelmäßig neue Einladungscodes."
#: src/view/com/lists/ListMembers.tsx:149
msgctxt "action"
msgid "Edit"
+msgstr "Bearbeiten"
+
+#: src/view/com/util/UserAvatar.tsx:299
+#: src/view/com/util/UserBanner.tsx:85
+msgid "Edit avatar"
msgstr ""
#: src/view/com/composer/photos/Gallery.tsx:144
-#: src/view/com/modals/EditImage.tsx:207
+#: src/view/com/modals/EditImage.tsx:208
msgid "Edit image"
msgstr "Bild bearbeiten"
-#: src/view/screens/ProfileList.tsx:432
+#: src/view/screens/ProfileList.tsx:403
msgid "Edit list details"
msgstr "Details der Liste bearbeiten"
-#: src/view/com/modals/CreateOrEditList.tsx:250
+#: src/view/com/modals/CreateOrEditList.tsx:251
msgid "Edit Moderation List"
-msgstr ""
+msgstr "Moderationsliste bearbeiten"
-#: src/Navigation.tsx:242
+#: src/Navigation.tsx:256
#: src/view/screens/Feeds.tsx:434
#: src/view/screens/SavedFeeds.tsx:84
msgid "Edit My Feeds"
msgstr "Meine Feeds bearbeiten"
-#: src/view/com/modals/EditProfile.tsx:152
+#: src/view/com/modals/EditProfile.tsx:153
msgid "Edit my profile"
msgstr "Mein Profil bearbeiten"
-#: src/view/com/profile/ProfileHeader.tsx:417
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:171
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:168
msgid "Edit profile"
msgstr "Profil bearbeiten"
-#: src/view/com/profile/ProfileHeader.tsx:422
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:174
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:171
msgid "Edit Profile"
msgstr "Profil bearbeiten"
-#: src/view/screens/Feeds.tsx:356
+#: src/view/com/home/HomeHeaderLayout.web.tsx:62
+#: src/view/screens/Feeds.tsx:355
msgid "Edit Saved Feeds"
msgstr "Gespeicherte Feeds bearbeiten"
-#: src/view/com/modals/CreateOrEditList.tsx:245
+#: src/view/com/modals/CreateOrEditList.tsx:246
msgid "Edit User List"
-msgstr ""
+msgstr "Benutzerliste bearbeiten"
-#: src/view/com/modals/EditProfile.tsx:193
+#: src/view/com/modals/EditProfile.tsx:194
msgid "Edit your display name"
-msgstr ""
+msgstr "Bearbeite deinen Anzeigenamen"
-#: src/view/com/modals/EditProfile.tsx:211
+#: src/view/com/modals/EditProfile.tsx:212
msgid "Edit your profile description"
-msgstr ""
+msgstr "Bearbeite deine Profilbeschreibung"
#: src/screens/Onboarding/index.tsx:34
msgid "Education"
-msgstr ""
+msgstr "Bildung"
-#: src/view/com/auth/create/Step1.tsx:195
-#: src/view/com/auth/create/Step2.tsx:194
-#: src/view/com/auth/create/Step2.tsx:269
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:156
+#: src/screens/Signup/StepInfo/index.tsx:80
#: src/view/com/modals/ChangeEmail.tsx:141
-#: src/view/com/modals/Waitlist.tsx:88
msgid "Email"
msgstr "E-Mail"
-#: src/view/com/auth/create/Step1.tsx:186
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:147
+#: src/screens/Login/ForgotPasswordForm.tsx:99
msgid "Email address"
msgstr "E-Mail-Adresse"
#: src/view/com/modals/ChangeEmail.tsx:56
#: src/view/com/modals/ChangeEmail.tsx:88
msgid "Email updated"
-msgstr ""
+msgstr "E-Mail aktualisiert"
#: src/view/com/modals/ChangeEmail.tsx:111
msgid "Email Updated"
@@ -1279,91 +1472,113 @@ msgstr "E-Mail aktualisiert"
#: src/view/com/modals/VerifyEmail.tsx:78
msgid "Email verified"
-msgstr ""
+msgstr "E-Mail verifiziert"
-#: src/view/screens/Settings/index.tsx:312
+#: src/view/screens/Settings/index.tsx:331
msgid "Email:"
msgstr "E-Mail:"
-#: src/view/com/modals/EmbedConsent.tsx:113
+#: src/components/dialogs/EmbedConsent.tsx:101
msgid "Enable {0} only"
+msgstr "Nur {0} aktivieren"
+
+#: src/screens/Moderation/index.tsx:329
+msgid "Enable adult content"
msgstr ""
-#: src/view/com/modals/ContentFilteringSettings.tsx:167
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:94
msgid "Enable Adult Content"
-msgstr ""
+msgstr "Inhalte für Erwachsene aktivieren"
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:76
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:77
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:79
msgid "Enable adult content in your feeds"
+msgstr "Aktiviere Inhalte für Erwachsene in deinen Feeds"
+
+#: src/components/dialogs/EmbedConsent.tsx:82
+#: src/components/dialogs/EmbedConsent.tsx:89
+msgid "Enable external media"
msgstr ""
#: src/view/com/modals/EmbedConsent.tsx:97
-msgid "Enable External Media"
-msgstr ""
+#~ msgid "Enable External Media"
+#~ msgstr "Externe Medien aktivieren"
#: src/view/screens/PreferencesExternalEmbeds.tsx:75
msgid "Enable media players for"
-msgstr ""
+msgstr "Aktiviere Medienplayer für"
-#: src/view/screens/PreferencesHomeFeed.tsx:147
+#: src/view/screens/PreferencesFollowingFeed.tsx:147
msgid "Enable this setting to only see replies between people you follow."
msgstr "Aktiviere diese Einstellung, um nur Antworten von Personen zu sehen, denen du folgst."
-#: src/view/screens/Profile.tsx:455
+#: src/components/dialogs/EmbedConsent.tsx:94
+msgid "Enable this source only"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:339
+msgid "Enabled"
+msgstr ""
+
+#: src/screens/Profile/Sections/Feed.tsx:84
msgid "End of feed"
msgstr "Ende des Feeds"
-#: src/view/com/modals/AddAppPasswords.tsx:166
+#: src/view/com/modals/AddAppPasswords.tsx:167
msgid "Enter a name for this App Password"
+msgstr "Gebe einen Namen für dieses App-Passwort ein"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:139
+msgid "Enter a password"
msgstr ""
+#: src/components/dialogs/MutedWords.tsx:99
+#: src/components/dialogs/MutedWords.tsx:100
+msgid "Enter a word or tag"
+msgstr "Gib ein Wort oder einen Tag ein"
+
#: src/view/com/modals/VerifyEmail.tsx:105
msgid "Enter Confirmation Code"
-msgstr ""
+msgstr "Bestätigungscode eingeben"
-#: src/view/com/modals/ChangePassword.tsx:151
+#: src/view/com/modals/ChangePassword.tsx:153
msgid "Enter the code you received to change your password."
-msgstr ""
+msgstr "Gib den Code ein, welchen du erhalten hast, um dein Passwort zu ändern."
-#: src/view/com/modals/ChangeHandle.tsx:371
+#: src/view/com/modals/ChangeHandle.tsx:370
msgid "Enter the domain you want to use"
msgstr "Gib die Domain ein, die du verwenden möchtest"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:107
+#: src/screens/Login/ForgotPasswordForm.tsx:119
msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password."
msgstr "Gib die E-Mail ein, die du zur Erstellung deines Kontos verwendet hast. Wir schicken dir einen \"Reset-Code\", damit du ein neues Passwort festlegen kannst."
-#: src/view/com/auth/create/Step1.tsx:247
-#: src/view/com/modals/BirthDateSettings.tsx:74
+#: src/components/dialogs/BirthDateSettings.tsx:108
msgid "Enter your birth date"
-msgstr ""
-
-#: src/view/com/modals/Waitlist.tsx:78
-msgid "Enter your email"
-msgstr ""
+msgstr "Gib dein Geburtsdatum ein"
-#: src/view/com/auth/create/Step1.tsx:191
+#: src/screens/Login/ForgotPasswordForm.tsx:105
+#: src/screens/Signup/StepInfo/index.tsx:91
msgid "Enter your email address"
msgstr "Gib deine E-Mail-Adresse ein"
#: src/view/com/modals/ChangeEmail.tsx:41
msgid "Enter your new email above"
-msgstr ""
+msgstr "Gib oben deine neue E-Mail-Adresse ein"
#: src/view/com/modals/ChangeEmail.tsx:117
msgid "Enter your new email address below."
msgstr "Gib unten deine neue E-Mail-Adresse ein."
-#: src/view/com/auth/create/Step2.tsx:188
-msgid "Enter your phone number"
-msgstr ""
-
-#: src/view/com/auth/login/Login.tsx:99
+#: src/screens/Login/index.tsx:101
msgid "Enter your username and password"
msgstr "Gib deinen Benutzernamen und dein Passwort ein"
-#: src/view/screens/Search/Search.tsx:109
+#: src/screens/Signup/StepCaptcha/index.tsx:49
+msgid "Error receiving captcha response."
+msgstr "Fehler beim Empfang der Captcha-Antwort."
+
+#: src/view/screens/Search/Search.tsx:111
msgid "Error:"
msgstr "Fehler:"
@@ -1371,117 +1586,127 @@ msgstr "Fehler:"
msgid "Everybody"
msgstr "Alle"
-#: src/view/com/modals/ChangeHandle.tsx:150
+#: src/lib/moderation/useReportOptions.ts:66
+msgid "Excessive mentions or replies"
+msgstr ""
+
+#: src/view/com/modals/DeleteAccount.tsx:230
+msgid "Exits account deletion process"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:151
msgid "Exits handle change process"
+msgstr "Beendet den Prozess des Handle-Wechsels"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:136
+msgid "Exits image cropping process"
msgstr ""
-#: src/view/com/lightbox/Lightbox.web.tsx:120
+#: src/view/com/lightbox/Lightbox.web.tsx:130
msgid "Exits image view"
-msgstr ""
+msgstr "Beendet die Bildansicht"
#: src/view/com/modals/ListAddRemoveUsers.tsx:88
-#: src/view/shell/desktop/Search.tsx:235
+#: src/view/shell/desktop/Search.tsx:236
msgid "Exits inputting search query"
-msgstr ""
-
-#: src/view/com/modals/Waitlist.tsx:138
-msgid "Exits signing up for waitlist with {email}"
-msgstr ""
+msgstr "Beendet die Eingabe der Suchanfrage"
-#: src/view/com/lightbox/Lightbox.web.tsx:163
+#: src/view/com/lightbox/Lightbox.web.tsx:183
msgid "Expand alt text"
msgstr "Alt-Text erweitern"
#: src/view/com/composer/ComposerReplyTo.tsx:81
#: src/view/com/composer/ComposerReplyTo.tsx:84
msgid "Expand or collapse the full post you are replying to"
+msgstr "Erweitere oder reduziere den gesamten Beitrag, auf den du antwortest"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:47
+msgid "Explicit or potentially disturbing media."
msgstr ""
-#: src/view/screens/Settings/index.tsx:753
-msgid "Export my data"
+#: src/lib/moderation/useGlobalLabelStrings.ts:35
+msgid "Explicit sexual images."
msgstr ""
+#: src/view/screens/Settings/index.tsx:777
+msgid "Export my data"
+msgstr "Exportiere meine Daten"
+
#: src/view/screens/Settings/ExportCarDialog.tsx:44
-#: src/view/screens/Settings/index.tsx:764
+#: src/view/screens/Settings/index.tsx:788
msgid "Export My Data"
-msgstr ""
+msgstr "Exportiere meine Daten"
-#: src/view/com/modals/EmbedConsent.tsx:64
+#: src/components/dialogs/EmbedConsent.tsx:55
+#: src/components/dialogs/EmbedConsent.tsx:59
msgid "External Media"
-msgstr ""
+msgstr "Externe Medien"
-#: src/view/com/modals/EmbedConsent.tsx:75
+#: src/components/dialogs/EmbedConsent.tsx:71
#: src/view/screens/PreferencesExternalEmbeds.tsx:66
msgid "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."
-msgstr ""
+msgstr "Externe Medien können es Websites ermöglichen, Informationen über dich und dein Gerät zu sammeln. Es werden keine Informationen gesendet oder angefordert, bis du die Schaltfläche \"Abspielen\" drückst."
-#: src/Navigation.tsx:258
+#: src/Navigation.tsx:275
#: src/view/screens/PreferencesExternalEmbeds.tsx:52
-#: src/view/screens/Settings/index.tsx:657
+#: src/view/screens/Settings/index.tsx:677
msgid "External Media Preferences"
-msgstr ""
+msgstr "Externe Medienpräferenzen"
-#: src/view/screens/Settings/index.tsx:648
+#: src/view/screens/Settings/index.tsx:668
msgid "External media settings"
-msgstr ""
+msgstr "Externe Medienpräferenzen"
-#: src/view/com/modals/AddAppPasswords.tsx:115
-#: src/view/com/modals/AddAppPasswords.tsx:119
+#: src/view/com/modals/AddAppPasswords.tsx:116
+#: src/view/com/modals/AddAppPasswords.tsx:120
msgid "Failed to create app password."
-msgstr ""
+msgstr "Das App-Passwort konnte nicht erstellt werden."
-#: src/view/com/modals/CreateOrEditList.tsx:206
+#: src/view/com/modals/CreateOrEditList.tsx:207
msgid "Failed to create the list. Check your internet connection and try again."
-msgstr ""
+msgstr "Die Liste konnte nicht erstellt werden. Überprüfe deine Internetverbindung und versuche es erneut."
-#: src/view/com/util/forms/PostDropdownBtn.tsx:88
+#: src/view/com/util/forms/PostDropdownBtn.tsx:125
msgid "Failed to delete post, please try again"
-msgstr ""
+msgstr "Beitrag konnte nicht gelöscht werden, bitte versuche es erneut"
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:109
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:141
msgid "Failed to load recommended feeds"
msgstr "Empfohlene Feeds konnten nicht geladen werden"
-#: src/Navigation.tsx:192
-msgid "Feed"
+#: src/view/com/lightbox/Lightbox.tsx:83
+msgid "Failed to save image: {0}"
msgstr ""
-#: src/view/com/feeds/FeedSourceCard.tsx:229
+#: src/Navigation.tsx:196
+msgid "Feed"
+msgstr "Feed"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:218
msgid "Feed by {0}"
-msgstr ""
+msgstr "Feed von {0}"
-#: src/view/screens/Feeds.tsx:631
+#: src/view/screens/Feeds.tsx:605
msgid "Feed offline"
msgstr "Feed offline"
-#: src/view/com/feeds/FeedPage.tsx:143
-msgid "Feed Preferences"
-msgstr "Feed-Einstellungen"
-
-#: src/view/shell/desktop/RightNav.tsx:69
-#: src/view/shell/Drawer.tsx:311
+#: src/view/shell/desktop/RightNav.tsx:61
+#: src/view/shell/Drawer.tsx:314
msgid "Feedback"
msgstr "Feedback"
-#: src/Navigation.tsx:442
-#: src/view/screens/Feeds.tsx:548
-#: src/view/screens/Profile.tsx:184
-#: src/view/shell/bottom-bar/BottomBar.tsx:181
-#: src/view/shell/desktop/LeftNav.tsx:342
-#: src/view/shell/Drawer.tsx:476
-#: src/view/shell/Drawer.tsx:477
+#: src/Navigation.tsx:464
+#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:524
+#: src/view/screens/Profile.tsx:194
+#: src/view/shell/bottom-bar/BottomBar.tsx:191
+#: src/view/shell/desktop/LeftNav.tsx:346
+#: src/view/shell/Drawer.tsx:479
+#: src/view/shell/Drawer.tsx:480
msgid "Feeds"
msgstr "Feeds"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
-#~ msgid "Feeds are created by users and can give you entirely new experiences."
-#~ msgstr ""
-
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
-#~ msgid "Feeds are created by users and organizations. They offer you varied experiences and suggest content you may like using algorithms."
-#~ msgstr ""
-
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:57
msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting."
msgstr "Feeds werden von Nutzern erstellt, um Inhalte zu kuratieren. Wähle einige Feeds aus, die du interessant findest."
@@ -1490,153 +1715,203 @@ msgstr "Feeds werden von Nutzern erstellt, um Inhalte zu kuratieren. Wähle eini
msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information."
msgstr "Feeds sind benutzerdefinierte Algorithmen, die Nutzer mit ein wenig Programmierkenntnisse erstellen. <0/> für mehr Informationen."
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:70
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:80
msgid "Feeds can be topical as well!"
+msgstr "Die Feeds können auch auf einem Thema basieren!"
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "File Contents"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:151
-msgid "Finalizing"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:66
+msgid "Filter from feeds"
msgstr ""
+#: src/screens/Onboarding/StepFinished.tsx:155
+msgid "Finalizing"
+msgstr "Abschließen"
+
#: src/view/com/posts/CustomFeedEmptyState.tsx:47
#: src/view/com/posts/FollowingEmptyState.tsx:57
#: src/view/com/posts/FollowingEndOfFeed.tsx:58
msgid "Find accounts to follow"
-msgstr ""
+msgstr "Konten zum Folgen finden"
-#: src/view/screens/Search/Search.tsx:439
+#: src/view/screens/Search/Search.tsx:442
msgid "Find users on Bluesky"
msgstr "Nutzer auf Bluesky finden"
-#: src/view/screens/Search/Search.tsx:437
+#: src/view/screens/Search/Search.tsx:440
msgid "Find users with the search tool on the right"
msgstr "Finde Nutzer mit der Suchfunktion auf der rechten Seite"
-#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:155
msgid "Finding similar accounts..."
msgstr "Suche nach ähnlichen Konten..."
-#: src/view/screens/PreferencesHomeFeed.tsx:111
-msgid "Fine-tune the content you see on your home screen."
-msgstr ""
+#: src/view/screens/PreferencesFollowingFeed.tsx:111
+msgid "Fine-tune the content you see on your Following feed."
+msgstr "Passe die Inhalte auf Deinem Following-Feed an."
#: src/view/screens/PreferencesThreads.tsx:60
msgid "Fine-tune the discussion threads."
-msgstr ""
+msgstr "Passe die Diskussionsstränge an."
#: src/screens/Onboarding/index.tsx:38
msgid "Fitness"
-msgstr ""
+msgstr "Fitness"
-#: src/screens/Onboarding/StepFinished.tsx:131
+#: src/screens/Onboarding/StepFinished.tsx:135
msgid "Flexible"
-msgstr ""
+msgstr "Flexibel"
-#: src/view/com/modals/EditImage.tsx:115
+#: src/view/com/modals/EditImage.tsx:116
msgid "Flip horizontal"
-msgstr ""
+msgstr "Horizontal drehen"
-#: src/view/com/modals/EditImage.tsx:120
-#: src/view/com/modals/EditImage.tsx:287
+#: src/view/com/modals/EditImage.tsx:121
+#: src/view/com/modals/EditImage.tsx:288
msgid "Flip vertically"
-msgstr ""
+msgstr "Vertikal drehen"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:181
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:512
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:189
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:236
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:146
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
msgid "Follow"
msgstr "Folgen"
-#: src/view/com/profile/FollowButton.tsx:64
+#: src/view/com/profile/FollowButton.tsx:69
msgctxt "action"
msgid "Follow"
-msgstr ""
+msgstr "Folgen"
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:58
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:122
-#: src/view/com/profile/ProfileHeader.tsx:503
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:221
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:128
msgid "Follow {0}"
+msgstr "{0} folgen"
+
+#: src/view/com/profile/ProfileMenu.tsx:242
+#: src/view/com/profile/ProfileMenu.tsx:253
+msgid "Follow Account"
msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:179
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:187
msgid "Follow All"
+msgstr "Allen folgen"
+
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:144
+msgid "Follow Back"
msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:174
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:182
msgid "Follow selected accounts and continue to the next step"
-msgstr ""
+msgstr "Ausgewählten Konten folgen und mit dem nächsten Schritt fortfahren"
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:64
msgid "Follow some users to get started. We can recommend you more users based on who you find interesting."
msgstr "Folge einigen Nutzern, um loszulegen. Wir können dir weitere Nutzer empfehlen, je nachdem, wen du interessant findest."
-#: src/view/com/profile/ProfileCard.tsx:194
+#: src/view/com/profile/ProfileCard.tsx:216
msgid "Followed by {0}"
-msgstr ""
+msgstr "Gefolgt von {0}"
#: src/view/com/modals/Threadgate.tsx:98
msgid "Followed users"
-msgstr ""
+msgstr "Benutzer, denen ich folge"
-#: src/view/screens/PreferencesHomeFeed.tsx:154
+#: src/view/screens/PreferencesFollowingFeed.tsx:154
msgid "Followed users only"
-msgstr ""
+msgstr "Nur Benutzer, denen ich folge"
-#: src/view/com/notifications/FeedItem.tsx:166
+#: src/view/com/notifications/FeedItem.tsx:170
msgid "followed you"
-msgstr ""
+msgstr "folgte dir"
+#: src/view/com/profile/ProfileFollowers.tsx:104
#: src/view/screens/ProfileFollowers.tsx:25
msgid "Followers"
msgstr "Follower"
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:494
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:234
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:149
+#: src/view/com/profile/ProfileFollows.tsx:104
#: src/view/screens/ProfileFollows.tsx:25
msgid "Following"
msgstr "Folge ich"
-#: src/view/com/profile/ProfileHeader.tsx:148
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:93
msgid "Following {0}"
+msgstr "ich folge {0}"
+
+#: src/view/screens/Settings/index.tsx:553
+msgid "Following feed preferences"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:545
+#: src/Navigation.tsx:262
+#: src/view/com/home/HomeHeaderLayout.web.tsx:50
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:84
+#: src/view/screens/PreferencesFollowingFeed.tsx:104
+#: src/view/screens/Settings/index.tsx:562
+msgid "Following Feed Preferences"
+msgstr "Following-Feed-Einstellungen"
+
+#: src/screens/Profile/Header/Handle.tsx:24
msgid "Follows you"
msgstr "Folgt dir"
#: src/view/com/profile/ProfileCard.tsx:141
msgid "Follows You"
-msgstr ""
+msgstr "Folgt dir"
#: src/screens/Onboarding/index.tsx:43
msgid "Food"
-msgstr ""
+msgstr "Essen"
-#: src/view/com/modals/DeleteAccount.tsx:111
+#: src/view/com/modals/DeleteAccount.tsx:110
msgid "For security reasons, we'll need to send a confirmation code to your email address."
msgstr "Aus Sicherheitsgründen müssen wir dir einen Bestätigungscode an deine E-Mail-Adresse schicken."
-#: src/view/com/modals/AddAppPasswords.tsx:209
+#: src/view/com/modals/AddAppPasswords.tsx:210
msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one."
msgstr "Aus Sicherheitsgründen kannst du dies nicht erneut ansehen. Wenn du dieses Passwort verlierst, musst du ein neues generieren."
-#: src/view/com/auth/login/LoginForm.tsx:241
-msgid "Forgot"
-msgstr "Vergessen"
+#: src/view/com/auth/login/LoginForm.tsx:244
+#~ msgid "Forgot"
+#~ msgstr "Vergessen"
-#: src/view/com/auth/login/LoginForm.tsx:238
-msgid "Forgot password"
-msgstr "Passwort vergessen"
+#: src/view/com/auth/login/LoginForm.tsx:241
+#~ msgid "Forgot password"
+#~ msgstr "Passwort vergessen"
-#: src/view/com/auth/login/Login.tsx:127
-#: src/view/com/auth/login/Login.tsx:143
+#: src/screens/Login/index.tsx:129
+#: src/screens/Login/index.tsx:144
msgid "Forgot Password"
msgstr "Passwort vergessen"
-#: src/view/com/posts/FeedItem.tsx:189
+#: src/screens/Login/LoginForm.tsx:201
+msgid "Forgot password?"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:212
+msgid "Forgot?"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:52
+msgid "Frequently Posts Unwanted Content"
+msgstr ""
+
+#: src/screens/Hashtag.tsx:109
+#: src/screens/Hashtag.tsx:149
+msgid "From @{sanitizedAuthor}"
+msgstr "Von @{sanitizedAuthor}"
+
+#: src/view/com/posts/FeedItem.tsx:179
msgctxt "from-feed"
msgid "From <0/>"
-msgstr ""
+msgstr "Aus <0/>"
#: src/view/com/composer/photos/SelectPhotoBtn.tsx:43
msgid "Gallery"
@@ -1647,112 +1922,152 @@ msgstr "Galerie"
msgid "Get Started"
msgstr "Los geht's"
-#: src/view/com/auth/LoggedOut.tsx:81
+#: src/lib/moderation/useReportOptions.ts:37
+msgid "Glaring violations of law or terms of service"
+msgstr ""
+
+#: src/components/moderation/ScreenHider.tsx:151
+#: src/components/moderation/ScreenHider.tsx:160
#: src/view/com/auth/LoggedOut.tsx:82
-#: src/view/com/util/moderation/ScreenHider.tsx:123
-#: src/view/shell/desktop/LeftNav.tsx:104
+#: src/view/com/auth/LoggedOut.tsx:83
+#: src/view/screens/NotFound.tsx:55
+#: src/view/screens/ProfileFeed.tsx:112
+#: src/view/screens/ProfileList.tsx:916
+#: src/view/shell/desktop/LeftNav.tsx:108
msgid "Go back"
msgstr "Gehe zurück"
-#: src/view/screens/ProfileFeed.tsx:105
-#: src/view/screens/ProfileFeed.tsx:110
-#: src/view/screens/ProfileList.tsx:897
-#: src/view/screens/ProfileList.tsx:902
+#: src/components/Error.tsx:91
+#: src/screens/Profile/ErrorState.tsx:62
+#: src/screens/Profile/ErrorState.tsx:66
+#: src/view/screens/NotFound.tsx:54
+#: src/view/screens/ProfileFeed.tsx:117
+#: src/view/screens/ProfileList.tsx:921
msgid "Go Back"
msgstr "Gehe zurück"
-#: src/screens/Onboarding/Layout.tsx:104
-#: src/screens/Onboarding/Layout.tsx:193
+#: src/components/ReportDialog/SelectReportOptionView.tsx:73
+#: src/components/ReportDialog/SubmitView.tsx:104
+#: src/screens/Onboarding/Layout.tsx:102
+#: src/screens/Onboarding/Layout.tsx:191
+#: src/screens/Signup/index.tsx:173
msgid "Go back to previous step"
+msgstr "Zum vorherigen Schritt zurückkehren"
+
+#: src/view/screens/NotFound.tsx:55
+msgid "Go home"
msgstr ""
-#: src/view/screens/Search/Search.tsx:724
-#: src/view/shell/desktop/Search.tsx:262
-msgid "Go to @{queryMaybeHandle}"
+#: src/view/screens/NotFound.tsx:54
+msgid "Go Home"
msgstr ""
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:189
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:218
-#: src/view/com/auth/login/LoginForm.tsx:288
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:195
-#: src/view/com/modals/ChangePassword.tsx:165
+#: src/view/screens/Search/Search.tsx:749
+#: src/view/shell/desktop/Search.tsx:263
+msgid "Go to @{queryMaybeHandle}"
+msgstr "Gehe zu @{queryMaybeHandle}"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:172
+#: src/view/com/modals/ChangePassword.tsx:167
msgid "Go to next"
msgstr "Gehe zum nächsten"
-#: src/view/com/modals/ChangeHandle.tsx:265
+#: src/lib/moderation/useGlobalLabelStrings.ts:46
+msgid "Graphic Media"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:266
msgid "Handle"
msgstr "Handle"
-#: src/view/com/auth/create/CreateAccount.tsx:197
-msgid "Having trouble?"
+#: src/lib/moderation/useReportOptions.ts:32
+msgid "Harassment, trolling, or intolerance"
msgstr ""
-#: src/view/shell/desktop/RightNav.tsx:98
-#: src/view/shell/Drawer.tsx:321
+#: src/Navigation.tsx:282
+msgid "Hashtag"
+msgstr "Hashtag"
+
+#: src/components/RichText.tsx:191
+msgid "Hashtag: #{tag}"
+msgstr "Hashtag: #{tag}"
+
+#: src/screens/Signup/index.tsx:217
+msgid "Having trouble?"
+msgstr "Hast du Probleme?"
+
+#: src/view/shell/desktop/RightNav.tsx:90
+#: src/view/shell/Drawer.tsx:324
msgid "Help"
msgstr "Hilfe"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:132
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:140
msgid "Here are some accounts for you to follow"
-msgstr ""
+msgstr "Hier sind einige Konten, denen du folgen könntest"
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:79
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:89
msgid "Here are some popular topical feeds. You can choose to follow as many as you like."
-msgstr ""
+msgstr "Hier sind einige beliebte thematische Feeds. Du kannst so vielen folgen, wie du möchtest."
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:74
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:84
msgid "Here are some topical feeds based on your interests: {interestsText}. You can choose to follow as many as you like."
-msgstr ""
+msgstr "Hier sind einige thematische Feeds, die auf deinen Interessen basieren: {interestsText}. Du kannst so vielen Feeds folgen, wie du möchtest."
-#: src/view/com/modals/AddAppPasswords.tsx:153
+#: src/view/com/modals/AddAppPasswords.tsx:154
msgid "Here is your app password."
msgstr "Hier ist dein App-Passwort."
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:41
-#: src/view/com/modals/ContentFilteringSettings.tsx:251
-#: src/view/com/util/moderation/ContentHider.tsx:105
-#: src/view/com/util/moderation/PostHider.tsx:108
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:134
+#: src/components/moderation/PostHider.tsx:107
+#: src/lib/moderation/useLabelBehaviorDescription.ts:15
+#: src/lib/moderation/useLabelBehaviorDescription.ts:20
+#: src/lib/moderation/useLabelBehaviorDescription.ts:25
+#: src/lib/moderation/useLabelBehaviorDescription.ts:30
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:52
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:76
+#: src/view/com/util/forms/PostDropdownBtn.tsx:328
msgid "Hide"
msgstr "Ausblenden"
-#: src/view/com/modals/ContentFilteringSettings.tsx:224
-#: src/view/com/notifications/FeedItem.tsx:325
+#: src/view/com/notifications/FeedItem.tsx:329
msgctxt "action"
msgid "Hide"
-msgstr ""
+msgstr "Ausblenden"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:187
+#: src/view/com/util/forms/PostDropdownBtn.tsx:276
+#: src/view/com/util/forms/PostDropdownBtn.tsx:278
msgid "Hide post"
msgstr "Beitrag ausblenden"
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:67
+#: src/components/moderation/PostHider.tsx:64
msgid "Hide the content"
-msgstr ""
+msgstr "Den Inhalt ausblenden"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:191
+#: src/view/com/util/forms/PostDropdownBtn.tsx:325
msgid "Hide this post?"
msgstr "Diesen Beitrag ausblenden?"
-#: src/view/com/notifications/FeedItem.tsx:315
+#: src/view/com/notifications/FeedItem.tsx:319
msgid "Hide user list"
msgstr "Benutzerliste ausblenden"
-#: src/view/com/profile/ProfileHeader.tsx:486
-msgid "Hides posts from {0} in your feed"
-msgstr ""
+#: src/view/com/profile/ProfileHeader.tsx:487
+#~ msgid "Hides posts from {0} in your feed"
+#~ msgstr "Blendet Beiträge von {0} in Deinem Feed aus"
#: src/view/com/posts/FeedErrorMessage.tsx:111
msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue."
-msgstr "Hm, beim Kontakt mit dem Feed-Server ist ein Problem aufgetreten. Bitte informiere den Eigentümer des Feeds über dieses Problem."
+msgstr "Hmm, beim Kontakt mit dem Feed-Server ist ein Problem aufgetreten. Bitte informiere den Eigentümer des Feeds über dieses Problem."
#: src/view/com/posts/FeedErrorMessage.tsx:99
msgid "Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue."
-msgstr "Hm, der Feed-Server scheint falsch konfiguriert zu sein. Bitte informiere den Eigentümer des Feeds über dieses Problem."
+msgstr "Hmm, der Feed-Server scheint falsch konfiguriert zu sein. Bitte informiere den Eigentümer des Feeds über dieses Problem."
#: src/view/com/posts/FeedErrorMessage.tsx:105
msgid "Hmm, the feed server appears to be offline. Please let the feed owner know about this issue."
-msgstr "Hm, der Feed-Server scheint offline zu sein. Bitte informiere den Eigentümer des Feeds über dieses Problem."
+msgstr "Hmm, der Feed-Server scheint offline zu sein. Bitte informiere den Eigentümer des Feeds über dieses Problem."
#: src/view/com/posts/FeedErrorMessage.tsx:102
msgid "Hmm, the feed server gave a bad response. Please let the feed owner know about this issue."
@@ -1760,31 +2075,38 @@ msgstr "Hmm, der Feed-Server hat eine schlechte Antwort gegeben. Bitte informier
#: src/view/com/posts/FeedErrorMessage.tsx:96
msgid "Hmm, we're having trouble finding this feed. It may have been deleted."
-msgstr "Hm, wir haben Probleme, diesen Feed zu finden. Möglicherweise wurde er gelöscht."
+msgstr "Hmm, wir haben Probleme, diesen Feed zu finden. Möglicherweise wurde er gelöscht."
+
+#: src/screens/Moderation/index.tsx:59
+msgid "Hmmmm, it seems we're having trouble loading this data. See below for more details. If this issue persists, please contact us."
+msgstr ""
+
+#: src/screens/Profile/ErrorState.tsx:31
+msgid "Hmmmm, we couldn't load that moderation service."
+msgstr ""
-#: src/Navigation.tsx:432
-#: src/view/shell/bottom-bar/BottomBar.tsx:137
-#: src/view/shell/desktop/LeftNav.tsx:306
-#: src/view/shell/Drawer.tsx:398
-#: src/view/shell/Drawer.tsx:399
+#: src/Navigation.tsx:454
+#: src/view/shell/bottom-bar/BottomBar.tsx:147
+#: src/view/shell/desktop/LeftNav.tsx:310
+#: src/view/shell/Drawer.tsx:401
+#: src/view/shell/Drawer.tsx:402
msgid "Home"
msgstr "Home"
-#: src/Navigation.tsx:247
-#: src/view/com/pager/FeedsTabBarMobile.tsx:123
-#: src/view/screens/PreferencesHomeFeed.tsx:104
-#: src/view/screens/Settings/index.tsx:543
-msgid "Home Feed Preferences"
-msgstr "Home-Feed-Einstellungen"
+#: src/view/com/modals/ChangeHandle.tsx:420
+msgid "Host:"
+msgstr ""
-#: src/view/com/auth/create/Step1.tsx:78
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:120
+#: src/screens/Login/ForgotPasswordForm.tsx:89
+#: src/screens/Login/LoginForm.tsx:134
+#: src/screens/Signup/StepInfo/index.tsx:40
+#: src/view/com/modals/ChangeHandle.tsx:281
msgid "Hosting provider"
msgstr "Hosting-Anbieter"
#: src/view/com/modals/InAppBrowserConsent.tsx:44
msgid "How should we open this link?"
-msgstr ""
+msgstr "Wie sollen wir diesen Link öffnen?"
#: src/view/com/modals/VerifyEmail.tsx:214
msgid "I have a code"
@@ -1792,366 +2114,415 @@ msgstr "Ich habe einen Code"
#: src/view/com/modals/VerifyEmail.tsx:216
msgid "I have a confirmation code"
-msgstr ""
+msgstr "Ich habe einen Bestätigungscode"
-#: src/view/com/modals/ChangeHandle.tsx:283
+#: src/view/com/modals/ChangeHandle.tsx:284
msgid "I have my own domain"
msgstr "Ich habe meine eigene Domain"
-#: src/view/com/lightbox/Lightbox.web.tsx:165
+#: src/view/com/lightbox/Lightbox.web.tsx:185
msgid "If alt text is long, toggles alt text expanded state"
-msgstr ""
+msgstr "Schaltet den erweiterten Status des Alt-Textes um, wenn dieser lang ist"
#: src/view/com/modals/SelfLabel.tsx:127
msgid "If none are selected, suitable for all ages."
msgstr "Wenn keine ausgewählt werden, sind sie für alle Altersgruppen geeignet."
-#: src/view/com/modals/ChangePassword.tsx:146
+#: src/screens/Signup/StepInfo/Policies.tsx:83
+msgid "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."
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:610
+msgid "If you delete this list, you won't be able to recover it."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:316
+msgid "If you remove this post, you won't be able to recover it."
+msgstr ""
+
+#: src/view/com/modals/ChangePassword.tsx:148
msgid "If you want to change your password, we will send you a code to verify that this is your account."
+msgstr "Wenn du dein Passwort ändern möchtest, senden wir dir einen Code, um zu bestätigen, dass es sich um dein Konto handelt."
+
+#: src/lib/moderation/useReportOptions.ts:36
+msgid "Illegal and Urgent"
msgstr ""
#: src/view/com/util/images/Gallery.tsx:38
msgid "Image"
-msgstr ""
+msgstr "Bild"
-#: src/view/com/modals/AltImage.tsx:120
+#: src/view/com/modals/AltImage.tsx:121
msgid "Image alt text"
msgstr "Bild-Alt-Text"
#: src/view/com/util/UserAvatar.tsx:311
#: src/view/com/util/UserBanner.tsx:118
-msgid "Image options"
-msgstr "Bild-Optionen"
+#~ msgid "Image options"
+#~ msgstr "Bild-Optionen"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:138
-msgid "Input code sent to your email for password reset"
+#: src/lib/moderation/useReportOptions.ts:47
+msgid "Impersonation or false claims about identity or affiliation"
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:184
+#: src/screens/Login/SetNewPasswordForm.tsx:127
+msgid "Input code sent to your email for password reset"
+msgstr "Gib den Code ein, den du per E-Mail erhalten hast, um dein Passwort zurückzusetzen."
+
+#: src/view/com/modals/DeleteAccount.tsx:183
msgid "Input confirmation code for account deletion"
-msgstr ""
+msgstr "Bestätigungscode für die Kontolöschung eingeben"
-#: src/view/com/auth/create/Step1.tsx:196
-msgid "Input email for Bluesky account"
-msgstr ""
+#: src/view/com/auth/create/Step1.tsx:177
+#~ msgid "Input email for Bluesky account"
+#~ msgstr "E-Mail für Bluesky-Konto eingeben"
-#: src/view/com/auth/create/Step1.tsx:154
-msgid "Input invite code to proceed"
-msgstr ""
+#: src/view/com/auth/create/Step1.tsx:151
+#~ msgid "Input invite code to proceed"
+#~ msgstr "Einladungscode eingeben, um fortzufahren"
-#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/AddAppPasswords.tsx:181
msgid "Input name for app password"
-msgstr ""
+msgstr "Namen für das App-Passwort eingeben"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:162
+#: src/screens/Login/SetNewPasswordForm.tsx:151
msgid "Input new password"
-msgstr ""
+msgstr "Neues Passwort eingeben"
-#: src/view/com/modals/DeleteAccount.tsx:203
+#: src/view/com/modals/DeleteAccount.tsx:202
msgid "Input password for account deletion"
-msgstr ""
-
-#: src/view/com/auth/create/Step2.tsx:196
-msgid "Input phone number for SMS verification"
-msgstr ""
+msgstr "Passwort für die Kontolöschung eingeben"
-#: src/view/com/auth/login/LoginForm.tsx:230
+#: src/screens/Login/LoginForm.tsx:195
msgid "Input the password tied to {identifier}"
-msgstr ""
+msgstr "Passwort, das an {identifier} gebunden ist, eingeben"
-#: src/view/com/auth/login/LoginForm.tsx:197
+#: src/screens/Login/LoginForm.tsx:168
msgid "Input the username or email address you used at signup"
-msgstr ""
-
-#: src/view/com/auth/create/Step2.tsx:271
-msgid "Input the verification code we have texted to you"
-msgstr ""
-
-#: src/view/com/modals/Waitlist.tsx:90
-msgid "Input your email to get on the Bluesky waitlist"
-msgstr ""
+msgstr "Benutzernamen oder E-Mail-Adresse eingeben, die du bei der Anmeldung verwendet hast"
-#: src/view/com/auth/login/LoginForm.tsx:229
+#: src/screens/Login/LoginForm.tsx:194
msgid "Input your password"
+msgstr "Gib dein Passwort ein"
+
+#: src/view/com/modals/ChangeHandle.tsx:389
+msgid "Input your preferred hosting provider"
msgstr ""
-#: src/view/com/auth/create/Step3.tsx:42
+#: src/screens/Signup/StepHandle.tsx:62
msgid "Input your user handle"
-msgstr ""
+msgstr "Gib deinen Handle ein"
-#: src/view/com/post-thread/PostThreadItem.tsx:225
+#: src/view/com/post-thread/PostThreadItem.tsx:221
msgid "Invalid or unsupported post record"
-msgstr ""
+msgstr "Ungültiger oder nicht unterstützter Beitragrekord"
-#: src/view/com/auth/login/LoginForm.tsx:113
+#: src/screens/Login/LoginForm.tsx:114
msgid "Invalid username or password"
msgstr "Ungültiger Benutzername oder Passwort"
-#: src/view/screens/Settings.tsx:411
-#~ msgid "Invite"
-#~ msgstr "Einladen"
-
-#: src/view/com/modals/InviteCodes.tsx:93
+#: src/view/com/modals/InviteCodes.tsx:94
msgid "Invite a Friend"
msgstr "Einen Freund einladen"
-#: src/view/com/auth/create/Step1.tsx:144
-#: src/view/com/auth/create/Step1.tsx:153
+#: src/screens/Signup/StepInfo/index.tsx:58
msgid "Invite code"
msgstr "Einladungscode"
-#: src/view/com/auth/create/state.ts:199
+#: src/screens/Signup/state.ts:278
msgid "Invite code not accepted. Check that you input it correctly and try again."
msgstr "Einladungscode nicht akzeptiert. Überprüfe, ob du ihn richtig eingegeben hast und versuche es erneut."
-#: src/view/com/modals/InviteCodes.tsx:170
+#: src/view/com/modals/InviteCodes.tsx:171
msgid "Invite codes: {0} available"
-msgstr ""
+msgstr "Einladungscodes: {0} verfügbar"
-#: src/view/shell/Drawer.tsx:645
-#~ msgid "Invite codes: {invitesAvailable} available"
-#~ msgstr "Einladungscodes: {invitesAvailable} verfügbar"
-
-#: src/view/com/modals/InviteCodes.tsx:169
+#: src/view/com/modals/InviteCodes.tsx:170
msgid "Invite codes: 1 available"
-msgstr ""
+msgstr "Einladungscodes: 1 verfügbar"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:64
+#: src/screens/Onboarding/StepFollowingFeed.tsx:65
msgid "It shows posts from the people you follow as they happen."
-msgstr ""
+msgstr "Es zeigt die Beiträge der Personen an, denen du folgst, sobald sie erscheinen."
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:99
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:104
+#: src/view/com/auth/SplashScreen.web.tsx:172
msgid "Jobs"
msgstr "Jobs"
-#: src/view/com/modals/Waitlist.tsx:67
-msgid "Join the waitlist"
-msgstr "Der Warteliste beitreten"
+#: src/screens/Onboarding/index.tsx:24
+msgid "Journalism"
+msgstr "Journalismus"
+
+#: src/components/moderation/LabelsOnMe.tsx:59
+msgid "label has been placed on this {labelTarget}"
+msgstr ""
-#: src/view/com/auth/create/Step1.tsx:170
-#: src/view/com/auth/create/Step1.tsx:174
-msgid "Join the waitlist."
-msgstr "Der Warteliste beitreten."
+#: src/components/moderation/ContentHider.tsx:144
+msgid "Labeled by {0}."
+msgstr ""
-#: src/view/com/modals/Waitlist.tsx:128
-msgid "Join Waitlist"
-msgstr "Warteliste beitreten"
+#: src/components/moderation/ContentHider.tsx:142
+msgid "Labeled by the author."
+msgstr ""
-#: src/screens/Onboarding/index.tsx:24
-msgid "Journalism"
+#: src/view/screens/Profile.tsx:188
+msgid "Labels"
+msgstr ""
+
+#: src/screens/Profile/Sections/Labels.tsx:142
+msgid "Labels are annotations on users and content. They can be used to hide, warn, and categorize the network."
+msgstr ""
+
+#: src/components/moderation/LabelsOnMe.tsx:61
+msgid "labels have been placed on this {labelTarget}"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:62
+msgid "Labels on your account"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:64
+msgid "Labels on your content"
msgstr ""
#: src/view/com/composer/select-language/SelectLangBtn.tsx:104
msgid "Language selection"
msgstr "Sprachauswahl"
-#: src/view/screens/Settings/index.tsx:594
+#: src/view/screens/Settings/index.tsx:614
msgid "Language settings"
-msgstr ""
+msgstr "Spracheinstellungen"
-#: src/Navigation.tsx:140
+#: src/Navigation.tsx:144
#: src/view/screens/LanguageSettings.tsx:89
msgid "Language Settings"
msgstr "Spracheinstellungen"
-#: src/view/screens/Settings/index.tsx:603
+#: src/view/screens/Settings/index.tsx:623
msgid "Languages"
msgstr "Sprachen"
#: src/view/com/auth/create/StepHeader.tsx:20
-msgid "Last step!"
-msgstr ""
+#~ msgid "Last step!"
+#~ msgstr "Letzter Schritt!"
#: src/view/com/util/moderation/ContentHider.tsx:103
-msgid "Learn more"
-msgstr "Mehr erfahren"
+#~ msgid "Learn more"
+#~ msgstr "Mehr erfahren"
-#: src/view/com/util/moderation/PostAlerts.tsx:47
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:65
-#: src/view/com/util/moderation/ScreenHider.tsx:104
+#: src/components/moderation/ScreenHider.tsx:136
msgid "Learn More"
msgstr "Mehr erfahren"
-#: src/view/com/util/moderation/ContentHider.tsx:85
-#: src/view/com/util/moderation/PostAlerts.tsx:40
-#: src/view/com/util/moderation/PostHider.tsx:78
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:49
-#: src/view/com/util/moderation/ScreenHider.tsx:101
+#: src/components/moderation/ContentHider.tsx:65
+#: src/components/moderation/ContentHider.tsx:128
+msgid "Learn more about the moderation applied to this content."
+msgstr ""
+
+#: src/components/moderation/PostHider.tsx:85
+#: src/components/moderation/ScreenHider.tsx:125
msgid "Learn more about this warning"
msgstr "Erfahre mehr über diese Warnung"
-#: src/view/screens/Moderation.tsx:243
+#: src/screens/Moderation/index.tsx:549
msgid "Learn more about what is public on Bluesky."
msgstr "Erfahre mehr darüber, was auf Bluesky öffentlich ist."
+#: src/components/moderation/ContentHider.tsx:152
+msgid "Learn more."
+msgstr ""
+
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82
msgid "Leave them all unchecked to see any language."
msgstr "Lass alle Kontrollkästchen deaktiviert, um alle Sprachen zu sehen."
-#: src/view/com/modals/LinkWarning.tsx:51
+#: src/view/com/modals/LinkWarning.tsx:65
msgid "Leaving Bluesky"
msgstr "Bluesky verlassen"
#: src/screens/Deactivated.tsx:128
msgid "left to go."
-msgstr ""
+msgstr "noch übrig."
-#: src/view/screens/Settings/index.tsx:278
+#: src/view/screens/Settings/index.tsx:296
msgid "Legacy storage cleared, you need to restart the app now."
-msgstr ""
+msgstr "Der Legacy-Speicher wurde gelöscht, du musst die App jetzt neu starten."
-#: src/view/com/auth/login/Login.tsx:128
-#: src/view/com/auth/login/Login.tsx:144
+#: src/screens/Login/index.tsx:130
+#: src/screens/Login/index.tsx:145
msgid "Let's get your password reset!"
msgstr "Lass uns dein Passwort zurücksetzen!"
-#: src/screens/Onboarding/StepFinished.tsx:151
+#: src/screens/Onboarding/StepFinished.tsx:155
msgid "Let's go!"
-msgstr ""
+msgstr "Los geht's!"
#: src/view/com/util/UserAvatar.tsx:248
#: src/view/com/util/UserBanner.tsx:62
-msgid "Library"
-msgstr "Bibliothek"
+#~ msgid "Library"
+#~ msgstr "Bibliothek"
-#: src/view/screens/Settings/index.tsx:479
+#: src/view/screens/Settings/index.tsx:498
msgid "Light"
-msgstr ""
+msgstr "Licht"
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Like"
-msgstr ""
+msgstr "Liken"
-#: src/view/screens/ProfileFeed.tsx:591
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:258
+#: src/view/screens/ProfileFeed.tsx:573
msgid "Like this feed"
-msgstr ""
+msgstr "Diesen Feed liken"
-#: src/Navigation.tsx:197
+#: src/components/LikesDialog.tsx:87
+#: src/Navigation.tsx:201
+#: src/Navigation.tsx:206
msgid "Liked by"
-msgstr ""
+msgstr "Gelikt von"
+#: src/screens/Profile/ProfileLabelerLikedBy.tsx:29
#: src/view/screens/PostLikedBy.tsx:27
#: src/view/screens/ProfileFeedLikedBy.tsx:27
msgid "Liked By"
-msgstr ""
+msgstr "Gelikt von"
-#: src/view/com/feeds/FeedSourceCard.tsx:277
+#: src/view/com/feeds/FeedSourceCard.tsx:268
msgid "Liked by {0} {1}"
+msgstr "Von {0} {1} gelikt"
+
+#: src/components/LabelingServiceCard/index.tsx:72
+msgid "Liked by {count} {0}"
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:606
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:278
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:292
+#: src/view/screens/ProfileFeed.tsx:588
msgid "Liked by {likeCount} {0}"
-msgstr ""
+msgstr "Von {likeCount} {0} gelikt"
-#: src/view/com/notifications/FeedItem.tsx:170
+#: src/view/com/notifications/FeedItem.tsx:174
msgid "liked your custom feed"
-msgstr ""
+msgstr "hat deinen benutzerdefinierten Feed gelikt"
-#: src/view/com/notifications/FeedItem.tsx:155
+#: src/view/com/notifications/FeedItem.tsx:159
msgid "liked your post"
-msgstr ""
+msgstr "hat deinen Beitrag gelikt"
-#: src/view/screens/Profile.tsx:183
+#: src/view/screens/Profile.tsx:193
msgid "Likes"
-msgstr ""
+msgstr "Likes"
#: src/view/com/post-thread/PostThreadItem.tsx:182
msgid "Likes on this post"
-msgstr ""
+msgstr "Likes für diesen Beitrag"
-#: src/Navigation.tsx:166
+#: src/Navigation.tsx:170
msgid "List"
-msgstr ""
+msgstr "Liste"
-#: src/view/com/modals/CreateOrEditList.tsx:261
+#: src/view/com/modals/CreateOrEditList.tsx:262
msgid "List Avatar"
-msgstr ""
+msgstr "Avatar auflisten"
-#: src/view/screens/ProfileList.tsx:323
+#: src/view/screens/ProfileList.tsx:311
msgid "List blocked"
-msgstr ""
+msgstr "Liste blockiert"
-#: src/view/com/feeds/FeedSourceCard.tsx:231
+#: src/view/com/feeds/FeedSourceCard.tsx:220
msgid "List by {0}"
-msgstr ""
+msgstr "Liste von {0}"
-#: src/view/screens/ProfileList.tsx:377
+#: src/view/screens/ProfileList.tsx:355
msgid "List deleted"
-msgstr ""
+msgstr "Liste gelöscht"
-#: src/view/screens/ProfileList.tsx:282
+#: src/view/screens/ProfileList.tsx:283
msgid "List muted"
-msgstr ""
+msgstr "Liste stummgeschaltet"
-#: src/view/com/modals/CreateOrEditList.tsx:275
+#: src/view/com/modals/CreateOrEditList.tsx:276
msgid "List Name"
-msgstr ""
+msgstr "Name der Liste"
-#: src/view/screens/ProfileList.tsx:342
+#: src/view/screens/ProfileList.tsx:325
msgid "List unblocked"
-msgstr ""
+msgstr "Liste entblockiert"
-#: src/view/screens/ProfileList.tsx:301
+#: src/view/screens/ProfileList.tsx:297
msgid "List unmuted"
-msgstr ""
-
-#: src/Navigation.tsx:110
-#: src/view/screens/Profile.tsx:185
-#: src/view/shell/desktop/LeftNav.tsx:379
-#: src/view/shell/Drawer.tsx:492
-#: src/view/shell/Drawer.tsx:493
+msgstr "Listenstummschaltung aufgehoben"
+
+#: src/Navigation.tsx:114
+#: src/view/screens/Profile.tsx:189
+#: src/view/screens/Profile.tsx:195
+#: src/view/shell/desktop/LeftNav.tsx:383
+#: src/view/shell/Drawer.tsx:495
+#: src/view/shell/Drawer.tsx:496
msgid "Lists"
msgstr "Listen"
-#: src/view/com/post-thread/PostThread.tsx:276
-#: src/view/com/post-thread/PostThread.tsx:284
-msgid "Load more posts"
-msgstr "Mehr Beiträge laden"
+#: src/view/com/post-thread/PostThread.tsx:333
+#: src/view/com/post-thread/PostThread.tsx:341
+#~ msgid "Load more posts"
+#~ msgstr "Mehr Beiträge laden"
#: src/view/screens/Notifications.tsx:159
msgid "Load new notifications"
-msgstr "Neue Benachrichtigungen laden"
+msgstr "Neue Mitteilungen laden"
-#: src/view/com/feeds/FeedPage.tsx:190
-#: src/view/screens/Profile.tsx:440
-#: src/view/screens/ProfileFeed.tsx:494
-#: src/view/screens/ProfileList.tsx:680
+#: src/screens/Profile/Sections/Feed.tsx:70
+#: src/view/com/feeds/FeedPage.tsx:138
+#: src/view/screens/ProfileFeed.tsx:496
+#: src/view/screens/ProfileList.tsx:695
msgid "Load new posts"
msgstr "Neue Beiträge laden"
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:99
msgid "Loading..."
msgstr "Wird geladen..."
-#: src/view/com/modals/ServerInput.tsx:50
-#~ msgid "Local dev server"
-#~ msgstr "Lokaler Entwicklungsserver"
-
-#: src/Navigation.tsx:207
+#: src/Navigation.tsx:221
msgid "Log"
-msgstr ""
+msgstr "Systemprotokoll"
#: src/screens/Deactivated.tsx:149
#: src/screens/Deactivated.tsx:152
#: src/screens/Deactivated.tsx:178
#: src/screens/Deactivated.tsx:181
msgid "Log out"
-msgstr ""
+msgstr "Abmelden"
-#: src/view/screens/Moderation.tsx:136
+#: src/screens/Moderation/index.tsx:442
msgid "Logged-out visibility"
-msgstr ""
+msgstr "Sichtbarkeit für abgemeldete Benutzer"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:133
+#: src/components/AccountList.tsx:54
msgid "Login to account that is not listed"
msgstr "Anmeldung bei einem Konto, das nicht aufgelistet ist"
-#: src/view/com/modals/LinkWarning.tsx:65
+#: src/screens/Login/SetNewPasswordForm.tsx:116
+msgid "Looks like XXXXX-XXXXX"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:79
msgid "Make sure this is where you intend to go!"
msgstr "Vergewissere dich, dass du auch wirklich dorthin gehen willst!"
-#: src/view/screens/Profile.tsx:182
+#: src/components/dialogs/MutedWords.tsx:82
+msgid "Manage your muted words and tags"
+msgstr "Verwalte deine stummgeschalteten Wörter und Tags"
+
+#: src/view/com/auth/create/Step2.tsx:118
+#~ msgid "May not be longer than 253 characters"
+#~ msgstr "Darf nicht länger als 253 Zeichen sein"
+
+#: src/view/com/auth/create/Step2.tsx:109
+#~ msgid "May only contain letters and numbers"
+#~ msgstr "Darf nur Buchstaben und Zahlen enthalten"
+
+#: src/view/screens/Profile.tsx:192
msgid "Media"
msgstr "Medien"
@@ -2163,132 +2534,196 @@ msgstr "erwähnte Benutzer"
msgid "Mentioned users"
msgstr "Erwähnte Benutzer"
-#: src/view/com/util/ViewHeader.tsx:81
-#: src/view/screens/Search/Search.tsx:623
+#: src/view/com/util/ViewHeader.tsx:87
+#: src/view/screens/Search/Search.tsx:648
msgid "Menu"
msgstr "Menü"
-#: src/view/com/posts/FeedErrorMessage.tsx:197
+#: src/view/com/posts/FeedErrorMessage.tsx:192
msgid "Message from server: {0}"
msgstr "Nachricht vom Server: {0}"
-#: src/Navigation.tsx:115
-#: src/view/screens/Moderation.tsx:64
-#: src/view/screens/Settings/index.tsx:625
-#: src/view/shell/desktop/LeftNav.tsx:397
-#: src/view/shell/Drawer.tsx:511
-#: src/view/shell/Drawer.tsx:512
+#: src/lib/moderation/useReportOptions.ts:45
+msgid "Misleading Account"
+msgstr ""
+
+#: src/Navigation.tsx:119
+#: src/screens/Moderation/index.tsx:104
+#: src/view/screens/Settings/index.tsx:645
+#: src/view/shell/desktop/LeftNav.tsx:401
+#: src/view/shell/Drawer.tsx:514
+#: src/view/shell/Drawer.tsx:515
msgid "Moderation"
msgstr "Moderation"
-#: src/view/com/lists/ListCard.tsx:92
+#: src/components/moderation/ModerationDetailsDialog.tsx:112
+msgid "Moderation details"
+msgstr ""
+
+#: src/view/com/lists/ListCard.tsx:93
#: src/view/com/modals/UserAddRemoveLists.tsx:206
msgid "Moderation list by {0}"
-msgstr ""
+msgstr "Moderationsliste von {0}"
-#: src/view/screens/ProfileList.tsx:774
+#: src/view/screens/ProfileList.tsx:789
msgid "Moderation list by <0/>"
-msgstr ""
+msgstr "Moderationsliste von <0/>"
-#: src/view/com/lists/ListCard.tsx:90
+#: src/view/com/lists/ListCard.tsx:91
#: src/view/com/modals/UserAddRemoveLists.tsx:204
-#: src/view/screens/ProfileList.tsx:772
+#: src/view/screens/ProfileList.tsx:787
msgid "Moderation list by you"
-msgstr ""
+msgstr "Moderationsliste von dir"
-#: src/view/com/modals/CreateOrEditList.tsx:197
+#: src/view/com/modals/CreateOrEditList.tsx:198
msgid "Moderation list created"
-msgstr ""
+msgstr "Moderationsliste erstellt"
-#: src/view/com/modals/CreateOrEditList.tsx:183
+#: src/view/com/modals/CreateOrEditList.tsx:184
msgid "Moderation list updated"
-msgstr ""
+msgstr "Moderationsliste aktualisiert"
-#: src/view/screens/Moderation.tsx:95
+#: src/screens/Moderation/index.tsx:243
msgid "Moderation lists"
msgstr "Moderationslisten"
-#: src/Navigation.tsx:120
+#: src/Navigation.tsx:124
#: src/view/screens/ModerationModlists.tsx:58
msgid "Moderation Lists"
msgstr "Moderationslisten"
-#: src/view/screens/Settings/index.tsx:619
+#: src/view/screens/Settings/index.tsx:639
msgid "Moderation settings"
+msgstr "Moderationseinstellungen"
+
+#: src/Navigation.tsx:216
+msgid "Moderation states"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:215
+msgid "Moderation tools"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:35
+#: src/components/moderation/ModerationDetailsDialog.tsx:48
+#: src/lib/moderation/useModerationCauseDescription.ts:40
msgid "Moderator has chosen to set a general warning on the content."
+msgstr "Der Moderator hat beschlossen, eine allgemeine Warnung vor dem Inhalt auszusprechen."
+
+#: src/view/com/post-thread/PostThreadItem.tsx:541
+msgid "More"
msgstr ""
-#: src/view/shell/desktop/Feeds.tsx:63
+#: src/view/shell/desktop/Feeds.tsx:65
msgid "More feeds"
msgstr "Mehr Feeds"
-#: src/view/com/profile/ProfileHeader.tsx:522
-#: src/view/screens/ProfileFeed.tsx:362
-#: src/view/screens/ProfileList.tsx:616
+#: src/view/screens/ProfileList.tsx:599
msgid "More options"
msgstr "Mehr Optionen"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:270
-msgid "More post options"
-msgstr ""
-
#: src/view/screens/PreferencesThreads.tsx:82
msgid "Most-liked replies first"
-msgstr ""
+msgstr "Beliebteste Antworten zuerst"
+
+#: src/view/com/auth/create/Step2.tsx:122
+#~ msgid "Must be at least 3 characters"
+#~ msgstr "Muss mindestens 3 Zeichen lang sein"
+
+#: src/components/TagMenu/index.tsx:249
+msgid "Mute"
+msgstr "Stummschalten"
-#: src/view/com/profile/ProfileHeader.tsx:326
+#: src/components/TagMenu/index.web.tsx:105
+msgid "Mute {truncatedTag}"
+msgstr "{truncatedTag} stummschalten"
+
+#: src/view/com/profile/ProfileMenu.tsx:279
+#: src/view/com/profile/ProfileMenu.tsx:286
msgid "Mute Account"
msgstr "Konto stummschalten"
-#: src/view/screens/ProfileList.tsx:543
+#: src/view/screens/ProfileList.tsx:518
msgid "Mute accounts"
msgstr "Konten stummschalten"
-#: src/view/screens/ProfileList.tsx:490
+#: src/components/TagMenu/index.tsx:209
+msgid "Mute all {displayTag} posts"
+msgstr "Alle {displayTag}-Beiträge stummschalten"
+
+#: src/components/dialogs/MutedWords.tsx:148
+msgid "Mute in tags only"
+msgstr "Nur in Tags stummschalten"
+
+#: src/components/dialogs/MutedWords.tsx:133
+msgid "Mute in text & tags"
+msgstr "In Text und Tags stummschalten"
+
+#: src/view/screens/ProfileList.tsx:461
+#: src/view/screens/ProfileList.tsx:624
msgid "Mute list"
-msgstr ""
+msgstr "Liste stummschalten"
-#: src/view/screens/ProfileList.tsx:274
+#: src/view/screens/ProfileList.tsx:619
msgid "Mute these accounts?"
msgstr "Diese Konten stummschalten?"
-#: src/view/screens/ProfileList.tsx:278
-msgid "Mute this List"
-msgstr ""
+#: src/view/screens/ProfileList.tsx:279
+#~ msgid "Mute this List"
+#~ msgstr "Diese Liste stummschalten"
+
+#: src/components/dialogs/MutedWords.tsx:126
+msgid "Mute this word in post text and tags"
+msgstr "Dieses Wort in Beitragstexten und Tags stummschalten"
+
+#: src/components/dialogs/MutedWords.tsx:141
+msgid "Mute this word in tags only"
+msgstr "Dieses Wort nur in Tags stummschalten"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:257
msgid "Mute thread"
msgstr "Thread stummschalten"
-#: src/view/com/lists/ListCard.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:267
+#: src/view/com/util/forms/PostDropdownBtn.tsx:269
+msgid "Mute words & tags"
+msgstr "Wörter und Tags stummschalten"
+
+#: src/view/com/lists/ListCard.tsx:102
msgid "Muted"
-msgstr ""
+msgstr "Stummgeschaltet"
-#: src/view/screens/Moderation.tsx:109
+#: src/screens/Moderation/index.tsx:255
msgid "Muted accounts"
msgstr "Stummgeschaltete Konten"
-#: src/Navigation.tsx:125
+#: src/Navigation.tsx:129
#: src/view/screens/ModerationMutedAccounts.tsx:107
msgid "Muted Accounts"
msgstr "Stummgeschaltete Konten"
#: src/view/screens/ModerationMutedAccounts.tsx:115
msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private."
-msgstr "Bei stummgeschalteten Konten werden ihre Beiträge aus deinem Feed und deinen Benachrichtigungen entfernt. Stummschaltungen sind völlig privat."
+msgstr "Bei stummgeschalteten Konten werden dazugehörige Beiträge aus deinem Feed und deinen Mitteilungen entfernt. Stummschaltungen sind völlig privat."
+
+#: src/lib/moderation/useModerationCauseDescription.ts:85
+msgid "Muted by \"{0}\""
+msgstr ""
-#: src/view/screens/ProfileList.tsx:276
+#: src/screens/Moderation/index.tsx:231
+msgid "Muted words & tags"
+msgstr "Stummgeschaltete Wörter und Tags"
+
+#: src/view/screens/ProfileList.tsx:621
msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them."
-msgstr "Stummschaltung ist privat. Stummgeschaltete Konten können mit dir interagieren, aber du siehst ihre Beiträge nicht und erhältst keine Benachrichtigungen von ihnen."
+msgstr "Stummschaltung ist privat. Stummgeschaltete Konten können mit dir interagieren, aber du siehst ihre Beiträge nicht und erhältst keine Mitteilungen von ihnen."
-#: src/view/com/modals/BirthDateSettings.tsx:56
+#: src/components/dialogs/BirthDateSettings.tsx:35
+#: src/components/dialogs/BirthDateSettings.tsx:38
msgid "My Birthday"
msgstr "Mein Geburtstag"
-#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:663
msgid "My Feeds"
msgstr "Meine Feeds"
@@ -2296,225 +2731,295 @@ msgstr "Meine Feeds"
msgid "My Profile"
msgstr "Mein Profil"
-#: src/view/screens/Settings/index.tsx:582
+#: src/view/screens/Settings/index.tsx:596
+msgid "My saved feeds"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:602
msgid "My Saved Feeds"
msgstr "Meine gespeicherten Feeds"
#: src/view/com/auth/server-input/index.tsx:118
-msgid "my-server.com"
-msgstr ""
+#~ msgid "my-server.com"
+#~ msgstr "mein-server.de"
-#: src/view/com/modals/AddAppPasswords.tsx:179
-#: src/view/com/modals/CreateOrEditList.tsx:290
+#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/CreateOrEditList.tsx:291
msgid "Name"
msgstr "Name"
-#: src/view/com/modals/CreateOrEditList.tsx:145
+#: src/view/com/modals/CreateOrEditList.tsx:146
msgid "Name is required"
+msgstr "Name ist erforderlich"
+
+#: src/lib/moderation/useReportOptions.ts:57
+#: src/lib/moderation/useReportOptions.ts:78
+#: src/lib/moderation/useReportOptions.ts:86
+msgid "Name or Description Violates Community Standards"
msgstr ""
#: src/screens/Onboarding/index.tsx:25
msgid "Nature"
-msgstr ""
+msgstr "Natur"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:190
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:219
-#: src/view/com/auth/login/LoginForm.tsx:289
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:196
-#: src/view/com/modals/ChangePassword.tsx:166
+#: src/screens/Login/ForgotPasswordForm.tsx:173
+#: src/screens/Login/LoginForm.tsx:254
+#: src/view/com/modals/ChangePassword.tsx:168
msgid "Navigates to the next screen"
-msgstr ""
+msgstr "Navigiert zum nächsten Bildschirm"
#: src/view/shell/Drawer.tsx:71
msgid "Navigates to your profile"
+msgstr "Navigiert zu Deinem Profil"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:122
+msgid "Need to report a copyright violation?"
msgstr ""
#: src/view/com/modals/EmbedConsent.tsx:107
#: src/view/com/modals/EmbedConsent.tsx:123
-msgid "Never load embeds from {0}"
-msgstr ""
+#~ msgid "Never load embeds from {0}"
+#~ msgstr "Lade niemals eingebettete Medien von {0}"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:72
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:72
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:74
msgid "Never lose access to your followers and data."
msgstr "Verliere nie den Zugriff auf deine Follower und Daten."
-#: src/screens/Onboarding/StepFinished.tsx:119
+#: src/screens/Onboarding/StepFinished.tsx:123
msgid "Never lose access to your followers or data."
+msgstr "Verliere nie den Zugriff auf deine Follower oder Daten."
+
+#: src/components/dialogs/MutedWords.tsx:293
+#~ msgid "Nevermind"
+#~ msgstr "Egal"
+
+#: src/view/com/modals/ChangeHandle.tsx:519
+msgid "Nevermind, create a handle for me"
msgstr ""
#: src/view/screens/Lists.tsx:76
msgctxt "action"
msgid "New"
-msgstr ""
+msgstr "Neu"
#: src/view/screens/ModerationModlists.tsx:78
msgid "New"
msgstr "Neu"
-#: src/view/com/modals/CreateOrEditList.tsx:252
+#: src/view/com/modals/CreateOrEditList.tsx:253
msgid "New Moderation List"
-msgstr ""
+msgstr "Neue Moderationsliste"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:150
+#: src/view/com/modals/ChangePassword.tsx:212
msgid "New password"
-msgstr ""
+msgstr "Neues Passwort"
-#: src/view/com/modals/ChangePassword.tsx:215
+#: src/view/com/modals/ChangePassword.tsx:217
msgid "New Password"
-msgstr ""
+msgstr "Neues Passwort"
-#: src/view/com/feeds/FeedPage.tsx:201
+#: src/view/com/feeds/FeedPage.tsx:149
msgctxt "action"
msgid "New post"
-msgstr ""
+msgstr "Neuer Beitrag"
-#: src/view/screens/Feeds.tsx:581
+#: src/view/screens/Feeds.tsx:555
#: src/view/screens/Notifications.tsx:168
-#: src/view/screens/Profile.tsx:382
-#: src/view/screens/ProfileFeed.tsx:432
-#: src/view/screens/ProfileList.tsx:195
-#: src/view/screens/ProfileList.tsx:223
-#: src/view/shell/desktop/LeftNav.tsx:248
+#: src/view/screens/Profile.tsx:452
+#: src/view/screens/ProfileFeed.tsx:434
+#: src/view/screens/ProfileList.tsx:199
+#: src/view/screens/ProfileList.tsx:227
+#: src/view/shell/desktop/LeftNav.tsx:252
msgid "New post"
msgstr "Neuer Beitrag"
-#: src/view/shell/desktop/LeftNav.tsx:258
+#: src/view/shell/desktop/LeftNav.tsx:262
msgctxt "action"
msgid "New Post"
msgstr "Neuer Beitrag"
-#: src/view/com/modals/CreateOrEditList.tsx:247
+#: src/view/com/modals/CreateOrEditList.tsx:248
msgid "New User List"
-msgstr ""
+msgstr "Neue Benutzerliste"
#: src/view/screens/PreferencesThreads.tsx:79
msgid "Newest replies first"
-msgstr ""
+msgstr "Neueste Antworten zuerst"
#: src/screens/Onboarding/index.tsx:23
msgid "News"
-msgstr ""
-
-#: src/view/com/auth/create/CreateAccount.tsx:161
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:182
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:192
-#: src/view/com/auth/login/LoginForm.tsx:291
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:187
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:198
+msgstr "Aktuelles"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:143
+#: src/screens/Login/ForgotPasswordForm.tsx:150
+#: src/screens/Login/LoginForm.tsx:253
+#: src/screens/Login/LoginForm.tsx:260
+#: src/screens/Login/SetNewPasswordForm.tsx:174
+#: src/screens/Login/SetNewPasswordForm.tsx:180
+#: src/screens/Signup/index.tsx:205
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79
-#: src/view/com/modals/ChangePassword.tsx:251
#: src/view/com/modals/ChangePassword.tsx:253
+#: src/view/com/modals/ChangePassword.tsx:255
msgid "Next"
msgstr "Nächste"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:103
msgctxt "action"
msgid "Next"
-msgstr ""
+msgstr "Nächste"
-#: src/view/com/lightbox/Lightbox.web.tsx:149
+#: src/view/com/lightbox/Lightbox.web.tsx:169
msgid "Next image"
msgstr "Nächstes Bild"
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:200
-#: src/view/screens/PreferencesHomeFeed.tsx:235
-#: src/view/screens/PreferencesHomeFeed.tsx:272
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:200
+#: src/view/screens/PreferencesFollowingFeed.tsx:235
+#: src/view/screens/PreferencesFollowingFeed.tsx:272
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "No"
msgstr "Nein"
-#: src/view/screens/ProfileFeed.tsx:584
-#: src/view/screens/ProfileList.tsx:754
+#: src/view/screens/ProfileFeed.tsx:562
+#: src/view/screens/ProfileList.tsx:769
msgid "No description"
msgstr "Keine Beschreibung"
-#: src/view/com/profile/ProfileHeader.tsx:169
+#: src/view/com/modals/ChangeHandle.tsx:405
+msgid "No DNS Panel"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:118
msgid "No longer following {0}"
+msgstr "{0} wird nicht mehr gefolgt"
+
+#: src/screens/Signup/StepHandle.tsx:114
+msgid "No longer than 253 characters"
msgstr ""
#: src/view/com/notifications/Feed.tsx:109
msgid "No notifications yet!"
-msgstr ""
+msgstr "Noch keine Mitteilungen!"
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:97
-#: src/view/com/composer/text-input/web/Autocomplete.tsx:191
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:101
+#: src/view/com/composer/text-input/web/Autocomplete.tsx:195
msgid "No result"
msgstr "Kein Ergebnis"
-#: src/view/screens/Feeds.tsx:524
+#: src/components/Lists.tsx:183
+msgid "No results found"
+msgstr "Keine Ergebnisse gefunden"
+
+#: src/view/screens/Feeds.tsx:495
msgid "No results found for \"{query}\""
msgstr "Keine Ergebnisse für \"{query}\" gefunden"
#: src/view/com/modals/ListAddRemoveUsers.tsx:127
-#: src/view/screens/Search/Search.tsx:280
-#: src/view/screens/Search/Search.tsx:308
+#: src/view/screens/Search/Search.tsx:283
+#: src/view/screens/Search/Search.tsx:311
msgid "No results found for {query}"
msgstr "Keine Ergebnisse für {query} gefunden"
-#: src/view/com/modals/EmbedConsent.tsx:129
+#: src/components/dialogs/EmbedConsent.tsx:105
+#: src/components/dialogs/EmbedConsent.tsx:112
msgid "No thanks"
-msgstr ""
+msgstr "Nein danke"
#: src/view/com/modals/Threadgate.tsx:82
msgid "Nobody"
msgstr "Niemand"
+#: src/components/LikedByList.tsx:79
+#: src/components/LikesDialog.tsx:99
+msgid "Nobody has liked this yet. Maybe you should be the first!"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:42
+msgid "Non-sexual Nudity"
+msgstr ""
+
#: src/view/com/modals/SelfLabel.tsx:135
msgid "Not Applicable."
msgstr "Unzutreffend."
-#: src/Navigation.tsx:105
-#: src/view/screens/Profile.tsx:106
+#: src/Navigation.tsx:109
+#: src/view/screens/Profile.tsx:99
msgid "Not Found"
-msgstr ""
+msgstr "Nicht gefunden"
#: src/view/com/modals/VerifyEmail.tsx:246
#: src/view/com/modals/VerifyEmail.tsx:252
msgid "Not right now"
+msgstr "Im Moment nicht"
+
+#: src/view/com/profile/ProfileMenu.tsx:368
+#: src/view/com/util/forms/PostDropdownBtn.tsx:342
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:246
+msgid "Note about sharing"
msgstr ""
-#: src/view/screens/Moderation.tsx:233
+#: src/screens/Moderation/index.tsx:540
msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites."
msgstr "Hinweis: Bluesky ist ein offenes und öffentliches Netzwerk. Diese Einstellung schränkt lediglich die Sichtbarkeit deiner Inhalte in der Bluesky-App und auf der Website ein. Andere Apps respektieren diese Einstellung möglicherweise nicht. Deine Inhalte werden abgemeldeten Nutzern möglicherweise weiterhin in anderen Apps und Websites angezeigt."
-#: src/Navigation.tsx:447
+#: src/Navigation.tsx:469
#: src/view/screens/Notifications.tsx:124
#: src/view/screens/Notifications.tsx:148
-#: src/view/shell/bottom-bar/BottomBar.tsx:205
-#: src/view/shell/desktop/LeftNav.tsx:361
-#: src/view/shell/Drawer.tsx:435
-#: src/view/shell/Drawer.tsx:436
+#: src/view/shell/bottom-bar/BottomBar.tsx:215
+#: src/view/shell/desktop/LeftNav.tsx:365
+#: src/view/shell/Drawer.tsx:438
+#: src/view/shell/Drawer.tsx:439
msgid "Notifications"
msgstr "Mitteilungen"
#: src/view/com/modals/SelfLabel.tsx:103
msgid "Nudity"
+msgstr "Nacktheit"
+
+#: src/lib/moderation/useReportOptions.ts:71
+msgid "Nudity or adult content not labeled as such"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:71
+#~ msgid "Nudity or pornography not labeled as such"
+#~ msgstr ""
+
+#: src/screens/Signup/index.tsx:142
+msgid "of"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:11
+msgid "Off"
msgstr ""
-#: src/view/com/util/ErrorBoundary.tsx:35
+#: src/view/com/util/ErrorBoundary.tsx:49
msgid "Oh no!"
msgstr "Oh nein!"
-#: src/screens/Onboarding/StepInterests/index.tsx:128
+#: src/screens/Onboarding/StepInterests/index.tsx:132
msgid "Oh no! Something went wrong."
+msgstr "Oh nein, da ist etwas schief gelaufen."
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:126
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:327
+msgid "OK"
msgstr ""
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:41
+#: src/screens/Login/PasswordUpdatedForm.tsx:44
msgid "Okay"
msgstr "Okay"
#: src/view/screens/PreferencesThreads.tsx:78
msgid "Oldest replies first"
-msgstr ""
+msgstr "Älteste Antworten zuerst"
-#: src/view/screens/Settings/index.tsx:234
+#: src/view/screens/Settings/index.tsx:244
msgid "Onboarding reset"
-msgstr ""
+msgstr "Onboarding zurücksetzen"
-#: src/view/com/composer/Composer.tsx:375
+#: src/view/com/composer/Composer.tsx:392
msgid "One or more images is missing alt text."
msgstr "Bei einem oder mehreren Bildern fehlt der Alt-Text."
@@ -2522,312 +3027,410 @@ msgstr "Bei einem oder mehreren Bildern fehlt der Alt-Text."
msgid "Only {0} can reply."
msgstr "Nur {0} kann antworten."
-#: src/view/screens/AppPasswords.tsx:65
-#: src/view/screens/Profile.tsx:106
-msgid "Oops!"
+#: src/screens/Signup/StepHandle.tsx:97
+msgid "Only contains letters, numbers, and hyphens"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:115
+#: src/components/Lists.tsx:75
+msgid "Oops, something went wrong!"
+msgstr "Ups, da ist etwas schief gelaufen!"
+
+#: src/components/Lists.tsx:170
+#: src/view/screens/AppPasswords.tsx:67
+#: src/view/screens/Profile.tsx:99
+msgid "Oops!"
+msgstr "Huch!"
+
+#: src/screens/Onboarding/StepFinished.tsx:119
msgid "Open"
-msgstr ""
+msgstr "Öffnen"
-#: src/view/com/composer/Composer.tsx:470
-#: src/view/com/composer/Composer.tsx:471
+#: src/view/screens/Moderation.tsx:75
+#~ msgid "Open content filtering settings"
+#~ msgstr "Inhaltsfiltereinstellungen öffnen"
+
+#: src/view/com/composer/Composer.tsx:491
+#: src/view/com/composer/Composer.tsx:492
msgid "Open emoji picker"
+msgstr "Emoji-Picker öffnen"
+
+#: src/view/screens/ProfileFeed.tsx:300
+msgid "Open feed options menu"
msgstr ""
-#: src/view/screens/Settings/index.tsx:712
+#: src/view/screens/Settings/index.tsx:734
msgid "Open links with in-app browser"
+msgstr "Links mit In-App-Browser öffnen"
+
+#: src/screens/Moderation/index.tsx:227
+msgid "Open muted words and tags settings"
msgstr ""
-#: src/view/com/pager/FeedsTabBarMobile.tsx:87
+#: src/view/screens/Moderation.tsx:92
+#~ msgid "Open muted words settings"
+#~ msgstr "Einstellungen für stummgeschaltete Wörter öffnen"
+
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:50
msgid "Open navigation"
msgstr "Navigation öffnen"
-#: src/view/screens/Settings/index.tsx:804
+#: src/view/com/util/forms/PostDropdownBtn.tsx:183
+msgid "Open post options menu"
+msgstr "Beitragsoptionsmenü öffnen"
+
+#: src/view/screens/Settings/index.tsx:828
+#: src/view/screens/Settings/index.tsx:838
msgid "Open storybook page"
+msgstr "Geschichtenbuch öffnen"
+
+#: src/view/screens/Settings/index.tsx:816
+msgid "Open system log"
msgstr ""
#: src/view/com/util/forms/DropdownButton.tsx:154
msgid "Opens {numItems} options"
-msgstr ""
+msgstr "Öffnet {numItems} Optionen"
#: src/view/screens/Log.tsx:54
msgid "Opens additional details for a debug entry"
-msgstr ""
+msgstr "Öffnet zusätzliche Details für einen Debug-Eintrag"
-#: src/view/com/notifications/FeedItem.tsx:348
+#: src/view/com/notifications/FeedItem.tsx:353
msgid "Opens an expanded list of users in this notification"
-msgstr ""
+msgstr "Öffnet eine erweiterte Liste der Benutzer in dieser Meldung"
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:61
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:78
msgid "Opens camera on device"
-msgstr ""
+msgstr "Öffnet die Kamera auf dem Gerät"
#: src/view/com/composer/Prompt.tsx:25
msgid "Opens composer"
-msgstr ""
+msgstr "Öffnet den Beitragsverfasser"
-#: src/view/screens/Settings/index.tsx:595
+#: src/view/screens/Settings/index.tsx:615
msgid "Opens configurable language settings"
msgstr "Öffnet die konfigurierbaren Spracheinstellungen"
#: src/view/com/composer/photos/SelectPhotoBtn.tsx:44
msgid "Opens device photo gallery"
-msgstr ""
+msgstr "Öffnet die Gerätefotogalerie"
-#: src/view/com/profile/ProfileHeader.tsx:419
-msgid "Opens editor for profile display name, avatar, background image, and description"
-msgstr ""
+#: src/view/com/profile/ProfileHeader.tsx:420
+#~ msgid "Opens editor for profile display name, avatar, background image, and description"
+#~ msgstr "Öffnet den Editor für Profilanzeige, Avatar, Hintergrundbild und Beschreibung"
-#: src/view/screens/Settings/index.tsx:649
+#: src/view/screens/Settings/index.tsx:669
msgid "Opens external embeds settings"
-msgstr ""
+msgstr "Öffnet die Einstellungen für externe eingebettete Medien"
-#: src/view/com/profile/ProfileHeader.tsx:574
-msgid "Opens followers list"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:57
+#: src/view/com/auth/SplashScreen.tsx:68
+#: src/view/com/auth/SplashScreen.web.tsx:97
+msgid "Opens flow to create a new Bluesky account"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:593
-msgid "Opens following list"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:75
+#: src/view/com/auth/SplashScreen.tsx:83
+#: src/view/com/auth/SplashScreen.web.tsx:112
+msgid "Opens flow to sign into your existing Bluesky account"
msgstr ""
-#: src/view/screens/Settings.tsx:412
-#~ msgid "Opens invite code list"
-#~ msgstr ""
+#: src/view/com/profile/ProfileHeader.tsx:575
+#~ msgid "Opens followers list"
+#~ msgstr "Öffnet die Follower-Liste"
+
+#: src/view/com/profile/ProfileHeader.tsx:594
+#~ msgid "Opens following list"
+#~ msgstr "Öffnet folgende Liste"
-#: src/view/com/modals/InviteCodes.tsx:172
+#: src/view/com/modals/InviteCodes.tsx:173
msgid "Opens list of invite codes"
msgstr "Öffnet die Liste der Einladungscodes"
+#: src/view/screens/Settings/index.tsx:798
+msgid "Opens modal for account deletion confirmation. Requires email code"
+msgstr ""
+
#: src/view/screens/Settings/index.tsx:774
-msgid "Opens modal for account deletion confirmation. Requires email code."
+#~ msgid "Opens modal for account deletion confirmation. Requires email code."
+#~ msgstr "Öffnet ein Modal, um die Löschung des Kontos zu bestätigen. Erfordert einen E-Mail-Code."
+
+#: src/view/screens/Settings/index.tsx:756
+msgid "Opens modal for changing your Bluesky password"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:281
+#: src/view/screens/Settings/index.tsx:718
+msgid "Opens modal for choosing a new Bluesky handle"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:779
+msgid "Opens modal for downloading your Bluesky account data (repository)"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:968
+msgid "Opens modal for email verification"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:282
msgid "Opens modal for using custom domain"
msgstr "Öffnet das Modal für die Verwendung einer benutzerdefinierten Domain"
-#: src/view/screens/Settings/index.tsx:620
+#: src/view/screens/Settings/index.tsx:640
msgid "Opens moderation settings"
msgstr "Öffnet die Moderationseinstellungen"
-#: src/view/com/auth/login/LoginForm.tsx:239
+#: src/screens/Login/LoginForm.tsx:202
msgid "Opens password reset form"
-msgstr ""
+msgstr "Öffnet das Formular zum Zurücksetzen des Passworts"
-#: src/view/screens/Feeds.tsx:357
+#: src/view/com/home/HomeHeaderLayout.web.tsx:63
+#: src/view/screens/Feeds.tsx:356
msgid "Opens screen to edit Saved Feeds"
-msgstr ""
+msgstr "Öffnet den Bildschirm zum Bearbeiten gespeicherten Feeds"
-#: src/view/screens/Settings/index.tsx:576
+#: src/view/screens/Settings/index.tsx:597
msgid "Opens screen with all saved feeds"
msgstr "Öffnet den Bildschirm mit allen gespeicherten Feeds"
+#: src/view/screens/Settings/index.tsx:696
+msgid "Opens the app password settings"
+msgstr ""
+
#: src/view/screens/Settings/index.tsx:676
-msgid "Opens the app password settings page"
-msgstr "Öffnet die Einstellungsseite für das App-Passwort"
+#~ msgid "Opens the app password settings page"
+#~ msgstr "Öffnet die Einstellungsseite für das App-Passwort"
+
+#: src/view/screens/Settings/index.tsx:554
+msgid "Opens the Following feed preferences"
+msgstr ""
#: src/view/screens/Settings/index.tsx:535
-msgid "Opens the home feed preferences"
-msgstr "Öffnet die Home-Feed-Einstellungen"
+#~ msgid "Opens the home feed preferences"
+#~ msgstr "Öffnet die Home-Feed-Einstellungen"
-#: src/view/screens/Settings/index.tsx:805
-msgid "Opens the storybook page"
+#: src/view/com/modals/LinkWarning.tsx:93
+msgid "Opens the linked website"
msgstr ""
-#: src/view/screens/Settings/index.tsx:793
+#: src/view/screens/Settings/index.tsx:829
+#: src/view/screens/Settings/index.tsx:839
+msgid "Opens the storybook page"
+msgstr "Öffnet die Geschichtenbuch"
+
+#: src/view/screens/Settings/index.tsx:817
msgid "Opens the system log page"
msgstr "Öffnet die Systemprotokollseite"
-#: src/view/screens/Settings/index.tsx:556
+#: src/view/screens/Settings/index.tsx:575
msgid "Opens the threads preferences"
msgstr "Öffnet die Thread-Einstellungen"
#: src/view/com/util/forms/DropdownButton.tsx:280
msgid "Option {0} of {numItems}"
+msgstr "Option {0} von {numItems}"
+
+#: src/components/ReportDialog/SubmitView.tsx:162
+msgid "Optionally provide additional information below:"
msgstr ""
#: src/view/com/modals/Threadgate.tsx:89
msgid "Or combine these options:"
+msgstr "Oder kombiniere diese Optionen:"
+
+#: src/lib/moderation/useReportOptions.ts:25
+msgid "Other"
msgstr ""
-#: src/view/com/auth/login/ChooseAccountForm.tsx:138
+#: src/components/AccountList.tsx:73
msgid "Other account"
msgstr "Anderes Konto"
-#: src/view/com/modals/ServerInput.tsx:88
-#~ msgid "Other service"
-#~ msgstr "Anderer Service"
-
#: src/view/com/composer/select-language/SelectLangBtn.tsx:91
msgid "Other..."
msgstr "Andere..."
+#: src/components/Lists.tsx:184
#: src/view/screens/NotFound.tsx:45
msgid "Page not found"
msgstr "Seite nicht gefunden"
#: src/view/screens/NotFound.tsx:42
msgid "Page Not Found"
-msgstr ""
+msgstr "Seite nicht gefunden"
-#: src/view/com/auth/create/Step1.tsx:210
-#: src/view/com/auth/create/Step1.tsx:220
-#: src/view/com/auth/login/LoginForm.tsx:226
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:161
-#: src/view/com/modals/DeleteAccount.tsx:202
+#: src/screens/Login/LoginForm.tsx:178
+#: src/screens/Signup/StepInfo/index.tsx:101
+#: src/view/com/modals/DeleteAccount.tsx:194
+#: src/view/com/modals/DeleteAccount.tsx:201
msgid "Password"
msgstr "Passwort"
-#: src/view/com/auth/login/Login.tsx:157
+#: src/view/com/modals/ChangePassword.tsx:142
+msgid "Password Changed"
+msgstr ""
+
+#: src/screens/Login/index.tsx:157
msgid "Password updated"
msgstr "Passwort aktualisiert"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:28
+#: src/screens/Login/PasswordUpdatedForm.tsx:30
msgid "Password updated!"
msgstr "Passwort aktualisiert!"
-#: src/Navigation.tsx:160
+#: src/Navigation.tsx:164
msgid "People followed by @{0}"
-msgstr ""
+msgstr "Personen gefolgt von @{0}"
-#: src/Navigation.tsx:153
+#: src/Navigation.tsx:157
msgid "People following @{0}"
-msgstr ""
+msgstr "Personen, die @{0} folgen"
#: src/view/com/lightbox/Lightbox.tsx:66
msgid "Permission to access camera roll is required."
-msgstr ""
+msgstr "Die Erlaubnis zum Zugriff auf die Kamerarolle ist erforderlich."
#: src/view/com/lightbox/Lightbox.tsx:72
msgid "Permission to access camera roll was denied. Please enable it in your system settings."
-msgstr ""
+msgstr "Die Berechtigung zum Zugriff auf die Kamerarolle wurde verweigert. Bitte aktiviere sie in deinen Systemeinstellungen."
#: src/screens/Onboarding/index.tsx:31
msgid "Pets"
-msgstr ""
-
-#: src/view/com/auth/create/Step2.tsx:183
-msgid "Phone number"
-msgstr ""
+msgstr "Haustiere"
#: src/view/com/modals/SelfLabel.tsx:121
msgid "Pictures meant for adults."
msgstr "Bilder, die für Erwachsene bestimmt sind."
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:292
+#: src/view/screens/ProfileList.tsx:563
msgid "Pin to home"
+msgstr "An die Startseite anheften"
+
+#: src/view/screens/ProfileFeed.tsx:295
+msgid "Pin to Home"
msgstr ""
#: src/view/screens/SavedFeeds.tsx:88
msgid "Pinned Feeds"
msgstr "Angeheftete Feeds"
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:111
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:123
msgid "Play {0}"
-msgstr ""
+msgstr "{0} abspielen"
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:54
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:55
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:57
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:58
msgid "Play Video"
-msgstr ""
+msgstr "Video abspielen"
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:110
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:122
msgid "Plays the GIF"
-msgstr ""
+msgstr "Spielt das GIF ab"
-#: src/view/com/auth/create/state.ts:177
+#: src/screens/Signup/state.ts:241
msgid "Please choose your handle."
msgstr "Bitte wähle deinen Handle."
-#: src/view/com/auth/create/state.ts:160
+#: src/screens/Signup/state.ts:234
msgid "Please choose your password."
msgstr "Bitte wähle dein Passwort."
+#: src/screens/Signup/state.ts:251
+msgid "Please complete the verification captcha."
+msgstr "Bitte fülle das Verifizierungs-Captcha aus."
+
#: src/view/com/modals/ChangeEmail.tsx:67
msgid "Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed."
msgstr "Bitte bestätige deine E-Mail, bevor du sie änderst. Dies ist eine vorübergehende Anforderung, während E-Mail-Aktualisierungstools hinzugefügt werden, und wird bald wieder entfernt."
-#: src/view/com/modals/AddAppPasswords.tsx:90
+#: src/view/com/modals/AddAppPasswords.tsx:91
msgid "Please enter a name for your app password. All spaces is not allowed."
-msgstr ""
-
-#: src/view/com/auth/create/Step2.tsx:206
-msgid "Please enter a phone number that can receive SMS text messages."
-msgstr ""
+msgstr "Bitte gib einen Namen für dein App-Passwort ein. Nur Leerzeichen sind nicht erlaubt."
-#: src/view/com/modals/AddAppPasswords.tsx:145
+#: src/view/com/modals/AddAppPasswords.tsx:146
msgid "Please enter a unique name for this App Password or use our randomly generated one."
-msgstr ""
-
-#: src/view/com/auth/create/state.ts:170
-msgid "Please enter the code you received by SMS."
-msgstr ""
+msgstr "Bitte gib einen eindeutigen Namen für dieses App-Passwort ein oder verwende unseren zufällig generierten Namen."
-#: src/view/com/auth/create/Step2.tsx:282
-msgid "Please enter the verification code sent to {phoneNumberFormatted}."
-msgstr ""
+#: src/components/dialogs/MutedWords.tsx:67
+msgid "Please enter a valid word, tag, or phrase to mute"
+msgstr "Bitte gib ein gültiges Wort, einen Tag oder eine Phrase zum Stummschalten ein"
-#: src/view/com/auth/create/state.ts:146
+#: src/screens/Signup/state.ts:220
msgid "Please enter your email."
msgstr "Bitte gib deine E-Mail ein."
-#: src/view/com/modals/DeleteAccount.tsx:191
+#: src/view/com/modals/DeleteAccount.tsx:190
msgid "Please enter your password as well:"
msgstr "Bitte gib auch dein Passwort ein:"
+#: src/components/moderation/LabelsOnMeDialog.tsx:221
+msgid "Please explain why you think this label was incorrectly applied by {0}"
+msgstr ""
+
#: src/view/com/modals/AppealLabel.tsx:72
#: src/view/com/modals/AppealLabel.tsx:75
-msgid "Please tell us why you think this content warning was incorrectly applied!"
-msgstr "Bitte teile uns mit, warum du denkst, dass diese Inhaltswarnung falsch angewendet wurde!"
+#~ msgid "Please tell us why you think this content warning was incorrectly applied!"
+#~ msgstr "Bitte teile uns mit, warum du denkst, dass diese Inhaltswarnung falsch angewendet wurde!"
#: src/view/com/modals/VerifyEmail.tsx:101
msgid "Please Verify Your Email"
-msgstr ""
+msgstr "Bitte verifiziere deine E-Mail"
-#: src/view/com/composer/Composer.tsx:215
+#: src/view/com/composer/Composer.tsx:222
msgid "Please wait for your link card to finish loading"
-msgstr ""
+msgstr "Bitte warte, bis deine Link-karte vollständig geladen ist"
#: src/screens/Onboarding/index.tsx:37
msgid "Politics"
-msgstr ""
+msgstr "Politik"
#: src/view/com/modals/SelfLabel.tsx:111
msgid "Porn"
-msgstr ""
+msgstr "Porno"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#~ msgid "Pornography"
+#~ msgstr ""
-#: src/view/com/composer/Composer.tsx:350
-#: src/view/com/composer/Composer.tsx:358
+#: src/view/com/composer/Composer.tsx:367
+#: src/view/com/composer/Composer.tsx:375
msgctxt "action"
msgid "Post"
-msgstr ""
+msgstr "Beitrag"
-#: src/view/com/post-thread/PostThread.tsx:246
+#: src/view/com/post-thread/PostThread.tsx:292
msgctxt "description"
msgid "Post"
msgstr "Beitrag"
-#: src/view/com/post-thread/PostThreadItem.tsx:174
+#: src/view/com/post-thread/PostThreadItem.tsx:175
msgid "Post by {0}"
-msgstr ""
+msgstr "Beitrag von {0}"
-#: src/Navigation.tsx:172
-#: src/Navigation.tsx:179
-#: src/Navigation.tsx:186
+#: src/Navigation.tsx:176
+#: src/Navigation.tsx:183
+#: src/Navigation.tsx:190
msgid "Post by @{0}"
-msgstr ""
+msgstr "Beitrag von @{0}"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:84
+#: src/view/com/util/forms/PostDropdownBtn.tsx:105
msgid "Post deleted"
-msgstr ""
+msgstr "Beitrag gelöscht"
-#: src/view/com/post-thread/PostThread.tsx:398
+#: src/view/com/post-thread/PostThread.tsx:157
msgid "Post hidden"
msgstr "Beitrag ausgeblendet"
+#: src/components/moderation/ModerationDetailsDialog.tsx:97
+#: src/lib/moderation/useModerationCauseDescription.ts:99
+msgid "Post Hidden by Muted Word"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:100
+#: src/lib/moderation/useModerationCauseDescription.ts:108
+msgid "Post Hidden by You"
+msgstr ""
+
#: src/view/com/composer/select-language/SelectLangBtn.tsx:87
msgid "Post language"
msgstr "Beitragssprache"
@@ -2836,23 +3439,42 @@ msgstr "Beitragssprache"
msgid "Post Languages"
msgstr "Beitragssprachen"
-#: src/view/com/post-thread/PostThread.tsx:450
+#: src/view/com/post-thread/PostThread.tsx:152
+#: src/view/com/post-thread/PostThread.tsx:164
msgid "Post not found"
msgstr "Beitrag nicht gefunden"
-#: src/view/screens/Profile.tsx:180
+#: src/components/TagMenu/index.tsx:253
+msgid "posts"
+msgstr "Beiträge"
+
+#: src/view/screens/Profile.tsx:190
msgid "Posts"
msgstr "Beiträge"
+#: src/components/dialogs/MutedWords.tsx:89
+msgid "Posts can be muted based on their text, their tags, or both."
+msgstr "Beiträge können basierend auf ihrem Text, ihren Tags oder beidem stummgeschaltet werden."
+
#: src/view/com/posts/FeedErrorMessage.tsx:64
msgid "Posts hidden"
-msgstr ""
+msgstr "Ausgeblendete Beiträge"
-#: src/view/com/modals/LinkWarning.tsx:46
+#: src/view/com/modals/LinkWarning.tsx:60
msgid "Potentially Misleading Link"
msgstr "Potenziell irreführender Link"
-#: src/view/com/lightbox/Lightbox.web.tsx:135
+#: src/components/forms/HostingProvider.tsx:45
+msgid "Press to change hosting provider"
+msgstr ""
+
+#: src/components/Error.tsx:74
+#: src/components/Lists.tsx:80
+#: src/screens/Signup/index.tsx:186
+msgid "Press to retry"
+msgstr ""
+
+#: src/view/com/lightbox/Lightbox.web.tsx:150
msgid "Previous image"
msgstr "Vorheriges Bild"
@@ -2864,41 +3486,47 @@ msgstr "Primäre Sprache"
msgid "Prioritize Your Follows"
msgstr "Priorisiere deine Follower"
-#: src/view/screens/Settings/index.tsx:632
-#: src/view/shell/desktop/RightNav.tsx:80
+#: src/view/screens/Settings/index.tsx:652
+#: src/view/shell/desktop/RightNav.tsx:72
msgid "Privacy"
msgstr "Privatsphäre"
-#: src/Navigation.tsx:217
+#: src/Navigation.tsx:231
+#: src/screens/Signup/StepInfo/Policies.tsx:56
#: src/view/screens/PrivacyPolicy.tsx:29
-#: src/view/screens/Settings/index.tsx:891
-#: src/view/shell/Drawer.tsx:262
+#: src/view/screens/Settings/index.tsx:923
+#: src/view/shell/Drawer.tsx:265
msgid "Privacy Policy"
msgstr "Datenschutzerklärung"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:198
+#: src/screens/Login/ForgotPasswordForm.tsx:156
msgid "Processing..."
msgstr "Wird bearbeitet..."
-#: src/view/shell/bottom-bar/BottomBar.tsx:247
-#: src/view/shell/desktop/LeftNav.tsx:415
+#: src/view/screens/DebugMod.tsx:888
+#: src/view/screens/Profile.tsx:342
+msgid "profile"
+msgstr ""
+
+#: src/view/shell/bottom-bar/BottomBar.tsx:260
+#: src/view/shell/desktop/LeftNav.tsx:419
#: src/view/shell/Drawer.tsx:70
-#: src/view/shell/Drawer.tsx:546
-#: src/view/shell/Drawer.tsx:547
+#: src/view/shell/Drawer.tsx:549
+#: src/view/shell/Drawer.tsx:550
msgid "Profile"
msgstr "Profil"
-#: src/view/com/modals/EditProfile.tsx:128
+#: src/view/com/modals/EditProfile.tsx:129
msgid "Profile updated"
-msgstr ""
+msgstr "Profil aktualisiert"
-#: src/view/screens/Settings/index.tsx:949
+#: src/view/screens/Settings/index.tsx:981
msgid "Protect your account by verifying your email."
msgstr "Schütze dein Konto, indem du deine E-Mail bestätigst."
-#: src/screens/Onboarding/StepFinished.tsx:101
+#: src/screens/Onboarding/StepFinished.tsx:105
msgid "Public"
-msgstr ""
+msgstr "Öffentlich"
#: src/view/screens/ModerationModlists.tsx:61
msgid "Public, shareable lists of users to mute or block in bulk."
@@ -2908,15 +3536,15 @@ msgstr "Öffentliche, gemeinsam nutzbare Listen von Nutzern, die du stummschalte
msgid "Public, shareable lists which can drive feeds."
msgstr "Öffentliche, gemeinsam nutzbare Listen, die Feeds steuern können."
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish post"
-msgstr ""
+msgstr "Beitrag veröffentlichen"
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish reply"
-msgstr ""
+msgstr "Antwort veröffentlichen"
-#: src/view/com/modals/Repost.tsx:65
+#: src/view/com/modals/Repost.tsx:66
msgctxt "action"
msgid "Quote post"
msgstr "Beitrag zitieren"
@@ -2925,17 +3553,21 @@ msgstr "Beitrag zitieren"
msgid "Quote post"
msgstr "Beitrag zitieren"
-#: src/view/com/modals/Repost.tsx:70
+#: src/view/com/modals/Repost.tsx:71
msgctxt "action"
msgid "Quote Post"
msgstr "Beitrag zitieren"
#: src/view/screens/PreferencesThreads.tsx:86
msgid "Random (aka \"Poster's Roulette\")"
-msgstr ""
+msgstr "Zufällig (alias \"Poster's Roulette\")"
-#: src/view/com/modals/EditImage.tsx:236
+#: src/view/com/modals/EditImage.tsx:237
msgid "Ratios"
+msgstr "Verhältnisse"
+
+#: src/view/screens/Search/Search.tsx:777
+msgid "Recent Searches"
msgstr ""
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116
@@ -2946,35 +3578,50 @@ msgstr "Empfohlene Feeds"
msgid "Recommended Users"
msgstr "Empfohlene Nutzer"
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/components/dialogs/MutedWords.tsx:286
+#: src/view/com/feeds/FeedSourceCard.tsx:283
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/SelfLabel.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/com/util/UserAvatar.tsx:285
-#: src/view/com/util/UserBanner.tsx:91
+#: src/view/com/posts/FeedErrorMessage.tsx:204
msgid "Remove"
msgstr "Entfernen"
-#: src/view/com/feeds/FeedSourceCard.tsx:106
-msgid "Remove {0} from my feeds?"
-msgstr "{0} aus meinen Feeds entfernen?"
+#: src/view/com/feeds/FeedSourceCard.tsx:108
+#~ msgid "Remove {0} from my feeds?"
+#~ msgstr "{0} aus meinen Feeds entfernen?"
#: src/view/com/util/AccountDropdownBtn.tsx:22
msgid "Remove account"
msgstr "Konto entfernen"
-#: src/view/com/posts/FeedErrorMessage.tsx:131
-#: src/view/com/posts/FeedErrorMessage.tsx:166
+#: src/view/com/util/UserAvatar.tsx:358
+msgid "Remove Avatar"
+msgstr ""
+
+#: src/view/com/util/UserBanner.tsx:148
+msgid "Remove Banner"
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:160
msgid "Remove feed"
msgstr "Feed entfernen"
-#: src/view/com/feeds/FeedSourceCard.tsx:105
-#: src/view/com/feeds/FeedSourceCard.tsx:167
-#: src/view/com/feeds/FeedSourceCard.tsx:172
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/posts/FeedErrorMessage.tsx:201
+msgid "Remove feed?"
+msgstr ""
+
+#: src/view/com/feeds/FeedSourceCard.tsx:173
+#: src/view/com/feeds/FeedSourceCard.tsx:233
+#: src/view/screens/ProfileFeed.tsx:335
+#: src/view/screens/ProfileFeed.tsx:341
msgid "Remove from my feeds"
msgstr "Aus meinen Feeds entfernen"
+#: src/view/com/feeds/FeedSourceCard.tsx:278
+msgid "Remove from my feeds?"
+msgstr ""
+
#: src/view/com/composer/photos/Gallery.tsx:167
msgid "Remove image"
msgstr "Bild entfernen"
@@ -2983,33 +3630,44 @@ msgstr "Bild entfernen"
msgid "Remove image preview"
msgstr "Bildvorschau entfernen"
-#: src/view/com/modals/Repost.tsx:47
+#: src/components/dialogs/MutedWords.tsx:329
+msgid "Remove mute word from your list"
+msgstr "Stummgeschaltetes Wort aus deiner Liste entfernen"
+
+#: src/view/com/modals/Repost.tsx:48
msgid "Remove repost"
-msgstr ""
+msgstr "Repost entfernen"
-#: src/view/com/feeds/FeedSourceCard.tsx:173
-msgid "Remove this feed from my feeds?"
-msgstr "Diesen Feed aus meinen Feeds entfernen?"
+#: src/view/com/feeds/FeedSourceCard.tsx:175
+#~ msgid "Remove this feed from my feeds?"
+#~ msgstr "Diesen Feed aus meinen Feeds entfernen?"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:202
+msgid "Remove this feed from your saved feeds"
+msgstr ""
#: src/view/com/posts/FeedErrorMessage.tsx:132
-msgid "Remove this feed from your saved feeds?"
-msgstr "Diesen Feed aus deinen gespeicherten Feeds entfernen?"
+#~ msgid "Remove this feed from your saved feeds?"
+#~ msgstr "Diesen Feed aus deinen gespeicherten Feeds entfernen?"
#: src/view/com/modals/ListAddRemoveUsers.tsx:199
#: src/view/com/modals/UserAddRemoveLists.tsx:152
msgid "Removed from list"
msgstr "Aus der Liste entfernt"
-#: src/view/com/feeds/FeedSourceCard.tsx:111
-#: src/view/com/feeds/FeedSourceCard.tsx:178
+#: src/view/com/feeds/FeedSourceCard.tsx:121
msgid "Removed from my feeds"
+msgstr "Aus meinen Feeds entfernt"
+
+#: src/view/screens/ProfileFeed.tsx:209
+msgid "Removed from your feeds"
msgstr ""
#: src/view/com/composer/ExternalEmbed.tsx:71
msgid "Removes default thumbnail from {0}"
-msgstr ""
+msgstr "Entfernt Standard-Miniaturansicht von {0}"
-#: src/view/screens/Profile.tsx:181
+#: src/view/screens/Profile.tsx:191
msgid "Replies"
msgstr "Antworten"
@@ -3017,49 +3675,75 @@ msgstr "Antworten"
msgid "Replies to this thread are disabled"
msgstr "Antworten auf diesen Thread sind deaktiviert"
-#: src/view/com/composer/Composer.tsx:348
+#: src/view/com/composer/Composer.tsx:365
msgctxt "action"
msgid "Reply"
-msgstr ""
+msgstr "Antworten"
-#: src/view/screens/PreferencesHomeFeed.tsx:144
+#: src/view/screens/PreferencesFollowingFeed.tsx:144
msgid "Reply Filters"
msgstr "Antwortfilter"
#: src/view/com/post/Post.tsx:166
-#: src/view/com/posts/FeedItem.tsx:287
+#: src/view/com/posts/FeedItem.tsx:280
msgctxt "description"
msgid "Reply to <0/>"
-msgstr ""
+msgstr "Antwort an <0/>"
#: src/view/com/modals/report/Modal.tsx:166
-msgid "Report {collectionName}"
-msgstr "{collectionName} melden"
+#~ msgid "Report {collectionName}"
+#~ msgstr "{collectionName} melden"
-#: src/view/com/profile/ProfileHeader.tsx:360
+#: src/view/com/profile/ProfileMenu.tsx:319
+#: src/view/com/profile/ProfileMenu.tsx:322
msgid "Report Account"
msgstr "Konto melden"
-#: src/view/screens/ProfileFeed.tsx:292
+#: src/components/ReportDialog/index.tsx:49
+msgid "Report dialog"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:352
+#: src/view/screens/ProfileFeed.tsx:354
msgid "Report feed"
msgstr "Feed melden"
-#: src/view/screens/ProfileList.tsx:458
+#: src/view/screens/ProfileList.tsx:429
msgid "Report List"
msgstr "Liste melden"
-#: src/view/com/modals/report/SendReportButton.tsx:37
-#: src/view/com/util/forms/PostDropdownBtn.tsx:210
+#: src/view/com/util/forms/PostDropdownBtn.tsx:292
+#: src/view/com/util/forms/PostDropdownBtn.tsx:294
msgid "Report post"
msgstr "Beitrag melden"
-#: src/view/com/modals/Repost.tsx:43
-#: src/view/com/modals/Repost.tsx:48
-#: src/view/com/modals/Repost.tsx:53
+#: src/components/ReportDialog/SelectReportOptionView.tsx:42
+msgid "Report this content"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:55
+msgid "Report this feed"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:52
+msgid "Report this list"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:49
+msgid "Report this post"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:46
+msgid "Report this user"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:44
+#: src/view/com/modals/Repost.tsx:49
+#: src/view/com/modals/Repost.tsx:54
#: src/view/com/util/post-ctrls/RepostButton.tsx:61
msgctxt "action"
msgid "Repost"
-msgstr ""
+msgstr "Repost"
#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
msgid "Repost"
@@ -3068,195 +3752,221 @@ msgstr "Erneut veröffentlichen"
#: src/view/com/util/post-ctrls/RepostButton.web.tsx:94
#: src/view/com/util/post-ctrls/RepostButton.web.tsx:105
msgid "Repost or quote post"
-msgstr ""
+msgstr "Reposten oder Beitrag zitieren"
#: src/view/screens/PostRepostedBy.tsx:27
msgid "Reposted By"
-msgstr ""
+msgstr "Repostet von"
-#: src/view/com/posts/FeedItem.tsx:207
+#: src/view/com/posts/FeedItem.tsx:197
msgid "Reposted by {0}"
-msgstr ""
+msgstr "Repostet von {0}"
-#: src/view/com/posts/FeedItem.tsx:224
+#: src/view/com/posts/FeedItem.tsx:214
msgid "Reposted by <0/>"
-msgstr ""
+msgstr "Repostet von <0/>"
-#: src/view/com/notifications/FeedItem.tsx:162
+#: src/view/com/notifications/FeedItem.tsx:166
msgid "reposted your post"
-msgstr ""
+msgstr "hat deinen Beitrag repostet"
#: src/view/com/post-thread/PostThreadItem.tsx:187
msgid "Reposts of this post"
-msgstr ""
+msgstr "Reposts von diesem Beitrag"
#: src/view/com/modals/ChangeEmail.tsx:181
#: src/view/com/modals/ChangeEmail.tsx:183
msgid "Request Change"
msgstr "Änderung anfordern"
-#: src/view/com/auth/create/Step2.tsx:219
-msgid "Request code"
-msgstr ""
-
-#: src/view/com/modals/ChangePassword.tsx:239
#: src/view/com/modals/ChangePassword.tsx:241
+#: src/view/com/modals/ChangePassword.tsx:243
msgid "Request Code"
-msgstr ""
+msgstr "Einen Code anfordern"
-#: src/view/screens/Settings/index.tsx:456
+#: src/view/screens/Settings/index.tsx:475
msgid "Require alt text before posting"
-msgstr ""
+msgstr "Alt-Text vor der Veröffentlichung erforderlich machen"
-#: src/view/com/auth/create/Step1.tsx:149
+#: src/screens/Signup/StepInfo/index.tsx:69
msgid "Required for this provider"
msgstr "Für diesen Anbieter erforderlich"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:124
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:136
+#: src/view/com/modals/ChangePassword.tsx:185
msgid "Reset code"
msgstr "Code zurücksetzen"
-#: src/view/com/modals/ChangePassword.tsx:190
+#: src/view/com/modals/ChangePassword.tsx:192
msgid "Reset Code"
-msgstr ""
+msgstr "Code zurücksetzen"
#: src/view/screens/Settings/index.tsx:824
-msgid "Reset onboarding"
-msgstr ""
+#~ msgid "Reset onboarding"
+#~ msgstr "Onboarding zurücksetzen"
-#: src/view/screens/Settings/index.tsx:827
+#: src/view/screens/Settings/index.tsx:858
+#: src/view/screens/Settings/index.tsx:861
msgid "Reset onboarding state"
-msgstr ""
+msgstr "Onboarding-Status zurücksetzen"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:104
+#: src/screens/Login/ForgotPasswordForm.tsx:86
msgid "Reset password"
msgstr "Passwort zurücksetzen"
#: src/view/screens/Settings/index.tsx:814
-msgid "Reset preferences"
-msgstr ""
+#~ msgid "Reset preferences"
+#~ msgstr "Einstellungen zurücksetzen"
-#: src/view/screens/Settings/index.tsx:817
+#: src/view/screens/Settings/index.tsx:848
+#: src/view/screens/Settings/index.tsx:851
msgid "Reset preferences state"
-msgstr ""
+msgstr "Einstellungen zurücksetzen"
-#: src/view/screens/Settings/index.tsx:825
+#: src/view/screens/Settings/index.tsx:859
msgid "Resets the onboarding state"
-msgstr ""
+msgstr "Setzt den Onboarding-Status zurück"
-#: src/view/screens/Settings/index.tsx:815
+#: src/view/screens/Settings/index.tsx:849
msgid "Resets the preferences state"
-msgstr ""
+msgstr "Einstellungen zurücksetzen"
-#: src/view/com/auth/login/LoginForm.tsx:269
+#: src/screens/Login/LoginForm.tsx:235
msgid "Retries login"
-msgstr ""
+msgstr "Versucht die Anmeldung erneut"
#: src/view/com/util/error/ErrorMessage.tsx:57
#: src/view/com/util/error/ErrorScreen.tsx:74
msgid "Retries the last action, which errored out"
-msgstr ""
-
-#: src/screens/Onboarding/StepInterests/index.tsx:221
-#: src/screens/Onboarding/StepInterests/index.tsx:224
-#: src/view/com/auth/create/CreateAccount.tsx:170
-#: src/view/com/auth/create/CreateAccount.tsx:175
-#: src/view/com/auth/create/Step2.tsx:255
-#: src/view/com/auth/login/LoginForm.tsx:268
-#: src/view/com/auth/login/LoginForm.tsx:271
+msgstr "Wiederholung der letzten Aktion, bei der ein Fehler aufgetreten ist"
+
+#: src/components/Error.tsx:79
+#: src/components/Lists.tsx:91
+#: src/screens/Login/LoginForm.tsx:234
+#: src/screens/Login/LoginForm.tsx:241
+#: src/screens/Onboarding/StepInterests/index.tsx:225
+#: src/screens/Onboarding/StepInterests/index.tsx:228
+#: src/screens/Signup/index.tsx:193
#: src/view/com/util/error/ErrorMessage.tsx:55
#: src/view/com/util/error/ErrorScreen.tsx:72
msgid "Retry"
msgstr "Wiederholen"
-#: src/view/com/auth/create/Step2.tsx:247
-msgid "Retry."
-msgstr ""
-
-#: src/view/screens/ProfileList.tsx:898
+#: src/components/Error.tsx:86
+#: src/view/screens/ProfileList.tsx:917
msgid "Return to previous page"
+msgstr "Zurück zur vorherigen Seite"
+
+#: src/view/screens/NotFound.tsx:59
+msgid "Returns to home page"
msgstr ""
-#: src/view/shell/desktop/RightNav.tsx:55
-msgid "SANDBOX. Posts and accounts are not permanent."
+#: src/view/screens/NotFound.tsx:58
+#: src/view/screens/ProfileFeed.tsx:113
+msgid "Returns to previous page"
msgstr ""
-#: src/view/com/lightbox/Lightbox.tsx:132
-#: src/view/com/modals/CreateOrEditList.tsx:345
-msgctxt "action"
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/view/com/modals/ChangeHandle.tsx:174
+#: src/view/com/modals/CreateOrEditList.tsx:338
+#: src/view/com/modals/EditProfile.tsx:225
msgid "Save"
-msgstr ""
+msgstr "Speichern"
-#: src/view/com/modals/BirthDateSettings.tsx:94
-#: src/view/com/modals/BirthDateSettings.tsx:97
-#: src/view/com/modals/ChangeHandle.tsx:173
-#: src/view/com/modals/CreateOrEditList.tsx:337
-#: src/view/com/modals/EditProfile.tsx:224
-#: src/view/screens/ProfileFeed.tsx:345
+#: src/view/com/lightbox/Lightbox.tsx:132
+#: src/view/com/modals/CreateOrEditList.tsx:346
+msgctxt "action"
msgid "Save"
msgstr "Speichern"
-#: src/view/com/modals/AltImage.tsx:130
+#: src/view/com/modals/AltImage.tsx:131
msgid "Save alt text"
msgstr "Alt-Text speichern"
-#: src/view/com/modals/EditProfile.tsx:232
+#: src/components/dialogs/BirthDateSettings.tsx:119
+msgid "Save birthday"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:233
msgid "Save Changes"
msgstr "Änderungen speichern"
-#: src/view/com/modals/ChangeHandle.tsx:170
+#: src/view/com/modals/ChangeHandle.tsx:171
msgid "Save handle change"
msgstr "Handle-Änderung speichern"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:144
+#: src/view/com/modals/crop-image/CropImage.web.tsx:145
msgid "Save image crop"
msgstr "Bildausschnitt speichern"
+#: src/view/screens/ProfileFeed.tsx:336
+#: src/view/screens/ProfileFeed.tsx:342
+msgid "Save to my feeds"
+msgstr ""
+
#: src/view/screens/SavedFeeds.tsx:122
msgid "Saved Feeds"
msgstr "Gespeicherte Feeds"
-#: src/view/com/modals/EditProfile.tsx:225
-msgid "Saves any changes to your profile"
+#: src/view/com/lightbox/Lightbox.tsx:81
+msgid "Saved to your camera roll."
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:171
+#: src/view/screens/ProfileFeed.tsx:213
+msgid "Saved to your feeds"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:226
+msgid "Saves any changes to your profile"
+msgstr "Speichert alle Änderungen an Deinem Profil"
+
+#: src/view/com/modals/ChangeHandle.tsx:172
msgid "Saves handle change to {handle}"
+msgstr "Speichert Handle-Änderung in {handle}"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:146
+msgid "Saves image crop settings"
msgstr ""
#: src/screens/Onboarding/index.tsx:36
msgid "Science"
-msgstr ""
+msgstr "Wissenschaft"
-#: src/view/screens/ProfileList.tsx:854
+#: src/view/screens/ProfileList.tsx:873
msgid "Scroll to top"
-msgstr ""
+msgstr "Zum Anfang blättern"
-#: src/Navigation.tsx:437
-#: src/view/com/auth/LoggedOut.tsx:122
+#: src/Navigation.tsx:459
+#: src/view/com/auth/LoggedOut.tsx:123
#: src/view/com/modals/ListAddRemoveUsers.tsx:75
#: src/view/com/util/forms/SearchInput.tsx:67
#: src/view/com/util/forms/SearchInput.tsx:79
-#: src/view/screens/Search/Search.tsx:418
-#: src/view/screens/Search/Search.tsx:645
-#: src/view/screens/Search/Search.tsx:663
-#: src/view/shell/bottom-bar/BottomBar.tsx:159
-#: src/view/shell/desktop/LeftNav.tsx:324
-#: src/view/shell/desktop/Search.tsx:214
-#: src/view/shell/desktop/Search.tsx:223
-#: src/view/shell/Drawer.tsx:362
-#: src/view/shell/Drawer.tsx:363
+#: src/view/screens/Search/Search.tsx:421
+#: src/view/screens/Search/Search.tsx:670
+#: src/view/screens/Search/Search.tsx:688
+#: src/view/shell/bottom-bar/BottomBar.tsx:169
+#: src/view/shell/desktop/LeftNav.tsx:328
+#: src/view/shell/desktop/Search.tsx:215
+#: src/view/shell/desktop/Search.tsx:224
+#: src/view/shell/Drawer.tsx:365
+#: src/view/shell/Drawer.tsx:366
msgid "Search"
msgstr "Suche"
-#: src/view/screens/Search/Search.tsx:712
-#: src/view/shell/desktop/Search.tsx:255
+#: src/view/screens/Search/Search.tsx:737
+#: src/view/shell/desktop/Search.tsx:256
msgid "Search for \"{query}\""
-msgstr ""
+msgstr "Suche nach \"{query}\""
+
+#: src/components/TagMenu/index.tsx:145
+msgid "Search for all posts by @{authorHandle} with tag {displayTag}"
+msgstr "Nach allen Beiträgen von @{authorHandle} mit dem Tag {displayTag} suchen"
+
+#: src/components/TagMenu/index.tsx:94
+msgid "Search for all posts with tag {displayTag}"
+msgstr "Nach allen Beiträgen mit dem Tag {displayTag} suchen"
-#: src/view/com/auth/LoggedOut.tsx:104
#: src/view/com/auth/LoggedOut.tsx:105
+#: src/view/com/auth/LoggedOut.tsx:106
#: src/view/com/modals/ListAddRemoveUsers.tsx:70
msgid "Search for users"
msgstr "Nach Nutzern suchen"
@@ -3265,161 +3975,202 @@ msgstr "Nach Nutzern suchen"
msgid "Security Step Required"
msgstr "Sicherheitsschritt erforderlich"
+#: src/components/TagMenu/index.web.tsx:66
+msgid "See {truncatedTag} posts"
+msgstr "Siehe {truncatedTag}-Beiträge"
+
+#: src/components/TagMenu/index.web.tsx:83
+msgid "See {truncatedTag} posts by user"
+msgstr "Siehe {truncatedTag}-Beiträge des Benutzers"
+
+#: src/components/TagMenu/index.tsx:128
+msgid "See <0>{displayTag}0> posts"
+msgstr "Siehe <0>{displayTag}0>-Beiträge"
+
+#: src/components/TagMenu/index.tsx:187
+msgid "See <0>{displayTag}0> posts by this user"
+msgstr "Siehe <0>{displayTag}0>-Beiträge von diesem Benutzer"
+
#: src/view/screens/SavedFeeds.tsx:163
msgid "See this guide"
-msgstr ""
+msgstr "Siehe diesen Leitfaden"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:39
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:40
msgid "See what's next"
msgstr "Schau, was als nächstes kommt"
#: src/view/com/util/Selector.tsx:106
msgid "Select {item}"
-msgstr ""
+msgstr "Wähle {item}"
-#: src/view/com/modals/ServerInput.tsx:75
-#~ msgid "Select Bluesky Social"
-#~ msgstr "Wähle Bluesky Social"
+#: src/screens/Login/ChooseAccountForm.tsx:61
+msgid "Select account"
+msgstr ""
-#: src/view/com/auth/login/Login.tsx:117
+#: src/screens/Login/index.tsx:120
msgid "Select from an existing account"
msgstr "Von einem bestehenden Konto auswählen"
+#: src/view/screens/LanguageSettings.tsx:299
+msgid "Select languages"
+msgstr ""
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:30
+msgid "Select moderator"
+msgstr ""
+
#: src/view/com/util/Selector.tsx:107
msgid "Select option {i} of {numItems}"
-msgstr ""
+msgstr "Wähle Option {i} von {numItems}"
-#: src/view/com/auth/create/Step1.tsx:99
-#: src/view/com/auth/login/LoginForm.tsx:150
-msgid "Select service"
-msgstr "Service auswählen"
+#: src/view/com/auth/create/Step1.tsx:96
+#: src/view/com/auth/login/LoginForm.tsx:153
+#~ msgid "Select service"
+#~ msgstr "Service auswählen"
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:52
msgid "Select some accounts below to follow"
+msgstr "Wähle unten einige Konten aus, denen du folgen möchtest"
+
+#: src/components/ReportDialog/SubmitView.tsx:135
+msgid "Select the moderation service(s) to report to"
msgstr ""
#: src/view/com/auth/server-input/index.tsx:82
msgid "Select the service that hosts your data."
-msgstr ""
-
-#: src/screens/Onboarding/StepModeration/index.tsx:49
-#~ msgid "Select the types of content that you want to see (or not see), and we'll handle the rest."
-#~ msgstr ""
+msgstr "Wähle den Dienst aus, der deine Daten hostet."
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:90
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:100
msgid "Select topical feeds to follow from the list below"
-msgstr ""
+msgstr "Wähle aus der folgenden Liste die themenbezogenen Feeds aus, die du verfolgen möchtest"
-#: src/screens/Onboarding/StepModeration/index.tsx:75
+#: src/screens/Onboarding/StepModeration/index.tsx:63
msgid "Select what you want to see (or not see), and we’ll handle the rest."
-msgstr ""
+msgstr "Wähle aus, was du sehen (oder nicht sehen) möchtest, und wir kümmern uns um den Rest."
#: src/view/screens/LanguageSettings.tsx:281
msgid "Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown."
msgstr "Wähle aus, welche Sprachen deine abonnierten Feeds enthalten sollen. Wenn du keine Sprachen auswählst, werden alle Sprachen angezeigt."
#: src/view/screens/LanguageSettings.tsx:98
-msgid "Select your app language for the default text to display in the app"
-msgstr "Wählen deine App-Sprache für den Standardtext aus, der in der App angezeigt werden soll"
+#~ msgid "Select your app language for the default text to display in the app"
+#~ msgstr "Wählen deine App-Sprache für den Standardtext aus, der in der App angezeigt werden soll"
-#: src/screens/Onboarding/StepInterests/index.tsx:196
-msgid "Select your interests from the options below"
+#: src/view/screens/LanguageSettings.tsx:98
+msgid "Select your app language for the default text to display in the app."
msgstr ""
-#: src/view/com/auth/create/Step2.tsx:155
-msgid "Select your phone's country"
+#: src/screens/Signup/StepInfo/index.tsx:133
+msgid "Select your date of birth"
msgstr ""
+#: src/screens/Onboarding/StepInterests/index.tsx:200
+msgid "Select your interests from the options below"
+msgstr "Wähle aus den folgenden Optionen deine Interessen aus"
+
#: src/view/screens/LanguageSettings.tsx:190
msgid "Select your preferred language for translations in your feed."
msgstr "Wähle deine bevorzugte Sprache für die Übersetzungen in deinem Feed aus."
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:116
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:117
msgid "Select your primary algorithmic feeds"
-msgstr ""
+msgstr "Wähle deine primären algorithmischen Feeds"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:142
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:133
msgid "Select your secondary algorithmic feeds"
-msgstr ""
+msgstr "Wähle deine sekundären algorithmischen Feeds"
#: src/view/com/modals/VerifyEmail.tsx:202
#: src/view/com/modals/VerifyEmail.tsx:204
msgid "Send Confirmation Email"
msgstr "Bestätigungs-E-Mail senden"
-#: src/view/com/modals/DeleteAccount.tsx:131
+#: src/view/com/modals/DeleteAccount.tsx:130
msgid "Send email"
msgstr "E-Mail senden"
-#: src/view/com/modals/DeleteAccount.tsx:144
+#: src/view/com/modals/DeleteAccount.tsx:143
msgctxt "action"
msgid "Send Email"
msgstr "E-Mail senden"
-#: src/view/shell/Drawer.tsx:295
-#: src/view/shell/Drawer.tsx:316
+#: src/view/shell/Drawer.tsx:298
+#: src/view/shell/Drawer.tsx:319
msgid "Send feedback"
msgstr "Feedback senden"
+#: src/components/ReportDialog/SubmitView.tsx:214
+#: src/components/ReportDialog/SubmitView.tsx:218
+msgid "Send report"
+msgstr ""
+
#: src/view/com/modals/report/SendReportButton.tsx:45
-msgid "Send Report"
+#~ msgid "Send Report"
+#~ msgstr "Bericht senden"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:44
+msgid "Send report to {0}"
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:133
+#: src/view/com/modals/DeleteAccount.tsx:132
msgid "Sends email with confirmation code for account deletion"
-msgstr ""
+msgstr "Sendet eine E-Mail mit Bestätigungscode für die Kontolöschung"
-#: src/view/com/auth/server-input/index.tsx:110
+#: src/view/com/auth/server-input/index.tsx:114
msgid "Server address"
-msgstr ""
+msgstr "Server-Adresse"
#: src/view/com/modals/ContentFilteringSettings.tsx:311
-msgid "Set {value} for {labelGroup} content moderation policy"
-msgstr ""
+#~ msgid "Set {value} for {labelGroup} content moderation policy"
+#~ msgstr "Legt {value} für die {labelGroup} Inhaltsmoderationsrichtlinie fest"
#: src/view/com/modals/ContentFilteringSettings.tsx:160
#: src/view/com/modals/ContentFilteringSettings.tsx:179
-msgctxt "action"
-msgid "Set Age"
+#~ msgctxt "action"
+#~ msgid "Set Age"
+#~ msgstr "Alter festlegen"
+
+#: src/screens/Moderation/index.tsx:304
+msgid "Set birthdate"
msgstr ""
#: src/view/screens/Settings/index.tsx:488
-msgid "Set color theme to dark"
-msgstr ""
+#~ msgid "Set color theme to dark"
+#~ msgstr "Farbthema auf dunkel einstellen"
#: src/view/screens/Settings/index.tsx:481
-msgid "Set color theme to light"
-msgstr ""
+#~ msgid "Set color theme to light"
+#~ msgstr "Farbthema auf hell einstellen"
#: src/view/screens/Settings/index.tsx:475
-msgid "Set color theme to system setting"
-msgstr ""
+#~ msgid "Set color theme to system setting"
+#~ msgstr "Farbthema auf Systemeinstellung setzen"
#: src/view/screens/Settings/index.tsx:514
-msgid "Set dark theme to the dark theme"
-msgstr ""
+#~ msgid "Set dark theme to the dark theme"
+#~ msgstr "Dunkles Thema auf das dunkle Thema einstellen"
#: src/view/screens/Settings/index.tsx:507
-msgid "Set dark theme to the dim theme"
-msgstr ""
+#~ msgid "Set dark theme to the dim theme"
+#~ msgstr "Dunkles Thema auf das gedämpfte Thema einstellen"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:104
+#: src/screens/Login/SetNewPasswordForm.tsx:102
msgid "Set new password"
msgstr "Neues Passwort festlegen"
-#: src/view/com/auth/create/Step1.tsx:221
-msgid "Set password"
-msgstr ""
+#: src/view/com/auth/create/Step1.tsx:202
+#~ msgid "Set password"
+#~ msgstr "Passwort festlegen"
-#: src/view/screens/PreferencesHomeFeed.tsx:225
+#: src/view/screens/PreferencesFollowingFeed.tsx:225
msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible."
msgstr "Setze diese Einstellung auf \"Nein\", um alle Zitatbeiträge aus deinem Feed auszublenden. Reposts sind weiterhin sichtbar."
-#: src/view/screens/PreferencesHomeFeed.tsx:122
+#: src/view/screens/PreferencesFollowingFeed.tsx:122
msgid "Set this setting to \"No\" to hide all replies from your feed."
msgstr "Setze diese Einstellung auf \"Nein\", um alle Antworten aus deinem Feed auszublenden."
-#: src/view/screens/PreferencesHomeFeed.tsx:191
+#: src/view/screens/PreferencesFollowingFeed.tsx:191
msgid "Set this setting to \"No\" to hide all reposts from your feed."
msgstr "Setze diese Einstellung auf \"Nein\", um alle Reposts aus deinem Feed auszublenden."
@@ -3427,36 +4178,68 @@ msgstr "Setze diese Einstellung auf \"Nein\", um alle Reposts aus deinem Feed au
msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature."
msgstr "Setze diese Einstellung auf \"Ja\", um Antworten in einer Thread-Ansicht anzuzeigen. Dies ist eine experimentelle Funktion."
-#: src/view/screens/PreferencesHomeFeed.tsx:261
-msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
-msgstr "Setze diese Einstellung auf \"Ja\", um Beispiele für deine gespeicherten Feeds in deinem folgenden Feed anzuzeigen. Dies ist eine experimentelle Funktion."
+#: src/view/screens/PreferencesFollowingFeed.tsx:261
+msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your Following feed. This is an experimental feature."
+msgstr "Setze diese Einstellung auf \"Ja\", um Beispiele für deine gespeicherten Feeds in deinem Following-Feed anzuzeigen. Dies ist eine experimentelle Funktion."
-#: src/screens/Onboarding/Layout.tsx:50
+#: src/screens/Onboarding/Layout.tsx:48
msgid "Set up your account"
-msgstr ""
+msgstr "Dein Konto einrichten"
-#: src/view/com/modals/ChangeHandle.tsx:266
+#: src/view/com/modals/ChangeHandle.tsx:267
msgid "Sets Bluesky username"
+msgstr "Legt deinen Bluesky-Benutzernamen fest"
+
+#: src/view/screens/Settings/index.tsx:507
+msgid "Sets color theme to dark"
msgstr ""
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:157
-msgid "Sets email for password reset"
+#: src/view/screens/Settings/index.tsx:500
+msgid "Sets color theme to light"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:494
+msgid "Sets color theme to system setting"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:533
+msgid "Sets dark theme to the dark theme"
msgstr ""
+#: src/view/screens/Settings/index.tsx:526
+msgid "Sets dark theme to the dim theme"
+msgstr ""
+
+#: src/screens/Login/ForgotPasswordForm.tsx:113
+msgid "Sets email for password reset"
+msgstr "Legt die E-Mail für das Zurücksetzen des Passworts fest"
+
#: src/view/com/auth/login/ForgotPasswordForm.tsx:122
-msgid "Sets hosting provider for password reset"
+#~ msgid "Sets hosting provider for password reset"
+#~ msgstr "Legt den Hosting-Anbieter für das Zurücksetzen des Passworts fest"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:124
+msgid "Sets image aspect ratio to square"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:114
+msgid "Sets image aspect ratio to tall"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:100
-#: src/view/com/auth/login/LoginForm.tsx:151
-msgid "Sets server for the Bluesky client"
+#: src/view/com/modals/crop-image/CropImage.web.tsx:104
+msgid "Sets image aspect ratio to wide"
msgstr ""
-#: src/Navigation.tsx:135
-#: src/view/screens/Settings/index.tsx:294
-#: src/view/shell/desktop/LeftNav.tsx:433
-#: src/view/shell/Drawer.tsx:567
-#: src/view/shell/Drawer.tsx:568
+#: src/view/com/auth/create/Step1.tsx:97
+#: src/view/com/auth/login/LoginForm.tsx:154
+#~ msgid "Sets server for the Bluesky client"
+#~ msgstr "Setzt den Server für den Bluesky-Client"
+
+#: src/Navigation.tsx:139
+#: src/view/screens/Settings/index.tsx:313
+#: src/view/shell/desktop/LeftNav.tsx:437
+#: src/view/shell/Drawer.tsx:570
+#: src/view/shell/Drawer.tsx:571
msgid "Settings"
msgstr "Einstellungen"
@@ -3464,72 +4247,105 @@ msgstr "Einstellungen"
msgid "Sexual activity or erotic nudity."
msgstr "Sexuelle Aktivitäten oder erotische Nacktheit."
+#: src/lib/moderation/useGlobalLabelStrings.ts:38
+msgid "Sexually Suggestive"
+msgstr ""
+
#: src/view/com/lightbox/Lightbox.tsx:141
msgctxt "action"
msgid "Share"
-msgstr ""
+msgstr "Teilen"
-#: src/view/com/profile/ProfileHeader.tsx:294
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
-#: src/view/screens/ProfileList.tsx:417
+#: src/view/com/profile/ProfileMenu.tsx:215
+#: src/view/com/profile/ProfileMenu.tsx:224
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:235
+#: src/view/screens/ProfileList.tsx:388
msgid "Share"
msgstr "Teilen"
-#: src/view/screens/ProfileFeed.tsx:304
+#: src/view/com/profile/ProfileMenu.tsx:373
+#: src/view/com/util/forms/PostDropdownBtn.tsx:347
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:251
+msgid "Share anyway"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:362
+#: src/view/screens/ProfileFeed.tsx:364
msgid "Share feed"
msgstr "Feed teilen"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:43
-#: src/view/com/modals/ContentFilteringSettings.tsx:266
-#: src/view/com/util/moderation/ContentHider.tsx:107
-#: src/view/com/util/moderation/PostHider.tsx:108
-#: src/view/screens/Settings/index.tsx:344
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
+msgid "Share Link"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:92
+msgid "Shares the linked website"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:136
+#: src/components/moderation/PostHider.tsx:107
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:54
+#: src/view/screens/Settings/index.tsx:363
msgid "Show"
msgstr "Anzeigen"
-#: src/view/screens/PreferencesHomeFeed.tsx:68
+#: src/view/screens/PreferencesFollowingFeed.tsx:68
msgid "Show all replies"
-msgstr ""
+msgstr "Alle Antworten anzeigen"
-#: src/view/com/util/moderation/ScreenHider.tsx:132
+#: src/components/moderation/ScreenHider.tsx:169
+#: src/components/moderation/ScreenHider.tsx:172
msgid "Show anyway"
msgstr "Trotzdem anzeigen"
-#: src/view/com/modals/EmbedConsent.tsx:87
-msgid "Show embeds from {0}"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:27
+#: src/lib/moderation/useLabelBehaviorDescription.ts:63
+msgid "Show badge"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:458
-msgid "Show follows similar to {0}"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:61
+msgid "Show badge and filter from feeds"
msgstr ""
-#: src/view/com/post-thread/PostThreadItem.tsx:539
-#: src/view/com/post/Post.tsx:197
-#: src/view/com/posts/FeedItem.tsx:363
+#: src/view/com/modals/EmbedConsent.tsx:87
+#~ msgid "Show embeds from {0}"
+#~ msgstr "Eingebettete Medien von {0} anzeigen"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:200
+msgid "Show follows similar to {0}"
+msgstr "Zeige ähnliche Konten wie {0}"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:507
+#: src/view/com/post/Post.tsx:201
+#: src/view/com/posts/FeedItem.tsx:355
msgid "Show More"
-msgstr ""
+msgstr "Mehr anzeigen"
-#: src/view/screens/PreferencesHomeFeed.tsx:258
+#: src/view/screens/PreferencesFollowingFeed.tsx:258
msgid "Show Posts from My Feeds"
msgstr "Beiträge aus meinen Feeds anzeigen"
-#: src/view/screens/PreferencesHomeFeed.tsx:222
+#: src/view/screens/PreferencesFollowingFeed.tsx:222
msgid "Show Quote Posts"
-msgstr ""
+msgstr "Zitierte Beiträge anzeigen"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:118
+#: src/screens/Onboarding/StepFollowingFeed.tsx:119
msgid "Show quote-posts in Following feed"
-msgstr ""
+msgstr "Zitierte Beiträge im Following Feed anzeigen"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:134
+#: src/screens/Onboarding/StepFollowingFeed.tsx:135
msgid "Show quotes in Following"
-msgstr ""
+msgstr "Zitierte Beiträge im Following Feed anzeigen"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:94
+#: src/screens/Onboarding/StepFollowingFeed.tsx:95
msgid "Show re-posts in Following feed"
-msgstr ""
+msgstr "Reposts im Following-Feed anzeigen"
-#: src/view/screens/PreferencesHomeFeed.tsx:119
+#: src/view/screens/PreferencesFollowingFeed.tsx:119
msgid "Show Replies"
msgstr "Antworten anzeigen"
@@ -3537,87 +4353,98 @@ msgstr "Antworten anzeigen"
msgid "Show replies by people you follow before all other replies."
msgstr "Zeige Antworten von Personen, denen du folgst, vor allen anderen Antworten an."
-#: src/screens/Onboarding/StepFollowingFeed.tsx:86
+#: src/screens/Onboarding/StepFollowingFeed.tsx:87
msgid "Show replies in Following"
-msgstr ""
+msgstr "Antworten in folgendem Feed anzeigen"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:70
+#: src/screens/Onboarding/StepFollowingFeed.tsx:71
msgid "Show replies in Following feed"
-msgstr ""
+msgstr "Antworten in folgendem Feed anzeigen"
-#: src/view/screens/PreferencesHomeFeed.tsx:70
+#: src/view/screens/PreferencesFollowingFeed.tsx:70
msgid "Show replies with at least {value} {0}"
-msgstr ""
+msgstr "Antworten mit mindestens {value} {0} anzeigen"
-#: src/view/screens/PreferencesHomeFeed.tsx:188
+#: src/view/screens/PreferencesFollowingFeed.tsx:188
msgid "Show Reposts"
msgstr "Reposts anzeigen"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:110
+#: src/screens/Onboarding/StepFollowingFeed.tsx:111
msgid "Show reposts in Following"
-msgstr ""
+msgstr "Reposts im Following-Feed anzeigen"
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:68
+#: src/components/moderation/PostHider.tsx:64
msgid "Show the content"
-msgstr ""
+msgstr "Den Inhalt anzeigen"
-#: src/view/com/notifications/FeedItem.tsx:346
+#: src/view/com/notifications/FeedItem.tsx:351
msgid "Show users"
msgstr "Nutzer anzeigen"
-#: src/view/com/profile/ProfileHeader.tsx:461
-msgid "Shows a list of users similar to this user."
+#: src/lib/moderation/useLabelBehaviorDescription.ts:58
+msgid "Show warning"
msgstr ""
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:124
-#: src/view/com/profile/ProfileHeader.tsx:505
-msgid "Shows posts from {0} in your feed"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:56
+msgid "Show warning and filter from feeds"
msgstr ""
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:70
-#: src/view/com/auth/login/Login.tsx:98
-#: src/view/com/auth/SplashScreen.tsx:54
-#: src/view/shell/bottom-bar/BottomBar.tsx:285
-#: src/view/shell/bottom-bar/BottomBar.tsx:286
-#: src/view/shell/bottom-bar/BottomBar.tsx:288
+#: src/view/com/profile/ProfileHeader.tsx:462
+#~ msgid "Shows a list of users similar to this user."
+#~ msgstr "Zeigt eine Liste von Benutzern, die diesem Benutzer ähnlich sind."
+
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:130
+msgid "Shows posts from {0} in your feed"
+msgstr "Zeigt Beiträge von {0} in deinem Feed"
+
+#: src/screens/Login/index.tsx:100
+#: src/screens/Login/index.tsx:119
+#: src/screens/Login/LoginForm.tsx:131
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:73
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:83
+#: src/view/com/auth/SplashScreen.tsx:81
+#: src/view/com/auth/SplashScreen.tsx:90
+#: src/view/com/auth/SplashScreen.web.tsx:110
+#: src/view/com/auth/SplashScreen.web.tsx:119
+#: src/view/shell/bottom-bar/BottomBar.tsx:300
+#: src/view/shell/bottom-bar/BottomBar.tsx:301
+#: src/view/shell/bottom-bar/BottomBar.tsx:303
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:178
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:179
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:181
#: src/view/shell/NavSignupCard.tsx:58
#: src/view/shell/NavSignupCard.tsx:59
+#: src/view/shell/NavSignupCard.tsx:61
msgid "Sign in"
msgstr "Anmelden"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:78
-#: src/view/com/auth/SplashScreen.tsx:57
-#: src/view/com/auth/SplashScreen.web.tsx:87
-msgid "Sign In"
-msgstr "Anmelden"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:82
+#: src/view/com/auth/SplashScreen.tsx:86
+#: src/view/com/auth/SplashScreen.web.tsx:91
+#~ msgid "Sign In"
+#~ msgstr "Anmelden"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:44
+#: src/components/AccountList.tsx:109
msgid "Sign in as {0}"
msgstr "Anmelden als {0}"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:118
-#: src/view/com/auth/login/Login.tsx:116
+#: src/screens/Login/ChooseAccountForm.tsx:64
msgid "Sign in as..."
msgstr "Anmelden als..."
-#: src/view/com/auth/login/LoginForm.tsx:137
-msgid "Sign into"
-msgstr "Anmelden bei"
+#: src/view/com/auth/login/LoginForm.tsx:140
+#~ msgid "Sign into"
+#~ msgstr "Anmelden bei"
-#: src/view/com/modals/SwitchAccount.tsx:64
-#: src/view/com/modals/SwitchAccount.tsx:69
-#: src/view/screens/Settings/index.tsx:100
-#: src/view/screens/Settings/index.tsx:103
+#: src/view/screens/Settings/index.tsx:107
+#: src/view/screens/Settings/index.tsx:110
msgid "Sign out"
msgstr "Abmelden"
-#: src/view/shell/bottom-bar/BottomBar.tsx:275
-#: src/view/shell/bottom-bar/BottomBar.tsx:276
-#: src/view/shell/bottom-bar/BottomBar.tsx:278
+#: src/view/shell/bottom-bar/BottomBar.tsx:290
+#: src/view/shell/bottom-bar/BottomBar.tsx:291
+#: src/view/shell/bottom-bar/BottomBar.tsx:293
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:168
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:169
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:171
@@ -3631,51 +4458,50 @@ msgstr "Registrieren"
msgid "Sign up or sign in to join the conversation"
msgstr "Registriere dich oder melden dich an, um an der Diskussion teilzunehmen"
-#: src/view/com/util/moderation/ScreenHider.tsx:76
+#: src/components/moderation/ScreenHider.tsx:97
+#: src/lib/moderation/useGlobalLabelStrings.ts:28
msgid "Sign-in Required"
msgstr "Anmelden erforderlich"
-#: src/view/screens/Settings/index.tsx:355
+#: src/view/screens/Settings/index.tsx:374
msgid "Signed in as"
msgstr "Angemeldet als"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:103
+#: src/screens/Login/ChooseAccountForm.tsx:48
msgid "Signed in as @{0}"
-msgstr ""
+msgstr "Angemeldet als @{0}"
-#: src/view/com/modals/SwitchAccount.tsx:66
-msgid "Signs {0} out of Bluesky"
-msgstr ""
+#: src/view/com/modals/SwitchAccount.tsx:70
+#~ msgid "Signs {0} out of Bluesky"
+#~ msgstr "Meldet {0} von Bluesky ab"
-#: src/screens/Onboarding/StepInterests/index.tsx:235
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:195
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:33
+#: src/screens/Onboarding/StepInterests/index.tsx:239
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:203
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:35
msgid "Skip"
msgstr "Überspringen"
-#: src/screens/Onboarding/StepInterests/index.tsx:232
+#: src/screens/Onboarding/StepInterests/index.tsx:236
msgid "Skip this flow"
-msgstr ""
-
-#: src/view/com/auth/create/Step2.tsx:82
-msgid "SMS verification"
-msgstr ""
+msgstr "Diesen Schritt überspringen"
#: src/screens/Onboarding/index.tsx:40
msgid "Software Dev"
-msgstr ""
+msgstr "Software-Entwicklung"
-#: src/view/com/modals/ProfilePreview.tsx:62
-#~ msgid "Something went wrong and we're not sure what."
-#~ msgstr ""
-
-#: src/view/com/modals/Waitlist.tsx:51
-msgid "Something went wrong. Check your email and try again."
+#: src/components/ReportDialog/index.tsx:59
+#: src/screens/Moderation/index.tsx:114
+#: src/screens/Profile/Sections/Labels.tsx:76
+msgid "Something went wrong, please try again."
msgstr ""
-#: src/App.native.tsx:61
+#: src/components/Lists.tsx:203
+#~ msgid "Something went wrong!"
+#~ msgstr "Es ist ein Fehler aufgetreten."
+
+#: src/App.native.tsx:66
msgid "Sorry! Your session expired. Please log in again."
-msgstr ""
+msgstr "Entschuldigung! Deine Sitzung ist abgelaufen. Bitte logge dich erneut ein."
#: src/view/screens/PreferencesThreads.tsx:69
msgid "Sort Replies"
@@ -3685,126 +4511,181 @@ msgstr "Antworten sortieren"
msgid "Sort replies to the same post by:"
msgstr "Antworten auf denselben Beitrag sortieren nach:"
-#: src/screens/Onboarding/index.tsx:30
-msgid "Sports"
+#: src/components/moderation/LabelsOnMeDialog.tsx:146
+msgid "Source:"
msgstr ""
-#: src/view/com/modals/crop-image/CropImage.web.tsx:122
-msgid "Square"
+#: src/lib/moderation/useReportOptions.ts:65
+msgid "Spam"
msgstr ""
-#: src/view/com/modals/ServerInput.tsx:62
-#~ msgid "Staging"
-#~ msgstr "Staging"
+#: src/lib/moderation/useReportOptions.ts:53
+msgid "Spam; excessive mentions or replies"
+msgstr ""
-#: src/view/screens/Settings/index.tsx:871
+#: src/screens/Onboarding/index.tsx:30
+msgid "Sports"
+msgstr "Sport"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:123
+msgid "Square"
+msgstr "Quadratische"
+
+#: src/view/screens/Settings/index.tsx:903
msgid "Status page"
msgstr "Status-Seite"
-#: src/view/com/auth/create/StepHeader.tsx:22
-msgid "Step {0} of {numSteps}"
+#: src/screens/Signup/index.tsx:142
+msgid "Step"
msgstr ""
-#: src/view/screens/Settings/index.tsx:274
+#: src/view/com/auth/create/StepHeader.tsx:22
+#~ msgid "Step {0} of {numSteps}"
+#~ msgstr "Schritt {0} von {numSteps}"
+
+#: src/view/screens/Settings/index.tsx:292
msgid "Storage cleared, you need to restart the app now."
-msgstr ""
+msgstr "Der Speicher wurde gelöscht, du musst die App jetzt neu starten."
-#: src/Navigation.tsx:202
-#: src/view/screens/Settings/index.tsx:807
+#: src/Navigation.tsx:211
+#: src/view/screens/Settings/index.tsx:831
msgid "Storybook"
-msgstr ""
+msgstr "Geschichtenbuch"
-#: src/view/com/modals/AppealLabel.tsx:101
+#: src/components/moderation/LabelsOnMeDialog.tsx:255
+#: src/components/moderation/LabelsOnMeDialog.tsx:256
msgid "Submit"
msgstr "Einreichen"
-#: src/view/screens/ProfileList.tsx:607
+#: src/view/screens/ProfileList.tsx:590
msgid "Subscribe"
msgstr "Abonnieren"
-#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:173
+#: src/screens/Profile/Sections/Labels.tsx:180
+msgid "Subscribe to @{0} to use these labels:"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:221
+msgid "Subscribe to Labeler"
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:172
#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:307
msgid "Subscribe to the {0} feed"
+msgstr "Abonniere den {0} Feed"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:184
+msgid "Subscribe to this labeler"
msgstr ""
-#: src/view/screens/ProfileList.tsx:603
+#: src/view/screens/ProfileList.tsx:586
msgid "Subscribe to this list"
msgstr "Abonniere diese Liste"
-#: src/view/screens/Search/Search.tsx:373
+#: src/view/screens/Search/Search.tsx:376
msgid "Suggested Follows"
msgstr "Vorgeschlagene Follower"
-#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:64
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:65
msgid "Suggested for you"
-msgstr ""
+msgstr "Vorgeschlagen für dich"
#: src/view/com/modals/SelfLabel.tsx:95
msgid "Suggestive"
-msgstr ""
+msgstr "Suggestiv"
-#: src/Navigation.tsx:212
+#: src/Navigation.tsx:226
#: src/view/screens/Support.tsx:30
#: src/view/screens/Support.tsx:33
msgid "Support"
msgstr "Support"
-#: src/view/com/modals/ProfilePreview.tsx:110
-#~ msgid "Swipe up to see more"
-#~ msgstr ""
-
-#: src/view/com/modals/SwitchAccount.tsx:117
+#: src/components/dialogs/SwitchAccount.tsx:46
+#: src/components/dialogs/SwitchAccount.tsx:49
msgid "Switch Account"
msgstr "Konto wechseln"
-#: src/view/com/modals/SwitchAccount.tsx:97
-#: src/view/screens/Settings/index.tsx:130
+#: src/view/screens/Settings/index.tsx:139
msgid "Switch to {0}"
-msgstr ""
+msgstr "Wechseln zu {0}"
-#: src/view/com/modals/SwitchAccount.tsx:98
-#: src/view/screens/Settings/index.tsx:131
+#: src/view/screens/Settings/index.tsx:140
msgid "Switches the account you are logged in to"
-msgstr ""
+msgstr "Wechselt das Konto, in das du eingeloggt bist"
-#: src/view/screens/Settings/index.tsx:472
+#: src/view/screens/Settings/index.tsx:491
msgid "System"
-msgstr ""
+msgstr "System"
-#: src/view/screens/Settings/index.tsx:795
+#: src/view/screens/Settings/index.tsx:819
msgid "System log"
msgstr "Systemprotokoll"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:112
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "tag"
+msgstr "Tag"
+
+#: src/components/TagMenu/index.tsx:78
+msgid "Tag menu: {displayTag}"
+msgstr "Tag-Menü: {displayTag}"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:113
msgid "Tall"
msgstr "Groß"
#: src/view/com/util/images/AutoSizedImage.tsx:70
msgid "Tap to view fully"
-msgstr ""
+msgstr "Tippe, um die vollständige Ansicht anzuzeigen"
#: src/screens/Onboarding/index.tsx:39
msgid "Tech"
-msgstr ""
+msgstr "Technik"
-#: src/view/shell/desktop/RightNav.tsx:89
+#: src/view/shell/desktop/RightNav.tsx:81
msgid "Terms"
msgstr "Bedingungen"
-#: src/Navigation.tsx:222
-#: src/view/screens/Settings/index.tsx:885
+#: src/Navigation.tsx:236
+#: src/screens/Signup/StepInfo/Policies.tsx:49
+#: src/view/screens/Settings/index.tsx:917
#: src/view/screens/TermsOfService.tsx:29
-#: src/view/shell/Drawer.tsx:256
+#: src/view/shell/Drawer.tsx:259
msgid "Terms of Service"
msgstr "Nutzungsbedingungen"
-#: src/view/com/modals/AppealLabel.tsx:70
-#: src/view/com/modals/report/InputIssueDetails.tsx:51
+#: src/lib/moderation/useReportOptions.ts:58
+#: src/lib/moderation/useReportOptions.ts:79
+#: src/lib/moderation/useReportOptions.ts:87
+msgid "Terms used violate community standards"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "text"
+msgstr "Text"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:219
msgid "Text input field"
msgstr "Text-Eingabefeld"
-#: src/view/com/profile/ProfileHeader.tsx:262
+#: src/components/ReportDialog/SubmitView.tsx:78
+msgid "Thank you. Your report has been sent."
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:465
+msgid "That contains the following:"
+msgstr ""
+
+#: src/screens/Signup/index.tsx:84
+msgid "That handle is already taken."
+msgstr "Dieser Handle ist bereits besetzt."
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:283
+#: src/view/com/profile/ProfileMenu.tsx:349
msgid "The account will be able to interact with you after unblocking."
+msgstr "Das Konto kann nach der Entblockiert mit dir interagieren."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:127
+msgid "the author"
msgstr ""
#: src/view/screens/CommunityGuidelines.tsx:36
@@ -3813,13 +4694,22 @@ msgstr "Die Community-Richtlinien wurden nach <0/> verschoben"
#: src/view/screens/CopyrightPolicy.tsx:33
msgid "The Copyright Policy has been moved to <0/>"
+msgstr "Die Copyright-Richtlinie wurde nach <0/> verschoben"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:48
+msgid "The following labels were applied to your account."
msgstr ""
-#: src/screens/Onboarding/Layout.tsx:60
-msgid "The following steps will help customize your Bluesky experience."
+#: src/components/moderation/LabelsOnMeDialog.tsx:49
+msgid "The following labels were applied to your content."
msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:453
+#: src/screens/Onboarding/Layout.tsx:58
+msgid "The following steps will help customize your Bluesky experience."
+msgstr "Die folgenden Schritte helfen dir, dein Bluesky-Erlebnis anzupassen."
+
+#: src/view/com/post-thread/PostThread.tsx:153
+#: src/view/com/post-thread/PostThread.tsx:165
msgid "The post may have been deleted."
msgstr "Möglicherweise wurde der Post gelöscht."
@@ -3833,139 +4723,158 @@ msgstr "Das Support-Formular wurde verschoben. Wenn du Hilfe benötigst, wende d
#: src/view/screens/TermsOfService.tsx:33
msgid "The Terms of Service have been moved to"
-msgstr ""
+msgstr "Die Allgemeinen Geschäftsbedingungen wurden verschoben nach"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:150
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:141
msgid "There are many feeds to try:"
-msgstr ""
+msgstr "Es gibt viele Feeds zum Ausprobieren:"
-#: src/view/screens/ProfileFeed.tsx:549
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:112
+#: src/view/screens/ProfileFeed.tsx:544
msgid "There was an an issue contacting the server, please check your internet connection and try again."
-msgstr ""
+msgstr "Es gab ein Problem bei der Kontaktaufnahme mit dem Server. Bitte überprüfe deine Internetverbindung und versuche es erneut."
-#: src/view/com/posts/FeedErrorMessage.tsx:139
+#: src/view/com/posts/FeedErrorMessage.tsx:138
msgid "There was an an issue removing this feed. Please check your internet connection and try again."
-msgstr ""
+msgstr "Es gab ein Problem beim Entfernen dieses Feeds. Bitte überprüfe deine Internetverbindung und versuche es erneut."
-#: src/view/screens/ProfileFeed.tsx:209
+#: src/view/screens/ProfileFeed.tsx:218
msgid "There was an an issue updating your feeds, please check your internet connection and try again."
-msgstr ""
+msgstr "Es gab ein Problem bei der Aktualisierung deines Feeds. Bitte überprüfe deine Internetverbindung und versuche es erneut."
-#: src/view/screens/ProfileFeed.tsx:236
-#: src/view/screens/ProfileList.tsx:266
+#: src/view/screens/ProfileFeed.tsx:245
+#: src/view/screens/ProfileList.tsx:275
#: src/view/screens/SavedFeeds.tsx:209
#: src/view/screens/SavedFeeds.tsx:231
#: src/view/screens/SavedFeeds.tsx:252
msgid "There was an issue contacting the server"
-msgstr ""
+msgstr "Es gab ein Problem bei der Kontaktaufnahme mit dem Server"
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:57
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:66
-#: src/view/com/feeds/FeedSourceCard.tsx:113
-#: src/view/com/feeds/FeedSourceCard.tsx:127
-#: src/view/com/feeds/FeedSourceCard.tsx:181
+#: src/view/com/feeds/FeedSourceCard.tsx:110
+#: src/view/com/feeds/FeedSourceCard.tsx:123
msgid "There was an issue contacting your server"
-msgstr ""
+msgstr "Es gab ein Problem bei der Kontaktaufnahme mit deinem Server"
#: src/view/com/notifications/Feed.tsx:117
msgid "There was an issue fetching notifications. Tap here to try again."
-msgstr ""
+msgstr "Es gab ein Problem beim Abrufen von Mitteilungen. Tippe hier, um es erneut zu versuchen."
-#: src/view/com/posts/Feed.tsx:263
+#: src/view/com/posts/Feed.tsx:287
msgid "There was an issue fetching posts. Tap here to try again."
-msgstr ""
+msgstr "Es gab ein Problem beim Abrufen der Beiträge. Tippe hier, um es erneut zu versuchen."
#: src/view/com/lists/ListMembers.tsx:172
msgid "There was an issue fetching the list. Tap here to try again."
-msgstr ""
+msgstr "Es gab ein Problem beim Abrufen der Liste. Tippe hier, um es erneut zu versuchen."
#: src/view/com/feeds/ProfileFeedgens.tsx:148
#: src/view/com/lists/ProfileLists.tsx:155
msgid "There was an issue fetching your lists. Tap here to try again."
+msgstr "Es gab ein Problem beim Abrufen deiner Listen. Tippe hier, um es erneut zu versuchen."
+
+#: src/components/ReportDialog/SubmitView.tsx:83
+msgid "There was an issue sending your report. Please check your internet connection."
msgstr ""
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:63
-#: src/view/com/modals/ContentFilteringSettings.tsx:126
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:65
msgid "There was an issue syncing your preferences with the server"
-msgstr ""
+msgstr "Es gab ein Problem bei der Synchronisierung deiner Einstellungen mit dem Server"
-#: src/view/screens/AppPasswords.tsx:66
+#: src/view/screens/AppPasswords.tsx:68
msgid "There was an issue with fetching your app passwords"
-msgstr ""
-
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:93
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:105
-#: src/view/com/profile/ProfileHeader.tsx:156
-#: src/view/com/profile/ProfileHeader.tsx:177
-#: src/view/com/profile/ProfileHeader.tsx:216
-#: src/view/com/profile/ProfileHeader.tsx:229
-#: src/view/com/profile/ProfileHeader.tsx:249
-#: src/view/com/profile/ProfileHeader.tsx:271
+msgstr "Es gab ein Problem beim Abrufen deiner App-Passwörter"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:105
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:127
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:99
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:111
+#: src/view/com/profile/ProfileMenu.tsx:106
+#: src/view/com/profile/ProfileMenu.tsx:117
+#: src/view/com/profile/ProfileMenu.tsx:132
+#: src/view/com/profile/ProfileMenu.tsx:143
+#: src/view/com/profile/ProfileMenu.tsx:157
+#: src/view/com/profile/ProfileMenu.tsx:170
msgid "There was an issue! {0}"
-msgstr ""
+msgstr "Es gab ein Problem! {0}"
-#: src/view/screens/ProfileList.tsx:287
-#: src/view/screens/ProfileList.tsx:306
-#: src/view/screens/ProfileList.tsx:328
-#: src/view/screens/ProfileList.tsx:347
+#: src/view/screens/ProfileList.tsx:288
+#: src/view/screens/ProfileList.tsx:302
+#: src/view/screens/ProfileList.tsx:316
+#: src/view/screens/ProfileList.tsx:330
msgid "There was an issue. Please check your internet connection and try again."
-msgstr ""
+msgstr "Es ist ein Problem aufgetreten. Bitte überprüfe deine Internetverbindung und versuche es erneut."
-#: src/view/com/util/ErrorBoundary.tsx:36
+#: src/view/com/util/ErrorBoundary.tsx:51
msgid "There was an unexpected issue in the application. Please let us know if this happened to you!"
-msgstr ""
+msgstr "Es gab ein unerwartetes Problem in der Anwendung. Bitte teile uns mit, wenn dies bei dir der Fall ist!"
#: src/screens/Deactivated.tsx:106
msgid "There's been a rush of new users to Bluesky! We'll activate your account as soon as we can."
-msgstr ""
-
-#: src/view/com/auth/create/Step2.tsx:55
-msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
-msgstr ""
+msgstr "Es gab einen Ansturm neuer Nutzer auf Bluesky! Wir werden dein Konto so schnell wie möglich aktivieren."
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:138
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:146
msgid "These are popular accounts you might like:"
-msgstr ""
+msgstr "Dies sind beliebte Konten, die dir gefallen könnten:"
-#: src/view/com/util/moderation/ScreenHider.tsx:88
+#: src/components/moderation/ScreenHider.tsx:116
msgid "This {screenDescription} has been flagged:"
-msgstr ""
+msgstr "Diese {screenDescription} wurde gekennzeichnet:"
-#: src/view/com/util/moderation/ScreenHider.tsx:83
+#: src/components/moderation/ScreenHider.tsx:111
msgid "This account has requested that users sign in to view their profile."
+msgstr "Dieses Konto hat die Benutzer aufgefordert, sich anzumelden, um dein Profil zu sehen."
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:204
+msgid "This appeal will be sent to <0>{0}0>."
msgstr ""
-#: src/view/com/modals/EmbedConsent.tsx:68
-msgid "This content is hosted by {0}. Do you want to enable external media?"
+#: src/lib/moderation/useGlobalLabelStrings.ts:19
+msgid "This content has been hidden by the moderators."
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:67
-msgid "This content is not available because one of the users involved has blocked the other."
+#: src/lib/moderation/useGlobalLabelStrings.ts:24
+msgid "This content has received a general warning from moderators."
msgstr ""
+#: src/components/dialogs/EmbedConsent.tsx:64
+msgid "This content is hosted by {0}. Do you want to enable external media?"
+msgstr "Dieser Inhalt wird von {0} gehostet. Möchtest du externe Medien aktivieren?"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:77
+#: src/lib/moderation/useModerationCauseDescription.ts:77
+msgid "This content is not available because one of the users involved has blocked the other."
+msgstr "Dieser Inhalt ist nicht verfügbar, weil einer der beteiligten Nutzer den anderen blockiert hat."
+
#: src/view/com/posts/FeedErrorMessage.tsx:108
msgid "This content is not viewable without a Bluesky account."
msgstr "Dieser Inhalt ist ohne ein Bluesky-Konto nicht sichtbar."
#: src/view/screens/Settings/ExportCarDialog.tsx:75
-msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
+#~ msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
+#~ msgstr "Diese Funktion befindet sich in der Beta-Phase. Du kannst mehr über Kontodepot-Exporte in <0>diesem Blogpost lesen.0>"
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:75
+msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost0>."
msgstr ""
#: src/view/com/posts/FeedErrorMessage.tsx:114
msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later."
msgstr "Dieser Feed wird derzeit stark frequentiert und ist vorübergehend nicht verfügbar. Bitte versuche es später erneut."
-#: src/view/screens/Profile.tsx:420
-#: src/view/screens/ProfileFeed.tsx:475
-#: src/view/screens/ProfileList.tsx:660
+#: src/screens/Profile/Sections/Feed.tsx:50
+#: src/view/screens/ProfileFeed.tsx:477
+#: src/view/screens/ProfileList.tsx:675
msgid "This feed is empty!"
-msgstr ""
+msgstr "Dieser Feed ist leer!"
#: src/view/com/posts/CustomFeedEmptyState.tsx:37
msgid "This feed is empty! You may need to follow more users or tune your language settings."
-msgstr ""
+msgstr "Dieser Feed ist leer! Möglicherweise musst du mehr Benutzern folgen oder deine Spracheinstellungen anpassen."
-#: src/view/com/modals/BirthDateSettings.tsx:61
+#: src/components/dialogs/BirthDateSettings.tsx:41
msgid "This information is not shared with other users."
msgstr "Diese Informationen werden nicht an andere Nutzer weitergegeben."
@@ -3973,70 +4882,141 @@ msgstr "Diese Informationen werden nicht an andere Nutzer weitergegeben."
msgid "This is important in case you ever need to change your email or reset your password."
msgstr "Das ist wichtig für den Fall, dass du mal deine E-Mail ändern oder dein Passwort zurücksetzen musst."
-#: src/view/com/modals/LinkWarning.tsx:58
+#: src/components/moderation/ModerationDetailsDialog.tsx:124
+msgid "This label was applied by {0}."
+msgstr ""
+
+#: src/screens/Profile/Sections/Labels.tsx:167
+msgid "This labeler hasn't declared what labels it publishes, and may not be active."
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:72
msgid "This link is taking you to the following website:"
msgstr "Dieser Link führt dich auf die folgende Website:"
-#: src/view/screens/ProfileList.tsx:834
+#: src/view/screens/ProfileList.tsx:853
msgid "This list is empty!"
+msgstr "Diese Liste ist leer!"
+
+#: src/screens/Profile/ErrorState.tsx:40
+msgid "This moderation service is unavailable. See below for more details. If this issue persists, contact us."
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:106
+#: src/view/com/modals/AddAppPasswords.tsx:107
msgid "This name is already in use"
-msgstr ""
+msgstr "Dieser Name ist bereits in Gebrauch"
-#: src/view/com/post-thread/PostThreadItem.tsx:122
+#: src/view/com/post-thread/PostThreadItem.tsx:125
msgid "This post has been deleted."
msgstr "Dieser Beitrag wurde gelöscht."
-#: src/view/com/modals/ModerationDetails.tsx:62
+#: src/view/com/util/forms/PostDropdownBtn.tsx:344
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:248
+msgid "This post is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:326
+msgid "This post will be hidden from feeds."
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:370
+msgid "This profile is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/Policies.tsx:37
+msgid "This service has not provided terms of service or a privacy policy."
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:445
+msgid "This should create a domain record at:"
+msgstr ""
+
+#: src/view/com/profile/ProfileFollowers.tsx:87
+msgid "This user doesn't have any followers."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:72
+#: src/lib/moderation/useModerationCauseDescription.ts:68
msgid "This user has blocked you. You cannot view their content."
+msgstr "Dieser Benutzer hat dich blockiert. Du kannst deren Inhalte nicht sehen."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:30
+msgid "This user has requested that their content only be shown to signed-in users."
msgstr ""
#: src/view/com/modals/ModerationDetails.tsx:42
-msgid "This user is included in the <0/> list which you have blocked."
-msgstr ""
+#~ msgid "This user is included in the <0/> list which you have blocked."
+#~ msgstr "Dieser Benutzer ist in der Liste <0/> enthalten, die du blockiert hast."
#: src/view/com/modals/ModerationDetails.tsx:74
-msgid "This user is included in the <0/> list which you have muted."
+#~ msgid "This user is included in the <0/> list which you have muted."
+#~ msgstr "Dieser Benutzer ist in der Liste <0/> enthalten, die du stummgeschaltet haben."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:55
+msgid "This user is included in the <0>{0}0> list which you have blocked."
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:74
-#~ msgid "This user is included the <0/> list which you have muted."
-#~ msgstr ""
+#: src/components/moderation/ModerationDetailsDialog.tsx:84
+msgid "This user is included in the <0>{0}0> list which you have muted."
+msgstr ""
+
+#: src/view/com/profile/ProfileFollows.tsx:87
+msgid "This user isn't following anyone."
+msgstr ""
#: src/view/com/modals/SelfLabel.tsx:137
msgid "This warning is only available for posts with media attached."
msgstr "Diese Warnung ist nur für Beiträge mit angehängten Medien verfügbar."
-#: src/view/com/util/forms/PostDropdownBtn.tsx:192
-msgid "This will hide this post from your feeds."
-msgstr "Dadurch wird dieser Beitrag aus deinen Feeds ausgeblendet."
+#: src/components/dialogs/MutedWords.tsx:283
+msgid "This will delete {0} from your muted words. You can always add it back later."
+msgstr "Dies wird {0} aus deinen stummgeschalteten Wörtern löschen. Du kannst es später jederzeit wieder hinzufügen."
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:282
+#~ msgid "This will hide this post from your feeds."
+#~ msgstr "Dadurch wird dieser Beitrag aus deinen Feeds ausgeblendet."
+
+#: src/view/screens/Settings/index.tsx:574
+msgid "Thread preferences"
+msgstr ""
#: src/view/screens/PreferencesThreads.tsx:53
-#: src/view/screens/Settings/index.tsx:565
+#: src/view/screens/Settings/index.tsx:584
msgid "Thread Preferences"
msgstr "Thread-Einstellungen"
#: src/view/screens/PreferencesThreads.tsx:119
msgid "Threaded Mode"
-msgstr ""
+msgstr "Gewindemodus"
-#: src/Navigation.tsx:252
+#: src/Navigation.tsx:269
msgid "Threads Preferences"
+msgstr "Thread-Einstellungen"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:33
+msgid "To whom would you like to send this report?"
msgstr ""
+#: src/components/dialogs/MutedWords.tsx:112
+msgid "Toggle between muted word options."
+msgstr "Zwischen den Optionen für stummgeschaltete Wörter wechseln."
+
#: src/view/com/util/forms/DropdownButton.tsx:246
msgid "Toggle dropdown"
+msgstr "Dieses Dropdown umschalten"
+
+#: src/screens/Moderation/index.tsx:332
+msgid "Toggle to enable or disable adult content"
msgstr ""
-#: src/view/com/modals/EditImage.tsx:271
+#: src/view/com/modals/EditImage.tsx:272
msgid "Transformations"
-msgstr ""
+msgstr "Verwandlungen"
-#: src/view/com/post-thread/PostThreadItem.tsx:686
-#: src/view/com/post-thread/PostThreadItem.tsx:688
-#: src/view/com/util/forms/PostDropdownBtn.tsx:125
+#: src/view/com/post-thread/PostThreadItem.tsx:644
+#: src/view/com/post-thread/PostThreadItem.tsx:646
+#: src/view/com/util/forms/PostDropdownBtn.tsx:212
+#: src/view/com/util/forms/PostDropdownBtn.tsx:214
msgid "Translate"
msgstr "Übersetzen"
@@ -4045,182 +5025,273 @@ msgctxt "action"
msgid "Try again"
msgstr "Erneut versuchen"
-#: src/view/screens/ProfileList.tsx:505
-msgid "Un-block list"
+#: src/view/com/modals/ChangeHandle.tsx:428
+msgid "Type:"
msgstr ""
-#: src/view/screens/ProfileList.tsx:490
+#: src/view/screens/ProfileList.tsx:478
+msgid "Un-block list"
+msgstr "Liste entblocken"
+
+#: src/view/screens/ProfileList.tsx:461
msgid "Un-mute list"
-msgstr ""
+msgstr "Stummschaltung von Liste aufheben"
-#: src/view/com/auth/create/CreateAccount.tsx:66
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:87
-#: src/view/com/auth/login/Login.tsx:76
-#: src/view/com/auth/login/LoginForm.tsx:118
+#: src/screens/Login/ForgotPasswordForm.tsx:74
+#: src/screens/Login/index.tsx:78
+#: src/screens/Login/LoginForm.tsx:119
+#: src/screens/Login/SetNewPasswordForm.tsx:77
+#: src/screens/Signup/index.tsx:63
#: src/view/com/modals/ChangePassword.tsx:70
msgid "Unable to contact your service. Please check your Internet connection."
-msgstr ""
+msgstr "Es ist uns nicht gelungen, deinen Dienst zu kontaktieren. Bitte überprüfe deine Internetverbindung."
-#: src/view/com/profile/ProfileHeader.tsx:432
-#: src/view/screens/ProfileList.tsx:589
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:181
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+#: src/view/screens/ProfileList.tsx:572
msgid "Unblock"
-msgstr ""
+msgstr "Entblocken"
-#: src/view/com/profile/ProfileHeader.tsx:435
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:186
msgctxt "action"
msgid "Unblock"
-msgstr ""
+msgstr "Entblocken"
-#: src/view/com/profile/ProfileHeader.tsx:260
-#: src/view/com/profile/ProfileHeader.tsx:344
+#: src/view/com/profile/ProfileMenu.tsx:299
+#: src/view/com/profile/ProfileMenu.tsx:305
msgid "Unblock Account"
+msgstr "Konto entblocken"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:281
+#: src/view/com/profile/ProfileMenu.tsx:343
+msgid "Unblock Account?"
msgstr ""
-#: src/view/com/modals/Repost.tsx:42
-#: src/view/com/modals/Repost.tsx:55
+#: src/view/com/modals/Repost.tsx:43
+#: src/view/com/modals/Repost.tsx:56
#: src/view/com/util/post-ctrls/RepostButton.tsx:60
#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
msgid "Undo repost"
msgstr "Repost rückgängig machen"
-#: src/view/com/profile/FollowButton.tsx:55
-msgctxt "action"
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
msgid "Unfollow"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:484
+#: src/view/com/profile/FollowButton.tsx:60
+msgctxt "action"
+msgid "Unfollow"
+msgstr "Nicht mehr folgen"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:220
msgid "Unfollow {0}"
+msgstr "{0} nicht mehr folgen"
+
+#: src/view/com/profile/ProfileMenu.tsx:241
+#: src/view/com/profile/ProfileMenu.tsx:251
+msgid "Unfollow Account"
msgstr ""
-#: src/view/com/auth/create/state.ts:300
-msgid "Unfortunately, you do not meet the requirements to create an account."
-msgstr "Leider erfüllst du nicht die Voraussetzungen, um einen Account zu erstellen."
+#: src/view/com/auth/create/state.ts:262
+#~ msgid "Unfortunately, you do not meet the requirements to create an account."
+#~ msgstr "Leider erfüllst du nicht die Voraussetzungen, um einen Account zu erstellen."
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Unlike"
+msgstr "Like aufheben"
+
+#: src/view/screens/ProfileFeed.tsx:573
+msgid "Unlike this feed"
msgstr ""
-#: src/view/screens/ProfileList.tsx:596
+#: src/components/TagMenu/index.tsx:249
+#: src/view/screens/ProfileList.tsx:579
msgid "Unmute"
-msgstr ""
+msgstr "Stummschaltung aufheben"
+
+#: src/components/TagMenu/index.web.tsx:104
+msgid "Unmute {truncatedTag}"
+msgstr "Stummschaltung von {truncatedTag} aufheben"
-#: src/view/com/profile/ProfileHeader.tsx:325
+#: src/view/com/profile/ProfileMenu.tsx:278
+#: src/view/com/profile/ProfileMenu.tsx:284
msgid "Unmute Account"
-msgstr ""
+msgstr "Stummschaltung von Konto aufheben"
+
+#: src/components/TagMenu/index.tsx:208
+msgid "Unmute all {displayTag} posts"
+msgstr "Stummschaltung aller {displayTag}-Beiträge aufheben"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:256
msgid "Unmute thread"
-msgstr ""
+msgstr "Stummschaltung von Thread aufheben"
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:295
+#: src/view/screens/ProfileList.tsx:563
msgid "Unpin"
+msgstr "Anheften aufheben"
+
+#: src/view/screens/ProfileFeed.tsx:292
+msgid "Unpin from home"
msgstr ""
-#: src/view/screens/ProfileList.tsx:473
+#: src/view/screens/ProfileList.tsx:444
msgid "Unpin moderation list"
+msgstr "Anheften der Moderationsliste aufheben"
+
+#: src/view/screens/ProfileFeed.tsx:346
+#~ msgid "Unsave"
+#~ msgstr "Speicherung aufheben"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:219
+msgid "Unsubscribe"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:183
+msgid "Unsubscribe from this labeler"
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:345
-msgid "Unsave"
+#: src/lib/moderation/useReportOptions.ts:70
+msgid "Unwanted Sexual Content"
msgstr ""
#: src/view/com/modals/UserAddRemoveLists.tsx:70
msgid "Update {displayName} in Lists"
-msgstr ""
+msgstr "{displayName} in Listen aktualisieren"
#: src/lib/hooks/useOTAUpdate.ts:15
-msgid "Update Available"
-msgstr "Update verfügbar"
+#~ msgid "Update Available"
+#~ msgstr "Update verfügbar"
+
+#: src/view/com/modals/ChangeHandle.tsx:508
+msgid "Update to {handle}"
+msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:204
+#: src/screens/Login/SetNewPasswordForm.tsx:186
msgid "Updating..."
msgstr "Aktualisieren..."
-#: src/view/com/modals/ChangeHandle.tsx:455
+#: src/view/com/modals/ChangeHandle.tsx:454
msgid "Upload a text file to:"
+msgstr "Hochladen einer Textdatei auf:"
+
+#: src/view/com/util/UserAvatar.tsx:326
+#: src/view/com/util/UserAvatar.tsx:329
+#: src/view/com/util/UserBanner.tsx:116
+#: src/view/com/util/UserBanner.tsx:119
+msgid "Upload from Camera"
+msgstr ""
+
+#: src/view/com/util/UserAvatar.tsx:343
+#: src/view/com/util/UserBanner.tsx:133
+msgid "Upload from Files"
+msgstr ""
+
+#: src/view/com/util/UserAvatar.tsx:337
+#: src/view/com/util/UserAvatar.tsx:341
+#: src/view/com/util/UserBanner.tsx:127
+#: src/view/com/util/UserBanner.tsx:131
+msgid "Upload from Library"
msgstr ""
-#: src/view/screens/AppPasswords.tsx:195
+#: src/view/com/modals/ChangeHandle.tsx:408
+msgid "Use a file on your server"
+msgstr ""
+
+#: src/view/screens/AppPasswords.tsx:197
msgid "Use app passwords to login to other Bluesky clients without giving full access to your account or password."
msgstr "Verwende App-Passwörter, um dich bei anderen Bluesky-Clients anzumelden, ohne dass du vollen Zugriff auf deinen Account oder Passwort hast."
-#: src/view/com/modals/ChangeHandle.tsx:515
+#: src/view/com/modals/ChangeHandle.tsx:517
+msgid "Use bsky.social as hosting provider"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:516
msgid "Use default provider"
msgstr "Standardanbieter verwenden"
#: src/view/com/modals/InAppBrowserConsent.tsx:56
#: src/view/com/modals/InAppBrowserConsent.tsx:58
msgid "Use in-app browser"
-msgstr ""
+msgstr "In-App-Browser verwenden"
#: src/view/com/modals/InAppBrowserConsent.tsx:66
#: src/view/com/modals/InAppBrowserConsent.tsx:68
msgid "Use my default browser"
+msgstr "Meinen Standardbrowser verwenden"
+
+#: src/view/com/modals/ChangeHandle.tsx:400
+msgid "Use the DNS panel"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:155
+#: src/view/com/modals/AddAppPasswords.tsx:156
msgid "Use this to sign into the other app along with your handle."
msgstr "Verwenden dies, um dich mit deinem Handle bei der anderen App einzuloggen."
-#: src/view/com/modals/ServerInput.tsx:105
-#~ msgid "Use your domain as your Bluesky client service provider"
-#~ msgstr ""
-
-#: src/view/com/modals/InviteCodes.tsx:200
+#: src/view/com/modals/InviteCodes.tsx:201
msgid "Used by:"
msgstr "Verwendet von:"
-#: src/view/com/modals/ModerationDetails.tsx:54
+#: src/components/moderation/ModerationDetailsDialog.tsx:64
+#: src/lib/moderation/useModerationCauseDescription.ts:56
msgid "User Blocked"
+msgstr "Benutzer blockiert"
+
+#: src/lib/moderation/useModerationCauseDescription.ts:48
+msgid "User Blocked by \"{0}\""
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:40
+#: src/components/moderation/ModerationDetailsDialog.tsx:53
msgid "User Blocked by List"
+msgstr "Benutzer durch der Liste blockiert"
+
+#: src/lib/moderation/useModerationCauseDescription.ts:66
+msgid "User Blocking You"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:60
+#: src/components/moderation/ModerationDetailsDialog.tsx:70
msgid "User Blocks You"
-msgstr ""
+msgstr "Benutzer blockiert dich"
-#: src/view/com/auth/create/Step3.tsx:41
-msgid "User handle"
-msgstr "Benutzerhandle"
+#: src/view/com/auth/create/Step2.tsx:79
+#~ msgid "User handle"
+#~ msgstr "Benutzerhandle"
-#: src/view/com/lists/ListCard.tsx:84
+#: src/view/com/lists/ListCard.tsx:85
#: src/view/com/modals/UserAddRemoveLists.tsx:198
msgid "User list by {0}"
-msgstr ""
+msgstr "Benutzerliste von {0}"
-#: src/view/screens/ProfileList.tsx:762
+#: src/view/screens/ProfileList.tsx:777
msgid "User list by <0/>"
-msgstr ""
+msgstr "Benutzerliste von <0/>"
-#: src/view/com/lists/ListCard.tsx:82
+#: src/view/com/lists/ListCard.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:196
-#: src/view/screens/ProfileList.tsx:760
+#: src/view/screens/ProfileList.tsx:775
msgid "User list by you"
-msgstr ""
+msgstr "Benutzerliste von dir"
-#: src/view/com/modals/CreateOrEditList.tsx:196
+#: src/view/com/modals/CreateOrEditList.tsx:197
msgid "User list created"
-msgstr ""
+msgstr "Benutzerliste erstellt"
-#: src/view/com/modals/CreateOrEditList.tsx:182
+#: src/view/com/modals/CreateOrEditList.tsx:183
msgid "User list updated"
-msgstr ""
+msgstr "Benutzerliste aktualisiert"
#: src/view/screens/Lists.tsx:58
msgid "User Lists"
msgstr "Benutzerlisten"
-#: src/view/com/auth/login/LoginForm.tsx:177
-#: src/view/com/auth/login/LoginForm.tsx:195
+#: src/screens/Login/LoginForm.tsx:151
msgid "Username or email address"
msgstr "Benutzername oder E-Mail-Adresse"
-#: src/view/screens/ProfileList.tsx:796
+#: src/view/screens/ProfileList.tsx:811
msgid "Users"
msgstr "Benutzer"
@@ -4230,21 +5301,29 @@ msgstr "Nutzer gefolgt von <0/>"
#: src/view/com/modals/Threadgate.tsx:106
msgid "Users in \"{0}\""
+msgstr "Benutzer in \"{0}\""
+
+#: src/components/LikesDialog.tsx:85
+msgid "Users that have liked this content or profile"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:436
+msgid "Value:"
msgstr ""
-#: src/view/com/auth/create/Step2.tsx:243
-msgid "Verification code"
+#: src/view/com/modals/ChangeHandle.tsx:509
+msgid "Verify {0}"
msgstr ""
-#: src/view/screens/Settings/index.tsx:910
+#: src/view/screens/Settings/index.tsx:942
msgid "Verify email"
msgstr "E-Mail bestätigen"
-#: src/view/screens/Settings/index.tsx:935
+#: src/view/screens/Settings/index.tsx:967
msgid "Verify my email"
msgstr "Meine E-Mail bestätigen"
-#: src/view/screens/Settings/index.tsx:944
+#: src/view/screens/Settings/index.tsx:976
msgid "Verify My Email"
msgstr "Meine E-Mail bestätigen"
@@ -4255,111 +5334,168 @@ msgstr "Neue E-Mail bestätigen"
#: src/view/com/modals/VerifyEmail.tsx:103
msgid "Verify Your Email"
+msgstr "Überprüfe deine E-Mail"
+
+#: src/view/screens/Settings/index.tsx:893
+msgid "Version {0}"
msgstr ""
#: src/screens/Onboarding/index.tsx:42
msgid "Video Games"
-msgstr ""
+msgstr "Videospiele"
-#: src/view/com/profile/ProfileHeader.tsx:661
+#: src/screens/Profile/Header/Shell.tsx:107
msgid "View {0}'s avatar"
-msgstr ""
+msgstr "Avatar {0} ansehen"
#: src/view/screens/Log.tsx:52
msgid "View debug entry"
msgstr "Debug-Eintrag anzeigen"
-#: src/view/com/posts/FeedSlice.tsx:103
+#: src/components/ReportDialog/SelectReportOptionView.tsx:131
+msgid "View details"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:126
+msgid "View details for reporting a copyright violation"
+msgstr ""
+
+#: src/view/com/posts/FeedSlice.tsx:99
msgid "View full thread"
+msgstr "Vollständigen Thread ansehen"
+
+#: src/components/moderation/LabelsOnMe.tsx:51
+msgid "View information about these labels"
msgstr ""
-#: src/view/com/posts/FeedErrorMessage.tsx:172
+#: src/view/com/posts/FeedErrorMessage.tsx:166
msgid "View profile"
-msgstr ""
+msgstr "Profil ansehen"
#: src/view/com/profile/ProfileSubpageHeader.tsx:128
msgid "View the avatar"
msgstr "Avatar ansehen"
-#: src/view/com/modals/LinkWarning.tsx:75
+#: src/components/LabelingServiceCard/index.tsx:140
+msgid "View the labeling service provided by @{0}"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:585
+msgid "View users who like this feed"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
msgid "Visit Site"
msgstr "Seite ansehen"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:42
-#: src/view/com/modals/ContentFilteringSettings.tsx:259
+#: src/components/moderation/LabelPreference.tsx:135
+#: src/lib/moderation/useLabelBehaviorDescription.ts:17
+#: src/lib/moderation/useLabelBehaviorDescription.ts:22
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:53
msgid "Warn"
+msgstr "Warnen"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:48
+msgid "Warn content"
msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:134
-msgid "We also think you'll like \"For You\" by Skygaze:"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:46
+msgid "Warn content and filter from feeds"
msgstr ""
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:134
+#~ msgid "We also think you'll like \"For You\" by Skygaze:"
+#~ msgstr "Wir glauben auch, dass dir \"For You\" von Skygaze gefallen wird:"
+
+#: src/screens/Hashtag.tsx:133
+msgid "We couldn't find any results for that hashtag."
+msgstr "Wir konnten keine Ergebnisse für diesen Hashtag finden."
+
#: src/screens/Deactivated.tsx:133
msgid "We estimate {estimatedTime} until your account is ready."
-msgstr ""
+msgstr "Wir schätzen {estimatedTime} bis dein Konto bereit ist."
-#: src/screens/Onboarding/StepFinished.tsx:93
+#: src/screens/Onboarding/StepFinished.tsx:97
msgid "We hope you have a wonderful time. Remember, Bluesky is:"
-msgstr ""
+msgstr "Wir hoffen, dass du eine schöne Zeit hast. Denke daran, Bluesky ist:"
#: src/view/com/posts/DiscoverFallbackHeader.tsx:29
msgid "We ran out of posts from your follows. Here's the latest from <0/>."
-msgstr ""
+msgstr "Wir haben keine Beiträge mehr von den Konten, denen du folgst. Hier ist das Neueste von <0/>."
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:118
-#~ msgid "We recommend \"For You\" by Skygaze:"
-#~ msgstr ""
+#: src/components/dialogs/MutedWords.tsx:203
+msgid "We recommend avoiding common words that appear in many posts, since it can result in no posts being shown."
+msgstr "Wir empfehlen, gebräuchliche Wörter zu vermeiden, die in vielen Beiträgen vorkommen, da dies dazu führen kann, dass keine Beiträge angezeigt werden."
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:124
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:125
msgid "We recommend our \"Discover\" feed:"
+msgstr "Wir empfehlen unser \"Discover\" Feed:"
+
+#: src/components/dialogs/BirthDateSettings.tsx:52
+msgid "We were unable to load your birth date preferences. Please try again."
msgstr ""
-#: src/screens/Onboarding/StepInterests/index.tsx:133
-msgid "We weren't able to connect. Please try again to continue setting up your account. If it continues to fail, you can skip this flow."
+#: src/screens/Moderation/index.tsx:385
+msgid "We were unable to load your configured labelers at this time."
msgstr ""
+#: src/screens/Onboarding/StepInterests/index.tsx:137
+msgid "We weren't able to connect. Please try again to continue setting up your account. If it continues to fail, you can skip this flow."
+msgstr "Die Verbindung konnte nicht hergestellt werden. Bitte versuche es erneut, um mit der Einrichtung deines Kontos fortzufahren. Wenn der Versuch weiterhin fehlschlägt, kannst du diesen Schritt überspringen."
+
#: src/screens/Deactivated.tsx:137
msgid "We will let you know when your account is ready."
-msgstr ""
+msgstr "Wir werden dich benachrichtigen, wenn dein Konto bereit ist."
#: src/view/com/modals/AppealLabel.tsx:48
-msgid "We'll look into your appeal promptly."
-msgstr ""
+#~ msgid "We'll look into your appeal promptly."
+#~ msgstr "Wir werden deinen Widerspruch unverzüglich prüfen."
-#: src/screens/Onboarding/StepInterests/index.tsx:138
+#: src/screens/Onboarding/StepInterests/index.tsx:142
msgid "We'll use this to help customize your experience."
-msgstr ""
+msgstr "Wir verwenden diese Informationen, um dein Erlebnis individuell zu gestalten."
-#: src/view/com/auth/create/CreateAccount.tsx:123
+#: src/screens/Signup/index.tsx:130
msgid "We're so excited to have you join us!"
msgstr "Wir freuen uns sehr, dass du dabei bist!"
-#: src/view/screens/ProfileList.tsx:85
+#: src/view/screens/ProfileList.tsx:89
msgid "We're sorry, but we were unable to resolve this list. If this persists, please contact the list creator, @{handleOrDid}."
-msgstr ""
+msgstr "Es tut uns leid, aber wir waren nicht in der Lage, diese Liste aufzulösen. Wenn das Problem weiterhin besteht, kontaktiere bitte den Ersteller der Liste, @{handleOrDid}."
+
+#: src/components/dialogs/MutedWords.tsx:229
+msgid "We're sorry, but we weren't able to load your muted words at this time. Please try again."
+msgstr "Es tut uns leid, aber wir konnten deine stummgeschalteten Wörter nicht laden. Bitte versuche es erneut."
-#: src/view/screens/Search/Search.tsx:253
+#: src/view/screens/Search/Search.tsx:256
msgid "We're sorry, but your search could not be completed. Please try again in a few minutes."
msgstr "Es tut uns leid, aber deine Suche konnte nicht abgeschlossen werden. Bitte versuche es in ein paar Minuten erneut."
+#: src/components/Lists.tsx:188
#: src/view/screens/NotFound.tsx:48
msgid "We're sorry! We can't find the page you were looking for."
msgstr "Es tut uns leid! Wir können die Seite, nach der du gesucht hast, nicht finden."
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:46
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:321
+msgid "We're sorry! You can only subscribe to ten labelers, and you've reached your limit of ten."
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:48
msgid "Welcome to <0>Bluesky0>"
msgstr "Willkommen bei <0>Bluesky0>"
-#: src/screens/Onboarding/StepInterests/index.tsx:130
+#: src/screens/Onboarding/StepInterests/index.tsx:134
msgid "What are your interests?"
-msgstr ""
+msgstr "Was sind deine Interessen?"
#: src/view/com/modals/report/Modal.tsx:169
-msgid "What is the issue with this {collectionName}?"
-msgstr ""
+#~ msgid "What is the issue with this {collectionName}?"
+#~ msgstr "Was ist das Problem mit diesem {collectionName}?"
-#: src/view/com/auth/SplashScreen.tsx:34
-#: src/view/com/composer/Composer.tsx:279
+#: src/view/com/auth/SplashScreen.tsx:58
+#: src/view/com/auth/SplashScreen.web.tsx:84
+#: src/view/com/composer/Composer.tsx:296
msgid "What's up?"
msgstr "Was gibt's?"
@@ -4376,64 +5512,80 @@ msgstr "Welche Sprachen würdest du gerne in deinen algorithmischen Feeds sehen?
msgid "Who can reply"
msgstr "Wer antworten kann"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:102
+#: src/components/ReportDialog/SelectReportOptionView.tsx:43
+msgid "Why should this content be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:56
+msgid "Why should this feed be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:53
+msgid "Why should this list be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:50
+msgid "Why should this post be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:47
+msgid "Why should this user be reviewed?"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:103
msgid "Wide"
msgstr "Breit"
-#: src/view/com/composer/Composer.tsx:415
+#: src/view/com/composer/Composer.tsx:436
msgid "Write post"
msgstr "Beitrag verfassen"
-#: src/view/com/composer/Composer.tsx:278
-#: src/view/com/composer/Prompt.tsx:33
+#: src/view/com/composer/Composer.tsx:295
+#: src/view/com/composer/Prompt.tsx:37
msgid "Write your reply"
msgstr "Schreibe deine Antwort"
#: src/screens/Onboarding/index.tsx:28
msgid "Writers"
-msgstr ""
-
-#: src/view/com/auth/create/Step2.tsx:263
-msgid "XXXXXX"
-msgstr ""
+msgstr "Schriftsteller"
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:77
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:201
-#: src/view/screens/PreferencesHomeFeed.tsx:236
-#: src/view/screens/PreferencesHomeFeed.tsx:271
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:201
+#: src/view/screens/PreferencesFollowingFeed.tsx:236
+#: src/view/screens/PreferencesFollowingFeed.tsx:271
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "Yes"
msgstr "Ja"
-#: src/screens/Onboarding/StepModeration/index.tsx:46
-#~ msgid "You are in control"
-#~ msgstr ""
-
#: src/screens/Deactivated.tsx:130
msgid "You are in line."
+msgstr "Du befindest dich in der Warteschlange."
+
+#: src/view/com/profile/ProfileFollows.tsx:86
+msgid "You are not following anyone."
msgstr ""
#: src/view/com/posts/FollowingEmptyState.tsx:67
#: src/view/com/posts/FollowingEndOfFeed.tsx:68
msgid "You can also discover new Custom Feeds to follow."
-msgstr ""
-
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:123
-#~ msgid "You can also try our \"Discover\" algorithm:"
-#~ msgstr ""
+msgstr "Du kannst auch neue benutzerdefinierte Feeds entdecken und ihnen folgen."
-#: src/screens/Onboarding/StepFollowingFeed.tsx:142
+#: src/screens/Onboarding/StepFollowingFeed.tsx:143
msgid "You can change these settings later."
-msgstr ""
+msgstr "Du kannst diese Einstellungen später ändern."
-#: src/view/com/auth/login/Login.tsx:158
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:31
+#: src/screens/Login/index.tsx:158
+#: src/screens/Login/PasswordUpdatedForm.tsx:33
msgid "You can now sign in with your new password."
msgstr "Du kannst dich jetzt mit deinem neuen Passwort anmelden."
-#: src/view/com/modals/InviteCodes.tsx:66
+#: src/view/com/profile/ProfileFollowers.tsx:86
+msgid "You do not have any followers."
+msgstr ""
+
+#: src/view/com/modals/InviteCodes.tsx:67
msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer."
msgstr "Du hast noch keine Einladungscodes! Wir schicken dir welche, wenn du schon etwas länger bei Bluesky bist."
@@ -4441,7 +5593,7 @@ msgstr "Du hast noch keine Einladungscodes! Wir schicken dir welche, wenn du sch
msgid "You don't have any pinned feeds."
msgstr "Du hast keine angehefteten Feeds."
-#: src/view/screens/Feeds.tsx:451
+#: src/view/screens/Feeds.tsx:452
msgid "You don't have any saved feeds!"
msgstr "Du hast keine gespeicherten Feeds!"
@@ -4449,25 +5601,44 @@ msgstr "Du hast keine gespeicherten Feeds!"
msgid "You don't have any saved feeds."
msgstr "Du hast keine gespeicherten Feeds."
-#: src/view/com/post-thread/PostThread.tsx:401
+#: src/view/com/post-thread/PostThread.tsx:159
msgid "You have blocked the author or you have been blocked by the author."
msgstr "Du hast den Verfasser blockiert oder du wurdest vom Verfasser blockiert."
-#: src/view/com/modals/ModerationDetails.tsx:56
+#: src/components/moderation/ModerationDetailsDialog.tsx:66
+#: src/lib/moderation/useModerationCauseDescription.ts:50
+#: src/lib/moderation/useModerationCauseDescription.ts:58
msgid "You have blocked this user. You cannot view their content."
-msgstr ""
+msgstr "Du hast diesen Benutzer blockiert und kannst seine Inhalte nicht sehen."
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:57
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:92
+#: src/screens/Login/SetNewPasswordForm.tsx:54
+#: src/screens/Login/SetNewPasswordForm.tsx:91
#: src/view/com/modals/ChangePassword.tsx:87
#: src/view/com/modals/ChangePassword.tsx:121
msgid "You have entered an invalid code. It should look like XXXXX-XXXXX."
+msgstr "Du hast einen ungültigen Code eingegeben. Er sollte wie XXXXX-XXXXX aussehen."
+
+#: src/lib/moderation/useModerationCauseDescription.ts:109
+msgid "You have hidden this post"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:87
-msgid "You have muted this user."
+#: src/components/moderation/ModerationDetailsDialog.tsx:101
+msgid "You have hidden this post."
msgstr ""
+#: src/components/moderation/ModerationDetailsDialog.tsx:94
+#: src/lib/moderation/useModerationCauseDescription.ts:92
+msgid "You have muted this account."
+msgstr ""
+
+#: src/lib/moderation/useModerationCauseDescription.ts:86
+msgid "You have muted this user"
+msgstr ""
+
+#: src/view/com/modals/ModerationDetails.tsx:87
+#~ msgid "You have muted this user."
+#~ msgstr "Du hast diesen Benutzer stummgeschaltet."
+
#: src/view/com/feeds/ProfileFeedgens.tsx:136
msgid "You have no feeds."
msgstr "Du hast keine Feeds."
@@ -4478,89 +5649,114 @@ msgid "You have no lists."
msgstr "Du hast keine Listen."
#: src/view/screens/ModerationBlockedAccounts.tsx:132
-msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
+msgid "You have not blocked any accounts yet. To block an account, go to their profile and select \"Block account\" from the menu on their account."
msgstr ""
-#: src/view/screens/AppPasswords.tsx:87
+#: src/view/screens/ModerationBlockedAccounts.tsx:132
+#~ msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
+#~ msgstr "Du hast noch keine Konten blockiert. Um ein Konto zu blockieren, gehe auf dessen Profil und wähle \"Konto blockieren\" aus dem Menü des Kontos aus."
+
+#: src/view/screens/AppPasswords.tsx:89
msgid "You have not created any app passwords yet. You can create one by pressing the button below."
msgstr "Du hast noch keine App-Passwörter erstellt. Du kannst eines erstellen, indem du auf die Schaltfläche unten klickst."
#: src/view/screens/ModerationMutedAccounts.tsx:131
-msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
+msgid "You have not muted any accounts yet. To mute an account, go to their profile and select \"Mute account\" from the menu on their account."
msgstr ""
-#: src/view/com/modals/ContentFilteringSettings.tsx:175
-msgid "You must be 18 or older to enable adult content."
+#: src/view/screens/ModerationMutedAccounts.tsx:131
+#~ msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
+#~ msgstr "Du hast noch keine Konten stummgeschaltet. Um ein Konto stumm zu schalten, gehe auf dessen Profil und wähle \"Konto stummschalten\" aus dem Menü des Kontos aus."
+
+#: src/components/dialogs/MutedWords.tsx:249
+msgid "You haven't muted any words or tags yet"
+msgstr "Du hast noch keine Wörter oder Tags stummgeschaltet"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:68
+msgid "You may appeal these labels if you feel they were placed in error."
msgstr ""
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:103
+#: src/screens/Signup/StepInfo/Policies.tsx:79
+msgid "You must be 13 years of age or older to sign up."
+msgstr ""
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:175
+#~ msgid "You must be 18 or older to enable adult content."
+#~ msgstr "Du musst 18 Jahre oder älter sein, um Inhalte für Erwachsene zu aktivieren."
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:110
msgid "You must be 18 years or older to enable adult content"
+msgstr "Du musst 18 Jahre oder älter sein, um Inhalte für Erwachsene zu aktivieren."
+
+#: src/components/ReportDialog/SubmitView.tsx:205
+msgid "You must select at least one labeler for a report"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:98
+#: src/view/com/util/forms/PostDropdownBtn.tsx:144
msgid "You will no longer receive notifications for this thread"
-msgstr ""
+msgstr "Du wirst keine Mitteilungen mehr für diesen Thread erhalten"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:147
msgid "You will now receive notifications for this thread"
-msgstr ""
+msgstr "Du erhälst nun Mitteilungen für dieses Thread"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:107
+#: src/screens/Login/SetNewPasswordForm.tsx:104
msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password."
msgstr "Du erhältst eine E-Mail mit einem \"Reset-Code\". Gib diesen Code hier ein und gib dann dein neues Passwort ein."
-#: src/screens/Onboarding/StepModeration/index.tsx:72
+#: src/screens/Onboarding/StepModeration/index.tsx:60
msgid "You're in control"
-msgstr ""
+msgstr "Du hast die Kontrolle"
#: src/screens/Deactivated.tsx:87
#: src/screens/Deactivated.tsx:88
#: src/screens/Deactivated.tsx:103
msgid "You're in line"
-msgstr ""
+msgstr "Du bist in der Warteschlange"
-#: src/screens/Onboarding/StepFinished.tsx:90
+#: src/screens/Onboarding/StepFinished.tsx:94
msgid "You're ready to go!"
+msgstr "Du kannst loslegen!"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:98
+#: src/lib/moderation/useModerationCauseDescription.ts:101
+msgid "You've chosen to hide a word or tag within this post."
msgstr ""
#: src/view/com/posts/FollowingEndOfFeed.tsx:48
msgid "You've reached the end of your feed! Find some more accounts to follow."
-msgstr ""
+msgstr "Du hast das Ende deines Feeds erreicht! Finde weitere Konten, denen du folgen kannst."
-#: src/view/com/auth/create/Step1.tsx:74
+#: src/screens/Signup/index.tsx:150
msgid "Your account"
msgstr "Dein Konto"
-#: src/view/com/modals/DeleteAccount.tsx:67
+#: src/view/com/modals/DeleteAccount.tsx:68
msgid "Your account has been deleted"
-msgstr ""
+msgstr "Dein Konto wurde gelöscht"
#: src/view/screens/Settings/ExportCarDialog.tsx:47
msgid "Your account repository, containing all public data records, can be downloaded as a \"CAR\" file. This file does not include media embeds, such as images, or your private data, which must be fetched separately."
-msgstr ""
+msgstr "Dein Kontodepot, das alle öffentlichen Datensätze enthält, kann als \"CAR\"-Datei heruntergeladen werden. Diese Datei enthält keine Medieneinbettungen, wie z. B. Bilder, oder deine privaten Daten, welche separat abgerufen werden müssen."
-#: src/view/com/auth/create/Step1.tsx:234
+#: src/screens/Signup/StepInfo/index.tsx:121
msgid "Your birth date"
msgstr "Dein Geburtsdatum"
#: src/view/com/modals/InAppBrowserConsent.tsx:47
msgid "Your choice will be saved, but can be changed later in settings."
-msgstr ""
+msgstr "Deine Wahl wird gespeichert, kann aber später in den Einstellungen geändert werden."
-#: src/screens/Onboarding/StepFollowingFeed.tsx:61
+#: src/screens/Onboarding/StepFollowingFeed.tsx:62
msgid "Your default feed is \"Following\""
-msgstr ""
+msgstr "Dein Standard-Feed ist \"Following\""
-#: src/view/com/auth/create/state.ts:153
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:70
+#: src/screens/Login/ForgotPasswordForm.tsx:57
+#: src/screens/Signup/state.ts:227
#: src/view/com/modals/ChangePassword.tsx:54
msgid "Your email appears to be invalid."
msgstr "Deine E-Mail scheint ungültig zu sein."
-#: src/view/com/modals/Waitlist.tsx:109
-msgid "Your email has been saved! We'll be in touch soon."
-msgstr "Deine E-Mail wurde gespeichert! Wir werden uns bald bei dir melden."
-
#: src/view/com/modals/ChangeEmail.tsx:125
msgid "Your email has been updated but not verified. As a next step, please verify your new email."
msgstr "Deine E-Mail wurde aktualisiert, aber nicht bestätigt. Als nächsten Schritt bestätige bitte deine neue E-Mail."
@@ -4571,45 +5767,42 @@ msgstr "Deine E-Mail wurde noch nicht bestätigt. Dies ist ein wichtiger Sicherh
#: src/view/com/posts/FollowingEmptyState.tsx:47
msgid "Your following feed is empty! Follow more users to see what's happening."
-msgstr ""
+msgstr "Dein Following-Feed ist leer! Folge mehr Benutzern, um auf dem Laufenden zu bleiben."
-#: src/view/com/auth/create/Step3.tsx:45
+#: src/screens/Signup/StepHandle.tsx:72
msgid "Your full handle will be"
-msgstr ""
+msgstr "Dein vollständiger Handle lautet"
-#: src/view/com/modals/ChangeHandle.tsx:270
+#: src/view/com/modals/ChangeHandle.tsx:271
msgid "Your full handle will be <0>@{0}0>"
-msgstr ""
+msgstr "Dein vollständiger Handle lautet <0>@{0}0>"
-#: src/view/screens/Settings.tsx:430
-#: src/view/shell/desktop/RightNav.tsx:137
-#: src/view/shell/Drawer.tsx:660
-#~ msgid "Your invite codes are hidden when logged in using an App Password"
-#~ msgstr "Deine Einladungscodes werden ausgeblendet, wenn du dich mit einem App-Passwort anmeldest"
+#: src/components/dialogs/MutedWords.tsx:220
+msgid "Your muted words"
+msgstr "Deine stummgeschalteten Wörter"
-#: src/view/com/modals/ChangePassword.tsx:155
+#: src/view/com/modals/ChangePassword.tsx:157
msgid "Your password has been changed successfully!"
-msgstr ""
+msgstr "Dein Passwort wurde erfolgreich geändert!"
-#: src/view/com/composer/Composer.tsx:267
+#: src/view/com/composer/Composer.tsx:284
msgid "Your post has been published"
-msgstr ""
+msgstr "Dein Beitrag wurde veröffentlicht"
-#: src/screens/Onboarding/StepFinished.tsx:105
+#: src/screens/Onboarding/StepFinished.tsx:109
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:59
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:59
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:61
msgid "Your posts, likes, and blocks are public. Mutes are private."
msgstr "Deine Beiträge, Likes und Blockierungen sind öffentlich. Stummschaltungen sind privat."
-#: src/view/com/modals/SwitchAccount.tsx:84
-#: src/view/screens/Settings/index.tsx:118
+#: src/view/screens/Settings/index.tsx:125
msgid "Your profile"
msgstr "Dein Profil"
-#: src/view/com/composer/Composer.tsx:266
+#: src/view/com/composer/Composer.tsx:283
msgid "Your reply has been published"
-msgstr ""
+msgstr "Deine Antwort wurde veröffentlicht"
-#: src/view/com/auth/create/Step3.tsx:28
+#: src/screens/Signup/index.tsx:152
msgid "Your user handle"
msgstr "Dein Benutzerhandle"
diff --git a/src/locale/locales/en/messages.po b/src/locale/locales/en/messages.po
index ec78c370e6..8a88ef3ad1 100644
--- a/src/locale/locales/en/messages.po
+++ b/src/locale/locales/en/messages.po
@@ -21,7 +21,7 @@ msgstr ""
#~ msgid "{0, plural, one {# invite code available} other {# invite codes available}}"
#~ msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:592
+#: src/screens/Profile/Header/Metrics.tsx:44
msgid "{following} following"
msgstr ""
@@ -39,7 +39,7 @@ msgstr ""
#~ msgid "{invitesAvailable} invite codes available"
#~ msgstr ""
-#: src/view/shell/Drawer.tsx:440
+#: src/view/shell/Drawer.tsx:443
msgid "{numUnreadNotifications} unread"
msgstr ""
@@ -47,7 +47,11 @@ msgstr ""
msgid "<0/> members"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:594
+#: src/view/shell/Drawer.tsx:97
+msgid "<0>{0}0> following"
+msgstr ""
+
+#: src/screens/Profile/Header/Metrics.tsx:45
msgid "<0>{following} 0><1>following1>"
msgstr ""
@@ -63,51 +67,60 @@ msgstr ""
msgid "<0>Welcome to0><1>Bluesky1>"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:557
+#: src/screens/Profile/Header/Handle.tsx:42
msgid "⚠Invalid Handle"
msgstr ""
#: src/view/com/util/moderation/LabelInfo.tsx:45
-msgid "A content warning has been applied to this {0}."
-msgstr ""
+#~ msgid "A content warning has been applied to this {0}."
+#~ msgstr ""
#: src/lib/hooks/useOTAUpdate.ts:16
-msgid "A new version of the app is available. Please update to continue using the app."
-msgstr ""
+#~ msgid "A new version of the app is available. Please update to continue using the app."
+#~ msgstr ""
-#: src/view/com/util/ViewHeader.tsx:83
-#: src/view/screens/Search/Search.tsx:624
+#: src/view/com/util/ViewHeader.tsx:89
+#: src/view/screens/Search/Search.tsx:649
msgid "Access navigation links and settings"
msgstr ""
-#: src/view/com/pager/FeedsTabBarMobile.tsx:89
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:52
msgid "Access profile and other navigation links"
msgstr ""
-#: src/view/com/modals/EditImage.tsx:299
-#: src/view/screens/Settings/index.tsx:451
+#: src/view/com/modals/EditImage.tsx:300
+#: src/view/screens/Settings/index.tsx:470
msgid "Accessibility"
msgstr ""
-#: src/view/com/auth/login/LoginForm.tsx:166
-#: src/view/screens/Settings/index.tsx:308
-#: src/view/screens/Settings/index.tsx:721
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "account"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:144
+#: src/view/screens/Settings/index.tsx:327
+#: src/view/screens/Settings/index.tsx:743
msgid "Account"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:245
+#: src/view/com/profile/ProfileMenu.tsx:139
msgid "Account blocked"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:212
+#: src/view/com/profile/ProfileMenu.tsx:153
+msgid "Account followed"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:113
msgid "Account muted"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:86
+#: src/components/moderation/ModerationDetailsDialog.tsx:93
+#: src/lib/moderation/useModerationCauseDescription.ts:91
msgid "Account Muted"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:72
+#: src/components/moderation/ModerationDetailsDialog.tsx:82
msgid "Account Muted by List"
msgstr ""
@@ -119,18 +132,24 @@ msgstr ""
msgid "Account removed from quick access"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:267
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:137
+#: src/view/com/profile/ProfileMenu.tsx:128
msgid "Account unblocked"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:225
+#: src/view/com/profile/ProfileMenu.tsx:166
+msgid "Account unfollowed"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:102
msgid "Account unmuted"
msgstr ""
+#: src/components/dialogs/MutedWords.tsx:164
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:150
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/screens/ProfileList.tsx:812
+#: src/view/screens/ProfileList.tsx:827
msgid "Add"
msgstr ""
@@ -138,54 +157,63 @@ msgstr ""
msgid "Add a content warning"
msgstr ""
-#: src/view/screens/ProfileList.tsx:802
+#: src/view/screens/ProfileList.tsx:817
msgid "Add a user to this list"
msgstr ""
-#: src/view/screens/Settings/index.tsx:383
-#: src/view/screens/Settings/index.tsx:392
+#: src/components/dialogs/SwitchAccount.tsx:55
+#: src/view/screens/Settings/index.tsx:402
+#: src/view/screens/Settings/index.tsx:411
msgid "Add account"
msgstr ""
#: src/view/com/composer/photos/Gallery.tsx:119
#: src/view/com/composer/photos/Gallery.tsx:180
-#: src/view/com/modals/AltImage.tsx:116
+#: src/view/com/modals/AltImage.tsx:117
msgid "Add alt text"
msgstr ""
-#: src/view/screens/AppPasswords.tsx:102
-#: src/view/screens/AppPasswords.tsx:143
-#: src/view/screens/AppPasswords.tsx:156
+#: src/view/screens/AppPasswords.tsx:104
+#: src/view/screens/AppPasswords.tsx:145
+#: src/view/screens/AppPasswords.tsx:158
msgid "Add App Password"
msgstr ""
#: src/view/com/modals/report/InputIssueDetails.tsx:41
#: src/view/com/modals/report/Modal.tsx:191
-msgid "Add details"
-msgstr ""
+#~ msgid "Add details"
+#~ msgstr ""
#: src/view/com/modals/report/Modal.tsx:194
-msgid "Add details to report"
-msgstr ""
+#~ msgid "Add details to report"
+#~ msgstr ""
-#: src/view/com/composer/Composer.tsx:446
+#: src/view/com/composer/Composer.tsx:467
msgid "Add link card"
msgstr ""
-#: src/view/com/composer/Composer.tsx:451
+#: src/view/com/composer/Composer.tsx:472
msgid "Add link card:"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:417
+#: src/components/dialogs/MutedWords.tsx:157
+msgid "Add mute word for configured settings"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:86
+msgid "Add muted words and tags"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:416
msgid "Add the following DNS record to your domain:"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:309
+#: src/view/com/profile/ProfileMenu.tsx:263
+#: src/view/com/profile/ProfileMenu.tsx:266
msgid "Add to Lists"
msgstr ""
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/feeds/FeedSourceCard.tsx:234
msgid "Add to my feeds"
msgstr ""
@@ -198,36 +226,47 @@ msgstr ""
msgid "Added to list"
msgstr ""
-#: src/view/com/feeds/FeedSourceCard.tsx:125
+#: src/view/com/feeds/FeedSourceCard.tsx:108
msgid "Added to my feeds"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:173
+#: src/view/screens/PreferencesFollowingFeed.tsx:173
msgid "Adjust the number of likes a reply must have to be shown in your feed."
msgstr ""
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:117
#: src/view/com/modals/SelfLabel.tsx:75
msgid "Adult Content"
msgstr ""
#: src/view/com/modals/ContentFilteringSettings.tsx:141
-msgid "Adult content can only be enabled via the Web at <0/>."
-msgstr ""
+#~ msgid "Adult content can only be enabled via the Web at <0/>."
+#~ msgstr ""
#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
#~ msgid "Adult content can only be enabled via the Web at <0>bsky.app0>."
#~ msgstr ""
-#: src/view/screens/Settings/index.tsx:664
+#: src/components/moderation/LabelPreference.tsx:242
+msgid "Adult content is disabled."
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:375
+#: src/view/screens/Settings/index.tsx:684
msgid "Advanced"
msgstr ""
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:221
-#: src/view/com/modals/ChangePassword.tsx:168
+#: src/view/screens/Feeds.tsx:666
+msgid "All the feeds you've saved, right in one place."
+msgstr ""
+
+#: src/screens/Login/ForgotPasswordForm.tsx:178
+#: src/view/com/modals/ChangePassword.tsx:170
msgid "Already have a code?"
msgstr ""
-#: src/view/com/auth/login/ChooseAccountForm.tsx:98
+#: src/screens/Login/ChooseAccountForm.tsx:39
msgid "Already signed in as @{0}"
msgstr ""
@@ -235,7 +274,7 @@ msgstr ""
msgid "ALT"
msgstr ""
-#: src/view/com/modals/EditImage.tsx:315
+#: src/view/com/modals/EditImage.tsx:316
msgid "Alt text"
msgstr ""
@@ -251,12 +290,18 @@ msgstr ""
msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below."
msgstr ""
-#: src/view/com/profile/FollowButton.tsx:30
-#: src/view/com/profile/FollowButton.tsx:40
+#: src/lib/moderation/useReportOptions.ts:26
+msgid "An issue not included in these options"
+msgstr ""
+
+#: src/view/com/profile/FollowButton.tsx:35
+#: src/view/com/profile/FollowButton.tsx:45
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:188
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:198
msgid "An issue occurred, please try again."
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:236
+#: src/view/com/notifications/FeedItem.tsx:240
#: src/view/com/threadgate/WhoCanReply.tsx:178
msgid "and"
msgstr ""
@@ -265,23 +310,27 @@ msgstr ""
msgid "Animals"
msgstr ""
+#: src/lib/moderation/useReportOptions.ts:31
+msgid "Anti-Social Behavior"
+msgstr ""
+
#: src/view/screens/LanguageSettings.tsx:95
msgid "App Language"
msgstr ""
-#: src/view/screens/AppPasswords.tsx:228
+#: src/view/screens/AppPasswords.tsx:223
msgid "App password deleted"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:134
+#: src/view/com/modals/AddAppPasswords.tsx:135
msgid "App Password names can only contain letters, numbers, spaces, dashes, and underscores."
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:99
+#: src/view/com/modals/AddAppPasswords.tsx:100
msgid "App Password names must be at least 4 characters long."
msgstr ""
-#: src/view/screens/Settings/index.tsx:675
+#: src/view/screens/Settings/index.tsx:695
msgid "App password settings"
msgstr ""
@@ -289,47 +338,65 @@ msgstr ""
#~ msgid "App passwords"
#~ msgstr ""
-#: src/Navigation.tsx:237
-#: src/view/screens/AppPasswords.tsx:187
-#: src/view/screens/Settings/index.tsx:684
+#: src/Navigation.tsx:251
+#: src/view/screens/AppPasswords.tsx:189
+#: src/view/screens/Settings/index.tsx:704
msgid "App Passwords"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:250
-msgid "Appeal content warning"
+#: src/components/moderation/LabelsOnMeDialog.tsx:133
+#: src/components/moderation/LabelsOnMeDialog.tsx:136
+msgid "Appeal"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:201
+msgid "Appeal \"{0}\" label"
msgstr ""
+#: src/view/com/util/forms/PostDropdownBtn.tsx:337
+#: src/view/com/util/forms/PostDropdownBtn.tsx:346
+#~ msgid "Appeal content warning"
+#~ msgstr ""
+
#: src/view/com/modals/AppealLabel.tsx:65
-msgid "Appeal Content Warning"
+#~ msgid "Appeal Content Warning"
+#~ msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:192
+msgid "Appeal submitted."
msgstr ""
#: src/view/com/util/moderation/LabelInfo.tsx:52
-msgid "Appeal this decision"
-msgstr ""
+#~ msgid "Appeal this decision"
+#~ msgstr ""
#: src/view/com/util/moderation/LabelInfo.tsx:56
-msgid "Appeal this decision."
-msgstr ""
+#~ msgid "Appeal this decision."
+#~ msgstr ""
-#: src/view/screens/Settings/index.tsx:466
+#: src/view/screens/Settings/index.tsx:485
msgid "Appearance"
msgstr ""
-#: src/view/screens/AppPasswords.tsx:224
+#: src/view/screens/AppPasswords.tsx:265
msgid "Are you sure you want to delete the app password \"{name}\"?"
msgstr ""
-#: src/view/com/composer/Composer.tsx:143
+#: src/view/com/feeds/FeedSourceCard.tsx:280
+msgid "Are you sure you want to remove {0} from your feeds?"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:509
msgid "Are you sure you'd like to discard this draft?"
msgstr ""
-#: src/view/screens/ProfileList.tsx:364
+#: src/components/dialogs/MutedWords.tsx:281
msgid "Are you sure?"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:233
-msgid "Are you sure? This cannot be undone."
-msgstr ""
+#: src/view/com/util/forms/PostDropdownBtn.tsx:322
+#~ msgid "Are you sure? This cannot be undone."
+#~ msgstr ""
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:60
msgid "Are you writing in <0>{0}0>?"
@@ -343,78 +410,93 @@ msgstr ""
msgid "Artistic or non-erotic nudity."
msgstr ""
-#: src/view/com/auth/create/CreateAccount.tsx:147
-#: src/view/com/auth/login/ChooseAccountForm.tsx:151
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:174
-#: src/view/com/auth/login/LoginForm.tsx:259
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:179
-#: src/view/com/modals/report/InputIssueDetails.tsx:46
-#: src/view/com/post-thread/PostThread.tsx:408
-#: src/view/com/post-thread/PostThread.tsx:458
-#: src/view/com/post-thread/PostThread.tsx:466
-#: src/view/com/profile/ProfileHeader.tsx:648
-#: src/view/com/util/ViewHeader.tsx:81
-msgid "Back"
+#: src/screens/Signup/StepHandle.tsx:118
+msgid "At least 3 characters"
msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:416
-msgctxt "action"
+#: src/components/moderation/LabelsOnMeDialog.tsx:246
+#: src/components/moderation/LabelsOnMeDialog.tsx:247
+#: src/screens/Login/ChooseAccountForm.tsx:73
+#: src/screens/Login/ChooseAccountForm.tsx:78
+#: src/screens/Login/ForgotPasswordForm.tsx:129
+#: src/screens/Login/ForgotPasswordForm.tsx:135
+#: src/screens/Login/LoginForm.tsx:221
+#: src/screens/Login/LoginForm.tsx:227
+#: src/screens/Login/SetNewPasswordForm.tsx:160
+#: src/screens/Login/SetNewPasswordForm.tsx:166
+#: src/screens/Profile/Header/Shell.tsx:96
+#: src/screens/Signup/index.tsx:179
+#: src/view/com/util/ViewHeader.tsx:87
msgid "Back"
msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:136
+#: src/view/com/post-thread/PostThread.tsx:480
+#~ msgctxt "action"
+#~ msgid "Back"
+#~ msgstr ""
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:144
msgid "Based on your interest in {interestsText}"
msgstr ""
-#: src/view/screens/Settings/index.tsx:523
+#: src/view/screens/Settings/index.tsx:542
msgid "Basics"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:246
-#: src/view/com/modals/BirthDateSettings.tsx:73
+#: src/components/dialogs/BirthDateSettings.tsx:107
msgid "Birthday"
msgstr ""
-#: src/view/screens/Settings/index.tsx:340
+#: src/view/screens/Settings/index.tsx:359
msgid "Birthday:"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:238
-#: src/view/com/profile/ProfileHeader.tsx:345
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+msgid "Block"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:300
+#: src/view/com/profile/ProfileMenu.tsx:307
msgid "Block Account"
msgstr ""
-#: src/view/screens/ProfileList.tsx:555
+#: src/view/com/profile/ProfileMenu.tsx:344
+msgid "Block Account?"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:530
msgid "Block accounts"
msgstr ""
-#: src/view/screens/ProfileList.tsx:505
+#: src/view/screens/ProfileList.tsx:478
+#: src/view/screens/ProfileList.tsx:634
msgid "Block list"
msgstr ""
-#: src/view/screens/ProfileList.tsx:315
+#: src/view/screens/ProfileList.tsx:629
msgid "Block these accounts?"
msgstr ""
-#: src/view/screens/ProfileList.tsx:319
-msgid "Block this List"
-msgstr ""
+#: src/view/screens/ProfileList.tsx:320
+#~ msgid "Block this List"
+#~ msgstr ""
-#: src/view/com/lists/ListCard.tsx:109
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:60
+#: src/view/com/lists/ListCard.tsx:110
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:55
msgid "Blocked"
msgstr ""
-#: src/view/screens/Moderation.tsx:123
+#: src/screens/Moderation/index.tsx:267
msgid "Blocked accounts"
msgstr ""
-#: src/Navigation.tsx:130
+#: src/Navigation.tsx:134
#: src/view/screens/ModerationBlockedAccounts.tsx:107
msgid "Blocked Accounts"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:240
+#: src/view/com/profile/ProfileMenu.tsx:356
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
msgstr ""
@@ -422,48 +504,57 @@ msgstr ""
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours."
msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:267
+#: src/view/com/post-thread/PostThread.tsx:313
msgid "Blocked post."
msgstr ""
-#: src/view/screens/ProfileList.tsx:317
+#: src/screens/Profile/Sections/Labels.tsx:152
+msgid "Blocking does not prevent this labeler from placing labels on your account."
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:631
msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
msgstr ""
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:93
+#: src/view/com/profile/ProfileMenu.tsx:353
+msgid "Blocking will not prevent labels from being applied on your account, but it will stop this account from replying in your threads or interacting with you."
+msgstr ""
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:98
+#: src/view/com/auth/SplashScreen.web.tsx:169
msgid "Blog"
msgstr ""
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:31
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:32
#: src/view/com/auth/server-input/index.tsx:89
-#: src/view/com/auth/server-input/index.tsx:90
+#: src/view/com/auth/server-input/index.tsx:91
msgid "Bluesky"
msgstr ""
-#: src/view/com/auth/server-input/index.tsx:150
+#: src/view/com/auth/server-input/index.tsx:154
msgid "Bluesky is an open network where you can choose your hosting provider. Custom hosting is now available in beta for developers."
msgstr ""
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:80
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:80
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:82
msgid "Bluesky is flexible."
msgstr ""
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:69
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:69
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:71
msgid "Bluesky is open."
msgstr ""
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:56
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:56
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:58
msgid "Bluesky is public."
msgstr ""
#: src/view/com/modals/Waitlist.tsx:70
-msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
-msgstr ""
+#~ msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
+#~ msgstr ""
-#: src/view/screens/Moderation.tsx:226
+#: src/screens/Moderation/index.tsx:533
msgid "Bluesky will not show your profile and posts to logged-out users. Other apps may not honor this request. This does not make your account private."
msgstr ""
@@ -471,15 +562,24 @@ msgstr ""
#~ msgid "Bluesky.Social"
#~ msgstr ""
+#: src/lib/moderation/useLabelBehaviorDescription.ts:53
+msgid "Blur images"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:51
+msgid "Blur images and filter from feeds"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:33
msgid "Books"
msgstr ""
-#: src/view/screens/Settings/index.tsx:859
-msgid "Build version {0} {1}"
-msgstr ""
+#: src/view/screens/Settings/index.tsx:893
+#~ msgid "Build version {0} {1}"
+#~ msgstr ""
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:87
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:92
+#: src/view/com/auth/SplashScreen.web.tsx:166
msgid "Business"
msgstr ""
@@ -495,95 +595,113 @@ msgstr ""
msgid "by {0}"
msgstr ""
+#: src/components/LabelingServiceCard/index.tsx:57
+msgid "By {0}"
+msgstr ""
+
#: src/view/com/profile/ProfileSubpageHeader.tsx:161
msgid "by <0/>"
msgstr ""
+#: src/screens/Signup/StepInfo/Policies.tsx:74
+msgid "By creating an account you agree to the {els}."
+msgstr ""
+
#: src/view/com/profile/ProfileSubpageHeader.tsx:159
msgid "by you"
msgstr ""
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:60
-#: src/view/com/util/UserAvatar.tsx:224
-#: src/view/com/util/UserBanner.tsx:40
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:77
msgid "Camera"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:216
+#: src/view/com/modals/AddAppPasswords.tsx:217
msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long."
msgstr ""
-#: src/components/Prompt.tsx:91
-#: src/view/com/composer/Composer.tsx:300
-#: src/view/com/composer/Composer.tsx:305
+#: src/components/Menu/index.tsx:213
+#: src/components/Prompt.tsx:113
+#: src/components/Prompt.tsx:115
+#: src/components/TagMenu/index.tsx:268
+#: src/view/com/composer/Composer.tsx:317
+#: src/view/com/composer/Composer.tsx:322
#: src/view/com/modals/ChangeEmail.tsx:218
#: src/view/com/modals/ChangeEmail.tsx:220
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
-#: src/view/com/modals/CreateOrEditList.tsx:355
-#: src/view/com/modals/EditImage.tsx:323
-#: src/view/com/modals/EditProfile.tsx:249
+#: src/view/com/modals/ChangeHandle.tsx:154
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
+#: src/view/com/modals/CreateOrEditList.tsx:356
+#: src/view/com/modals/crop-image/CropImage.web.tsx:138
+#: src/view/com/modals/EditImage.tsx:324
+#: src/view/com/modals/EditProfile.tsx:250
#: src/view/com/modals/InAppBrowserConsent.tsx:78
-#: src/view/com/modals/LinkWarning.tsx:87
-#: src/view/com/modals/Repost.tsx:87
+#: src/view/com/modals/InAppBrowserConsent.tsx:80
+#: src/view/com/modals/LinkWarning.tsx:105
+#: src/view/com/modals/LinkWarning.tsx:107
+#: src/view/com/modals/Repost.tsx:88
#: src/view/com/modals/VerifyEmail.tsx:247
#: src/view/com/modals/VerifyEmail.tsx:253
-#: src/view/com/modals/Waitlist.tsx:142
-#: src/view/screens/Search/Search.tsx:693
-#: src/view/shell/desktop/Search.tsx:238
+#: src/view/screens/Search/Search.tsx:718
+#: src/view/shell/desktop/Search.tsx:239
msgid "Cancel"
msgstr ""
-#: src/view/com/modals/Confirm.tsx:88
-#: src/view/com/modals/Confirm.tsx:91
-#: src/view/com/modals/CreateOrEditList.tsx:360
-#: src/view/com/modals/DeleteAccount.tsx:156
-#: src/view/com/modals/DeleteAccount.tsx:234
+#: src/view/com/modals/CreateOrEditList.tsx:361
+#: src/view/com/modals/DeleteAccount.tsx:155
+#: src/view/com/modals/DeleteAccount.tsx:233
msgctxt "action"
msgid "Cancel"
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:152
-#: src/view/com/modals/DeleteAccount.tsx:230
+#: src/view/com/modals/DeleteAccount.tsx:151
+#: src/view/com/modals/DeleteAccount.tsx:229
msgid "Cancel account deletion"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:149
+#: src/view/com/modals/ChangeHandle.tsx:150
msgid "Cancel change handle"
msgstr ""
-#: src/view/com/modals/crop-image/CropImage.web.tsx:134
+#: src/view/com/modals/crop-image/CropImage.web.tsx:135
msgid "Cancel image crop"
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:244
+#: src/view/com/modals/EditProfile.tsx:245
msgid "Cancel profile editing"
msgstr ""
-#: src/view/com/modals/Repost.tsx:78
+#: src/view/com/modals/Repost.tsx:79
msgid "Cancel quote post"
msgstr ""
#: src/view/com/modals/ListAddRemoveUsers.tsx:87
-#: src/view/shell/desktop/Search.tsx:234
+#: src/view/shell/desktop/Search.tsx:235
msgid "Cancel search"
msgstr ""
#: src/view/com/modals/Waitlist.tsx:136
-msgid "Cancel waitlist signup"
+#~ msgid "Cancel waitlist signup"
+#~ msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:106
+msgid "Cancels opening the linked website"
+msgstr ""
+
+#: src/view/com/modals/VerifyEmail.tsx:152
+msgid "Change"
msgstr ""
-#: src/view/screens/Settings/index.tsx:334
+#: src/view/screens/Settings/index.tsx:353
msgctxt "action"
msgid "Change"
msgstr ""
-#: src/view/screens/Settings/index.tsx:696
+#: src/view/screens/Settings/index.tsx:716
msgid "Change handle"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:161
-#: src/view/screens/Settings/index.tsx:705
+#: src/view/com/modals/ChangeHandle.tsx:162
+#: src/view/screens/Settings/index.tsx:727
msgid "Change Handle"
msgstr ""
@@ -591,11 +709,12 @@ msgstr ""
msgid "Change my email"
msgstr ""
-#: src/view/screens/Settings/index.tsx:732
+#: src/view/screens/Settings/index.tsx:754
msgid "Change password"
msgstr ""
-#: src/view/screens/Settings/index.tsx:741
+#: src/view/com/modals/ChangePassword.tsx:141
+#: src/view/screens/Settings/index.tsx:765
msgid "Change Password"
msgstr ""
@@ -604,8 +723,8 @@ msgid "Change post language to {0}"
msgstr ""
#: src/view/screens/Settings/index.tsx:733
-msgid "Change your Bluesky password"
-msgstr ""
+#~ msgid "Change your Bluesky password"
+#~ msgstr ""
#: src/view/com/modals/ChangeEmail.tsx:109
msgid "Change Your Email"
@@ -624,7 +743,7 @@ msgstr ""
msgid "Check out some recommended users. Follow them to see similar users."
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:169
+#: src/view/com/modals/DeleteAccount.tsx:168
msgid "Check your inbox for an email with the confirmation code to enter below:"
msgstr ""
@@ -633,19 +752,19 @@ msgid "Choose \"Everybody\" or \"Nobody\""
msgstr ""
#: src/view/screens/Settings/index.tsx:697
-msgid "Choose a new Bluesky username or create"
-msgstr ""
+#~ msgid "Choose a new Bluesky username or create"
+#~ msgstr ""
#: src/view/com/auth/server-input/index.tsx:79
msgid "Choose Service"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:135
+#: src/screens/Onboarding/StepFinished.tsx:139
msgid "Choose the algorithms that power your custom feeds."
msgstr ""
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:83
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:83
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:85
msgid "Choose the algorithms that power your experience with custom feeds."
msgstr ""
@@ -653,91 +772,111 @@ msgstr ""
#~ msgid "Choose your algorithmic feeds"
#~ msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:103
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:104
msgid "Choose your main feeds"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:215
+#: src/screens/Signup/StepInfo/index.tsx:112
msgid "Choose your password"
msgstr ""
-#: src/view/screens/Settings/index.tsx:834
-#: src/view/screens/Settings/index.tsx:835
+#: src/view/screens/Settings/index.tsx:868
msgid "Clear all legacy storage data"
msgstr ""
-#: src/view/screens/Settings/index.tsx:837
+#: src/view/screens/Settings/index.tsx:871
msgid "Clear all legacy storage data (restart after this)"
msgstr ""
-#: src/view/screens/Settings/index.tsx:846
-#: src/view/screens/Settings/index.tsx:847
+#: src/view/screens/Settings/index.tsx:880
msgid "Clear all storage data"
msgstr ""
-#: src/view/screens/Settings/index.tsx:849
+#: src/view/screens/Settings/index.tsx:883
msgid "Clear all storage data (restart after this)"
msgstr ""
#: src/view/com/util/forms/SearchInput.tsx:88
-#: src/view/screens/Search/Search.tsx:674
+#: src/view/screens/Search/Search.tsx:699
msgid "Clear search query"
msgstr ""
+#: src/view/screens/Settings/index.tsx:869
+msgid "Clears all legacy storage data"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:881
+msgid "Clears all storage data"
+msgstr ""
+
#: src/view/screens/Support.tsx:40
msgid "click here"
msgstr ""
+#: src/components/TagMenu/index.web.tsx:138
+msgid "Click here to open tag menu for {tag}"
+msgstr ""
+
+#: src/components/RichText.tsx:192
+msgid "Click here to open tag menu for #{tag}"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:35
msgid "Climate"
msgstr ""
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
msgid "Close"
msgstr ""
-#: src/components/Dialog/index.web.tsx:78
+#: src/components/Dialog/index.web.tsx:106
+#: src/components/Dialog/index.web.tsx:218
msgid "Close active dialog"
msgstr ""
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:38
+#: src/screens/Login/PasswordUpdatedForm.tsx:38
msgid "Close alert"
msgstr ""
-#: src/view/com/util/BottomSheetCustomBackdrop.tsx:33
+#: src/view/com/util/BottomSheetCustomBackdrop.tsx:36
msgid "Close bottom drawer"
msgstr ""
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:26
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:36
msgid "Close image"
msgstr ""
-#: src/view/com/lightbox/Lightbox.web.tsx:119
+#: src/view/com/lightbox/Lightbox.web.tsx:129
msgid "Close image viewer"
msgstr ""
-#: src/view/shell/index.web.tsx:49
+#: src/view/shell/index.web.tsx:55
msgid "Close navigation footer"
msgstr ""
-#: src/view/shell/index.web.tsx:50
+#: src/components/Menu/index.tsx:207
+#: src/components/TagMenu/index.tsx:262
+msgid "Close this dialog"
+msgstr ""
+
+#: src/view/shell/index.web.tsx:56
msgid "Closes bottom navigation bar"
msgstr ""
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:39
+#: src/screens/Login/PasswordUpdatedForm.tsx:39
msgid "Closes password update alert"
msgstr ""
-#: src/view/com/composer/Composer.tsx:302
+#: src/view/com/composer/Composer.tsx:319
msgid "Closes post composer and discards post draft"
msgstr ""
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:27
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:37
msgid "Closes viewer for header image"
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:317
+#: src/view/com/notifications/FeedItem.tsx:321
msgid "Collapses list of users for a given notification"
msgstr ""
@@ -749,16 +888,20 @@ msgstr ""
msgid "Comics"
msgstr ""
-#: src/Navigation.tsx:227
+#: src/Navigation.tsx:241
#: src/view/screens/CommunityGuidelines.tsx:32
msgid "Community Guidelines"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:148
+#: src/screens/Onboarding/StepFinished.tsx:152
msgid "Complete onboarding and start using your account"
msgstr ""
-#: src/view/com/composer/Composer.tsx:417
+#: src/screens/Signup/index.tsx:154
+msgid "Complete the challenge"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:438
msgid "Compose posts up to {MAX_GRAPHEME_LENGTH} characters in length"
msgstr ""
@@ -766,68 +909,96 @@ msgstr ""
msgid "Compose reply"
msgstr ""
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:67
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:81
msgid "Configure content filtering setting for category: {0}"
msgstr ""
-#: src/components/Prompt.tsx:113
-#: src/view/com/modals/AppealLabel.tsx:98
+#: src/components/moderation/LabelPreference.tsx:81
+msgid "Configure content filtering setting for category: {name}"
+msgstr ""
+
+#: src/components/moderation/LabelPreference.tsx:244
+msgid "Configured in <0>moderation settings0>."
+msgstr ""
+
+#: src/components/Prompt.tsx:153
+#: src/components/Prompt.tsx:156
#: src/view/com/modals/SelfLabel.tsx:154
#: src/view/com/modals/VerifyEmail.tsx:231
#: src/view/com/modals/VerifyEmail.tsx:233
-#: src/view/screens/PreferencesHomeFeed.tsx:308
+#: src/view/screens/PreferencesFollowingFeed.tsx:308
#: src/view/screens/PreferencesThreads.tsx:159
msgid "Confirm"
msgstr ""
#: src/view/com/modals/Confirm.tsx:75
#: src/view/com/modals/Confirm.tsx:78
-msgctxt "action"
-msgid "Confirm"
-msgstr ""
+#~ msgctxt "action"
+#~ msgid "Confirm"
+#~ msgstr ""
#: src/view/com/modals/ChangeEmail.tsx:193
#: src/view/com/modals/ChangeEmail.tsx:195
msgid "Confirm Change"
msgstr ""
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:34
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:35
msgid "Confirm content language settings"
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:220
+#: src/view/com/modals/DeleteAccount.tsx:219
msgid "Confirm delete account"
msgstr ""
#: src/view/com/modals/ContentFilteringSettings.tsx:156
-msgid "Confirm your age to enable adult content."
+#~ msgid "Confirm your age to enable adult content."
+#~ msgstr ""
+
+#: src/screens/Moderation/index.tsx:301
+msgid "Confirm your age:"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:292
+msgid "Confirm your birthdate"
msgstr ""
#: src/view/com/modals/ChangeEmail.tsx:157
-#: src/view/com/modals/DeleteAccount.tsx:182
+#: src/view/com/modals/DeleteAccount.tsx:175
+#: src/view/com/modals/DeleteAccount.tsx:181
#: src/view/com/modals/VerifyEmail.tsx:165
msgid "Confirmation code"
msgstr ""
#: src/view/com/modals/Waitlist.tsx:120
-msgid "Confirms signing up {email} to the waitlist"
-msgstr ""
+#~ msgid "Confirms signing up {email} to the waitlist"
+#~ msgstr ""
-#: src/view/com/auth/create/CreateAccount.tsx:182
-#: src/view/com/auth/login/LoginForm.tsx:278
+#: src/screens/Login/LoginForm.tsx:248
msgid "Connecting..."
msgstr ""
-#: src/view/com/auth/create/CreateAccount.tsx:202
+#: src/screens/Signup/index.tsx:219
msgid "Contact support"
msgstr ""
-#: src/view/screens/Moderation.tsx:81
-msgid "Content filtering"
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "content"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:18
+msgid "Content Blocked"
msgstr ""
+#: src/view/screens/Moderation.tsx:83
+#~ msgid "Content filtering"
+#~ msgstr ""
+
#: src/view/com/modals/ContentFilteringSettings.tsx:44
-msgid "Content Filtering"
+#~ msgid "Content Filtering"
+#~ msgstr ""
+
+#: src/screens/Moderation/index.tsx:285
+msgid "Content filters"
msgstr ""
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74
@@ -835,12 +1006,15 @@ msgstr ""
msgid "Content Languages"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:65
+#: src/components/moderation/ModerationDetailsDialog.tsx:75
+#: src/lib/moderation/useModerationCauseDescription.ts:75
msgid "Content Not Available"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:33
-#: src/view/com/util/moderation/ScreenHider.tsx:78
+#: src/components/moderation/ModerationDetailsDialog.tsx:46
+#: src/components/moderation/ScreenHider.tsx:99
+#: src/lib/moderation/useGlobalLabelStrings.ts:22
+#: src/lib/moderation/useModerationCauseDescription.ts:38
msgid "Content Warning"
msgstr ""
@@ -848,28 +1022,38 @@ msgstr ""
msgid "Content warnings"
msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:170
-#: src/screens/Onboarding/StepFollowingFeed.tsx:153
-#: src/screens/Onboarding/StepInterests/index.tsx:248
-#: src/screens/Onboarding/StepModeration/index.tsx:118
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:108
+#: src/components/Menu/index.web.tsx:84
+msgid "Context menu backdrop, click to close the menu."
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:161
+#: src/screens/Onboarding/StepFollowingFeed.tsx:154
+#: src/screens/Onboarding/StepInterests/index.tsx:252
+#: src/screens/Onboarding/StepModeration/index.tsx:103
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:118
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:96
msgid "Continue"
msgstr ""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:150
-#: src/screens/Onboarding/StepInterests/index.tsx:245
-#: src/screens/Onboarding/StepModeration/index.tsx:115
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:105
+#: src/components/AccountList.tsx:108
+msgid "Continue as {0} (currently signed in)"
+msgstr ""
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:151
+#: src/screens/Onboarding/StepInterests/index.tsx:249
+#: src/screens/Onboarding/StepModeration/index.tsx:100
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:115
+#: src/screens/Signup/index.tsx:198
msgid "Continue to next step"
msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:167
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:158
msgid "Continue to the next step"
msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:191
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:199
msgid "Continue to the next step without following any accounts"
msgstr ""
@@ -877,98 +1061,110 @@ msgstr ""
msgid "Cooking"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:195
-#: src/view/com/modals/InviteCodes.tsx:182
+#: src/view/com/modals/AddAppPasswords.tsx:196
+#: src/view/com/modals/InviteCodes.tsx:183
msgid "Copied"
msgstr ""
-#: src/view/screens/Settings/index.tsx:241
+#: src/view/screens/Settings/index.tsx:251
msgid "Copied build version to clipboard"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:76
-#: src/view/com/modals/InviteCodes.tsx:152
-#: src/view/com/util/forms/PostDropdownBtn.tsx:112
+#: src/view/com/modals/AddAppPasswords.tsx:77
+#: src/view/com/modals/ChangeHandle.tsx:326
+#: src/view/com/modals/InviteCodes.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:158
msgid "Copied to clipboard"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:189
+#: src/view/com/modals/AddAppPasswords.tsx:190
msgid "Copies app password"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:188
+#: src/view/com/modals/AddAppPasswords.tsx:189
msgid "Copy"
msgstr ""
-#: src/view/screens/ProfileList.tsx:417
+#: src/view/com/modals/ChangeHandle.tsx:480
+msgid "Copy {0}"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:388
msgid "Copy link to list"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
msgid "Copy link to post"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:294
-msgid "Copy link to profile"
-msgstr ""
+#: src/view/com/profile/ProfileHeader.tsx:295
+#~ msgid "Copy link to profile"
+#~ msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:139
+#: src/view/com/util/forms/PostDropdownBtn.tsx:220
+#: src/view/com/util/forms/PostDropdownBtn.tsx:222
msgid "Copy post text"
msgstr ""
-#: src/Navigation.tsx:232
+#: src/Navigation.tsx:246
#: src/view/screens/CopyrightPolicy.tsx:29
msgid "Copyright Policy"
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:96
+#: src/view/screens/ProfileFeed.tsx:103
msgid "Could not load feed"
msgstr ""
-#: src/view/screens/ProfileList.tsx:888
+#: src/view/screens/ProfileList.tsx:907
msgid "Could not load list"
msgstr ""
#: src/view/com/auth/create/Step2.tsx:91
-msgid "Country"
-msgstr ""
+#~ msgid "Country"
+#~ msgstr ""
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:62
-#: src/view/com/auth/SplashScreen.tsx:46
-#: src/view/com/auth/SplashScreen.web.tsx:77
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:65
+#: src/view/com/auth/SplashScreen.tsx:75
+#: src/view/com/auth/SplashScreen.web.tsx:104
msgid "Create a new account"
msgstr ""
-#: src/view/screens/Settings/index.tsx:384
+#: src/view/screens/Settings/index.tsx:403
msgid "Create a new Bluesky account"
msgstr ""
-#: src/view/com/auth/create/CreateAccount.tsx:122
+#: src/screens/Signup/index.tsx:129
msgid "Create Account"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:226
+#: src/view/com/modals/AddAppPasswords.tsx:227
msgid "Create App Password"
msgstr ""
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:54
-#: src/view/com/auth/SplashScreen.tsx:43
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:55
+#: src/view/com/auth/SplashScreen.tsx:66
+#: src/view/com/auth/SplashScreen.web.tsx:95
msgid "Create new account"
msgstr ""
-#: src/view/screens/AppPasswords.tsx:249
+#: src/components/ReportDialog/SelectReportOptionView.tsx:93
+msgid "Create report for {0}"
+msgstr ""
+
+#: src/view/screens/AppPasswords.tsx:246
msgid "Created {0}"
msgstr ""
#: src/view/screens/ProfileFeed.tsx:616
-msgid "Created by <0/>"
-msgstr ""
+#~ msgid "Created by <0/>"
+#~ msgstr ""
#: src/view/screens/ProfileFeed.tsx:614
-msgid "Created by you"
-msgstr ""
+#~ msgid "Created by you"
+#~ msgstr ""
-#: src/view/com/composer/Composer.tsx:448
+#: src/view/com/composer/Composer.tsx:469
msgid "Creates a card with a thumbnail. The card links to {url}"
msgstr ""
@@ -976,16 +1172,17 @@ msgstr ""
msgid "Culture"
msgstr ""
-#: src/view/com/auth/server-input/index.tsx:95
-#: src/view/com/auth/server-input/index.tsx:96
+#: src/view/com/auth/server-input/index.tsx:97
+#: src/view/com/auth/server-input/index.tsx:99
msgid "Custom"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:389
+#: src/view/com/modals/ChangeHandle.tsx:388
msgid "Custom domain"
msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:107
+#: src/view/screens/Feeds.tsx:692
msgid "Custom feeds built by the community bring you new experiences and help you find the content you love."
msgstr ""
@@ -997,8 +1194,8 @@ msgstr ""
#~ msgid "Danger Zone"
#~ msgstr ""
-#: src/view/screens/Settings/index.tsx:485
-#: src/view/screens/Settings/index.tsx:511
+#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:530
msgid "Dark"
msgstr ""
@@ -1006,33 +1203,49 @@ msgstr ""
msgid "Dark mode"
msgstr ""
-#: src/view/screens/Settings/index.tsx:498
+#: src/view/screens/Settings/index.tsx:517
msgid "Dark Theme"
msgstr ""
+#: src/screens/Signup/StepInfo/index.tsx:132
+msgid "Date of birth"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:841
+msgid "Debug Moderation"
+msgstr ""
+
#: src/view/screens/Debug.tsx:83
msgid "Debug panel"
msgstr ""
-#: src/view/screens/Settings/index.tsx:772
+#: src/view/com/util/forms/PostDropdownBtn.tsx:319
+#: src/view/screens/AppPasswords.tsx:268
+#: src/view/screens/ProfileList.tsx:613
+msgid "Delete"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:796
msgid "Delete account"
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:87
+#: src/view/com/modals/DeleteAccount.tsx:86
msgid "Delete Account"
msgstr ""
-#: src/view/screens/AppPasswords.tsx:222
-#: src/view/screens/AppPasswords.tsx:242
+#: src/view/screens/AppPasswords.tsx:239
msgid "Delete app password"
msgstr ""
-#: src/view/screens/ProfileList.tsx:363
-#: src/view/screens/ProfileList.tsx:444
+#: src/view/screens/AppPasswords.tsx:263
+msgid "Delete app password?"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:415
msgid "Delete List"
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:223
+#: src/view/com/modals/DeleteAccount.tsx:222
msgid "Delete my account"
msgstr ""
@@ -1040,30 +1253,35 @@ msgstr ""
#~ msgid "Delete my account…"
#~ msgstr ""
-#: src/view/screens/Settings/index.tsx:784
+#: src/view/screens/Settings/index.tsx:808
msgid "Delete My Account…"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:302
+#: src/view/com/util/forms/PostDropdownBtn.tsx:304
msgid "Delete post"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:232
+#: src/view/screens/ProfileList.tsx:608
+msgid "Delete this list?"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:314
msgid "Delete this post?"
msgstr ""
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:69
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:64
msgid "Deleted"
msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:259
+#: src/view/com/post-thread/PostThread.tsx:305
msgid "Deleted post."
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:300
-#: src/view/com/modals/CreateOrEditList.tsx:321
-#: src/view/com/modals/EditProfile.tsx:198
-#: src/view/com/modals/EditProfile.tsx:210
+#: src/view/com/modals/CreateOrEditList.tsx:301
+#: src/view/com/modals/CreateOrEditList.tsx:322
+#: src/view/com/modals/EditProfile.tsx:199
+#: src/view/com/modals/EditProfile.tsx:211
msgid "Description"
msgstr ""
@@ -1071,23 +1289,35 @@ msgstr ""
#~ msgid "Developer Tools"
#~ msgstr ""
-#: src/view/com/composer/Composer.tsx:211
+#: src/view/com/composer/Composer.tsx:218
msgid "Did you want to say anything?"
msgstr ""
-#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:523
msgid "Dim"
msgstr ""
-#: src/view/com/composer/Composer.tsx:144
+#: src/lib/moderation/useLabelBehaviorDescription.ts:32
+#: src/lib/moderation/useLabelBehaviorDescription.ts:42
+#: src/lib/moderation/useLabelBehaviorDescription.ts:68
+#: src/screens/Moderation/index.tsx:341
+msgid "Disabled"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:511
msgid "Discard"
msgstr ""
-#: src/view/com/composer/Composer.tsx:138
-msgid "Discard draft"
+#: src/view/com/composer/Composer.tsx:145
+#~ msgid "Discard draft"
+#~ msgstr ""
+
+#: src/view/com/composer/Composer.tsx:508
+msgid "Discard draft?"
msgstr ""
-#: src/view/screens/Moderation.tsx:207
+#: src/screens/Moderation/index.tsx:518
+#: src/screens/Moderation/index.tsx:522
msgid "Discourage apps from showing my account to logged-out users"
msgstr ""
@@ -1097,27 +1327,65 @@ msgid "Discover new custom feeds"
msgstr ""
#: src/view/screens/Feeds.tsx:473
-msgid "Discover new feeds"
+#~ msgid "Discover new feeds"
+#~ msgstr ""
+
+#: src/view/screens/Feeds.tsx:689
+msgid "Discover New Feeds"
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:192
+#: src/view/com/modals/EditProfile.tsx:193
msgid "Display name"
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:180
+#: src/view/com/modals/EditProfile.tsx:181
msgid "Display Name"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:487
+#: src/view/com/modals/ChangeHandle.tsx:397
+msgid "DNS Panel"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:39
+msgid "Does not include nudity."
+msgstr ""
+
+#: src/screens/Signup/StepHandle.tsx:104
+msgid "Doesn't begin or end with a hyphen"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "Domain Value"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:488
msgid "Domain verified!"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:166
-msgid "Don't have an invite code?"
+#: src/view/com/auth/create/Step1.tsx:170
+#~ msgid "Don't have an invite code?"
+#~ msgstr ""
+
+#: src/components/dialogs/BirthDateSettings.tsx:119
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/components/forms/DateField/index.tsx:74
+#: src/components/forms/DateField/index.tsx:80
+#: src/view/com/auth/server-input/index.tsx:169
+#: src/view/com/auth/server-input/index.tsx:170
+#: src/view/com/modals/AddAppPasswords.tsx:227
+#: src/view/com/modals/AltImage.tsx:140
+#: src/view/com/modals/crop-image/CropImage.web.tsx:153
+#: src/view/com/modals/InviteCodes.tsx:81
+#: src/view/com/modals/InviteCodes.tsx:124
+#: src/view/com/modals/ListAddRemoveUsers.tsx:142
+#: src/view/screens/PreferencesFollowingFeed.tsx:311
+#: src/view/screens/Settings/ExportCarDialog.tsx:94
+#: src/view/screens/Settings/ExportCarDialog.tsx:96
+msgid "Done"
msgstr ""
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86
-#: src/view/com/modals/EditImage.tsx:333
+#: src/view/com/modals/EditImage.tsx:334
#: src/view/com/modals/ListAddRemoveUsers.tsx:144
#: src/view/com/modals/SelfLabel.tsx:157
#: src/view/com/modals/Threadgate.tsx:129
@@ -1129,72 +1397,68 @@ msgctxt "action"
msgid "Done"
msgstr ""
-#: src/view/com/auth/server-input/index.tsx:165
-#: src/view/com/auth/server-input/index.tsx:166
-#: src/view/com/modals/AddAppPasswords.tsx:226
-#: src/view/com/modals/AltImage.tsx:139
-#: src/view/com/modals/ContentFilteringSettings.tsx:88
-#: src/view/com/modals/ContentFilteringSettings.tsx:96
-#: src/view/com/modals/crop-image/CropImage.web.tsx:152
-#: src/view/com/modals/InviteCodes.tsx:80
-#: src/view/com/modals/InviteCodes.tsx:123
-#: src/view/com/modals/ListAddRemoveUsers.tsx:142
-#: src/view/screens/PreferencesHomeFeed.tsx:311
-#: src/view/screens/Settings/ExportCarDialog.tsx:93
-#: src/view/screens/Settings/ExportCarDialog.tsx:94
-msgid "Done"
-msgstr ""
-
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:42
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:43
msgid "Done{extraText}"
msgstr ""
-#: src/view/com/auth/login/ChooseAccountForm.tsx:45
-msgid "Double tap to sign in"
-msgstr ""
+#: src/view/com/auth/login/ChooseAccountForm.tsx:46
+#~ msgid "Double tap to sign in"
+#~ msgstr ""
#: src/view/screens/Settings/index.tsx:755
-msgid "Download Bluesky account data (repository)"
-msgstr ""
+#~ msgid "Download Bluesky account data (repository)"
+#~ msgstr ""
#: src/view/screens/Settings/ExportCarDialog.tsx:59
#: src/view/screens/Settings/ExportCarDialog.tsx:63
msgid "Download CAR file"
msgstr ""
-#: src/view/com/composer/text-input/TextInput.web.tsx:247
+#: src/view/com/composer/text-input/TextInput.web.tsx:249
msgid "Drop to add images"
msgstr ""
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:111
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:120
msgid "Due to Apple policies, adult content can only be enabled on the web after completing sign up."
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:185
+#: src/view/com/modals/ChangeHandle.tsx:258
+msgid "e.g. alice"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:186
msgid "e.g. Alice Roberts"
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:203
+#: src/view/com/modals/ChangeHandle.tsx:380
+msgid "e.g. alice.com"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:204
msgid "e.g. Artist, dog-lover, and avid reader."
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:283
-msgid "e.g. Great Posters"
+#: src/lib/moderation/useGlobalLabelStrings.ts:43
+msgid "E.g. artistic nudes."
msgstr ""
#: src/view/com/modals/CreateOrEditList.tsx:284
+msgid "e.g. Great Posters"
+msgstr ""
+
+#: src/view/com/modals/CreateOrEditList.tsx:285
msgid "e.g. Spammers"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:312
+#: src/view/com/modals/CreateOrEditList.tsx:313
msgid "e.g. The posters who never miss."
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:313
+#: src/view/com/modals/CreateOrEditList.tsx:314
msgid "e.g. Users that repeatedly reply with ads."
msgstr ""
-#: src/view/com/modals/InviteCodes.tsx:96
+#: src/view/com/modals/InviteCodes.tsx:97
msgid "Each code works once. You'll receive more invite codes periodically."
msgstr ""
@@ -1203,50 +1467,58 @@ msgctxt "action"
msgid "Edit"
msgstr ""
+#: src/view/com/util/UserAvatar.tsx:299
+#: src/view/com/util/UserBanner.tsx:85
+msgid "Edit avatar"
+msgstr ""
+
#: src/view/com/composer/photos/Gallery.tsx:144
-#: src/view/com/modals/EditImage.tsx:207
+#: src/view/com/modals/EditImage.tsx:208
msgid "Edit image"
msgstr ""
-#: src/view/screens/ProfileList.tsx:432
+#: src/view/screens/ProfileList.tsx:403
msgid "Edit list details"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:250
+#: src/view/com/modals/CreateOrEditList.tsx:251
msgid "Edit Moderation List"
msgstr ""
-#: src/Navigation.tsx:242
+#: src/Navigation.tsx:256
#: src/view/screens/Feeds.tsx:434
#: src/view/screens/SavedFeeds.tsx:84
msgid "Edit My Feeds"
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:152
+#: src/view/com/modals/EditProfile.tsx:153
msgid "Edit my profile"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:417
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:171
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:168
msgid "Edit profile"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:422
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:174
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:171
msgid "Edit Profile"
msgstr ""
-#: src/view/screens/Feeds.tsx:356
+#: src/view/com/home/HomeHeaderLayout.web.tsx:62
+#: src/view/screens/Feeds.tsx:355
msgid "Edit Saved Feeds"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:245
+#: src/view/com/modals/CreateOrEditList.tsx:246
msgid "Edit User List"
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:193
+#: src/view/com/modals/EditProfile.tsx:194
msgid "Edit your display name"
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:211
+#: src/view/com/modals/EditProfile.tsx:212
msgid "Edit your profile description"
msgstr ""
@@ -1254,17 +1526,12 @@ msgstr ""
msgid "Education"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:195
-#: src/view/com/auth/create/Step2.tsx:194
-#: src/view/com/auth/create/Step2.tsx:269
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:156
+#: src/screens/Signup/StepInfo/index.tsx:80
#: src/view/com/modals/ChangeEmail.tsx:141
-#: src/view/com/modals/Waitlist.tsx:88
msgid "Email"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:186
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:147
+#: src/screens/Login/ForgotPasswordForm.tsx:99
msgid "Email address"
msgstr ""
@@ -1281,69 +1548,95 @@ msgstr ""
msgid "Email verified"
msgstr ""
-#: src/view/screens/Settings/index.tsx:312
+#: src/view/screens/Settings/index.tsx:331
msgid "Email:"
msgstr ""
-#: src/view/com/modals/EmbedConsent.tsx:113
+#: src/components/dialogs/EmbedConsent.tsx:101
msgid "Enable {0} only"
msgstr ""
-#: src/view/com/modals/ContentFilteringSettings.tsx:167
+#: src/screens/Moderation/index.tsx:329
+msgid "Enable adult content"
+msgstr ""
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:94
msgid "Enable Adult Content"
msgstr ""
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:76
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:77
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:79
msgid "Enable adult content in your feeds"
msgstr ""
-#: src/view/com/modals/EmbedConsent.tsx:97
-msgid "Enable External Media"
+#: src/components/dialogs/EmbedConsent.tsx:82
+#: src/components/dialogs/EmbedConsent.tsx:89
+msgid "Enable external media"
msgstr ""
+#: src/view/com/modals/EmbedConsent.tsx:97
+#~ msgid "Enable External Media"
+#~ msgstr ""
+
#: src/view/screens/PreferencesExternalEmbeds.tsx:75
msgid "Enable media players for"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:147
+#: src/view/screens/PreferencesFollowingFeed.tsx:147
msgid "Enable this setting to only see replies between people you follow."
msgstr ""
-#: src/view/screens/Profile.tsx:455
+#: src/components/dialogs/EmbedConsent.tsx:94
+msgid "Enable this source only"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:339
+msgid "Enabled"
+msgstr ""
+
+#: src/screens/Profile/Sections/Feed.tsx:84
msgid "End of feed"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:166
+#: src/view/com/modals/AddAppPasswords.tsx:167
msgid "Enter a name for this App Password"
msgstr ""
+#: src/screens/Login/SetNewPasswordForm.tsx:139
+msgid "Enter a password"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:99
+#: src/components/dialogs/MutedWords.tsx:100
+msgid "Enter a word or tag"
+msgstr ""
+
#: src/view/com/modals/VerifyEmail.tsx:105
msgid "Enter Confirmation Code"
msgstr ""
-#: src/view/com/modals/ChangePassword.tsx:151
+#: src/view/com/modals/ChangePassword.tsx:153
msgid "Enter the code you received to change your password."
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:371
+#: src/view/com/modals/ChangeHandle.tsx:370
msgid "Enter the domain you want to use"
msgstr ""
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:107
+#: src/screens/Login/ForgotPasswordForm.tsx:119
msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password."
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:247
-#: src/view/com/modals/BirthDateSettings.tsx:74
+#: src/components/dialogs/BirthDateSettings.tsx:108
msgid "Enter your birth date"
msgstr ""
#: src/view/com/modals/Waitlist.tsx:78
-msgid "Enter your email"
-msgstr ""
+#~ msgid "Enter your email"
+#~ msgstr ""
-#: src/view/com/auth/create/Step1.tsx:191
+#: src/screens/Login/ForgotPasswordForm.tsx:105
+#: src/screens/Signup/StepInfo/index.tsx:91
msgid "Enter your email address"
msgstr ""
@@ -1356,14 +1649,18 @@ msgid "Enter your new email address below."
msgstr ""
#: src/view/com/auth/create/Step2.tsx:188
-msgid "Enter your phone number"
-msgstr ""
+#~ msgid "Enter your phone number"
+#~ msgstr ""
-#: src/view/com/auth/login/Login.tsx:99
+#: src/screens/Login/index.tsx:101
msgid "Enter your username and password"
msgstr ""
-#: src/view/screens/Search/Search.tsx:109
+#: src/screens/Signup/StepCaptcha/index.tsx:49
+msgid "Error receiving captcha response."
+msgstr ""
+
+#: src/view/screens/Search/Search.tsx:111
msgid "Error:"
msgstr ""
@@ -1371,24 +1668,36 @@ msgstr ""
msgid "Everybody"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:150
+#: src/lib/moderation/useReportOptions.ts:66
+msgid "Excessive mentions or replies"
+msgstr ""
+
+#: src/view/com/modals/DeleteAccount.tsx:230
+msgid "Exits account deletion process"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:151
msgid "Exits handle change process"
msgstr ""
-#: src/view/com/lightbox/Lightbox.web.tsx:120
+#: src/view/com/modals/crop-image/CropImage.web.tsx:136
+msgid "Exits image cropping process"
+msgstr ""
+
+#: src/view/com/lightbox/Lightbox.web.tsx:130
msgid "Exits image view"
msgstr ""
#: src/view/com/modals/ListAddRemoveUsers.tsx:88
-#: src/view/shell/desktop/Search.tsx:235
+#: src/view/shell/desktop/Search.tsx:236
msgid "Exits inputting search query"
msgstr ""
#: src/view/com/modals/Waitlist.tsx:138
-msgid "Exits signing up for waitlist with {email}"
-msgstr ""
+#~ msgid "Exits signing up for waitlist with {email}"
+#~ msgstr ""
-#: src/view/com/lightbox/Lightbox.web.tsx:163
+#: src/view/com/lightbox/Lightbox.web.tsx:183
msgid "Expand alt text"
msgstr ""
@@ -1397,44 +1706,53 @@ msgstr ""
msgid "Expand or collapse the full post you are replying to"
msgstr ""
-#: src/view/screens/Settings/index.tsx:753
+#: src/lib/moderation/useGlobalLabelStrings.ts:47
+msgid "Explicit or potentially disturbing media."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:35
+msgid "Explicit sexual images."
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:777
msgid "Export my data"
msgstr ""
#: src/view/screens/Settings/ExportCarDialog.tsx:44
-#: src/view/screens/Settings/index.tsx:764
+#: src/view/screens/Settings/index.tsx:788
msgid "Export My Data"
msgstr ""
-#: src/view/com/modals/EmbedConsent.tsx:64
+#: src/components/dialogs/EmbedConsent.tsx:55
+#: src/components/dialogs/EmbedConsent.tsx:59
msgid "External Media"
msgstr ""
-#: src/view/com/modals/EmbedConsent.tsx:75
+#: src/components/dialogs/EmbedConsent.tsx:71
#: src/view/screens/PreferencesExternalEmbeds.tsx:66
msgid "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."
msgstr ""
-#: src/Navigation.tsx:258
+#: src/Navigation.tsx:275
#: src/view/screens/PreferencesExternalEmbeds.tsx:52
-#: src/view/screens/Settings/index.tsx:657
+#: src/view/screens/Settings/index.tsx:677
msgid "External Media Preferences"
msgstr ""
-#: src/view/screens/Settings/index.tsx:648
+#: src/view/screens/Settings/index.tsx:668
msgid "External media settings"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:115
-#: src/view/com/modals/AddAppPasswords.tsx:119
+#: src/view/com/modals/AddAppPasswords.tsx:116
+#: src/view/com/modals/AddAppPasswords.tsx:120
msgid "Failed to create app password."
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:206
+#: src/view/com/modals/CreateOrEditList.tsx:207
msgid "Failed to create the list. Check your internet connection and try again."
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:88
+#: src/view/com/util/forms/PostDropdownBtn.tsx:125
msgid "Failed to delete post, please try again"
msgstr ""
@@ -1443,34 +1761,39 @@ msgstr ""
msgid "Failed to load recommended feeds"
msgstr ""
-#: src/Navigation.tsx:192
+#: src/view/com/lightbox/Lightbox.tsx:83
+msgid "Failed to save image: {0}"
+msgstr ""
+
+#: src/Navigation.tsx:196
msgid "Feed"
msgstr ""
-#: src/view/com/feeds/FeedSourceCard.tsx:229
+#: src/view/com/feeds/FeedSourceCard.tsx:218
msgid "Feed by {0}"
msgstr ""
-#: src/view/screens/Feeds.tsx:631
+#: src/view/screens/Feeds.tsx:605
msgid "Feed offline"
msgstr ""
#: src/view/com/feeds/FeedPage.tsx:143
-msgid "Feed Preferences"
-msgstr ""
+#~ msgid "Feed Preferences"
+#~ msgstr ""
-#: src/view/shell/desktop/RightNav.tsx:69
-#: src/view/shell/Drawer.tsx:311
+#: src/view/shell/desktop/RightNav.tsx:61
+#: src/view/shell/Drawer.tsx:314
msgid "Feedback"
msgstr ""
-#: src/Navigation.tsx:442
-#: src/view/screens/Feeds.tsx:548
-#: src/view/screens/Profile.tsx:184
-#: src/view/shell/bottom-bar/BottomBar.tsx:181
-#: src/view/shell/desktop/LeftNav.tsx:342
-#: src/view/shell/Drawer.tsx:476
-#: src/view/shell/Drawer.tsx:477
+#: src/Navigation.tsx:464
+#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:524
+#: src/view/screens/Profile.tsx:194
+#: src/view/shell/bottom-bar/BottomBar.tsx:191
+#: src/view/shell/desktop/LeftNav.tsx:346
+#: src/view/shell/Drawer.tsx:479
+#: src/view/shell/Drawer.tsx:480
msgid "Feeds"
msgstr ""
@@ -1490,12 +1813,20 @@ msgstr ""
msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information."
msgstr ""
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:70
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:80
msgid "Feeds can be topical as well!"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:151
-msgid "Finalizing"
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "File Contents"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:66
+msgid "Filter from feeds"
+msgstr ""
+
+#: src/screens/Onboarding/StepFinished.tsx:155
+msgid "Finalizing"
msgstr ""
#: src/view/com/posts/CustomFeedEmptyState.tsx:47
@@ -1504,22 +1835,26 @@ msgstr ""
msgid "Find accounts to follow"
msgstr ""
-#: src/view/screens/Search/Search.tsx:439
+#: src/view/screens/Search/Search.tsx:442
msgid "Find users on Bluesky"
msgstr ""
-#: src/view/screens/Search/Search.tsx:437
+#: src/view/screens/Search/Search.tsx:440
msgid "Find users with the search tool on the right"
msgstr ""
-#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:155
msgid "Finding similar accounts..."
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:111
-msgid "Fine-tune the content you see on your home screen."
+#: src/view/screens/PreferencesFollowingFeed.tsx:111
+msgid "Fine-tune the content you see on your Following feed."
msgstr ""
+#: src/view/screens/PreferencesHomeFeed.tsx:111
+#~ msgid "Fine-tune the content you see on your home screen."
+#~ msgstr ""
+
#: src/view/screens/PreferencesThreads.tsx:60
msgid "Fine-tune the discussion threads."
msgstr ""
@@ -1528,41 +1863,52 @@ msgstr ""
msgid "Fitness"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:131
+#: src/screens/Onboarding/StepFinished.tsx:135
msgid "Flexible"
msgstr ""
-#: src/view/com/modals/EditImage.tsx:115
+#: src/view/com/modals/EditImage.tsx:116
msgid "Flip horizontal"
msgstr ""
-#: src/view/com/modals/EditImage.tsx:120
-#: src/view/com/modals/EditImage.tsx:287
+#: src/view/com/modals/EditImage.tsx:121
+#: src/view/com/modals/EditImage.tsx:288
msgid "Flip vertically"
msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:181
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:512
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:189
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:236
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:146
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
msgid "Follow"
msgstr ""
-#: src/view/com/profile/FollowButton.tsx:64
+#: src/view/com/profile/FollowButton.tsx:69
msgctxt "action"
msgid "Follow"
msgstr ""
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:58
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:122
-#: src/view/com/profile/ProfileHeader.tsx:503
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:221
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:128
msgid "Follow {0}"
msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:179
+#: src/view/com/profile/ProfileMenu.tsx:242
+#: src/view/com/profile/ProfileMenu.tsx:253
+msgid "Follow Account"
+msgstr ""
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:187
msgid "Follow All"
msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:174
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:144
+msgid "Follow Back"
+msgstr ""
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:182
msgid "Follow selected accounts and continue to the next step"
msgstr ""
@@ -1570,7 +1916,7 @@ msgstr ""
msgid "Follow some users to get started. We can recommend you more users based on who you find interesting."
msgstr ""
-#: src/view/com/profile/ProfileCard.tsx:194
+#: src/view/com/profile/ProfileCard.tsx:216
msgid "Followed by {0}"
msgstr ""
@@ -1578,29 +1924,43 @@ msgstr ""
msgid "Followed users"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:154
+#: src/view/screens/PreferencesFollowingFeed.tsx:154
msgid "Followed users only"
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:166
+#: src/view/com/notifications/FeedItem.tsx:170
msgid "followed you"
msgstr ""
+#: src/view/com/profile/ProfileFollowers.tsx:104
#: src/view/screens/ProfileFollowers.tsx:25
msgid "Followers"
msgstr ""
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:494
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:234
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:149
+#: src/view/com/profile/ProfileFollows.tsx:104
#: src/view/screens/ProfileFollows.tsx:25
msgid "Following"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:148
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:93
msgid "Following {0}"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:545
+#: src/view/screens/Settings/index.tsx:553
+msgid "Following feed preferences"
+msgstr ""
+
+#: src/Navigation.tsx:262
+#: src/view/com/home/HomeHeaderLayout.web.tsx:50
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:84
+#: src/view/screens/PreferencesFollowingFeed.tsx:104
+#: src/view/screens/Settings/index.tsx:562
+msgid "Following Feed Preferences"
+msgstr ""
+
+#: src/screens/Profile/Header/Handle.tsx:24
msgid "Follows you"
msgstr ""
@@ -1612,28 +1972,45 @@ msgstr ""
msgid "Food"
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:111
+#: src/view/com/modals/DeleteAccount.tsx:110
msgid "For security reasons, we'll need to send a confirmation code to your email address."
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:209
+#: src/view/com/modals/AddAppPasswords.tsx:210
msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one."
msgstr ""
+#: src/view/com/auth/login/LoginForm.tsx:244
+#~ msgid "Forgot"
+#~ msgstr ""
+
#: src/view/com/auth/login/LoginForm.tsx:241
-msgid "Forgot"
+#~ msgid "Forgot password"
+#~ msgstr ""
+
+#: src/screens/Login/index.tsx:129
+#: src/screens/Login/index.tsx:144
+msgid "Forgot Password"
msgstr ""
-#: src/view/com/auth/login/LoginForm.tsx:238
-msgid "Forgot password"
+#: src/screens/Login/LoginForm.tsx:201
+msgid "Forgot password?"
msgstr ""
-#: src/view/com/auth/login/Login.tsx:127
-#: src/view/com/auth/login/Login.tsx:143
-msgid "Forgot Password"
+#: src/screens/Login/LoginForm.tsx:212
+msgid "Forgot?"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:52
+msgid "Frequently Posts Unwanted Content"
+msgstr ""
+
+#: src/screens/Hashtag.tsx:109
+#: src/screens/Hashtag.tsx:149
+msgid "From @{sanitizedAuthor}"
msgstr ""
-#: src/view/com/posts/FeedItem.tsx:189
+#: src/view/com/posts/FeedItem.tsx:179
msgctxt "from-feed"
msgid "From <0/>"
msgstr ""
@@ -1647,100 +2024,144 @@ msgstr ""
msgid "Get Started"
msgstr ""
-#: src/view/com/auth/LoggedOut.tsx:81
+#: src/lib/moderation/useReportOptions.ts:37
+msgid "Glaring violations of law or terms of service"
+msgstr ""
+
+#: src/components/moderation/ScreenHider.tsx:151
+#: src/components/moderation/ScreenHider.tsx:160
#: src/view/com/auth/LoggedOut.tsx:82
-#: src/view/com/util/moderation/ScreenHider.tsx:123
-#: src/view/shell/desktop/LeftNav.tsx:104
+#: src/view/com/auth/LoggedOut.tsx:83
+#: src/view/screens/NotFound.tsx:55
+#: src/view/screens/ProfileFeed.tsx:112
+#: src/view/screens/ProfileList.tsx:916
+#: src/view/shell/desktop/LeftNav.tsx:108
msgid "Go back"
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:105
-#: src/view/screens/ProfileFeed.tsx:110
-#: src/view/screens/ProfileList.tsx:897
-#: src/view/screens/ProfileList.tsx:902
+#: src/components/Error.tsx:91
+#: src/screens/Profile/ErrorState.tsx:62
+#: src/screens/Profile/ErrorState.tsx:66
+#: src/view/screens/NotFound.tsx:54
+#: src/view/screens/ProfileFeed.tsx:117
+#: src/view/screens/ProfileList.tsx:921
msgid "Go Back"
msgstr ""
-#: src/screens/Onboarding/Layout.tsx:104
-#: src/screens/Onboarding/Layout.tsx:193
+#: src/components/ReportDialog/SelectReportOptionView.tsx:73
+#: src/components/ReportDialog/SubmitView.tsx:104
+#: src/screens/Onboarding/Layout.tsx:102
+#: src/screens/Onboarding/Layout.tsx:191
+#: src/screens/Signup/index.tsx:173
msgid "Go back to previous step"
msgstr ""
-#: src/view/screens/Search/Search.tsx:724
-#: src/view/shell/desktop/Search.tsx:262
+#: src/view/screens/NotFound.tsx:55
+msgid "Go home"
+msgstr ""
+
+#: src/view/screens/NotFound.tsx:54
+msgid "Go Home"
+msgstr ""
+
+#: src/view/screens/Search/Search.tsx:749
+#: src/view/shell/desktop/Search.tsx:263
msgid "Go to @{queryMaybeHandle}"
msgstr ""
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:189
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:218
-#: src/view/com/auth/login/LoginForm.tsx:288
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:195
-#: src/view/com/modals/ChangePassword.tsx:165
+#: src/screens/Login/ForgotPasswordForm.tsx:172
+#: src/view/com/modals/ChangePassword.tsx:167
msgid "Go to next"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:265
+#: src/lib/moderation/useGlobalLabelStrings.ts:46
+msgid "Graphic Media"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:266
msgid "Handle"
msgstr ""
-#: src/view/com/auth/create/CreateAccount.tsx:197
+#: src/lib/moderation/useReportOptions.ts:32
+msgid "Harassment, trolling, or intolerance"
+msgstr ""
+
+#: src/Navigation.tsx:282
+msgid "Hashtag"
+msgstr ""
+
+#: src/components/RichText.tsx:188
+#~ msgid "Hashtag: {tag}"
+#~ msgstr ""
+
+#: src/components/RichText.tsx:191
+msgid "Hashtag: #{tag}"
+msgstr ""
+
+#: src/screens/Signup/index.tsx:217
msgid "Having trouble?"
msgstr ""
-#: src/view/shell/desktop/RightNav.tsx:98
-#: src/view/shell/Drawer.tsx:321
+#: src/view/shell/desktop/RightNav.tsx:90
+#: src/view/shell/Drawer.tsx:324
msgid "Help"
msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:132
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:140
msgid "Here are some accounts for you to follow"
msgstr ""
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:79
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:89
msgid "Here are some popular topical feeds. You can choose to follow as many as you like."
msgstr ""
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:74
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:84
msgid "Here are some topical feeds based on your interests: {interestsText}. You can choose to follow as many as you like."
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:153
+#: src/view/com/modals/AddAppPasswords.tsx:154
msgid "Here is your app password."
msgstr ""
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:41
-#: src/view/com/modals/ContentFilteringSettings.tsx:251
-#: src/view/com/util/moderation/ContentHider.tsx:105
-#: src/view/com/util/moderation/PostHider.tsx:108
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:134
+#: src/components/moderation/PostHider.tsx:107
+#: src/lib/moderation/useLabelBehaviorDescription.ts:15
+#: src/lib/moderation/useLabelBehaviorDescription.ts:20
+#: src/lib/moderation/useLabelBehaviorDescription.ts:25
+#: src/lib/moderation/useLabelBehaviorDescription.ts:30
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:52
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:76
+#: src/view/com/util/forms/PostDropdownBtn.tsx:328
msgid "Hide"
msgstr ""
-#: src/view/com/modals/ContentFilteringSettings.tsx:224
-#: src/view/com/notifications/FeedItem.tsx:325
+#: src/view/com/notifications/FeedItem.tsx:329
msgctxt "action"
msgid "Hide"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:187
+#: src/view/com/util/forms/PostDropdownBtn.tsx:276
+#: src/view/com/util/forms/PostDropdownBtn.tsx:278
msgid "Hide post"
msgstr ""
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:67
+#: src/components/moderation/PostHider.tsx:64
msgid "Hide the content"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:191
+#: src/view/com/util/forms/PostDropdownBtn.tsx:325
msgid "Hide this post?"
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:315
+#: src/view/com/notifications/FeedItem.tsx:319
msgid "Hide user list"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:486
-msgid "Hides posts from {0} in your feed"
-msgstr ""
+#: src/view/com/profile/ProfileHeader.tsx:487
+#~ msgid "Hides posts from {0} in your feed"
+#~ msgstr ""
#: src/view/com/posts/FeedErrorMessage.tsx:111
msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue."
@@ -1762,11 +2183,19 @@ msgstr ""
msgid "Hmm, we're having trouble finding this feed. It may have been deleted."
msgstr ""
-#: src/Navigation.tsx:432
-#: src/view/shell/bottom-bar/BottomBar.tsx:137
-#: src/view/shell/desktop/LeftNav.tsx:306
-#: src/view/shell/Drawer.tsx:398
-#: src/view/shell/Drawer.tsx:399
+#: src/screens/Moderation/index.tsx:59
+msgid "Hmmmm, it seems we're having trouble loading this data. See below for more details. If this issue persists, please contact us."
+msgstr ""
+
+#: src/screens/Profile/ErrorState.tsx:31
+msgid "Hmmmm, we couldn't load that moderation service."
+msgstr ""
+
+#: src/Navigation.tsx:454
+#: src/view/shell/bottom-bar/BottomBar.tsx:147
+#: src/view/shell/desktop/LeftNav.tsx:310
+#: src/view/shell/Drawer.tsx:401
+#: src/view/shell/Drawer.tsx:402
msgid "Home"
msgstr ""
@@ -1774,11 +2203,17 @@ msgstr ""
#: src/view/com/pager/FeedsTabBarMobile.tsx:123
#: src/view/screens/PreferencesHomeFeed.tsx:104
#: src/view/screens/Settings/index.tsx:543
-msgid "Home Feed Preferences"
+#~ msgid "Home Feed Preferences"
+#~ msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:420
+msgid "Host:"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:78
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:120
+#: src/screens/Login/ForgotPasswordForm.tsx:89
+#: src/screens/Login/LoginForm.tsx:134
+#: src/screens/Signup/StepInfo/index.tsx:40
+#: src/view/com/modals/ChangeHandle.tsx:281
msgid "Hosting provider"
msgstr ""
@@ -1794,11 +2229,11 @@ msgstr ""
msgid "I have a confirmation code"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:283
+#: src/view/com/modals/ChangeHandle.tsx:284
msgid "I have my own domain"
msgstr ""
-#: src/view/com/lightbox/Lightbox.web.tsx:165
+#: src/view/com/lightbox/Lightbox.web.tsx:185
msgid "If alt text is long, toggles alt text expanded state"
msgstr ""
@@ -1806,84 +2241,108 @@ msgstr ""
msgid "If none are selected, suitable for all ages."
msgstr ""
-#: src/view/com/modals/ChangePassword.tsx:146
+#: src/screens/Signup/StepInfo/Policies.tsx:83
+msgid "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."
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:610
+msgid "If you delete this list, you won't be able to recover it."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:316
+msgid "If you remove this post, you won't be able to recover it."
+msgstr ""
+
+#: src/view/com/modals/ChangePassword.tsx:148
msgid "If you want to change your password, we will send you a code to verify that this is your account."
msgstr ""
+#: src/lib/moderation/useReportOptions.ts:36
+msgid "Illegal and Urgent"
+msgstr ""
+
#: src/view/com/util/images/Gallery.tsx:38
msgid "Image"
msgstr ""
-#: src/view/com/modals/AltImage.tsx:120
+#: src/view/com/modals/AltImage.tsx:121
msgid "Image alt text"
msgstr ""
#: src/view/com/util/UserAvatar.tsx:311
#: src/view/com/util/UserBanner.tsx:118
-msgid "Image options"
+#~ msgid "Image options"
+#~ msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:47
+msgid "Impersonation or false claims about identity or affiliation"
msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:138
+#: src/screens/Login/SetNewPasswordForm.tsx:127
msgid "Input code sent to your email for password reset"
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:184
+#: src/view/com/modals/DeleteAccount.tsx:183
msgid "Input confirmation code for account deletion"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:196
-msgid "Input email for Bluesky account"
-msgstr ""
+#: src/view/com/auth/create/Step1.tsx:177
+#~ msgid "Input email for Bluesky account"
+#~ msgstr ""
-#: src/view/com/auth/create/Step1.tsx:154
-msgid "Input invite code to proceed"
-msgstr ""
+#: src/view/com/auth/create/Step1.tsx:151
+#~ msgid "Input invite code to proceed"
+#~ msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/AddAppPasswords.tsx:181
msgid "Input name for app password"
msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:162
+#: src/screens/Login/SetNewPasswordForm.tsx:151
msgid "Input new password"
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:203
+#: src/view/com/modals/DeleteAccount.tsx:202
msgid "Input password for account deletion"
msgstr ""
#: src/view/com/auth/create/Step2.tsx:196
-msgid "Input phone number for SMS verification"
-msgstr ""
+#~ msgid "Input phone number for SMS verification"
+#~ msgstr ""
-#: src/view/com/auth/login/LoginForm.tsx:230
+#: src/screens/Login/LoginForm.tsx:195
msgid "Input the password tied to {identifier}"
msgstr ""
-#: src/view/com/auth/login/LoginForm.tsx:197
+#: src/screens/Login/LoginForm.tsx:168
msgid "Input the username or email address you used at signup"
msgstr ""
#: src/view/com/auth/create/Step2.tsx:271
-msgid "Input the verification code we have texted to you"
-msgstr ""
+#~ msgid "Input the verification code we have texted to you"
+#~ msgstr ""
#: src/view/com/modals/Waitlist.tsx:90
-msgid "Input your email to get on the Bluesky waitlist"
-msgstr ""
+#~ msgid "Input your email to get on the Bluesky waitlist"
+#~ msgstr ""
-#: src/view/com/auth/login/LoginForm.tsx:229
+#: src/screens/Login/LoginForm.tsx:194
msgid "Input your password"
msgstr ""
-#: src/view/com/auth/create/Step3.tsx:42
+#: src/view/com/modals/ChangeHandle.tsx:389
+msgid "Input your preferred hosting provider"
+msgstr ""
+
+#: src/screens/Signup/StepHandle.tsx:62
msgid "Input your user handle"
msgstr ""
-#: src/view/com/post-thread/PostThreadItem.tsx:225
+#: src/view/com/post-thread/PostThreadItem.tsx:221
msgid "Invalid or unsupported post record"
msgstr ""
-#: src/view/com/auth/login/LoginForm.tsx:113
+#: src/screens/Login/LoginForm.tsx:114
msgid "Invalid username or password"
msgstr ""
@@ -1891,20 +2350,19 @@ msgstr ""
#~ msgid "Invite"
#~ msgstr ""
-#: src/view/com/modals/InviteCodes.tsx:93
+#: src/view/com/modals/InviteCodes.tsx:94
msgid "Invite a Friend"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:144
-#: src/view/com/auth/create/Step1.tsx:153
+#: src/screens/Signup/StepInfo/index.tsx:58
msgid "Invite code"
msgstr ""
-#: src/view/com/auth/create/state.ts:199
+#: src/screens/Signup/state.ts:278
msgid "Invite code not accepted. Check that you input it correctly and try again."
msgstr ""
-#: src/view/com/modals/InviteCodes.tsx:170
+#: src/view/com/modals/InviteCodes.tsx:171
msgid "Invite codes: {0} available"
msgstr ""
@@ -1912,83 +2370,120 @@ msgstr ""
#~ msgid "Invite codes: {invitesAvailable} available"
#~ msgstr ""
-#: src/view/com/modals/InviteCodes.tsx:169
+#: src/view/com/modals/InviteCodes.tsx:170
msgid "Invite codes: 1 available"
msgstr ""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:64
+#: src/screens/Onboarding/StepFollowingFeed.tsx:65
msgid "It shows posts from the people you follow as they happen."
msgstr ""
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:99
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:104
+#: src/view/com/auth/SplashScreen.web.tsx:172
msgid "Jobs"
msgstr ""
#: src/view/com/modals/Waitlist.tsx:67
-msgid "Join the waitlist"
-msgstr ""
+#~ msgid "Join the waitlist"
+#~ msgstr ""
-#: src/view/com/auth/create/Step1.tsx:170
#: src/view/com/auth/create/Step1.tsx:174
-msgid "Join the waitlist."
-msgstr ""
+#: src/view/com/auth/create/Step1.tsx:178
+#~ msgid "Join the waitlist."
+#~ msgstr ""
#: src/view/com/modals/Waitlist.tsx:128
-msgid "Join Waitlist"
-msgstr ""
+#~ msgid "Join Waitlist"
+#~ msgstr ""
#: src/screens/Onboarding/index.tsx:24
msgid "Journalism"
msgstr ""
+#: src/components/moderation/LabelsOnMe.tsx:59
+msgid "label has been placed on this {labelTarget}"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:144
+msgid "Labeled by {0}."
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:142
+msgid "Labeled by the author."
+msgstr ""
+
+#: src/view/screens/Profile.tsx:188
+msgid "Labels"
+msgstr ""
+
+#: src/screens/Profile/Sections/Labels.tsx:142
+msgid "Labels are annotations on users and content. They can be used to hide, warn, and categorize the network."
+msgstr ""
+
+#: src/components/moderation/LabelsOnMe.tsx:61
+msgid "labels have been placed on this {labelTarget}"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:62
+msgid "Labels on your account"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:64
+msgid "Labels on your content"
+msgstr ""
+
#: src/view/com/composer/select-language/SelectLangBtn.tsx:104
msgid "Language selection"
msgstr ""
-#: src/view/screens/Settings/index.tsx:594
+#: src/view/screens/Settings/index.tsx:614
msgid "Language settings"
msgstr ""
-#: src/Navigation.tsx:140
+#: src/Navigation.tsx:144
#: src/view/screens/LanguageSettings.tsx:89
msgid "Language Settings"
msgstr ""
-#: src/view/screens/Settings/index.tsx:603
+#: src/view/screens/Settings/index.tsx:623
msgid "Languages"
msgstr ""
#: src/view/com/auth/create/StepHeader.tsx:20
-msgid "Last step!"
-msgstr ""
+#~ msgid "Last step!"
+#~ msgstr ""
#: src/view/com/util/moderation/ContentHider.tsx:103
-msgid "Learn more"
-msgstr ""
+#~ msgid "Learn more"
+#~ msgstr ""
-#: src/view/com/util/moderation/PostAlerts.tsx:47
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:65
-#: src/view/com/util/moderation/ScreenHider.tsx:104
+#: src/components/moderation/ScreenHider.tsx:136
msgid "Learn More"
msgstr ""
-#: src/view/com/util/moderation/ContentHider.tsx:85
-#: src/view/com/util/moderation/PostAlerts.tsx:40
-#: src/view/com/util/moderation/PostHider.tsx:78
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:49
-#: src/view/com/util/moderation/ScreenHider.tsx:101
+#: src/components/moderation/ContentHider.tsx:65
+#: src/components/moderation/ContentHider.tsx:128
+msgid "Learn more about the moderation applied to this content."
+msgstr ""
+
+#: src/components/moderation/PostHider.tsx:85
+#: src/components/moderation/ScreenHider.tsx:125
msgid "Learn more about this warning"
msgstr ""
-#: src/view/screens/Moderation.tsx:243
+#: src/screens/Moderation/index.tsx:549
msgid "Learn more about what is public on Bluesky."
msgstr ""
+#: src/components/moderation/ContentHider.tsx:152
+msgid "Learn more."
+msgstr ""
+
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82
msgid "Leave them all unchecked to see any language."
msgstr ""
-#: src/view/com/modals/LinkWarning.tsx:51
+#: src/view/com/modals/LinkWarning.tsx:65
msgid "Leaving Bluesky"
msgstr ""
@@ -1996,63 +2491,72 @@ msgstr ""
msgid "left to go."
msgstr ""
-#: src/view/screens/Settings/index.tsx:278
+#: src/view/screens/Settings/index.tsx:296
msgid "Legacy storage cleared, you need to restart the app now."
msgstr ""
-#: src/view/com/auth/login/Login.tsx:128
-#: src/view/com/auth/login/Login.tsx:144
+#: src/screens/Login/index.tsx:130
+#: src/screens/Login/index.tsx:145
msgid "Let's get your password reset!"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:151
+#: src/screens/Onboarding/StepFinished.tsx:155
msgid "Let's go!"
msgstr ""
#: src/view/com/util/UserAvatar.tsx:248
#: src/view/com/util/UserBanner.tsx:62
-msgid "Library"
-msgstr ""
+#~ msgid "Library"
+#~ msgstr ""
-#: src/view/screens/Settings/index.tsx:479
+#: src/view/screens/Settings/index.tsx:498
msgid "Light"
msgstr ""
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Like"
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:591
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:258
+#: src/view/screens/ProfileFeed.tsx:573
msgid "Like this feed"
msgstr ""
-#: src/Navigation.tsx:197
+#: src/components/LikesDialog.tsx:87
+#: src/Navigation.tsx:201
+#: src/Navigation.tsx:206
msgid "Liked by"
msgstr ""
+#: src/screens/Profile/ProfileLabelerLikedBy.tsx:29
#: src/view/screens/PostLikedBy.tsx:27
#: src/view/screens/ProfileFeedLikedBy.tsx:27
msgid "Liked By"
msgstr ""
-#: src/view/com/feeds/FeedSourceCard.tsx:277
+#: src/view/com/feeds/FeedSourceCard.tsx:268
msgid "Liked by {0} {1}"
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:606
+#: src/components/LabelingServiceCard/index.tsx:72
+msgid "Liked by {count} {0}"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:278
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:292
+#: src/view/screens/ProfileFeed.tsx:588
msgid "Liked by {likeCount} {0}"
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:170
+#: src/view/com/notifications/FeedItem.tsx:174
msgid "liked your custom feed"
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:155
+#: src/view/com/notifications/FeedItem.tsx:159
msgid "liked your post"
msgstr ""
-#: src/view/screens/Profile.tsx:183
+#: src/view/screens/Profile.tsx:193
msgid "Likes"
msgstr ""
@@ -2060,67 +2564,68 @@ msgstr ""
msgid "Likes on this post"
msgstr ""
-#: src/Navigation.tsx:166
+#: src/Navigation.tsx:170
msgid "List"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:261
+#: src/view/com/modals/CreateOrEditList.tsx:262
msgid "List Avatar"
msgstr ""
-#: src/view/screens/ProfileList.tsx:323
+#: src/view/screens/ProfileList.tsx:311
msgid "List blocked"
msgstr ""
-#: src/view/com/feeds/FeedSourceCard.tsx:231
+#: src/view/com/feeds/FeedSourceCard.tsx:220
msgid "List by {0}"
msgstr ""
-#: src/view/screens/ProfileList.tsx:377
+#: src/view/screens/ProfileList.tsx:355
msgid "List deleted"
msgstr ""
-#: src/view/screens/ProfileList.tsx:282
+#: src/view/screens/ProfileList.tsx:283
msgid "List muted"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:275
+#: src/view/com/modals/CreateOrEditList.tsx:276
msgid "List Name"
msgstr ""
-#: src/view/screens/ProfileList.tsx:342
+#: src/view/screens/ProfileList.tsx:325
msgid "List unblocked"
msgstr ""
-#: src/view/screens/ProfileList.tsx:301
+#: src/view/screens/ProfileList.tsx:297
msgid "List unmuted"
msgstr ""
-#: src/Navigation.tsx:110
-#: src/view/screens/Profile.tsx:185
-#: src/view/shell/desktop/LeftNav.tsx:379
-#: src/view/shell/Drawer.tsx:492
-#: src/view/shell/Drawer.tsx:493
+#: src/Navigation.tsx:114
+#: src/view/screens/Profile.tsx:189
+#: src/view/screens/Profile.tsx:195
+#: src/view/shell/desktop/LeftNav.tsx:383
+#: src/view/shell/Drawer.tsx:495
+#: src/view/shell/Drawer.tsx:496
msgid "Lists"
msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:276
-#: src/view/com/post-thread/PostThread.tsx:284
-msgid "Load more posts"
-msgstr ""
+#: src/view/com/post-thread/PostThread.tsx:333
+#: src/view/com/post-thread/PostThread.tsx:341
+#~ msgid "Load more posts"
+#~ msgstr ""
#: src/view/screens/Notifications.tsx:159
msgid "Load new notifications"
msgstr ""
-#: src/view/com/feeds/FeedPage.tsx:190
-#: src/view/screens/Profile.tsx:440
-#: src/view/screens/ProfileFeed.tsx:494
-#: src/view/screens/ProfileList.tsx:680
+#: src/screens/Profile/Sections/Feed.tsx:70
+#: src/view/com/feeds/FeedPage.tsx:138
+#: src/view/screens/ProfileFeed.tsx:496
+#: src/view/screens/ProfileList.tsx:695
msgid "Load new posts"
msgstr ""
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:99
msgid "Loading..."
msgstr ""
@@ -2128,7 +2633,7 @@ msgstr ""
#~ msgid "Local dev server"
#~ msgstr ""
-#: src/Navigation.tsx:207
+#: src/Navigation.tsx:221
msgid "Log"
msgstr ""
@@ -2139,19 +2644,35 @@ msgstr ""
msgid "Log out"
msgstr ""
-#: src/view/screens/Moderation.tsx:136
+#: src/screens/Moderation/index.tsx:442
msgid "Logged-out visibility"
msgstr ""
-#: src/view/com/auth/login/ChooseAccountForm.tsx:133
+#: src/components/AccountList.tsx:54
msgid "Login to account that is not listed"
msgstr ""
-#: src/view/com/modals/LinkWarning.tsx:65
+#: src/screens/Login/SetNewPasswordForm.tsx:116
+msgid "Looks like XXXXX-XXXXX"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:79
msgid "Make sure this is where you intend to go!"
msgstr ""
-#: src/view/screens/Profile.tsx:182
+#: src/components/dialogs/MutedWords.tsx:82
+msgid "Manage your muted words and tags"
+msgstr ""
+
+#: src/view/com/auth/create/Step2.tsx:118
+#~ msgid "May not be longer than 253 characters"
+#~ msgstr ""
+
+#: src/view/com/auth/create/Step2.tsx:109
+#~ msgid "May only contain letters and numbers"
+#~ msgstr ""
+
+#: src/view/screens/Profile.tsx:192
msgid "Media"
msgstr ""
@@ -2163,115 +2684,178 @@ msgstr ""
msgid "Mentioned users"
msgstr ""
-#: src/view/com/util/ViewHeader.tsx:81
-#: src/view/screens/Search/Search.tsx:623
+#: src/view/com/util/ViewHeader.tsx:87
+#: src/view/screens/Search/Search.tsx:648
msgid "Menu"
msgstr ""
-#: src/view/com/posts/FeedErrorMessage.tsx:197
+#: src/view/com/posts/FeedErrorMessage.tsx:192
msgid "Message from server: {0}"
msgstr ""
-#: src/Navigation.tsx:115
-#: src/view/screens/Moderation.tsx:64
-#: src/view/screens/Settings/index.tsx:625
-#: src/view/shell/desktop/LeftNav.tsx:397
-#: src/view/shell/Drawer.tsx:511
-#: src/view/shell/Drawer.tsx:512
+#: src/lib/moderation/useReportOptions.ts:45
+msgid "Misleading Account"
+msgstr ""
+
+#: src/Navigation.tsx:119
+#: src/screens/Moderation/index.tsx:104
+#: src/view/screens/Settings/index.tsx:645
+#: src/view/shell/desktop/LeftNav.tsx:401
+#: src/view/shell/Drawer.tsx:514
+#: src/view/shell/Drawer.tsx:515
msgid "Moderation"
msgstr ""
-#: src/view/com/lists/ListCard.tsx:92
+#: src/components/moderation/ModerationDetailsDialog.tsx:112
+msgid "Moderation details"
+msgstr ""
+
+#: src/view/com/lists/ListCard.tsx:93
#: src/view/com/modals/UserAddRemoveLists.tsx:206
msgid "Moderation list by {0}"
msgstr ""
-#: src/view/screens/ProfileList.tsx:774
+#: src/view/screens/ProfileList.tsx:789
msgid "Moderation list by <0/>"
msgstr ""
-#: src/view/com/lists/ListCard.tsx:90
+#: src/view/com/lists/ListCard.tsx:91
#: src/view/com/modals/UserAddRemoveLists.tsx:204
-#: src/view/screens/ProfileList.tsx:772
+#: src/view/screens/ProfileList.tsx:787
msgid "Moderation list by you"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:197
+#: src/view/com/modals/CreateOrEditList.tsx:198
msgid "Moderation list created"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:183
+#: src/view/com/modals/CreateOrEditList.tsx:184
msgid "Moderation list updated"
msgstr ""
-#: src/view/screens/Moderation.tsx:95
+#: src/screens/Moderation/index.tsx:243
msgid "Moderation lists"
msgstr ""
-#: src/Navigation.tsx:120
+#: src/Navigation.tsx:124
#: src/view/screens/ModerationModlists.tsx:58
msgid "Moderation Lists"
msgstr ""
-#: src/view/screens/Settings/index.tsx:619
+#: src/view/screens/Settings/index.tsx:639
msgid "Moderation settings"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:35
+#: src/Navigation.tsx:216
+msgid "Moderation states"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:215
+msgid "Moderation tools"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:48
+#: src/lib/moderation/useModerationCauseDescription.ts:40
msgid "Moderator has chosen to set a general warning on the content."
msgstr ""
-#: src/view/shell/desktop/Feeds.tsx:63
+#: src/view/com/post-thread/PostThreadItem.tsx:541
+msgid "More"
+msgstr ""
+
+#: src/view/shell/desktop/Feeds.tsx:65
msgid "More feeds"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:522
-#: src/view/screens/ProfileFeed.tsx:362
-#: src/view/screens/ProfileList.tsx:616
+#: src/view/screens/ProfileList.tsx:599
msgid "More options"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:270
-msgid "More post options"
-msgstr ""
+#: src/view/com/util/forms/PostDropdownBtn.tsx:315
+#~ msgid "More post options"
+#~ msgstr ""
#: src/view/screens/PreferencesThreads.tsx:82
msgid "Most-liked replies first"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:326
+#: src/view/com/auth/create/Step2.tsx:122
+#~ msgid "Must be at least 3 characters"
+#~ msgstr ""
+
+#: src/components/TagMenu/index.tsx:249
+msgid "Mute"
+msgstr ""
+
+#: src/components/TagMenu/index.web.tsx:105
+msgid "Mute {truncatedTag}"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:279
+#: src/view/com/profile/ProfileMenu.tsx:286
msgid "Mute Account"
msgstr ""
-#: src/view/screens/ProfileList.tsx:543
+#: src/view/screens/ProfileList.tsx:518
msgid "Mute accounts"
msgstr ""
-#: src/view/screens/ProfileList.tsx:490
+#: src/components/TagMenu/index.tsx:209
+msgid "Mute all {displayTag} posts"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:211
+#~ msgid "Mute all {tag} posts"
+#~ msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:148
+msgid "Mute in tags only"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:133
+msgid "Mute in text & tags"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:461
+#: src/view/screens/ProfileList.tsx:624
msgid "Mute list"
msgstr ""
-#: src/view/screens/ProfileList.tsx:274
+#: src/view/screens/ProfileList.tsx:619
msgid "Mute these accounts?"
msgstr ""
-#: src/view/screens/ProfileList.tsx:278
-msgid "Mute this List"
+#: src/view/screens/ProfileList.tsx:279
+#~ msgid "Mute this List"
+#~ msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:126
+msgid "Mute this word in post text and tags"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:141
+msgid "Mute this word in tags only"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:257
msgid "Mute thread"
msgstr ""
-#: src/view/com/lists/ListCard.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:267
+#: src/view/com/util/forms/PostDropdownBtn.tsx:269
+msgid "Mute words & tags"
+msgstr ""
+
+#: src/view/com/lists/ListCard.tsx:102
msgid "Muted"
msgstr ""
-#: src/view/screens/Moderation.tsx:109
+#: src/screens/Moderation/index.tsx:255
msgid "Muted accounts"
msgstr ""
-#: src/Navigation.tsx:125
+#: src/Navigation.tsx:129
#: src/view/screens/ModerationMutedAccounts.tsx:107
msgid "Muted Accounts"
msgstr ""
@@ -2280,15 +2864,24 @@ msgstr ""
msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private."
msgstr ""
-#: src/view/screens/ProfileList.tsx:276
+#: src/lib/moderation/useModerationCauseDescription.ts:85
+msgid "Muted by \"{0}\""
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:231
+msgid "Muted words & tags"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:621
msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them."
msgstr ""
-#: src/view/com/modals/BirthDateSettings.tsx:56
+#: src/components/dialogs/BirthDateSettings.tsx:35
+#: src/components/dialogs/BirthDateSettings.tsx:38
msgid "My Birthday"
msgstr ""
-#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:663
msgid "My Feeds"
msgstr ""
@@ -2296,32 +2889,40 @@ msgstr ""
msgid "My Profile"
msgstr ""
-#: src/view/screens/Settings/index.tsx:582
+#: src/view/screens/Settings/index.tsx:596
+msgid "My saved feeds"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:602
msgid "My Saved Feeds"
msgstr ""
#: src/view/com/auth/server-input/index.tsx:118
-msgid "my-server.com"
-msgstr ""
+#~ msgid "my-server.com"
+#~ msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:179
-#: src/view/com/modals/CreateOrEditList.tsx:290
+#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/CreateOrEditList.tsx:291
msgid "Name"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:145
+#: src/view/com/modals/CreateOrEditList.tsx:146
msgid "Name is required"
msgstr ""
+#: src/lib/moderation/useReportOptions.ts:57
+#: src/lib/moderation/useReportOptions.ts:78
+#: src/lib/moderation/useReportOptions.ts:86
+msgid "Name or Description Violates Community Standards"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:25
msgid "Nature"
msgstr ""
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:190
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:219
-#: src/view/com/auth/login/LoginForm.tsx:289
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:196
-#: src/view/com/modals/ChangePassword.tsx:166
+#: src/screens/Login/ForgotPasswordForm.tsx:173
+#: src/screens/Login/LoginForm.tsx:254
+#: src/view/com/modals/ChangePassword.tsx:168
msgid "Navigates to the next screen"
msgstr ""
@@ -2329,20 +2930,32 @@ msgstr ""
msgid "Navigates to your profile"
msgstr ""
+#: src/components/ReportDialog/SelectReportOptionView.tsx:122
+msgid "Need to report a copyright violation?"
+msgstr ""
+
#: src/view/com/modals/EmbedConsent.tsx:107
#: src/view/com/modals/EmbedConsent.tsx:123
-msgid "Never load embeds from {0}"
-msgstr ""
+#~ msgid "Never load embeds from {0}"
+#~ msgstr ""
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:72
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:72
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:74
msgid "Never lose access to your followers and data."
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:119
+#: src/screens/Onboarding/StepFinished.tsx:123
msgid "Never lose access to your followers or data."
msgstr ""
+#: src/components/dialogs/MutedWords.tsx:293
+#~ msgid "Nevermind"
+#~ msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:519
+msgid "Nevermind, create a handle for me"
+msgstr ""
+
#: src/view/screens/Lists.tsx:76
msgctxt "action"
msgid "New"
@@ -2352,39 +2965,39 @@ msgstr ""
msgid "New"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:252
+#: src/view/com/modals/CreateOrEditList.tsx:253
msgid "New Moderation List"
msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:150
+#: src/view/com/modals/ChangePassword.tsx:212
msgid "New password"
msgstr ""
-#: src/view/com/modals/ChangePassword.tsx:215
+#: src/view/com/modals/ChangePassword.tsx:217
msgid "New Password"
msgstr ""
-#: src/view/com/feeds/FeedPage.tsx:201
+#: src/view/com/feeds/FeedPage.tsx:149
msgctxt "action"
msgid "New post"
msgstr ""
-#: src/view/screens/Feeds.tsx:581
+#: src/view/screens/Feeds.tsx:555
#: src/view/screens/Notifications.tsx:168
-#: src/view/screens/Profile.tsx:382
-#: src/view/screens/ProfileFeed.tsx:432
-#: src/view/screens/ProfileList.tsx:195
-#: src/view/screens/ProfileList.tsx:223
-#: src/view/shell/desktop/LeftNav.tsx:248
+#: src/view/screens/Profile.tsx:452
+#: src/view/screens/ProfileFeed.tsx:434
+#: src/view/screens/ProfileList.tsx:199
+#: src/view/screens/ProfileList.tsx:227
+#: src/view/shell/desktop/LeftNav.tsx:252
msgid "New post"
msgstr ""
-#: src/view/shell/desktop/LeftNav.tsx:258
+#: src/view/shell/desktop/LeftNav.tsx:262
msgctxt "action"
msgid "New Post"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:247
+#: src/view/com/modals/CreateOrEditList.tsx:248
msgid "New User List"
msgstr ""
@@ -2396,15 +3009,16 @@ msgstr ""
msgid "News"
msgstr ""
-#: src/view/com/auth/create/CreateAccount.tsx:161
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:182
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:192
-#: src/view/com/auth/login/LoginForm.tsx:291
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:187
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:198
+#: src/screens/Login/ForgotPasswordForm.tsx:143
+#: src/screens/Login/ForgotPasswordForm.tsx:150
+#: src/screens/Login/LoginForm.tsx:253
+#: src/screens/Login/LoginForm.tsx:260
+#: src/screens/Login/SetNewPasswordForm.tsx:174
+#: src/screens/Login/SetNewPasswordForm.tsx:180
+#: src/screens/Signup/index.tsx:205
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79
-#: src/view/com/modals/ChangePassword.tsx:251
#: src/view/com/modals/ChangePassword.tsx:253
+#: src/view/com/modals/ChangePassword.tsx:255
msgid "Next"
msgstr ""
@@ -2413,48 +3027,61 @@ msgctxt "action"
msgid "Next"
msgstr ""
-#: src/view/com/lightbox/Lightbox.web.tsx:149
+#: src/view/com/lightbox/Lightbox.web.tsx:169
msgid "Next image"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:200
-#: src/view/screens/PreferencesHomeFeed.tsx:235
-#: src/view/screens/PreferencesHomeFeed.tsx:272
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:200
+#: src/view/screens/PreferencesFollowingFeed.tsx:235
+#: src/view/screens/PreferencesFollowingFeed.tsx:272
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "No"
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:584
-#: src/view/screens/ProfileList.tsx:754
+#: src/view/screens/ProfileFeed.tsx:562
+#: src/view/screens/ProfileList.tsx:769
msgid "No description"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:169
+#: src/view/com/modals/ChangeHandle.tsx:405
+msgid "No DNS Panel"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:118
msgid "No longer following {0}"
msgstr ""
+#: src/screens/Signup/StepHandle.tsx:114
+msgid "No longer than 253 characters"
+msgstr ""
+
#: src/view/com/notifications/Feed.tsx:109
msgid "No notifications yet!"
msgstr ""
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:97
-#: src/view/com/composer/text-input/web/Autocomplete.tsx:191
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:101
+#: src/view/com/composer/text-input/web/Autocomplete.tsx:195
msgid "No result"
msgstr ""
-#: src/view/screens/Feeds.tsx:524
+#: src/components/Lists.tsx:183
+msgid "No results found"
+msgstr ""
+
+#: src/view/screens/Feeds.tsx:495
msgid "No results found for \"{query}\""
msgstr ""
#: src/view/com/modals/ListAddRemoveUsers.tsx:127
-#: src/view/screens/Search/Search.tsx:280
-#: src/view/screens/Search/Search.tsx:308
+#: src/view/screens/Search/Search.tsx:283
+#: src/view/screens/Search/Search.tsx:311
msgid "No results found for {query}"
msgstr ""
-#: src/view/com/modals/EmbedConsent.tsx:129
+#: src/components/dialogs/EmbedConsent.tsx:105
+#: src/components/dialogs/EmbedConsent.tsx:112
msgid "No thanks"
msgstr ""
@@ -2462,12 +3089,21 @@ msgstr ""
msgid "Nobody"
msgstr ""
+#: src/components/LikedByList.tsx:79
+#: src/components/LikesDialog.tsx:99
+msgid "Nobody has liked this yet. Maybe you should be the first!"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:42
+msgid "Non-sexual Nudity"
+msgstr ""
+
#: src/view/com/modals/SelfLabel.tsx:135
msgid "Not Applicable."
msgstr ""
-#: src/Navigation.tsx:105
-#: src/view/screens/Profile.tsx:106
+#: src/Navigation.tsx:109
+#: src/view/screens/Profile.tsx:99
msgid "Not Found"
msgstr ""
@@ -2476,17 +3112,23 @@ msgstr ""
msgid "Not right now"
msgstr ""
-#: src/view/screens/Moderation.tsx:233
+#: src/view/com/profile/ProfileMenu.tsx:368
+#: src/view/com/util/forms/PostDropdownBtn.tsx:342
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:246
+msgid "Note about sharing"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:540
msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites."
msgstr ""
-#: src/Navigation.tsx:447
+#: src/Navigation.tsx:469
#: src/view/screens/Notifications.tsx:124
#: src/view/screens/Notifications.tsx:148
-#: src/view/shell/bottom-bar/BottomBar.tsx:205
-#: src/view/shell/desktop/LeftNav.tsx:361
-#: src/view/shell/Drawer.tsx:435
-#: src/view/shell/Drawer.tsx:436
+#: src/view/shell/bottom-bar/BottomBar.tsx:215
+#: src/view/shell/desktop/LeftNav.tsx:365
+#: src/view/shell/Drawer.tsx:438
+#: src/view/shell/Drawer.tsx:439
msgid "Notifications"
msgstr ""
@@ -2494,15 +3136,36 @@ msgstr ""
msgid "Nudity"
msgstr ""
-#: src/view/com/util/ErrorBoundary.tsx:35
+#: src/lib/moderation/useReportOptions.ts:71
+msgid "Nudity or adult content not labeled as such"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:71
+#~ msgid "Nudity or pornography not labeled as such"
+#~ msgstr ""
+
+#: src/screens/Signup/index.tsx:142
+msgid "of"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:11
+msgid "Off"
+msgstr ""
+
+#: src/view/com/util/ErrorBoundary.tsx:49
msgid "Oh no!"
msgstr ""
-#: src/screens/Onboarding/StepInterests/index.tsx:128
+#: src/screens/Onboarding/StepInterests/index.tsx:132
msgid "Oh no! Something went wrong."
msgstr ""
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:41
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:126
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:327
+msgid "OK"
+msgstr ""
+
+#: src/screens/Login/PasswordUpdatedForm.tsx:44
msgid "Okay"
msgstr ""
@@ -2510,11 +3173,11 @@ msgstr ""
msgid "Oldest replies first"
msgstr ""
-#: src/view/screens/Settings/index.tsx:234
+#: src/view/screens/Settings/index.tsx:244
msgid "Onboarding reset"
msgstr ""
-#: src/view/com/composer/Composer.tsx:375
+#: src/view/com/composer/Composer.tsx:392
msgid "One or more images is missing alt text."
msgstr ""
@@ -2522,32 +3185,66 @@ msgstr ""
msgid "Only {0} can reply."
msgstr ""
-#: src/view/screens/AppPasswords.tsx:65
-#: src/view/screens/Profile.tsx:106
+#: src/screens/Signup/StepHandle.tsx:97
+msgid "Only contains letters, numbers, and hyphens"
+msgstr ""
+
+#: src/components/Lists.tsx:75
+msgid "Oops, something went wrong!"
+msgstr ""
+
+#: src/components/Lists.tsx:170
+#: src/view/screens/AppPasswords.tsx:67
+#: src/view/screens/Profile.tsx:99
msgid "Oops!"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:115
+#: src/screens/Onboarding/StepFinished.tsx:119
msgid "Open"
msgstr ""
-#: src/view/com/composer/Composer.tsx:470
-#: src/view/com/composer/Composer.tsx:471
+#: src/view/screens/Moderation.tsx:75
+#~ msgid "Open content filtering settings"
+#~ msgstr ""
+
+#: src/view/com/composer/Composer.tsx:491
+#: src/view/com/composer/Composer.tsx:492
msgid "Open emoji picker"
msgstr ""
-#: src/view/screens/Settings/index.tsx:712
+#: src/view/screens/ProfileFeed.tsx:300
+msgid "Open feed options menu"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:734
msgid "Open links with in-app browser"
msgstr ""
-#: src/view/com/pager/FeedsTabBarMobile.tsx:87
+#: src/screens/Moderation/index.tsx:227
+msgid "Open muted words and tags settings"
+msgstr ""
+
+#: src/view/screens/Moderation.tsx:92
+#~ msgid "Open muted words settings"
+#~ msgstr ""
+
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:50
msgid "Open navigation"
msgstr ""
-#: src/view/screens/Settings/index.tsx:804
+#: src/view/com/util/forms/PostDropdownBtn.tsx:183
+msgid "Open post options menu"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:828
+#: src/view/screens/Settings/index.tsx:838
msgid "Open storybook page"
msgstr ""
+#: src/view/screens/Settings/index.tsx:816
+msgid "Open system log"
+msgstr ""
+
#: src/view/com/util/forms/DropdownButton.tsx:154
msgid "Opens {numItems} options"
msgstr ""
@@ -2556,11 +3253,11 @@ msgstr ""
msgid "Opens additional details for a debug entry"
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:348
+#: src/view/com/notifications/FeedItem.tsx:353
msgid "Opens an expanded list of users in this notification"
msgstr ""
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:61
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:78
msgid "Opens camera on device"
msgstr ""
@@ -2568,7 +3265,7 @@ msgstr ""
msgid "Opens composer"
msgstr ""
-#: src/view/screens/Settings/index.tsx:595
+#: src/view/screens/Settings/index.tsx:615
msgid "Opens configurable language settings"
msgstr ""
@@ -2576,71 +3273,117 @@ msgstr ""
msgid "Opens device photo gallery"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:419
-msgid "Opens editor for profile display name, avatar, background image, and description"
-msgstr ""
+#: src/view/com/profile/ProfileHeader.tsx:420
+#~ msgid "Opens editor for profile display name, avatar, background image, and description"
+#~ msgstr ""
-#: src/view/screens/Settings/index.tsx:649
+#: src/view/screens/Settings/index.tsx:669
msgid "Opens external embeds settings"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:574
-msgid "Opens followers list"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:57
+#: src/view/com/auth/SplashScreen.tsx:68
+#: src/view/com/auth/SplashScreen.web.tsx:97
+msgid "Opens flow to create a new Bluesky account"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:593
-msgid "Opens following list"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:75
+#: src/view/com/auth/SplashScreen.tsx:83
+#: src/view/com/auth/SplashScreen.web.tsx:112
+msgid "Opens flow to sign into your existing Bluesky account"
msgstr ""
+#: src/view/com/profile/ProfileHeader.tsx:575
+#~ msgid "Opens followers list"
+#~ msgstr ""
+
+#: src/view/com/profile/ProfileHeader.tsx:594
+#~ msgid "Opens following list"
+#~ msgstr ""
+
#: src/view/screens/Settings.tsx:412
#~ msgid "Opens invite code list"
#~ msgstr ""
-#: src/view/com/modals/InviteCodes.tsx:172
+#: src/view/com/modals/InviteCodes.tsx:173
msgid "Opens list of invite codes"
msgstr ""
+#: src/view/screens/Settings/index.tsx:798
+msgid "Opens modal for account deletion confirmation. Requires email code"
+msgstr ""
+
#: src/view/screens/Settings/index.tsx:774
-msgid "Opens modal for account deletion confirmation. Requires email code."
+#~ msgid "Opens modal for account deletion confirmation. Requires email code."
+#~ msgstr ""
+
+#: src/view/screens/Settings/index.tsx:756
+msgid "Opens modal for changing your Bluesky password"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:281
+#: src/view/screens/Settings/index.tsx:718
+msgid "Opens modal for choosing a new Bluesky handle"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:779
+msgid "Opens modal for downloading your Bluesky account data (repository)"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:968
+msgid "Opens modal for email verification"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:282
msgid "Opens modal for using custom domain"
msgstr ""
-#: src/view/screens/Settings/index.tsx:620
+#: src/view/screens/Settings/index.tsx:640
msgid "Opens moderation settings"
msgstr ""
-#: src/view/com/auth/login/LoginForm.tsx:239
+#: src/screens/Login/LoginForm.tsx:202
msgid "Opens password reset form"
msgstr ""
-#: src/view/screens/Feeds.tsx:357
+#: src/view/com/home/HomeHeaderLayout.web.tsx:63
+#: src/view/screens/Feeds.tsx:356
msgid "Opens screen to edit Saved Feeds"
msgstr ""
-#: src/view/screens/Settings/index.tsx:576
+#: src/view/screens/Settings/index.tsx:597
msgid "Opens screen with all saved feeds"
msgstr ""
+#: src/view/screens/Settings/index.tsx:696
+msgid "Opens the app password settings"
+msgstr ""
+
#: src/view/screens/Settings/index.tsx:676
-msgid "Opens the app password settings page"
+#~ msgid "Opens the app password settings page"
+#~ msgstr ""
+
+#: src/view/screens/Settings/index.tsx:554
+msgid "Opens the Following feed preferences"
msgstr ""
#: src/view/screens/Settings/index.tsx:535
-msgid "Opens the home feed preferences"
+#~ msgid "Opens the home feed preferences"
+#~ msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:93
+msgid "Opens the linked website"
msgstr ""
-#: src/view/screens/Settings/index.tsx:805
+#: src/view/screens/Settings/index.tsx:829
+#: src/view/screens/Settings/index.tsx:839
msgid "Opens the storybook page"
msgstr ""
-#: src/view/screens/Settings/index.tsx:793
+#: src/view/screens/Settings/index.tsx:817
msgid "Opens the system log page"
msgstr ""
-#: src/view/screens/Settings/index.tsx:556
+#: src/view/screens/Settings/index.tsx:575
msgid "Opens the threads preferences"
msgstr ""
@@ -2648,11 +3391,19 @@ msgstr ""
msgid "Option {0} of {numItems}"
msgstr ""
+#: src/components/ReportDialog/SubmitView.tsx:162
+msgid "Optionally provide additional information below:"
+msgstr ""
+
#: src/view/com/modals/Threadgate.tsx:89
msgid "Or combine these options:"
msgstr ""
-#: src/view/com/auth/login/ChooseAccountForm.tsx:138
+#: src/lib/moderation/useReportOptions.ts:25
+msgid "Other"
+msgstr ""
+
+#: src/components/AccountList.tsx:73
msgid "Other account"
msgstr ""
@@ -2664,6 +3415,7 @@ msgstr ""
msgid "Other..."
msgstr ""
+#: src/components/Lists.tsx:184
#: src/view/screens/NotFound.tsx:45
msgid "Page not found"
msgstr ""
@@ -2672,27 +3424,30 @@ msgstr ""
msgid "Page Not Found"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:210
-#: src/view/com/auth/create/Step1.tsx:220
-#: src/view/com/auth/login/LoginForm.tsx:226
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:161
-#: src/view/com/modals/DeleteAccount.tsx:202
+#: src/screens/Login/LoginForm.tsx:178
+#: src/screens/Signup/StepInfo/index.tsx:101
+#: src/view/com/modals/DeleteAccount.tsx:194
+#: src/view/com/modals/DeleteAccount.tsx:201
msgid "Password"
msgstr ""
-#: src/view/com/auth/login/Login.tsx:157
+#: src/view/com/modals/ChangePassword.tsx:142
+msgid "Password Changed"
+msgstr ""
+
+#: src/screens/Login/index.tsx:157
msgid "Password updated"
msgstr ""
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:28
+#: src/screens/Login/PasswordUpdatedForm.tsx:30
msgid "Password updated!"
msgstr ""
-#: src/Navigation.tsx:160
+#: src/Navigation.tsx:164
msgid "People followed by @{0}"
msgstr ""
-#: src/Navigation.tsx:153
+#: src/Navigation.tsx:157
msgid "People following @{0}"
msgstr ""
@@ -2709,79 +3464,95 @@ msgid "Pets"
msgstr ""
#: src/view/com/auth/create/Step2.tsx:183
-msgid "Phone number"
-msgstr ""
+#~ msgid "Phone number"
+#~ msgstr ""
#: src/view/com/modals/SelfLabel.tsx:121
msgid "Pictures meant for adults."
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:292
+#: src/view/screens/ProfileList.tsx:563
msgid "Pin to home"
msgstr ""
+#: src/view/screens/ProfileFeed.tsx:295
+msgid "Pin to Home"
+msgstr ""
+
#: src/view/screens/SavedFeeds.tsx:88
msgid "Pinned Feeds"
msgstr ""
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:111
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:123
msgid "Play {0}"
msgstr ""
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:54
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:55
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:57
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:58
msgid "Play Video"
msgstr ""
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:110
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:122
msgid "Plays the GIF"
msgstr ""
-#: src/view/com/auth/create/state.ts:177
+#: src/screens/Signup/state.ts:241
msgid "Please choose your handle."
msgstr ""
-#: src/view/com/auth/create/state.ts:160
+#: src/screens/Signup/state.ts:234
msgid "Please choose your password."
msgstr ""
+#: src/screens/Signup/state.ts:251
+msgid "Please complete the verification captcha."
+msgstr ""
+
#: src/view/com/modals/ChangeEmail.tsx:67
msgid "Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed."
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:90
+#: src/view/com/modals/AddAppPasswords.tsx:91
msgid "Please enter a name for your app password. All spaces is not allowed."
msgstr ""
#: src/view/com/auth/create/Step2.tsx:206
-msgid "Please enter a phone number that can receive SMS text messages."
-msgstr ""
+#~ msgid "Please enter a phone number that can receive SMS text messages."
+#~ msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:145
+#: src/view/com/modals/AddAppPasswords.tsx:146
msgid "Please enter a unique name for this App Password or use our randomly generated one."
msgstr ""
-#: src/view/com/auth/create/state.ts:170
-msgid "Please enter the code you received by SMS."
+#: src/components/dialogs/MutedWords.tsx:67
+msgid "Please enter a valid word, tag, or phrase to mute"
msgstr ""
+#: src/view/com/auth/create/state.ts:170
+#~ msgid "Please enter the code you received by SMS."
+#~ msgstr ""
+
#: src/view/com/auth/create/Step2.tsx:282
-msgid "Please enter the verification code sent to {phoneNumberFormatted}."
-msgstr ""
+#~ msgid "Please enter the verification code sent to {phoneNumberFormatted}."
+#~ msgstr ""
-#: src/view/com/auth/create/state.ts:146
+#: src/screens/Signup/state.ts:220
msgid "Please enter your email."
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:191
+#: src/view/com/modals/DeleteAccount.tsx:190
msgid "Please enter your password as well:"
msgstr ""
+#: src/components/moderation/LabelsOnMeDialog.tsx:221
+msgid "Please explain why you think this label was incorrectly applied by {0}"
+msgstr ""
+
#: src/view/com/modals/AppealLabel.tsx:72
#: src/view/com/modals/AppealLabel.tsx:75
-msgid "Please tell us why you think this content warning was incorrectly applied!"
-msgstr ""
+#~ msgid "Please tell us why you think this content warning was incorrectly applied!"
+#~ msgstr ""
#: src/view/com/modals/AppealLabel.tsx:72
#: src/view/com/modals/AppealLabel.tsx:75
@@ -2792,7 +3563,7 @@ msgstr ""
msgid "Please Verify Your Email"
msgstr ""
-#: src/view/com/composer/Composer.tsx:215
+#: src/view/com/composer/Composer.tsx:222
msgid "Please wait for your link card to finish loading"
msgstr ""
@@ -2804,35 +3575,49 @@ msgstr ""
msgid "Porn"
msgstr ""
-#: src/view/com/composer/Composer.tsx:350
-#: src/view/com/composer/Composer.tsx:358
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#~ msgid "Pornography"
+#~ msgstr ""
+
+#: src/view/com/composer/Composer.tsx:367
+#: src/view/com/composer/Composer.tsx:375
msgctxt "action"
msgid "Post"
msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:246
+#: src/view/com/post-thread/PostThread.tsx:292
msgctxt "description"
msgid "Post"
msgstr ""
-#: src/view/com/post-thread/PostThreadItem.tsx:174
+#: src/view/com/post-thread/PostThreadItem.tsx:175
msgid "Post by {0}"
msgstr ""
-#: src/Navigation.tsx:172
-#: src/Navigation.tsx:179
-#: src/Navigation.tsx:186
+#: src/Navigation.tsx:176
+#: src/Navigation.tsx:183
+#: src/Navigation.tsx:190
msgid "Post by @{0}"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:84
+#: src/view/com/util/forms/PostDropdownBtn.tsx:105
msgid "Post deleted"
msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:398
+#: src/view/com/post-thread/PostThread.tsx:157
msgid "Post hidden"
msgstr ""
+#: src/components/moderation/ModerationDetailsDialog.tsx:97
+#: src/lib/moderation/useModerationCauseDescription.ts:99
+msgid "Post Hidden by Muted Word"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:100
+#: src/lib/moderation/useModerationCauseDescription.ts:108
+msgid "Post Hidden by You"
+msgstr ""
+
#: src/view/com/composer/select-language/SelectLangBtn.tsx:87
msgid "Post language"
msgstr ""
@@ -2841,23 +3626,42 @@ msgstr ""
msgid "Post Languages"
msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:450
+#: src/view/com/post-thread/PostThread.tsx:152
+#: src/view/com/post-thread/PostThread.tsx:164
msgid "Post not found"
msgstr ""
-#: src/view/screens/Profile.tsx:180
+#: src/components/TagMenu/index.tsx:253
+msgid "posts"
+msgstr ""
+
+#: src/view/screens/Profile.tsx:190
msgid "Posts"
msgstr ""
+#: src/components/dialogs/MutedWords.tsx:89
+msgid "Posts can be muted based on their text, their tags, or both."
+msgstr ""
+
#: src/view/com/posts/FeedErrorMessage.tsx:64
msgid "Posts hidden"
msgstr ""
-#: src/view/com/modals/LinkWarning.tsx:46
+#: src/view/com/modals/LinkWarning.tsx:60
msgid "Potentially Misleading Link"
msgstr ""
-#: src/view/com/lightbox/Lightbox.web.tsx:135
+#: src/components/forms/HostingProvider.tsx:45
+msgid "Press to change hosting provider"
+msgstr ""
+
+#: src/components/Error.tsx:74
+#: src/components/Lists.tsx:80
+#: src/screens/Signup/index.tsx:186
+msgid "Press to retry"
+msgstr ""
+
+#: src/view/com/lightbox/Lightbox.web.tsx:150
msgid "Previous image"
msgstr ""
@@ -2869,39 +3673,45 @@ msgstr ""
msgid "Prioritize Your Follows"
msgstr ""
-#: src/view/screens/Settings/index.tsx:632
-#: src/view/shell/desktop/RightNav.tsx:80
+#: src/view/screens/Settings/index.tsx:652
+#: src/view/shell/desktop/RightNav.tsx:72
msgid "Privacy"
msgstr ""
-#: src/Navigation.tsx:217
+#: src/Navigation.tsx:231
+#: src/screens/Signup/StepInfo/Policies.tsx:56
#: src/view/screens/PrivacyPolicy.tsx:29
-#: src/view/screens/Settings/index.tsx:891
-#: src/view/shell/Drawer.tsx:262
+#: src/view/screens/Settings/index.tsx:923
+#: src/view/shell/Drawer.tsx:265
msgid "Privacy Policy"
msgstr ""
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:198
+#: src/screens/Login/ForgotPasswordForm.tsx:156
msgid "Processing..."
msgstr ""
-#: src/view/shell/bottom-bar/BottomBar.tsx:247
-#: src/view/shell/desktop/LeftNav.tsx:415
+#: src/view/screens/DebugMod.tsx:888
+#: src/view/screens/Profile.tsx:342
+msgid "profile"
+msgstr ""
+
+#: src/view/shell/bottom-bar/BottomBar.tsx:260
+#: src/view/shell/desktop/LeftNav.tsx:419
#: src/view/shell/Drawer.tsx:70
-#: src/view/shell/Drawer.tsx:546
-#: src/view/shell/Drawer.tsx:547
+#: src/view/shell/Drawer.tsx:549
+#: src/view/shell/Drawer.tsx:550
msgid "Profile"
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:128
+#: src/view/com/modals/EditProfile.tsx:129
msgid "Profile updated"
msgstr ""
-#: src/view/screens/Settings/index.tsx:949
+#: src/view/screens/Settings/index.tsx:981
msgid "Protect your account by verifying your email."
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:101
+#: src/screens/Onboarding/StepFinished.tsx:105
msgid "Public"
msgstr ""
@@ -2913,15 +3723,15 @@ msgstr ""
msgid "Public, shareable lists which can drive feeds."
msgstr ""
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish post"
msgstr ""
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish reply"
msgstr ""
-#: src/view/com/modals/Repost.tsx:65
+#: src/view/com/modals/Repost.tsx:66
msgctxt "action"
msgid "Quote post"
msgstr ""
@@ -2930,7 +3740,7 @@ msgstr ""
msgid "Quote post"
msgstr ""
-#: src/view/com/modals/Repost.tsx:70
+#: src/view/com/modals/Repost.tsx:71
msgctxt "action"
msgid "Quote Post"
msgstr ""
@@ -2939,10 +3749,14 @@ msgstr ""
msgid "Random (aka \"Poster's Roulette\")"
msgstr ""
-#: src/view/com/modals/EditImage.tsx:236
+#: src/view/com/modals/EditImage.tsx:237
msgid "Ratios"
msgstr ""
+#: src/view/screens/Search/Search.tsx:777
+msgid "Recent Searches"
+msgstr ""
+
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116
msgid "Recommended Feeds"
msgstr ""
@@ -2951,35 +3765,50 @@ msgstr ""
msgid "Recommended Users"
msgstr ""
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/components/dialogs/MutedWords.tsx:286
+#: src/view/com/feeds/FeedSourceCard.tsx:283
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/SelfLabel.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/com/util/UserAvatar.tsx:285
-#: src/view/com/util/UserBanner.tsx:91
+#: src/view/com/posts/FeedErrorMessage.tsx:204
msgid "Remove"
msgstr ""
-#: src/view/com/feeds/FeedSourceCard.tsx:106
-msgid "Remove {0} from my feeds?"
-msgstr ""
+#: src/view/com/feeds/FeedSourceCard.tsx:108
+#~ msgid "Remove {0} from my feeds?"
+#~ msgstr ""
#: src/view/com/util/AccountDropdownBtn.tsx:22
msgid "Remove account"
msgstr ""
-#: src/view/com/posts/FeedErrorMessage.tsx:131
-#: src/view/com/posts/FeedErrorMessage.tsx:166
+#: src/view/com/util/UserAvatar.tsx:358
+msgid "Remove Avatar"
+msgstr ""
+
+#: src/view/com/util/UserBanner.tsx:148
+msgid "Remove Banner"
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:160
msgid "Remove feed"
msgstr ""
-#: src/view/com/feeds/FeedSourceCard.tsx:105
-#: src/view/com/feeds/FeedSourceCard.tsx:167
-#: src/view/com/feeds/FeedSourceCard.tsx:172
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/posts/FeedErrorMessage.tsx:201
+msgid "Remove feed?"
+msgstr ""
+
+#: src/view/com/feeds/FeedSourceCard.tsx:173
+#: src/view/com/feeds/FeedSourceCard.tsx:233
+#: src/view/screens/ProfileFeed.tsx:335
+#: src/view/screens/ProfileFeed.tsx:341
msgid "Remove from my feeds"
msgstr ""
+#: src/view/com/feeds/FeedSourceCard.tsx:278
+msgid "Remove from my feeds?"
+msgstr ""
+
#: src/view/com/composer/photos/Gallery.tsx:167
msgid "Remove image"
msgstr ""
@@ -2988,33 +3817,44 @@ msgstr ""
msgid "Remove image preview"
msgstr ""
-#: src/view/com/modals/Repost.tsx:47
+#: src/components/dialogs/MutedWords.tsx:329
+msgid "Remove mute word from your list"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:48
msgid "Remove repost"
msgstr ""
-#: src/view/com/feeds/FeedSourceCard.tsx:173
-msgid "Remove this feed from my feeds?"
+#: src/view/com/feeds/FeedSourceCard.tsx:175
+#~ msgid "Remove this feed from my feeds?"
+#~ msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:202
+msgid "Remove this feed from your saved feeds"
msgstr ""
#: src/view/com/posts/FeedErrorMessage.tsx:132
-msgid "Remove this feed from your saved feeds?"
-msgstr ""
+#~ msgid "Remove this feed from your saved feeds?"
+#~ msgstr ""
#: src/view/com/modals/ListAddRemoveUsers.tsx:199
#: src/view/com/modals/UserAddRemoveLists.tsx:152
msgid "Removed from list"
msgstr ""
-#: src/view/com/feeds/FeedSourceCard.tsx:111
-#: src/view/com/feeds/FeedSourceCard.tsx:178
+#: src/view/com/feeds/FeedSourceCard.tsx:121
msgid "Removed from my feeds"
msgstr ""
+#: src/view/screens/ProfileFeed.tsx:209
+msgid "Removed from your feeds"
+msgstr ""
+
#: src/view/com/composer/ExternalEmbed.tsx:71
msgid "Removes default thumbnail from {0}"
msgstr ""
-#: src/view/screens/Profile.tsx:181
+#: src/view/screens/Profile.tsx:191
msgid "Replies"
msgstr ""
@@ -3022,45 +3862,71 @@ msgstr ""
msgid "Replies to this thread are disabled"
msgstr ""
-#: src/view/com/composer/Composer.tsx:348
+#: src/view/com/composer/Composer.tsx:365
msgctxt "action"
msgid "Reply"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:144
+#: src/view/screens/PreferencesFollowingFeed.tsx:144
msgid "Reply Filters"
msgstr ""
#: src/view/com/post/Post.tsx:166
-#: src/view/com/posts/FeedItem.tsx:287
+#: src/view/com/posts/FeedItem.tsx:280
msgctxt "description"
msgid "Reply to <0/>"
msgstr ""
#: src/view/com/modals/report/Modal.tsx:166
-msgid "Report {collectionName}"
-msgstr ""
+#~ msgid "Report {collectionName}"
+#~ msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:360
+#: src/view/com/profile/ProfileMenu.tsx:319
+#: src/view/com/profile/ProfileMenu.tsx:322
msgid "Report Account"
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:292
+#: src/components/ReportDialog/index.tsx:49
+msgid "Report dialog"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:352
+#: src/view/screens/ProfileFeed.tsx:354
msgid "Report feed"
msgstr ""
-#: src/view/screens/ProfileList.tsx:458
+#: src/view/screens/ProfileList.tsx:429
msgid "Report List"
msgstr ""
-#: src/view/com/modals/report/SendReportButton.tsx:37
-#: src/view/com/util/forms/PostDropdownBtn.tsx:210
+#: src/view/com/util/forms/PostDropdownBtn.tsx:292
+#: src/view/com/util/forms/PostDropdownBtn.tsx:294
msgid "Report post"
msgstr ""
-#: src/view/com/modals/Repost.tsx:43
-#: src/view/com/modals/Repost.tsx:48
-#: src/view/com/modals/Repost.tsx:53
+#: src/components/ReportDialog/SelectReportOptionView.tsx:42
+msgid "Report this content"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:55
+msgid "Report this feed"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:52
+msgid "Report this list"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:49
+msgid "Report this post"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:46
+msgid "Report this user"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:44
+#: src/view/com/modals/Repost.tsx:49
+#: src/view/com/modals/Repost.tsx:54
#: src/view/com/util/post-ctrls/RepostButton.tsx:61
msgctxt "action"
msgid "Repost"
@@ -3079,15 +3945,15 @@ msgstr ""
msgid "Reposted By"
msgstr ""
-#: src/view/com/posts/FeedItem.tsx:207
+#: src/view/com/posts/FeedItem.tsx:197
msgid "Reposted by {0}"
msgstr ""
-#: src/view/com/posts/FeedItem.tsx:224
+#: src/view/com/posts/FeedItem.tsx:214
msgid "Reposted by <0/>"
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:162
+#: src/view/com/notifications/FeedItem.tsx:166
msgid "reposted your post"
msgstr ""
@@ -3101,60 +3967,61 @@ msgid "Request Change"
msgstr ""
#: src/view/com/auth/create/Step2.tsx:219
-msgid "Request code"
-msgstr ""
+#~ msgid "Request code"
+#~ msgstr ""
-#: src/view/com/modals/ChangePassword.tsx:239
#: src/view/com/modals/ChangePassword.tsx:241
+#: src/view/com/modals/ChangePassword.tsx:243
msgid "Request Code"
msgstr ""
-#: src/view/screens/Settings/index.tsx:456
+#: src/view/screens/Settings/index.tsx:475
msgid "Require alt text before posting"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:149
+#: src/screens/Signup/StepInfo/index.tsx:69
msgid "Required for this provider"
msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:124
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:136
+#: src/view/com/modals/ChangePassword.tsx:185
msgid "Reset code"
msgstr ""
-#: src/view/com/modals/ChangePassword.tsx:190
+#: src/view/com/modals/ChangePassword.tsx:192
msgid "Reset Code"
msgstr ""
#: src/view/screens/Settings/index.tsx:824
-msgid "Reset onboarding"
-msgstr ""
+#~ msgid "Reset onboarding"
+#~ msgstr ""
-#: src/view/screens/Settings/index.tsx:827
+#: src/view/screens/Settings/index.tsx:858
+#: src/view/screens/Settings/index.tsx:861
msgid "Reset onboarding state"
msgstr ""
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:104
+#: src/screens/Login/ForgotPasswordForm.tsx:86
msgid "Reset password"
msgstr ""
#: src/view/screens/Settings/index.tsx:814
-msgid "Reset preferences"
-msgstr ""
+#~ msgid "Reset preferences"
+#~ msgstr ""
-#: src/view/screens/Settings/index.tsx:817
+#: src/view/screens/Settings/index.tsx:848
+#: src/view/screens/Settings/index.tsx:851
msgid "Reset preferences state"
msgstr ""
-#: src/view/screens/Settings/index.tsx:825
+#: src/view/screens/Settings/index.tsx:859
msgid "Resets the onboarding state"
msgstr ""
-#: src/view/screens/Settings/index.tsx:815
+#: src/view/screens/Settings/index.tsx:849
msgid "Resets the preferences state"
msgstr ""
-#: src/view/com/auth/login/LoginForm.tsx:269
+#: src/screens/Login/LoginForm.tsx:235
msgid "Retries login"
msgstr ""
@@ -3163,105 +4030,150 @@ msgstr ""
msgid "Retries the last action, which errored out"
msgstr ""
-#: src/screens/Onboarding/StepInterests/index.tsx:221
-#: src/screens/Onboarding/StepInterests/index.tsx:224
-#: src/view/com/auth/create/CreateAccount.tsx:170
-#: src/view/com/auth/create/CreateAccount.tsx:175
-#: src/view/com/auth/create/Step2.tsx:255
-#: src/view/com/auth/login/LoginForm.tsx:268
-#: src/view/com/auth/login/LoginForm.tsx:271
+#: src/components/Error.tsx:79
+#: src/components/Lists.tsx:91
+#: src/screens/Login/LoginForm.tsx:234
+#: src/screens/Login/LoginForm.tsx:241
+#: src/screens/Onboarding/StepInterests/index.tsx:225
+#: src/screens/Onboarding/StepInterests/index.tsx:228
+#: src/screens/Signup/index.tsx:193
#: src/view/com/util/error/ErrorMessage.tsx:55
#: src/view/com/util/error/ErrorScreen.tsx:72
msgid "Retry"
msgstr ""
#: src/view/com/auth/create/Step2.tsx:247
-msgid "Retry."
-msgstr ""
+#~ msgid "Retry."
+#~ msgstr ""
-#: src/view/screens/ProfileList.tsx:898
+#: src/components/Error.tsx:86
+#: src/view/screens/ProfileList.tsx:917
msgid "Return to previous page"
msgstr ""
+#: src/view/screens/NotFound.tsx:59
+msgid "Returns to home page"
+msgstr ""
+
+#: src/view/screens/NotFound.tsx:58
+#: src/view/screens/ProfileFeed.tsx:113
+msgid "Returns to previous page"
+msgstr ""
+
#: src/view/shell/desktop/RightNav.tsx:55
-msgid "SANDBOX. Posts and accounts are not permanent."
+#~ msgid "SANDBOX. Posts and accounts are not permanent."
+#~ msgstr ""
+
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/view/com/modals/ChangeHandle.tsx:174
+#: src/view/com/modals/CreateOrEditList.tsx:338
+#: src/view/com/modals/EditProfile.tsx:225
+msgid "Save"
msgstr ""
#: src/view/com/lightbox/Lightbox.tsx:132
-#: src/view/com/modals/CreateOrEditList.tsx:345
+#: src/view/com/modals/CreateOrEditList.tsx:346
msgctxt "action"
msgid "Save"
msgstr ""
-#: src/view/com/modals/BirthDateSettings.tsx:94
-#: src/view/com/modals/BirthDateSettings.tsx:97
-#: src/view/com/modals/ChangeHandle.tsx:173
-#: src/view/com/modals/CreateOrEditList.tsx:337
-#: src/view/com/modals/EditProfile.tsx:224
-#: src/view/screens/ProfileFeed.tsx:345
-msgid "Save"
+#: src/view/com/modals/AltImage.tsx:131
+msgid "Save alt text"
msgstr ""
-#: src/view/com/modals/AltImage.tsx:130
-msgid "Save alt text"
+#: src/components/dialogs/BirthDateSettings.tsx:119
+msgid "Save birthday"
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:232
+#: src/view/com/modals/EditProfile.tsx:233
msgid "Save Changes"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:170
+#: src/view/com/modals/ChangeHandle.tsx:171
msgid "Save handle change"
msgstr ""
-#: src/view/com/modals/crop-image/CropImage.web.tsx:144
+#: src/view/com/modals/crop-image/CropImage.web.tsx:145
msgid "Save image crop"
msgstr ""
+#: src/view/screens/ProfileFeed.tsx:336
+#: src/view/screens/ProfileFeed.tsx:342
+msgid "Save to my feeds"
+msgstr ""
+
#: src/view/screens/SavedFeeds.tsx:122
msgid "Saved Feeds"
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:225
+#: src/view/com/lightbox/Lightbox.tsx:81
+msgid "Saved to your camera roll."
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:213
+msgid "Saved to your feeds"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:226
msgid "Saves any changes to your profile"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:171
+#: src/view/com/modals/ChangeHandle.tsx:172
msgid "Saves handle change to {handle}"
msgstr ""
+#: src/view/com/modals/crop-image/CropImage.web.tsx:146
+msgid "Saves image crop settings"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:36
msgid "Science"
msgstr ""
-#: src/view/screens/ProfileList.tsx:854
+#: src/view/screens/ProfileList.tsx:873
msgid "Scroll to top"
msgstr ""
-#: src/Navigation.tsx:437
-#: src/view/com/auth/LoggedOut.tsx:122
+#: src/Navigation.tsx:459
+#: src/view/com/auth/LoggedOut.tsx:123
#: src/view/com/modals/ListAddRemoveUsers.tsx:75
#: src/view/com/util/forms/SearchInput.tsx:67
#: src/view/com/util/forms/SearchInput.tsx:79
-#: src/view/screens/Search/Search.tsx:418
-#: src/view/screens/Search/Search.tsx:645
-#: src/view/screens/Search/Search.tsx:663
-#: src/view/shell/bottom-bar/BottomBar.tsx:159
-#: src/view/shell/desktop/LeftNav.tsx:324
-#: src/view/shell/desktop/Search.tsx:214
-#: src/view/shell/desktop/Search.tsx:223
-#: src/view/shell/Drawer.tsx:362
-#: src/view/shell/Drawer.tsx:363
+#: src/view/screens/Search/Search.tsx:421
+#: src/view/screens/Search/Search.tsx:670
+#: src/view/screens/Search/Search.tsx:688
+#: src/view/shell/bottom-bar/BottomBar.tsx:169
+#: src/view/shell/desktop/LeftNav.tsx:328
+#: src/view/shell/desktop/Search.tsx:215
+#: src/view/shell/desktop/Search.tsx:224
+#: src/view/shell/Drawer.tsx:365
+#: src/view/shell/Drawer.tsx:366
msgid "Search"
msgstr ""
-#: src/view/screens/Search/Search.tsx:712
-#: src/view/shell/desktop/Search.tsx:255
+#: src/view/screens/Search/Search.tsx:737
+#: src/view/shell/desktop/Search.tsx:256
msgid "Search for \"{query}\""
msgstr ""
-#: src/view/com/auth/LoggedOut.tsx:104
+#: src/components/TagMenu/index.tsx:145
+msgid "Search for all posts by @{authorHandle} with tag {displayTag}"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:145
+#~ msgid "Search for all posts by @{authorHandle} with tag {tag}"
+#~ msgstr ""
+
+#: src/components/TagMenu/index.tsx:94
+msgid "Search for all posts with tag {displayTag}"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:90
+#~ msgid "Search for all posts with tag {tag}"
+#~ msgstr ""
+
#: src/view/com/auth/LoggedOut.tsx:105
+#: src/view/com/auth/LoggedOut.tsx:106
#: src/view/com/modals/ListAddRemoveUsers.tsx:70
msgid "Search for users"
msgstr ""
@@ -3270,11 +4182,35 @@ msgstr ""
msgid "Security Step Required"
msgstr ""
+#: src/components/TagMenu/index.web.tsx:66
+msgid "See {truncatedTag} posts"
+msgstr ""
+
+#: src/components/TagMenu/index.web.tsx:83
+msgid "See {truncatedTag} posts by user"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:128
+msgid "See <0>{displayTag}0> posts"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:187
+msgid "See <0>{displayTag}0> posts by this user"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:128
+#~ msgid "See <0>{tag}0> posts"
+#~ msgstr ""
+
+#: src/components/TagMenu/index.tsx:189
+#~ msgid "See <0>{tag}0> posts by this user"
+#~ msgstr ""
+
#: src/view/screens/SavedFeeds.tsx:163
msgid "See this guide"
msgstr ""
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:39
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:40
msgid "See what's next"
msgstr ""
@@ -3282,27 +4218,43 @@ msgstr ""
msgid "Select {item}"
msgstr ""
+#: src/screens/Login/ChooseAccountForm.tsx:61
+msgid "Select account"
+msgstr ""
+
#: src/view/com/modals/ServerInput.tsx:75
#~ msgid "Select Bluesky Social"
#~ msgstr ""
-#: src/view/com/auth/login/Login.tsx:117
+#: src/screens/Login/index.tsx:120
msgid "Select from an existing account"
msgstr ""
+#: src/view/screens/LanguageSettings.tsx:299
+msgid "Select languages"
+msgstr ""
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:30
+msgid "Select moderator"
+msgstr ""
+
#: src/view/com/util/Selector.tsx:107
msgid "Select option {i} of {numItems}"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:99
-#: src/view/com/auth/login/LoginForm.tsx:150
-msgid "Select service"
-msgstr ""
+#: src/view/com/auth/create/Step1.tsx:96
+#: src/view/com/auth/login/LoginForm.tsx:153
+#~ msgid "Select service"
+#~ msgstr ""
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:52
msgid "Select some accounts below to follow"
msgstr ""
+#: src/components/ReportDialog/SubmitView.tsx:135
+msgid "Select the moderation service(s) to report to"
+msgstr ""
+
#: src/view/com/auth/server-input/index.tsx:82
msgid "Select the service that hosts your data."
msgstr ""
@@ -3311,11 +4263,11 @@ msgstr ""
#~ msgid "Select the types of content that you want to see (or not see), and we'll handle the rest."
#~ msgstr ""
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:90
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:100
msgid "Select topical feeds to follow from the list below"
msgstr ""
-#: src/screens/Onboarding/StepModeration/index.tsx:75
+#: src/screens/Onboarding/StepModeration/index.tsx:63
msgid "Select what you want to see (or not see), and we’ll handle the rest."
msgstr ""
@@ -3324,26 +4276,34 @@ msgid "Select which languages you want your subscribed feeds to include. If none
msgstr ""
#: src/view/screens/LanguageSettings.tsx:98
-msgid "Select your app language for the default text to display in the app"
+#~ msgid "Select your app language for the default text to display in the app"
+#~ msgstr ""
+
+#: src/view/screens/LanguageSettings.tsx:98
+msgid "Select your app language for the default text to display in the app."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/index.tsx:133
+msgid "Select your date of birth"
msgstr ""
-#: src/screens/Onboarding/StepInterests/index.tsx:196
+#: src/screens/Onboarding/StepInterests/index.tsx:200
msgid "Select your interests from the options below"
msgstr ""
#: src/view/com/auth/create/Step2.tsx:155
-msgid "Select your phone's country"
-msgstr ""
+#~ msgid "Select your phone's country"
+#~ msgstr ""
#: src/view/screens/LanguageSettings.tsx:190
msgid "Select your preferred language for translations in your feed."
msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:116
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:117
msgid "Select your primary algorithmic feeds"
msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:142
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:133
msgid "Select your secondary algorithmic feeds"
msgstr ""
@@ -3352,79 +4312,92 @@ msgstr ""
msgid "Send Confirmation Email"
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:131
+#: src/view/com/modals/DeleteAccount.tsx:130
msgid "Send email"
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:144
+#: src/view/com/modals/DeleteAccount.tsx:143
msgctxt "action"
msgid "Send Email"
msgstr ""
-#: src/view/shell/Drawer.tsx:295
-#: src/view/shell/Drawer.tsx:316
+#: src/view/shell/Drawer.tsx:298
+#: src/view/shell/Drawer.tsx:319
msgid "Send feedback"
msgstr ""
+#: src/components/ReportDialog/SubmitView.tsx:214
+#: src/components/ReportDialog/SubmitView.tsx:218
+msgid "Send report"
+msgstr ""
+
#: src/view/com/modals/report/SendReportButton.tsx:45
-msgid "Send Report"
+#~ msgid "Send Report"
+#~ msgstr ""
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:44
+msgid "Send report to {0}"
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:133
+#: src/view/com/modals/DeleteAccount.tsx:132
msgid "Sends email with confirmation code for account deletion"
msgstr ""
-#: src/view/com/auth/server-input/index.tsx:110
+#: src/view/com/auth/server-input/index.tsx:114
msgid "Server address"
msgstr ""
#: src/view/com/modals/ContentFilteringSettings.tsx:311
-msgid "Set {value} for {labelGroup} content moderation policy"
-msgstr ""
+#~ msgid "Set {value} for {labelGroup} content moderation policy"
+#~ msgstr ""
#: src/view/com/modals/ContentFilteringSettings.tsx:160
#: src/view/com/modals/ContentFilteringSettings.tsx:179
-msgctxt "action"
-msgid "Set Age"
+#~ msgctxt "action"
+#~ msgid "Set Age"
+#~ msgstr ""
+
+#: src/screens/Moderation/index.tsx:304
+msgid "Set birthdate"
msgstr ""
#: src/view/screens/Settings/index.tsx:488
-msgid "Set color theme to dark"
-msgstr ""
+#~ msgid "Set color theme to dark"
+#~ msgstr ""
#: src/view/screens/Settings/index.tsx:481
-msgid "Set color theme to light"
-msgstr ""
+#~ msgid "Set color theme to light"
+#~ msgstr ""
#: src/view/screens/Settings/index.tsx:475
-msgid "Set color theme to system setting"
-msgstr ""
+#~ msgid "Set color theme to system setting"
+#~ msgstr ""
#: src/view/screens/Settings/index.tsx:514
-msgid "Set dark theme to the dark theme"
-msgstr ""
+#~ msgid "Set dark theme to the dark theme"
+#~ msgstr ""
#: src/view/screens/Settings/index.tsx:507
-msgid "Set dark theme to the dim theme"
-msgstr ""
+#~ msgid "Set dark theme to the dim theme"
+#~ msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:104
+#: src/screens/Login/SetNewPasswordForm.tsx:102
msgid "Set new password"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:221
-msgid "Set password"
-msgstr ""
+#: src/view/com/auth/create/Step1.tsx:202
+#~ msgid "Set password"
+#~ msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:225
+#: src/view/screens/PreferencesFollowingFeed.tsx:225
msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible."
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:122
+#: src/view/screens/PreferencesFollowingFeed.tsx:122
msgid "Set this setting to \"No\" to hide all replies from your feed."
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:191
+#: src/view/screens/PreferencesFollowingFeed.tsx:191
msgid "Set this setting to \"No\" to hide all reposts from your feed."
msgstr ""
@@ -3433,35 +4406,71 @@ msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is a
msgstr ""
#: src/view/screens/PreferencesHomeFeed.tsx:261
-msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
+#~ msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
+#~ msgstr ""
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:261
+msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your Following feed. This is an experimental feature."
msgstr ""
-#: src/screens/Onboarding/Layout.tsx:50
+#: src/screens/Onboarding/Layout.tsx:48
msgid "Set up your account"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:266
+#: src/view/com/modals/ChangeHandle.tsx:267
msgid "Sets Bluesky username"
msgstr ""
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:157
+#: src/view/screens/Settings/index.tsx:507
+msgid "Sets color theme to dark"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:500
+msgid "Sets color theme to light"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:494
+msgid "Sets color theme to system setting"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:533
+msgid "Sets dark theme to the dark theme"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:526
+msgid "Sets dark theme to the dim theme"
+msgstr ""
+
+#: src/screens/Login/ForgotPasswordForm.tsx:113
msgid "Sets email for password reset"
msgstr ""
#: src/view/com/auth/login/ForgotPasswordForm.tsx:122
-msgid "Sets hosting provider for password reset"
+#~ msgid "Sets hosting provider for password reset"
+#~ msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:124
+msgid "Sets image aspect ratio to square"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:114
+msgid "Sets image aspect ratio to tall"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:100
-#: src/view/com/auth/login/LoginForm.tsx:151
-msgid "Sets server for the Bluesky client"
+#: src/view/com/modals/crop-image/CropImage.web.tsx:104
+msgid "Sets image aspect ratio to wide"
msgstr ""
-#: src/Navigation.tsx:135
-#: src/view/screens/Settings/index.tsx:294
-#: src/view/shell/desktop/LeftNav.tsx:433
-#: src/view/shell/Drawer.tsx:567
-#: src/view/shell/Drawer.tsx:568
+#: src/view/com/auth/create/Step1.tsx:97
+#: src/view/com/auth/login/LoginForm.tsx:154
+#~ msgid "Sets server for the Bluesky client"
+#~ msgstr ""
+
+#: src/Navigation.tsx:139
+#: src/view/screens/Settings/index.tsx:313
+#: src/view/shell/desktop/LeftNav.tsx:437
+#: src/view/shell/Drawer.tsx:570
+#: src/view/shell/Drawer.tsx:571
msgid "Settings"
msgstr ""
@@ -3469,72 +4478,105 @@ msgstr ""
msgid "Sexual activity or erotic nudity."
msgstr ""
+#: src/lib/moderation/useGlobalLabelStrings.ts:38
+msgid "Sexually Suggestive"
+msgstr ""
+
#: src/view/com/lightbox/Lightbox.tsx:141
msgctxt "action"
msgid "Share"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:294
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
-#: src/view/screens/ProfileList.tsx:417
-msgid "Share"
+#: src/view/com/profile/ProfileMenu.tsx:215
+#: src/view/com/profile/ProfileMenu.tsx:224
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:235
+#: src/view/screens/ProfileList.tsx:388
+msgid "Share"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:373
+#: src/view/com/util/forms/PostDropdownBtn.tsx:347
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:251
+msgid "Share anyway"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:362
+#: src/view/screens/ProfileFeed.tsx:364
+msgid "Share feed"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
+msgid "Share Link"
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:304
-msgid "Share feed"
+#: src/view/com/modals/LinkWarning.tsx:92
+msgid "Shares the linked website"
msgstr ""
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:43
-#: src/view/com/modals/ContentFilteringSettings.tsx:266
-#: src/view/com/util/moderation/ContentHider.tsx:107
-#: src/view/com/util/moderation/PostHider.tsx:108
-#: src/view/screens/Settings/index.tsx:344
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:136
+#: src/components/moderation/PostHider.tsx:107
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:54
+#: src/view/screens/Settings/index.tsx:363
msgid "Show"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:68
+#: src/view/screens/PreferencesFollowingFeed.tsx:68
msgid "Show all replies"
msgstr ""
-#: src/view/com/util/moderation/ScreenHider.tsx:132
+#: src/components/moderation/ScreenHider.tsx:169
+#: src/components/moderation/ScreenHider.tsx:172
msgid "Show anyway"
msgstr ""
-#: src/view/com/modals/EmbedConsent.tsx:87
-msgid "Show embeds from {0}"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:27
+#: src/lib/moderation/useLabelBehaviorDescription.ts:63
+msgid "Show badge"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:61
+msgid "Show badge and filter from feeds"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:458
+#: src/view/com/modals/EmbedConsent.tsx:87
+#~ msgid "Show embeds from {0}"
+#~ msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:200
msgid "Show follows similar to {0}"
msgstr ""
-#: src/view/com/post-thread/PostThreadItem.tsx:539
-#: src/view/com/post/Post.tsx:197
-#: src/view/com/posts/FeedItem.tsx:363
+#: src/view/com/post-thread/PostThreadItem.tsx:507
+#: src/view/com/post/Post.tsx:201
+#: src/view/com/posts/FeedItem.tsx:355
msgid "Show More"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:258
+#: src/view/screens/PreferencesFollowingFeed.tsx:258
msgid "Show Posts from My Feeds"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:222
+#: src/view/screens/PreferencesFollowingFeed.tsx:222
msgid "Show Quote Posts"
msgstr ""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:118
+#: src/screens/Onboarding/StepFollowingFeed.tsx:119
msgid "Show quote-posts in Following feed"
msgstr ""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:134
+#: src/screens/Onboarding/StepFollowingFeed.tsx:135
msgid "Show quotes in Following"
msgstr ""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:94
+#: src/screens/Onboarding/StepFollowingFeed.tsx:95
msgid "Show re-posts in Following feed"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:119
+#: src/view/screens/PreferencesFollowingFeed.tsx:119
msgid "Show Replies"
msgstr ""
@@ -3542,87 +4584,98 @@ msgstr ""
msgid "Show replies by people you follow before all other replies."
msgstr ""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:86
+#: src/screens/Onboarding/StepFollowingFeed.tsx:87
msgid "Show replies in Following"
msgstr ""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:70
+#: src/screens/Onboarding/StepFollowingFeed.tsx:71
msgid "Show replies in Following feed"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:70
+#: src/view/screens/PreferencesFollowingFeed.tsx:70
msgid "Show replies with at least {value} {0}"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:188
+#: src/view/screens/PreferencesFollowingFeed.tsx:188
msgid "Show Reposts"
msgstr ""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:110
+#: src/screens/Onboarding/StepFollowingFeed.tsx:111
msgid "Show reposts in Following"
msgstr ""
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:68
+#: src/components/moderation/PostHider.tsx:64
msgid "Show the content"
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:346
+#: src/view/com/notifications/FeedItem.tsx:351
msgid "Show users"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:461
-msgid "Shows a list of users similar to this user."
+#: src/lib/moderation/useLabelBehaviorDescription.ts:58
+msgid "Show warning"
msgstr ""
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:124
-#: src/view/com/profile/ProfileHeader.tsx:505
+#: src/lib/moderation/useLabelBehaviorDescription.ts:56
+msgid "Show warning and filter from feeds"
+msgstr ""
+
+#: src/view/com/profile/ProfileHeader.tsx:462
+#~ msgid "Shows a list of users similar to this user."
+#~ msgstr ""
+
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:130
msgid "Shows posts from {0} in your feed"
msgstr ""
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:70
-#: src/view/com/auth/login/Login.tsx:98
-#: src/view/com/auth/SplashScreen.tsx:54
-#: src/view/shell/bottom-bar/BottomBar.tsx:285
-#: src/view/shell/bottom-bar/BottomBar.tsx:286
-#: src/view/shell/bottom-bar/BottomBar.tsx:288
+#: src/screens/Login/index.tsx:100
+#: src/screens/Login/index.tsx:119
+#: src/screens/Login/LoginForm.tsx:131
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:73
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:83
+#: src/view/com/auth/SplashScreen.tsx:81
+#: src/view/com/auth/SplashScreen.tsx:90
+#: src/view/com/auth/SplashScreen.web.tsx:110
+#: src/view/com/auth/SplashScreen.web.tsx:119
+#: src/view/shell/bottom-bar/BottomBar.tsx:300
+#: src/view/shell/bottom-bar/BottomBar.tsx:301
+#: src/view/shell/bottom-bar/BottomBar.tsx:303
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:178
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:179
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:181
#: src/view/shell/NavSignupCard.tsx:58
#: src/view/shell/NavSignupCard.tsx:59
+#: src/view/shell/NavSignupCard.tsx:61
msgid "Sign in"
msgstr ""
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:78
-#: src/view/com/auth/SplashScreen.tsx:57
-#: src/view/com/auth/SplashScreen.web.tsx:87
-msgid "Sign In"
-msgstr ""
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:82
+#: src/view/com/auth/SplashScreen.tsx:86
+#: src/view/com/auth/SplashScreen.web.tsx:91
+#~ msgid "Sign In"
+#~ msgstr ""
-#: src/view/com/auth/login/ChooseAccountForm.tsx:44
+#: src/components/AccountList.tsx:109
msgid "Sign in as {0}"
msgstr ""
-#: src/view/com/auth/login/ChooseAccountForm.tsx:118
-#: src/view/com/auth/login/Login.tsx:116
+#: src/screens/Login/ChooseAccountForm.tsx:64
msgid "Sign in as..."
msgstr ""
-#: src/view/com/auth/login/LoginForm.tsx:137
-msgid "Sign into"
-msgstr ""
+#: src/view/com/auth/login/LoginForm.tsx:140
+#~ msgid "Sign into"
+#~ msgstr ""
-#: src/view/com/modals/SwitchAccount.tsx:64
-#: src/view/com/modals/SwitchAccount.tsx:69
-#: src/view/screens/Settings/index.tsx:100
-#: src/view/screens/Settings/index.tsx:103
+#: src/view/screens/Settings/index.tsx:107
+#: src/view/screens/Settings/index.tsx:110
msgid "Sign out"
msgstr ""
-#: src/view/shell/bottom-bar/BottomBar.tsx:275
-#: src/view/shell/bottom-bar/BottomBar.tsx:276
-#: src/view/shell/bottom-bar/BottomBar.tsx:278
+#: src/view/shell/bottom-bar/BottomBar.tsx:290
+#: src/view/shell/bottom-bar/BottomBar.tsx:291
+#: src/view/shell/bottom-bar/BottomBar.tsx:293
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:168
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:169
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:171
@@ -3636,35 +4689,36 @@ msgstr ""
msgid "Sign up or sign in to join the conversation"
msgstr ""
-#: src/view/com/util/moderation/ScreenHider.tsx:76
+#: src/components/moderation/ScreenHider.tsx:97
+#: src/lib/moderation/useGlobalLabelStrings.ts:28
msgid "Sign-in Required"
msgstr ""
-#: src/view/screens/Settings/index.tsx:355
+#: src/view/screens/Settings/index.tsx:374
msgid "Signed in as"
msgstr ""
-#: src/view/com/auth/login/ChooseAccountForm.tsx:103
+#: src/screens/Login/ChooseAccountForm.tsx:48
msgid "Signed in as @{0}"
msgstr ""
-#: src/view/com/modals/SwitchAccount.tsx:66
-msgid "Signs {0} out of Bluesky"
-msgstr ""
+#: src/view/com/modals/SwitchAccount.tsx:70
+#~ msgid "Signs {0} out of Bluesky"
+#~ msgstr ""
-#: src/screens/Onboarding/StepInterests/index.tsx:235
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:195
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:33
+#: src/screens/Onboarding/StepInterests/index.tsx:239
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:203
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:35
msgid "Skip"
msgstr ""
-#: src/screens/Onboarding/StepInterests/index.tsx:232
+#: src/screens/Onboarding/StepInterests/index.tsx:236
msgid "Skip this flow"
msgstr ""
#: src/view/com/auth/create/Step2.tsx:82
-msgid "SMS verification"
-msgstr ""
+#~ msgid "SMS verification"
+#~ msgstr ""
#: src/screens/Onboarding/index.tsx:40
msgid "Software Dev"
@@ -3674,11 +4728,21 @@ msgstr ""
#~ msgid "Something went wrong and we're not sure what."
#~ msgstr ""
-#: src/view/com/modals/Waitlist.tsx:51
-msgid "Something went wrong. Check your email and try again."
+#: src/components/ReportDialog/index.tsx:59
+#: src/screens/Moderation/index.tsx:114
+#: src/screens/Profile/Sections/Labels.tsx:76
+msgid "Something went wrong, please try again."
msgstr ""
-#: src/App.native.tsx:61
+#: src/components/Lists.tsx:203
+#~ msgid "Something went wrong!"
+#~ msgstr ""
+
+#: src/view/com/modals/Waitlist.tsx:51
+#~ msgid "Something went wrong. Check your email and try again."
+#~ msgstr ""
+
+#: src/App.native.tsx:66
msgid "Sorry! Your session expired. Please log in again."
msgstr ""
@@ -3690,11 +4754,23 @@ msgstr ""
msgid "Sort replies to the same post by:"
msgstr ""
+#: src/components/moderation/LabelsOnMeDialog.tsx:146
+msgid "Source:"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:65
+msgid "Spam"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:53
+msgid "Spam; excessive mentions or replies"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:30
msgid "Sports"
msgstr ""
-#: src/view/com/modals/crop-image/CropImage.web.tsx:122
+#: src/view/com/modals/crop-image/CropImage.web.tsx:123
msgid "Square"
msgstr ""
@@ -3702,45 +4778,62 @@ msgstr ""
#~ msgid "Staging"
#~ msgstr ""
-#: src/view/screens/Settings/index.tsx:871
+#: src/view/screens/Settings/index.tsx:903
msgid "Status page"
msgstr ""
-#: src/view/com/auth/create/StepHeader.tsx:22
-msgid "Step {0} of {numSteps}"
+#: src/screens/Signup/index.tsx:142
+msgid "Step"
msgstr ""
-#: src/view/screens/Settings/index.tsx:274
+#: src/view/com/auth/create/StepHeader.tsx:22
+#~ msgid "Step {0} of {numSteps}"
+#~ msgstr ""
+
+#: src/view/screens/Settings/index.tsx:292
msgid "Storage cleared, you need to restart the app now."
msgstr ""
-#: src/Navigation.tsx:202
-#: src/view/screens/Settings/index.tsx:807
+#: src/Navigation.tsx:211
+#: src/view/screens/Settings/index.tsx:831
msgid "Storybook"
msgstr ""
-#: src/view/com/modals/AppealLabel.tsx:101
+#: src/components/moderation/LabelsOnMeDialog.tsx:255
+#: src/components/moderation/LabelsOnMeDialog.tsx:256
msgid "Submit"
msgstr "Submit"
-#: src/view/screens/ProfileList.tsx:607
+#: src/view/screens/ProfileList.tsx:590
msgid "Subscribe"
msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:173
+#: src/screens/Profile/Sections/Labels.tsx:180
+msgid "Subscribe to @{0} to use these labels:"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:221
+msgid "Subscribe to Labeler"
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:172
#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:307
msgid "Subscribe to the {0} feed"
msgstr ""
-#: src/view/screens/ProfileList.tsx:603
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:184
+msgid "Subscribe to this labeler"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:586
msgid "Subscribe to this list"
msgstr ""
-#: src/view/screens/Search/Search.tsx:373
+#: src/view/screens/Search/Search.tsx:376
msgid "Suggested Follows"
msgstr ""
-#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:64
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:65
msgid "Suggested for you"
msgstr ""
@@ -3748,7 +4841,7 @@ msgstr ""
msgid "Suggestive"
msgstr ""
-#: src/Navigation.tsx:212
+#: src/Navigation.tsx:226
#: src/view/screens/Support.tsx:30
#: src/view/screens/Support.tsx:33
msgid "Support"
@@ -3758,29 +4851,40 @@ msgstr ""
#~ msgid "Swipe up to see more"
#~ msgstr ""
-#: src/view/com/modals/SwitchAccount.tsx:117
+#: src/components/dialogs/SwitchAccount.tsx:46
+#: src/components/dialogs/SwitchAccount.tsx:49
msgid "Switch Account"
msgstr ""
-#: src/view/com/modals/SwitchAccount.tsx:97
-#: src/view/screens/Settings/index.tsx:130
+#: src/view/screens/Settings/index.tsx:139
msgid "Switch to {0}"
msgstr ""
-#: src/view/com/modals/SwitchAccount.tsx:98
-#: src/view/screens/Settings/index.tsx:131
+#: src/view/screens/Settings/index.tsx:140
msgid "Switches the account you are logged in to"
msgstr ""
-#: src/view/screens/Settings/index.tsx:472
+#: src/view/screens/Settings/index.tsx:491
msgid "System"
msgstr ""
-#: src/view/screens/Settings/index.tsx:795
+#: src/view/screens/Settings/index.tsx:819
msgid "System log"
msgstr ""
-#: src/view/com/modals/crop-image/CropImage.web.tsx:112
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "tag"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:78
+msgid "Tag menu: {displayTag}"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:74
+#~ msgid "Tag menu: {tag}"
+#~ msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:113
msgid "Tall"
msgstr ""
@@ -3792,26 +4896,53 @@ msgstr ""
msgid "Tech"
msgstr ""
-#: src/view/shell/desktop/RightNav.tsx:89
+#: src/view/shell/desktop/RightNav.tsx:81
msgid "Terms"
msgstr ""
-#: src/Navigation.tsx:222
-#: src/view/screens/Settings/index.tsx:885
+#: src/Navigation.tsx:236
+#: src/screens/Signup/StepInfo/Policies.tsx:49
+#: src/view/screens/Settings/index.tsx:917
#: src/view/screens/TermsOfService.tsx:29
-#: src/view/shell/Drawer.tsx:256
+#: src/view/shell/Drawer.tsx:259
msgid "Terms of Service"
msgstr ""
-#: src/view/com/modals/AppealLabel.tsx:70
-#: src/view/com/modals/report/InputIssueDetails.tsx:51
+#: src/lib/moderation/useReportOptions.ts:58
+#: src/lib/moderation/useReportOptions.ts:79
+#: src/lib/moderation/useReportOptions.ts:87
+msgid "Terms used violate community standards"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "text"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:219
msgid "Text input field"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:262
+#: src/components/ReportDialog/SubmitView.tsx:78
+msgid "Thank you. Your report has been sent."
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:465
+msgid "That contains the following:"
+msgstr ""
+
+#: src/screens/Signup/index.tsx:84
+msgid "That handle is already taken."
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:283
+#: src/view/com/profile/ProfileMenu.tsx:349
msgid "The account will be able to interact with you after unblocking."
msgstr ""
+#: src/components/moderation/ModerationDetailsDialog.tsx:127
+msgid "the author"
+msgstr ""
+
#: src/view/screens/CommunityGuidelines.tsx:36
msgid "The Community Guidelines have been moved to <0/>"
msgstr ""
@@ -3820,11 +4951,20 @@ msgstr ""
msgid "The Copyright Policy has been moved to <0/>"
msgstr ""
-#: src/screens/Onboarding/Layout.tsx:60
+#: src/components/moderation/LabelsOnMeDialog.tsx:48
+msgid "The following labels were applied to your account."
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:49
+msgid "The following labels were applied to your content."
+msgstr ""
+
+#: src/screens/Onboarding/Layout.tsx:58
msgid "The following steps will help customize your Bluesky experience."
msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:453
+#: src/view/com/post-thread/PostThread.tsx:153
+#: src/view/com/post-thread/PostThread.tsx:165
msgid "The post may have been deleted."
msgstr ""
@@ -3840,24 +4980,25 @@ msgstr ""
msgid "The Terms of Service have been moved to"
msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:150
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:141
msgid "There are many feeds to try:"
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:549
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:112
+#: src/view/screens/ProfileFeed.tsx:544
msgid "There was an an issue contacting the server, please check your internet connection and try again."
msgstr ""
-#: src/view/com/posts/FeedErrorMessage.tsx:139
+#: src/view/com/posts/FeedErrorMessage.tsx:138
msgid "There was an an issue removing this feed. Please check your internet connection and try again."
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:209
+#: src/view/screens/ProfileFeed.tsx:218
msgid "There was an an issue updating your feeds, please check your internet connection and try again."
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:236
-#: src/view/screens/ProfileList.tsx:266
+#: src/view/screens/ProfileFeed.tsx:245
+#: src/view/screens/ProfileList.tsx:275
#: src/view/screens/SavedFeeds.tsx:209
#: src/view/screens/SavedFeeds.tsx:231
#: src/view/screens/SavedFeeds.tsx:252
@@ -3866,9 +5007,8 @@ msgstr ""
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:57
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:66
-#: src/view/com/feeds/FeedSourceCard.tsx:113
-#: src/view/com/feeds/FeedSourceCard.tsx:127
-#: src/view/com/feeds/FeedSourceCard.tsx:181
+#: src/view/com/feeds/FeedSourceCard.tsx:110
+#: src/view/com/feeds/FeedSourceCard.tsx:123
msgid "There was an issue contacting your server"
msgstr ""
@@ -3876,7 +5016,7 @@ msgstr ""
msgid "There was an issue fetching notifications. Tap here to try again."
msgstr ""
-#: src/view/com/posts/Feed.tsx:263
+#: src/view/com/posts/Feed.tsx:287
msgid "There was an issue fetching posts. Tap here to try again."
msgstr ""
@@ -3889,34 +5029,40 @@ msgstr ""
msgid "There was an issue fetching your lists. Tap here to try again."
msgstr ""
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:63
-#: src/view/com/modals/ContentFilteringSettings.tsx:126
+#: src/components/ReportDialog/SubmitView.tsx:83
+msgid "There was an issue sending your report. Please check your internet connection."
+msgstr ""
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:65
msgid "There was an issue syncing your preferences with the server"
msgstr ""
-#: src/view/screens/AppPasswords.tsx:66
+#: src/view/screens/AppPasswords.tsx:68
msgid "There was an issue with fetching your app passwords"
msgstr ""
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:93
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:105
-#: src/view/com/profile/ProfileHeader.tsx:156
-#: src/view/com/profile/ProfileHeader.tsx:177
-#: src/view/com/profile/ProfileHeader.tsx:216
-#: src/view/com/profile/ProfileHeader.tsx:229
-#: src/view/com/profile/ProfileHeader.tsx:249
-#: src/view/com/profile/ProfileHeader.tsx:271
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:105
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:127
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:99
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:111
+#: src/view/com/profile/ProfileMenu.tsx:106
+#: src/view/com/profile/ProfileMenu.tsx:117
+#: src/view/com/profile/ProfileMenu.tsx:132
+#: src/view/com/profile/ProfileMenu.tsx:143
+#: src/view/com/profile/ProfileMenu.tsx:157
+#: src/view/com/profile/ProfileMenu.tsx:170
msgid "There was an issue! {0}"
msgstr ""
-#: src/view/screens/ProfileList.tsx:287
-#: src/view/screens/ProfileList.tsx:306
-#: src/view/screens/ProfileList.tsx:328
-#: src/view/screens/ProfileList.tsx:347
+#: src/view/screens/ProfileList.tsx:288
+#: src/view/screens/ProfileList.tsx:302
+#: src/view/screens/ProfileList.tsx:316
+#: src/view/screens/ProfileList.tsx:330
msgid "There was an issue. Please check your internet connection and try again."
msgstr ""
-#: src/view/com/util/ErrorBoundary.tsx:36
+#: src/view/com/util/ErrorBoundary.tsx:51
msgid "There was an unexpected issue in the application. Please let us know if this happened to you!"
msgstr ""
@@ -3925,26 +5071,39 @@ msgid "There's been a rush of new users to Bluesky! We'll activate your account
msgstr ""
#: src/view/com/auth/create/Step2.tsx:55
-msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
-msgstr ""
+#~ msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
+#~ msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:138
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:146
msgid "These are popular accounts you might like:"
msgstr ""
-#: src/view/com/util/moderation/ScreenHider.tsx:88
+#: src/components/moderation/ScreenHider.tsx:116
msgid "This {screenDescription} has been flagged:"
msgstr ""
-#: src/view/com/util/moderation/ScreenHider.tsx:83
+#: src/components/moderation/ScreenHider.tsx:111
msgid "This account has requested that users sign in to view their profile."
msgstr ""
-#: src/view/com/modals/EmbedConsent.tsx:68
+#: src/components/moderation/LabelsOnMeDialog.tsx:204
+msgid "This appeal will be sent to <0>{0}0>."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:19
+msgid "This content has been hidden by the moderators."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:24
+msgid "This content has received a general warning from moderators."
+msgstr ""
+
+#: src/components/dialogs/EmbedConsent.tsx:64
msgid "This content is hosted by {0}. Do you want to enable external media?"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:67
+#: src/components/moderation/ModerationDetailsDialog.tsx:77
+#: src/lib/moderation/useModerationCauseDescription.ts:77
msgid "This content is not available because one of the users involved has blocked the other."
msgstr ""
@@ -3953,16 +5112,20 @@ msgid "This content is not viewable without a Bluesky account."
msgstr ""
#: src/view/screens/Settings/ExportCarDialog.tsx:75
-msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
+#~ msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
+#~ msgstr ""
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:75
+msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost0>."
msgstr ""
#: src/view/com/posts/FeedErrorMessage.tsx:114
msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later."
msgstr ""
-#: src/view/screens/Profile.tsx:420
-#: src/view/screens/ProfileFeed.tsx:475
-#: src/view/screens/ProfileList.tsx:660
+#: src/screens/Profile/Sections/Feed.tsx:50
+#: src/view/screens/ProfileFeed.tsx:477
+#: src/view/screens/ProfileList.tsx:675
msgid "This feed is empty!"
msgstr ""
@@ -3970,7 +5133,7 @@ msgstr ""
msgid "This feed is empty! You may need to follow more users or tune your language settings."
msgstr ""
-#: src/view/com/modals/BirthDateSettings.tsx:61
+#: src/components/dialogs/BirthDateSettings.tsx:41
msgid "This information is not shared with other users."
msgstr ""
@@ -3978,48 +5141,110 @@ msgstr ""
msgid "This is important in case you ever need to change your email or reset your password."
msgstr ""
-#: src/view/com/modals/LinkWarning.tsx:58
+#: src/components/moderation/ModerationDetailsDialog.tsx:124
+msgid "This label was applied by {0}."
+msgstr ""
+
+#: src/screens/Profile/Sections/Labels.tsx:167
+msgid "This labeler hasn't declared what labels it publishes, and may not be active."
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:72
msgid "This link is taking you to the following website:"
msgstr ""
-#: src/view/screens/ProfileList.tsx:834
+#: src/view/screens/ProfileList.tsx:853
msgid "This list is empty!"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:106
+#: src/screens/Profile/ErrorState.tsx:40
+msgid "This moderation service is unavailable. See below for more details. If this issue persists, contact us."
+msgstr ""
+
+#: src/view/com/modals/AddAppPasswords.tsx:107
msgid "This name is already in use"
msgstr ""
-#: src/view/com/post-thread/PostThreadItem.tsx:122
+#: src/view/com/post-thread/PostThreadItem.tsx:125
msgid "This post has been deleted."
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:62
+#: src/view/com/util/forms/PostDropdownBtn.tsx:344
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:248
+msgid "This post is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:326
+msgid "This post will be hidden from feeds."
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:370
+msgid "This profile is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/Policies.tsx:37
+msgid "This service has not provided terms of service or a privacy policy."
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:445
+msgid "This should create a domain record at:"
+msgstr ""
+
+#: src/view/com/profile/ProfileFollowers.tsx:87
+msgid "This user doesn't have any followers."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:72
+#: src/lib/moderation/useModerationCauseDescription.ts:68
msgid "This user has blocked you. You cannot view their content."
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:42
-msgid "This user is included in the <0/> list which you have blocked."
+#: src/lib/moderation/useGlobalLabelStrings.ts:30
+msgid "This user has requested that their content only be shown to signed-in users."
msgstr ""
+#: src/view/com/modals/ModerationDetails.tsx:42
+#~ msgid "This user is included in the <0/> list which you have blocked."
+#~ msgstr ""
+
#: src/view/com/modals/ModerationDetails.tsx:74
-msgid "This user is included in the <0/> list which you have muted."
+#~ msgid "This user is included in the <0/> list which you have muted."
+#~ msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:55
+msgid "This user is included in the <0>{0}0> list which you have blocked."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:84
+msgid "This user is included in the <0>{0}0> list which you have muted."
msgstr ""
#: src/view/com/modals/ModerationDetails.tsx:74
#~ msgid "This user is included the <0/> list which you have muted."
#~ msgstr ""
+#: src/view/com/profile/ProfileFollows.tsx:87
+msgid "This user isn't following anyone."
+msgstr ""
+
#: src/view/com/modals/SelfLabel.tsx:137
msgid "This warning is only available for posts with media attached."
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:192
-msgid "This will hide this post from your feeds."
+#: src/components/dialogs/MutedWords.tsx:283
+msgid "This will delete {0} from your muted words. You can always add it back later."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:282
+#~ msgid "This will hide this post from your feeds."
+#~ msgstr ""
+
+#: src/view/screens/Settings/index.tsx:574
+msgid "Thread preferences"
msgstr ""
#: src/view/screens/PreferencesThreads.tsx:53
-#: src/view/screens/Settings/index.tsx:565
+#: src/view/screens/Settings/index.tsx:584
msgid "Thread Preferences"
msgstr ""
@@ -4027,21 +5252,34 @@ msgstr ""
msgid "Threaded Mode"
msgstr ""
-#: src/Navigation.tsx:252
+#: src/Navigation.tsx:269
msgid "Threads Preferences"
msgstr ""
+#: src/components/ReportDialog/SelectLabelerView.tsx:33
+msgid "To whom would you like to send this report?"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:112
+msgid "Toggle between muted word options."
+msgstr ""
+
#: src/view/com/util/forms/DropdownButton.tsx:246
msgid "Toggle dropdown"
msgstr ""
-#: src/view/com/modals/EditImage.tsx:271
+#: src/screens/Moderation/index.tsx:332
+msgid "Toggle to enable or disable adult content"
+msgstr ""
+
+#: src/view/com/modals/EditImage.tsx:272
msgid "Transformations"
msgstr ""
-#: src/view/com/post-thread/PostThreadItem.tsx:686
-#: src/view/com/post-thread/PostThreadItem.tsx:688
-#: src/view/com/util/forms/PostDropdownBtn.tsx:125
+#: src/view/com/post-thread/PostThreadItem.tsx:644
+#: src/view/com/post-thread/PostThreadItem.tsx:646
+#: src/view/com/util/forms/PostDropdownBtn.tsx:212
+#: src/view/com/util/forms/PostDropdownBtn.tsx:214
msgid "Translate"
msgstr ""
@@ -4050,85 +5288,141 @@ msgctxt "action"
msgid "Try again"
msgstr ""
-#: src/view/screens/ProfileList.tsx:505
+#: src/view/com/modals/ChangeHandle.tsx:428
+msgid "Type:"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:478
msgid "Un-block list"
msgstr ""
-#: src/view/screens/ProfileList.tsx:490
+#: src/view/screens/ProfileList.tsx:461
msgid "Un-mute list"
msgstr ""
-#: src/view/com/auth/create/CreateAccount.tsx:66
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:87
-#: src/view/com/auth/login/Login.tsx:76
-#: src/view/com/auth/login/LoginForm.tsx:118
+#: src/screens/Login/ForgotPasswordForm.tsx:74
+#: src/screens/Login/index.tsx:78
+#: src/screens/Login/LoginForm.tsx:119
+#: src/screens/Login/SetNewPasswordForm.tsx:77
+#: src/screens/Signup/index.tsx:63
#: src/view/com/modals/ChangePassword.tsx:70
msgid "Unable to contact your service. Please check your Internet connection."
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:432
-#: src/view/screens/ProfileList.tsx:589
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:181
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+#: src/view/screens/ProfileList.tsx:572
msgid "Unblock"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:435
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:186
msgctxt "action"
msgid "Unblock"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:260
-#: src/view/com/profile/ProfileHeader.tsx:344
+#: src/view/com/profile/ProfileMenu.tsx:299
+#: src/view/com/profile/ProfileMenu.tsx:305
msgid "Unblock Account"
msgstr ""
-#: src/view/com/modals/Repost.tsx:42
-#: src/view/com/modals/Repost.tsx:55
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:281
+#: src/view/com/profile/ProfileMenu.tsx:343
+msgid "Unblock Account?"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:43
+#: src/view/com/modals/Repost.tsx:56
#: src/view/com/util/post-ctrls/RepostButton.tsx:60
#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
msgid "Undo repost"
msgstr ""
-#: src/view/com/profile/FollowButton.tsx:55
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
+msgid "Unfollow"
+msgstr ""
+
+#: src/view/com/profile/FollowButton.tsx:60
msgctxt "action"
msgid "Unfollow"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:484
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:220
msgid "Unfollow {0}"
msgstr ""
-#: src/view/com/auth/create/state.ts:300
-msgid "Unfortunately, you do not meet the requirements to create an account."
+#: src/view/com/profile/ProfileMenu.tsx:241
+#: src/view/com/profile/ProfileMenu.tsx:251
+msgid "Unfollow Account"
msgstr ""
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/auth/create/state.ts:262
+#~ msgid "Unfortunately, you do not meet the requirements to create an account."
+#~ msgstr ""
+
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Unlike"
msgstr ""
-#: src/view/screens/ProfileList.tsx:596
+#: src/view/screens/ProfileFeed.tsx:573
+msgid "Unlike this feed"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:249
+#: src/view/screens/ProfileList.tsx:579
msgid "Unmute"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:325
+#: src/components/TagMenu/index.web.tsx:104
+msgid "Unmute {truncatedTag}"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:278
+#: src/view/com/profile/ProfileMenu.tsx:284
msgid "Unmute Account"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/components/TagMenu/index.tsx:208
+msgid "Unmute all {displayTag} posts"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:210
+#~ msgid "Unmute all {tag} posts"
+#~ msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:256
msgid "Unmute thread"
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:295
+#: src/view/screens/ProfileList.tsx:563
msgid "Unpin"
msgstr ""
-#: src/view/screens/ProfileList.tsx:473
+#: src/view/screens/ProfileFeed.tsx:292
+msgid "Unpin from home"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:444
msgid "Unpin moderation list"
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:345
-msgid "Unsave"
+#: src/view/screens/ProfileFeed.tsx:346
+#~ msgid "Unsave"
+#~ msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:219
+msgid "Unsubscribe"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:183
+msgid "Unsubscribe from this labeler"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:70
+msgid "Unwanted Sexual Content"
msgstr ""
#: src/view/com/modals/UserAddRemoveLists.tsx:70
@@ -4136,22 +5430,53 @@ msgid "Update {displayName} in Lists"
msgstr ""
#: src/lib/hooks/useOTAUpdate.ts:15
-msgid "Update Available"
+#~ msgid "Update Available"
+#~ msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:508
+msgid "Update to {handle}"
msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:204
+#: src/screens/Login/SetNewPasswordForm.tsx:186
msgid "Updating..."
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:455
+#: src/view/com/modals/ChangeHandle.tsx:454
msgid "Upload a text file to:"
msgstr ""
-#: src/view/screens/AppPasswords.tsx:195
+#: src/view/com/util/UserAvatar.tsx:326
+#: src/view/com/util/UserAvatar.tsx:329
+#: src/view/com/util/UserBanner.tsx:116
+#: src/view/com/util/UserBanner.tsx:119
+msgid "Upload from Camera"
+msgstr ""
+
+#: src/view/com/util/UserAvatar.tsx:343
+#: src/view/com/util/UserBanner.tsx:133
+msgid "Upload from Files"
+msgstr ""
+
+#: src/view/com/util/UserAvatar.tsx:337
+#: src/view/com/util/UserAvatar.tsx:341
+#: src/view/com/util/UserBanner.tsx:127
+#: src/view/com/util/UserBanner.tsx:131
+msgid "Upload from Library"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:408
+msgid "Use a file on your server"
+msgstr ""
+
+#: src/view/screens/AppPasswords.tsx:197
msgid "Use app passwords to login to other Bluesky clients without giving full access to your account or password."
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:515
+#: src/view/com/modals/ChangeHandle.tsx:517
+msgid "Use bsky.social as hosting provider"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:516
msgid "Use default provider"
msgstr ""
@@ -4165,7 +5490,11 @@ msgstr ""
msgid "Use my default browser"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:155
+#: src/view/com/modals/ChangeHandle.tsx:400
+msgid "Use the DNS panel"
+msgstr ""
+
+#: src/view/com/modals/AddAppPasswords.tsx:156
msgid "Use this to sign into the other app along with your handle."
msgstr ""
@@ -4173,46 +5502,55 @@ msgstr ""
#~ msgid "Use your domain as your Bluesky client service provider"
#~ msgstr ""
-#: src/view/com/modals/InviteCodes.tsx:200
+#: src/view/com/modals/InviteCodes.tsx:201
msgid "Used by:"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:54
+#: src/components/moderation/ModerationDetailsDialog.tsx:64
+#: src/lib/moderation/useModerationCauseDescription.ts:56
msgid "User Blocked"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:40
+#: src/lib/moderation/useModerationCauseDescription.ts:48
+msgid "User Blocked by \"{0}\""
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:53
msgid "User Blocked by List"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:60
-msgid "User Blocks You"
+#: src/lib/moderation/useModerationCauseDescription.ts:66
+msgid "User Blocking You"
msgstr ""
-#: src/view/com/auth/create/Step3.tsx:41
-msgid "User handle"
+#: src/components/moderation/ModerationDetailsDialog.tsx:70
+msgid "User Blocks You"
msgstr ""
-#: src/view/com/lists/ListCard.tsx:84
+#: src/view/com/auth/create/Step2.tsx:79
+#~ msgid "User handle"
+#~ msgstr ""
+
+#: src/view/com/lists/ListCard.tsx:85
#: src/view/com/modals/UserAddRemoveLists.tsx:198
msgid "User list by {0}"
msgstr ""
-#: src/view/screens/ProfileList.tsx:762
+#: src/view/screens/ProfileList.tsx:777
msgid "User list by <0/>"
msgstr ""
-#: src/view/com/lists/ListCard.tsx:82
+#: src/view/com/lists/ListCard.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:196
-#: src/view/screens/ProfileList.tsx:760
+#: src/view/screens/ProfileList.tsx:775
msgid "User list by you"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:196
+#: src/view/com/modals/CreateOrEditList.tsx:197
msgid "User list created"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:182
+#: src/view/com/modals/CreateOrEditList.tsx:183
msgid "User list updated"
msgstr ""
@@ -4220,12 +5558,11 @@ msgstr ""
msgid "User Lists"
msgstr ""
-#: src/view/com/auth/login/LoginForm.tsx:177
-#: src/view/com/auth/login/LoginForm.tsx:195
+#: src/screens/Login/LoginForm.tsx:151
msgid "Username or email address"
msgstr ""
-#: src/view/screens/ProfileList.tsx:796
+#: src/view/screens/ProfileList.tsx:811
msgid "Users"
msgstr ""
@@ -4237,19 +5574,31 @@ msgstr ""
msgid "Users in \"{0}\""
msgstr ""
+#: src/components/LikesDialog.tsx:85
+msgid "Users that have liked this content or profile"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:436
+msgid "Value:"
+msgstr ""
+
#: src/view/com/auth/create/Step2.tsx:243
-msgid "Verification code"
+#~ msgid "Verification code"
+#~ msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:509
+msgid "Verify {0}"
msgstr ""
-#: src/view/screens/Settings/index.tsx:910
+#: src/view/screens/Settings/index.tsx:942
msgid "Verify email"
msgstr ""
-#: src/view/screens/Settings/index.tsx:935
+#: src/view/screens/Settings/index.tsx:967
msgid "Verify my email"
msgstr ""
-#: src/view/screens/Settings/index.tsx:944
+#: src/view/screens/Settings/index.tsx:976
msgid "Verify My Email"
msgstr ""
@@ -4262,11 +5611,15 @@ msgstr ""
msgid "Verify Your Email"
msgstr ""
+#: src/view/screens/Settings/index.tsx:893
+msgid "Version {0}"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:42
msgid "Video Games"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:661
+#: src/screens/Profile/Header/Shell.tsx:107
msgid "View {0}'s avatar"
msgstr ""
@@ -4274,11 +5627,23 @@ msgstr ""
msgid "View debug entry"
msgstr ""
-#: src/view/com/posts/FeedSlice.tsx:103
+#: src/components/ReportDialog/SelectReportOptionView.tsx:131
+msgid "View details"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:126
+msgid "View details for reporting a copyright violation"
+msgstr ""
+
+#: src/view/com/posts/FeedSlice.tsx:99
msgid "View full thread"
msgstr ""
-#: src/view/com/posts/FeedErrorMessage.tsx:172
+#: src/components/moderation/LabelsOnMe.tsx:51
+msgid "View information about these labels"
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:166
msgid "View profile"
msgstr ""
@@ -4286,24 +5651,47 @@ msgstr ""
msgid "View the avatar"
msgstr ""
-#: src/view/com/modals/LinkWarning.tsx:75
+#: src/components/LabelingServiceCard/index.tsx:140
+msgid "View the labeling service provided by @{0}"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:585
+msgid "View users who like this feed"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
msgid "Visit Site"
msgstr ""
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:42
-#: src/view/com/modals/ContentFilteringSettings.tsx:259
+#: src/components/moderation/LabelPreference.tsx:135
+#: src/lib/moderation/useLabelBehaviorDescription.ts:17
+#: src/lib/moderation/useLabelBehaviorDescription.ts:22
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:53
msgid "Warn"
msgstr ""
+#: src/lib/moderation/useLabelBehaviorDescription.ts:48
+msgid "Warn content"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:46
+msgid "Warn content and filter from feeds"
+msgstr ""
+
#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:134
-msgid "We also think you'll like \"For You\" by Skygaze:"
+#~ msgid "We also think you'll like \"For You\" by Skygaze:"
+#~ msgstr ""
+
+#: src/screens/Hashtag.tsx:133
+msgid "We couldn't find any results for that hashtag."
msgstr ""
#: src/screens/Deactivated.tsx:133
msgid "We estimate {estimatedTime} until your account is ready."
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:93
+#: src/screens/Onboarding/StepFinished.tsx:97
msgid "We hope you have a wonderful time. Remember, Bluesky is:"
msgstr ""
@@ -4315,11 +5703,23 @@ msgstr ""
#~ msgid "We recommend \"For You\" by Skygaze:"
#~ msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:124
+#: src/components/dialogs/MutedWords.tsx:203
+msgid "We recommend avoiding common words that appear in many posts, since it can result in no posts being shown."
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:125
msgid "We recommend our \"Discover\" feed:"
msgstr ""
-#: src/screens/Onboarding/StepInterests/index.tsx:133
+#: src/components/dialogs/BirthDateSettings.tsx:52
+msgid "We were unable to load your birth date preferences. Please try again."
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:385
+msgid "We were unable to load your configured labelers at this time."
+msgstr ""
+
+#: src/screens/Onboarding/StepInterests/index.tsx:137
msgid "We weren't able to connect. Please try again to continue setting up your account. If it continues to fail, you can skip this flow."
msgstr ""
@@ -4328,43 +5728,53 @@ msgid "We will let you know when your account is ready."
msgstr ""
#: src/view/com/modals/AppealLabel.tsx:48
-msgid "We'll look into your appeal promptly."
-msgstr ""
+#~ msgid "We'll look into your appeal promptly."
+#~ msgstr ""
-#: src/screens/Onboarding/StepInterests/index.tsx:138
+#: src/screens/Onboarding/StepInterests/index.tsx:142
msgid "We'll use this to help customize your experience."
msgstr ""
-#: src/view/com/auth/create/CreateAccount.tsx:123
+#: src/screens/Signup/index.tsx:130
msgid "We're so excited to have you join us!"
msgstr ""
-#: src/view/screens/ProfileList.tsx:85
+#: src/view/screens/ProfileList.tsx:89
msgid "We're sorry, but we were unable to resolve this list. If this persists, please contact the list creator, @{handleOrDid}."
msgstr ""
-#: src/view/screens/Search/Search.tsx:253
+#: src/components/dialogs/MutedWords.tsx:229
+msgid "We're sorry, but we weren't able to load your muted words at this time. Please try again."
+msgstr ""
+
+#: src/view/screens/Search/Search.tsx:256
msgid "We're sorry, but your search could not be completed. Please try again in a few minutes."
msgstr ""
+#: src/components/Lists.tsx:188
#: src/view/screens/NotFound.tsx:48
msgid "We're sorry! We can't find the page you were looking for."
msgstr ""
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:46
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:321
+msgid "We're sorry! You can only subscribe to ten labelers, and you've reached your limit of ten."
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:48
msgid "Welcome to <0>Bluesky0>"
msgstr ""
-#: src/screens/Onboarding/StepInterests/index.tsx:130
+#: src/screens/Onboarding/StepInterests/index.tsx:134
msgid "What are your interests?"
msgstr ""
#: src/view/com/modals/report/Modal.tsx:169
-msgid "What is the issue with this {collectionName}?"
-msgstr ""
+#~ msgid "What is the issue with this {collectionName}?"
+#~ msgstr ""
-#: src/view/com/auth/SplashScreen.tsx:34
-#: src/view/com/composer/Composer.tsx:279
+#: src/view/com/auth/SplashScreen.tsx:58
+#: src/view/com/auth/SplashScreen.web.tsx:84
+#: src/view/com/composer/Composer.tsx:296
msgid "What's up?"
msgstr ""
@@ -4381,16 +5791,36 @@ msgstr ""
msgid "Who can reply"
msgstr ""
-#: src/view/com/modals/crop-image/CropImage.web.tsx:102
+#: src/components/ReportDialog/SelectReportOptionView.tsx:43
+msgid "Why should this content be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:56
+msgid "Why should this feed be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:53
+msgid "Why should this list be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:50
+msgid "Why should this post be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:47
+msgid "Why should this user be reviewed?"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:103
msgid "Wide"
msgstr ""
-#: src/view/com/composer/Composer.tsx:415
+#: src/view/com/composer/Composer.tsx:436
msgid "Write post"
msgstr ""
-#: src/view/com/composer/Composer.tsx:278
-#: src/view/com/composer/Prompt.tsx:33
+#: src/view/com/composer/Composer.tsx:295
+#: src/view/com/composer/Prompt.tsx:37
msgid "Write your reply"
msgstr ""
@@ -4399,14 +5829,14 @@ msgid "Writers"
msgstr ""
#: src/view/com/auth/create/Step2.tsx:263
-msgid "XXXXXX"
-msgstr ""
+#~ msgid "XXXXXX"
+#~ msgstr ""
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:77
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:201
-#: src/view/screens/PreferencesHomeFeed.tsx:236
-#: src/view/screens/PreferencesHomeFeed.tsx:271
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:201
+#: src/view/screens/PreferencesFollowingFeed.tsx:236
+#: src/view/screens/PreferencesFollowingFeed.tsx:271
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "Yes"
@@ -4420,6 +5850,10 @@ msgstr ""
msgid "You are in line."
msgstr ""
+#: src/view/com/profile/ProfileFollows.tsx:86
+msgid "You are not following anyone."
+msgstr ""
+
#: src/view/com/posts/FollowingEmptyState.tsx:67
#: src/view/com/posts/FollowingEndOfFeed.tsx:68
msgid "You can also discover new Custom Feeds to follow."
@@ -4429,16 +5863,20 @@ msgstr ""
#~ msgid "You can also try our \"Discover\" algorithm:"
#~ msgstr ""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:142
+#: src/screens/Onboarding/StepFollowingFeed.tsx:143
msgid "You can change these settings later."
msgstr ""
-#: src/view/com/auth/login/Login.tsx:158
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:31
+#: src/screens/Login/index.tsx:158
+#: src/screens/Login/PasswordUpdatedForm.tsx:33
msgid "You can now sign in with your new password."
msgstr ""
-#: src/view/com/modals/InviteCodes.tsx:66
+#: src/view/com/profile/ProfileFollowers.tsx:86
+msgid "You do not have any followers."
+msgstr ""
+
+#: src/view/com/modals/InviteCodes.tsx:67
msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer."
msgstr ""
@@ -4446,7 +5884,7 @@ msgstr ""
msgid "You don't have any pinned feeds."
msgstr ""
-#: src/view/screens/Feeds.tsx:451
+#: src/view/screens/Feeds.tsx:452
msgid "You don't have any saved feeds!"
msgstr ""
@@ -4454,25 +5892,44 @@ msgstr ""
msgid "You don't have any saved feeds."
msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:401
+#: src/view/com/post-thread/PostThread.tsx:159
msgid "You have blocked the author or you have been blocked by the author."
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:56
+#: src/components/moderation/ModerationDetailsDialog.tsx:66
+#: src/lib/moderation/useModerationCauseDescription.ts:50
+#: src/lib/moderation/useModerationCauseDescription.ts:58
msgid "You have blocked this user. You cannot view their content."
msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:57
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:92
+#: src/screens/Login/SetNewPasswordForm.tsx:54
+#: src/screens/Login/SetNewPasswordForm.tsx:91
#: src/view/com/modals/ChangePassword.tsx:87
#: src/view/com/modals/ChangePassword.tsx:121
msgid "You have entered an invalid code. It should look like XXXXX-XXXXX."
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:87
-msgid "You have muted this user."
+#: src/lib/moderation/useModerationCauseDescription.ts:109
+msgid "You have hidden this post"
msgstr ""
+#: src/components/moderation/ModerationDetailsDialog.tsx:101
+msgid "You have hidden this post."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:94
+#: src/lib/moderation/useModerationCauseDescription.ts:92
+msgid "You have muted this account."
+msgstr ""
+
+#: src/lib/moderation/useModerationCauseDescription.ts:86
+msgid "You have muted this user"
+msgstr ""
+
+#: src/view/com/modals/ModerationDetails.tsx:87
+#~ msgid "You have muted this user."
+#~ msgstr ""
+
#: src/view/com/feeds/ProfileFeedgens.tsx:136
msgid "You have no feeds."
msgstr ""
@@ -4483,38 +5940,62 @@ msgid "You have no lists."
msgstr ""
#: src/view/screens/ModerationBlockedAccounts.tsx:132
-msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
+msgid "You have not blocked any accounts yet. To block an account, go to their profile and select \"Block account\" from the menu on their account."
msgstr ""
-#: src/view/screens/AppPasswords.tsx:87
+#: src/view/screens/ModerationBlockedAccounts.tsx:132
+#~ msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
+#~ msgstr ""
+
+#: src/view/screens/AppPasswords.tsx:89
msgid "You have not created any app passwords yet. You can create one by pressing the button below."
msgstr ""
#: src/view/screens/ModerationMutedAccounts.tsx:131
-msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
+msgid "You have not muted any accounts yet. To mute an account, go to their profile and select \"Mute account\" from the menu on their account."
msgstr ""
-#: src/view/com/modals/ContentFilteringSettings.tsx:175
-msgid "You must be 18 or older to enable adult content."
+#: src/view/screens/ModerationMutedAccounts.tsx:131
+#~ msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
+#~ msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:249
+msgid "You haven't muted any words or tags yet"
msgstr ""
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:103
+#: src/components/moderation/LabelsOnMeDialog.tsx:68
+msgid "You may appeal these labels if you feel they were placed in error."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/Policies.tsx:79
+msgid "You must be 13 years of age or older to sign up."
+msgstr ""
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:175
+#~ msgid "You must be 18 or older to enable adult content."
+#~ msgstr ""
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:110
msgid "You must be 18 years or older to enable adult content"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:98
+#: src/components/ReportDialog/SubmitView.tsx:205
+msgid "You must select at least one labeler for a report"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:144
msgid "You will no longer receive notifications for this thread"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:147
msgid "You will now receive notifications for this thread"
msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:107
+#: src/screens/Login/SetNewPasswordForm.tsx:104
msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password."
msgstr ""
-#: src/screens/Onboarding/StepModeration/index.tsx:72
+#: src/screens/Onboarding/StepModeration/index.tsx:60
msgid "You're in control"
msgstr ""
@@ -4524,19 +6005,24 @@ msgstr ""
msgid "You're in line"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:90
+#: src/screens/Onboarding/StepFinished.tsx:94
msgid "You're ready to go!"
msgstr ""
+#: src/components/moderation/ModerationDetailsDialog.tsx:98
+#: src/lib/moderation/useModerationCauseDescription.ts:101
+msgid "You've chosen to hide a word or tag within this post."
+msgstr ""
+
#: src/view/com/posts/FollowingEndOfFeed.tsx:48
msgid "You've reached the end of your feed! Find some more accounts to follow."
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:74
+#: src/screens/Signup/index.tsx:150
msgid "Your account"
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:67
+#: src/view/com/modals/DeleteAccount.tsx:68
msgid "Your account has been deleted"
msgstr ""
@@ -4544,7 +6030,7 @@ msgstr ""
msgid "Your account repository, containing all public data records, can be downloaded as a \"CAR\" file. This file does not include media embeds, such as images, or your private data, which must be fetched separately."
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:234
+#: src/screens/Signup/StepInfo/index.tsx:121
msgid "Your birth date"
msgstr ""
@@ -4552,19 +6038,19 @@ msgstr ""
msgid "Your choice will be saved, but can be changed later in settings."
msgstr ""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:61
+#: src/screens/Onboarding/StepFollowingFeed.tsx:62
msgid "Your default feed is \"Following\""
msgstr ""
-#: src/view/com/auth/create/state.ts:153
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:70
+#: src/screens/Login/ForgotPasswordForm.tsx:57
+#: src/screens/Signup/state.ts:227
#: src/view/com/modals/ChangePassword.tsx:54
msgid "Your email appears to be invalid."
msgstr ""
#: src/view/com/modals/Waitlist.tsx:109
-msgid "Your email has been saved! We'll be in touch soon."
-msgstr ""
+#~ msgid "Your email has been saved! We'll be in touch soon."
+#~ msgstr ""
#: src/view/com/modals/ChangeEmail.tsx:125
msgid "Your email has been updated but not verified. As a next step, please verify your new email."
@@ -4578,11 +6064,11 @@ msgstr ""
msgid "Your following feed is empty! Follow more users to see what's happening."
msgstr ""
-#: src/view/com/auth/create/Step3.tsx:45
+#: src/screens/Signup/StepHandle.tsx:72
msgid "Your full handle will be"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:270
+#: src/view/com/modals/ChangeHandle.tsx:271
msgid "Your full handle will be <0>@{0}0>"
msgstr ""
@@ -4592,29 +6078,32 @@ msgstr ""
#~ msgid "Your invite codes are hidden when logged in using an App Password"
#~ msgstr ""
-#: src/view/com/modals/ChangePassword.tsx:155
+#: src/components/dialogs/MutedWords.tsx:220
+msgid "Your muted words"
+msgstr ""
+
+#: src/view/com/modals/ChangePassword.tsx:157
msgid "Your password has been changed successfully!"
msgstr ""
-#: src/view/com/composer/Composer.tsx:267
+#: src/view/com/composer/Composer.tsx:284
msgid "Your post has been published"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:105
+#: src/screens/Onboarding/StepFinished.tsx:109
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:59
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:59
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:61
msgid "Your posts, likes, and blocks are public. Mutes are private."
msgstr ""
-#: src/view/com/modals/SwitchAccount.tsx:84
-#: src/view/screens/Settings/index.tsx:118
+#: src/view/screens/Settings/index.tsx:125
msgid "Your profile"
msgstr ""
-#: src/view/com/composer/Composer.tsx:266
+#: src/view/com/composer/Composer.tsx:283
msgid "Your reply has been published"
msgstr ""
-#: src/view/com/auth/create/Step3.tsx:28
+#: src/screens/Signup/index.tsx:152
msgid "Your user handle"
msgstr ""
diff --git a/src/locale/locales/es/messages.po b/src/locale/locales/es/messages.po
index e77af75a2c..73a77abd65 100644
--- a/src/locale/locales/es/messages.po
+++ b/src/locale/locales/es/messages.po
@@ -21,7 +21,7 @@ msgstr ""
#~ msgid "{0, plural, one {# invite code available} other {# invite codes available}}"
#~ msgstr "{0, plural, one {# invite code available} other {# invite codes available}}"
-#: src/view/com/profile/ProfileHeader.tsx:592
+#: src/screens/Profile/Header/Metrics.tsx:44
msgid "{following} following"
msgstr ""
@@ -39,7 +39,7 @@ msgstr ""
#~ msgid "{invitesAvailable} invite codes available"
#~ msgstr "{invitesAvailable} códigos de invitación disponibles"
-#: src/view/shell/Drawer.tsx:440
+#: src/view/shell/Drawer.tsx:443
msgid "{numUnreadNotifications} unread"
msgstr ""
@@ -47,7 +47,11 @@ msgstr ""
msgid "<0/> members"
msgstr "<0/> miembros"
-#: src/view/com/profile/ProfileHeader.tsx:594
+#: src/view/shell/Drawer.tsx:97
+msgid "<0>{0}0> following"
+msgstr ""
+
+#: src/screens/Profile/Header/Metrics.tsx:45
msgid "<0>{following} 0><1>following1>"
msgstr ""
@@ -63,51 +67,60 @@ msgstr "<0>Sigue a algunos0><1>usuarios1><2>recomendados2>"
msgid "<0>Welcome to0><1>Bluesky1>"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:557
+#: src/screens/Profile/Header/Handle.tsx:42
msgid "⚠Invalid Handle"
msgstr ""
#: src/view/com/util/moderation/LabelInfo.tsx:45
-msgid "A content warning has been applied to this {0}."
-msgstr "Se ha aplicado una advertencia de contenido a este {0}."
+#~ msgid "A content warning has been applied to this {0}."
+#~ msgstr "Se ha aplicado una advertencia de contenido a este {0}."
#: src/lib/hooks/useOTAUpdate.ts:16
-msgid "A new version of the app is available. Please update to continue using the app."
-msgstr "Ya está disponible una nueva versión de la aplicación. Actualízala para seguir utilizándola."
+#~ msgid "A new version of the app is available. Please update to continue using the app."
+#~ msgstr "Ya está disponible una nueva versión de la aplicación. Actualízala para seguir utilizándola."
-#: src/view/com/util/ViewHeader.tsx:83
-#: src/view/screens/Search/Search.tsx:624
+#: src/view/com/util/ViewHeader.tsx:89
+#: src/view/screens/Search/Search.tsx:649
msgid "Access navigation links and settings"
msgstr ""
-#: src/view/com/pager/FeedsTabBarMobile.tsx:89
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:52
msgid "Access profile and other navigation links"
msgstr ""
-#: src/view/com/modals/EditImage.tsx:299
-#: src/view/screens/Settings/index.tsx:451
+#: src/view/com/modals/EditImage.tsx:300
+#: src/view/screens/Settings/index.tsx:470
msgid "Accessibility"
msgstr "Accesibilidad"
-#: src/view/com/auth/login/LoginForm.tsx:166
-#: src/view/screens/Settings/index.tsx:308
-#: src/view/screens/Settings/index.tsx:721
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "account"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:144
+#: src/view/screens/Settings/index.tsx:327
+#: src/view/screens/Settings/index.tsx:743
msgid "Account"
msgstr "Cuenta"
-#: src/view/com/profile/ProfileHeader.tsx:245
+#: src/view/com/profile/ProfileMenu.tsx:139
msgid "Account blocked"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:212
+#: src/view/com/profile/ProfileMenu.tsx:153
+msgid "Account followed"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:113
msgid "Account muted"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:86
+#: src/components/moderation/ModerationDetailsDialog.tsx:93
+#: src/lib/moderation/useModerationCauseDescription.ts:91
msgid "Account Muted"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:72
+#: src/components/moderation/ModerationDetailsDialog.tsx:82
msgid "Account Muted by List"
msgstr ""
@@ -119,18 +132,24 @@ msgstr "Opciones de la cuenta"
msgid "Account removed from quick access"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:267
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:137
+#: src/view/com/profile/ProfileMenu.tsx:128
msgid "Account unblocked"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:225
+#: src/view/com/profile/ProfileMenu.tsx:166
+msgid "Account unfollowed"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:102
msgid "Account unmuted"
msgstr ""
+#: src/components/dialogs/MutedWords.tsx:164
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:150
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/screens/ProfileList.tsx:812
+#: src/view/screens/ProfileList.tsx:827
msgid "Add"
msgstr "Agregar"
@@ -138,54 +157,63 @@ msgstr "Agregar"
msgid "Add a content warning"
msgstr "Agregar una advertencia de cuenta"
-#: src/view/screens/ProfileList.tsx:802
+#: src/view/screens/ProfileList.tsx:817
msgid "Add a user to this list"
msgstr "Agregar un usuario a esta lista"
-#: src/view/screens/Settings/index.tsx:383
-#: src/view/screens/Settings/index.tsx:392
+#: src/components/dialogs/SwitchAccount.tsx:55
+#: src/view/screens/Settings/index.tsx:402
+#: src/view/screens/Settings/index.tsx:411
msgid "Add account"
msgstr "Agregar una cuenta"
#: src/view/com/composer/photos/Gallery.tsx:119
#: src/view/com/composer/photos/Gallery.tsx:180
-#: src/view/com/modals/AltImage.tsx:116
+#: src/view/com/modals/AltImage.tsx:117
msgid "Add alt text"
msgstr "Agregar texto alt"
-#: src/view/screens/AppPasswords.tsx:102
-#: src/view/screens/AppPasswords.tsx:143
-#: src/view/screens/AppPasswords.tsx:156
+#: src/view/screens/AppPasswords.tsx:104
+#: src/view/screens/AppPasswords.tsx:145
+#: src/view/screens/AppPasswords.tsx:158
msgid "Add App Password"
msgstr ""
#: src/view/com/modals/report/InputIssueDetails.tsx:41
#: src/view/com/modals/report/Modal.tsx:191
-msgid "Add details"
-msgstr "Agregar detalles"
+#~ msgid "Add details"
+#~ msgstr "Agregar detalles"
#: src/view/com/modals/report/Modal.tsx:194
-msgid "Add details to report"
-msgstr "Agregar detalles al informe"
+#~ msgid "Add details to report"
+#~ msgstr "Agregar detalles al informe"
-#: src/view/com/composer/Composer.tsx:446
+#: src/view/com/composer/Composer.tsx:467
msgid "Add link card"
msgstr "Agregar una tarjeta de enlace"
-#: src/view/com/composer/Composer.tsx:451
+#: src/view/com/composer/Composer.tsx:472
msgid "Add link card:"
msgstr "Agregar una tarjeta de enlace:"
-#: src/view/com/modals/ChangeHandle.tsx:417
+#: src/components/dialogs/MutedWords.tsx:157
+msgid "Add mute word for configured settings"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:86
+msgid "Add muted words and tags"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:416
msgid "Add the following DNS record to your domain:"
msgstr "Añade el siguiente registro DNS a tu dominio:"
-#: src/view/com/profile/ProfileHeader.tsx:309
+#: src/view/com/profile/ProfileMenu.tsx:263
+#: src/view/com/profile/ProfileMenu.tsx:266
msgid "Add to Lists"
msgstr "Agregar a listas"
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/feeds/FeedSourceCard.tsx:234
msgid "Add to my feeds"
msgstr "Agregar a mis noticias"
@@ -198,36 +226,47 @@ msgstr ""
msgid "Added to list"
msgstr "Agregar a una lista"
-#: src/view/com/feeds/FeedSourceCard.tsx:125
+#: src/view/com/feeds/FeedSourceCard.tsx:108
msgid "Added to my feeds"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:173
+#: src/view/screens/PreferencesFollowingFeed.tsx:173
msgid "Adjust the number of likes a reply must have to be shown in your feed."
msgstr "Ajusta el número de Me gusta que debe tener una respuesta para que se muestre en tus noticias."
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:117
#: src/view/com/modals/SelfLabel.tsx:75
msgid "Adult Content"
msgstr "Contenido para adultos"
#: src/view/com/modals/ContentFilteringSettings.tsx:141
-msgid "Adult content can only be enabled via the Web at <0/>."
-msgstr ""
+#~ msgid "Adult content can only be enabled via the Web at <0/>."
+#~ msgstr ""
#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
#~ msgid "Adult content can only be enabled via the Web at <0>bsky.app0>."
#~ msgstr ""
-#: src/view/screens/Settings/index.tsx:664
+#: src/components/moderation/LabelPreference.tsx:242
+msgid "Adult content is disabled."
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:375
+#: src/view/screens/Settings/index.tsx:684
msgid "Advanced"
msgstr "Avanzado"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:221
-#: src/view/com/modals/ChangePassword.tsx:168
+#: src/view/screens/Feeds.tsx:666
+msgid "All the feeds you've saved, right in one place."
+msgstr ""
+
+#: src/screens/Login/ForgotPasswordForm.tsx:178
+#: src/view/com/modals/ChangePassword.tsx:170
msgid "Already have a code?"
msgstr ""
-#: src/view/com/auth/login/ChooseAccountForm.tsx:98
+#: src/screens/Login/ChooseAccountForm.tsx:39
msgid "Already signed in as @{0}"
msgstr ""
@@ -235,7 +274,7 @@ msgstr ""
msgid "ALT"
msgstr "ALT"
-#: src/view/com/modals/EditImage.tsx:315
+#: src/view/com/modals/EditImage.tsx:316
msgid "Alt text"
msgstr "Texto alt"
@@ -251,12 +290,18 @@ msgstr "Se ha enviado un correo electrónico a {0}. Incluye un código de confir
msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below."
msgstr "Se ha enviado un correo electrónico a tu dirección previa, {0}. Incluye un código de confirmación que puedes introducir a continuación."
-#: src/view/com/profile/FollowButton.tsx:30
-#: src/view/com/profile/FollowButton.tsx:40
+#: src/lib/moderation/useReportOptions.ts:26
+msgid "An issue not included in these options"
+msgstr ""
+
+#: src/view/com/profile/FollowButton.tsx:35
+#: src/view/com/profile/FollowButton.tsx:45
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:188
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:198
msgid "An issue occurred, please try again."
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:236
+#: src/view/com/notifications/FeedItem.tsx:240
#: src/view/com/threadgate/WhoCanReply.tsx:178
msgid "and"
msgstr "y"
@@ -265,23 +310,27 @@ msgstr "y"
msgid "Animals"
msgstr ""
+#: src/lib/moderation/useReportOptions.ts:31
+msgid "Anti-Social Behavior"
+msgstr ""
+
#: src/view/screens/LanguageSettings.tsx:95
msgid "App Language"
msgstr "Lenguaje de app"
-#: src/view/screens/AppPasswords.tsx:228
+#: src/view/screens/AppPasswords.tsx:223
msgid "App password deleted"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:134
+#: src/view/com/modals/AddAppPasswords.tsx:135
msgid "App Password names can only contain letters, numbers, spaces, dashes, and underscores."
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:99
+#: src/view/com/modals/AddAppPasswords.tsx:100
msgid "App Password names must be at least 4 characters long."
msgstr ""
-#: src/view/screens/Settings/index.tsx:675
+#: src/view/screens/Settings/index.tsx:695
msgid "App password settings"
msgstr ""
@@ -289,47 +338,65 @@ msgstr ""
#~ msgid "App passwords"
#~ msgstr "Contraseñas de la app"
-#: src/Navigation.tsx:237
-#: src/view/screens/AppPasswords.tsx:187
-#: src/view/screens/Settings/index.tsx:684
+#: src/Navigation.tsx:251
+#: src/view/screens/AppPasswords.tsx:189
+#: src/view/screens/Settings/index.tsx:704
msgid "App Passwords"
msgstr "Contraseñas de la app"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:250
-msgid "Appeal content warning"
-msgstr "Aviso sobre el contenido del recurso"
+#: src/components/moderation/LabelsOnMeDialog.tsx:133
+#: src/components/moderation/LabelsOnMeDialog.tsx:136
+msgid "Appeal"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:201
+msgid "Appeal \"{0}\" label"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:337
+#: src/view/com/util/forms/PostDropdownBtn.tsx:346
+#~ msgid "Appeal content warning"
+#~ msgstr "Aviso sobre el contenido del recurso"
#: src/view/com/modals/AppealLabel.tsx:65
-msgid "Appeal Content Warning"
-msgstr "Aviso sobre el Contenido del Recurso"
+#~ msgid "Appeal Content Warning"
+#~ msgstr "Aviso sobre el Contenido del Recurso"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:192
+msgid "Appeal submitted."
+msgstr ""
#: src/view/com/util/moderation/LabelInfo.tsx:52
-msgid "Appeal this decision"
-msgstr "Apelar esta decisión"
+#~ msgid "Appeal this decision"
+#~ msgstr "Apelar esta decisión"
#: src/view/com/util/moderation/LabelInfo.tsx:56
-msgid "Appeal this decision."
-msgstr "Apelar esta decisión."
+#~ msgid "Appeal this decision."
+#~ msgstr "Apelar esta decisión."
-#: src/view/screens/Settings/index.tsx:466
+#: src/view/screens/Settings/index.tsx:485
msgid "Appearance"
msgstr "Aspecto exterior"
-#: src/view/screens/AppPasswords.tsx:224
+#: src/view/screens/AppPasswords.tsx:265
msgid "Are you sure you want to delete the app password \"{name}\"?"
msgstr "¿Estás seguro de que quieres eliminar la contraseña de la app \"{name}\"?"
-#: src/view/com/composer/Composer.tsx:143
+#: src/view/com/feeds/FeedSourceCard.tsx:280
+msgid "Are you sure you want to remove {0} from your feeds?"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:509
msgid "Are you sure you'd like to discard this draft?"
msgstr "¿Estás seguro de que quieres descartar este borrador?"
-#: src/view/screens/ProfileList.tsx:364
+#: src/components/dialogs/MutedWords.tsx:281
msgid "Are you sure?"
msgstr "¿Estás seguro?"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:233
-msgid "Are you sure? This cannot be undone."
-msgstr "¿Estás seguro? Esto no puede deshacerse."
+#: src/view/com/util/forms/PostDropdownBtn.tsx:322
+#~ msgid "Are you sure? This cannot be undone."
+#~ msgstr "¿Estás seguro? Esto no puede deshacerse."
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:60
msgid "Are you writing in <0>{0}0>?"
@@ -343,78 +410,93 @@ msgstr ""
msgid "Artistic or non-erotic nudity."
msgstr "Desnudez artística o no erótica."
-#: src/view/com/auth/create/CreateAccount.tsx:147
-#: src/view/com/auth/login/ChooseAccountForm.tsx:151
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:174
-#: src/view/com/auth/login/LoginForm.tsx:259
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:179
-#: src/view/com/modals/report/InputIssueDetails.tsx:46
-#: src/view/com/post-thread/PostThread.tsx:408
-#: src/view/com/post-thread/PostThread.tsx:458
-#: src/view/com/post-thread/PostThread.tsx:466
-#: src/view/com/profile/ProfileHeader.tsx:648
-#: src/view/com/util/ViewHeader.tsx:81
+#: src/screens/Signup/StepHandle.tsx:118
+msgid "At least 3 characters"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:246
+#: src/components/moderation/LabelsOnMeDialog.tsx:247
+#: src/screens/Login/ChooseAccountForm.tsx:73
+#: src/screens/Login/ChooseAccountForm.tsx:78
+#: src/screens/Login/ForgotPasswordForm.tsx:129
+#: src/screens/Login/ForgotPasswordForm.tsx:135
+#: src/screens/Login/LoginForm.tsx:221
+#: src/screens/Login/LoginForm.tsx:227
+#: src/screens/Login/SetNewPasswordForm.tsx:160
+#: src/screens/Login/SetNewPasswordForm.tsx:166
+#: src/screens/Profile/Header/Shell.tsx:96
+#: src/screens/Signup/index.tsx:179
+#: src/view/com/util/ViewHeader.tsx:87
msgid "Back"
msgstr "Regresar"
-#: src/view/com/post-thread/PostThread.tsx:416
-msgctxt "action"
-msgid "Back"
-msgstr ""
+#: src/view/com/post-thread/PostThread.tsx:480
+#~ msgctxt "action"
+#~ msgid "Back"
+#~ msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:136
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:144
msgid "Based on your interest in {interestsText}"
msgstr ""
-#: src/view/screens/Settings/index.tsx:523
+#: src/view/screens/Settings/index.tsx:542
msgid "Basics"
msgstr "Conceptos básicos"
-#: src/view/com/auth/create/Step1.tsx:246
-#: src/view/com/modals/BirthDateSettings.tsx:73
+#: src/components/dialogs/BirthDateSettings.tsx:107
msgid "Birthday"
msgstr "Cumpleaños"
-#: src/view/screens/Settings/index.tsx:340
+#: src/view/screens/Settings/index.tsx:359
msgid "Birthday:"
msgstr "Cumpleaños:"
-#: src/view/com/profile/ProfileHeader.tsx:238
-#: src/view/com/profile/ProfileHeader.tsx:345
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+msgid "Block"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:300
+#: src/view/com/profile/ProfileMenu.tsx:307
msgid "Block Account"
msgstr "Bloquear una cuenta"
-#: src/view/screens/ProfileList.tsx:555
+#: src/view/com/profile/ProfileMenu.tsx:344
+msgid "Block Account?"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:530
msgid "Block accounts"
msgstr "Bloquear cuentas"
-#: src/view/screens/ProfileList.tsx:505
+#: src/view/screens/ProfileList.tsx:478
+#: src/view/screens/ProfileList.tsx:634
msgid "Block list"
msgstr "Bloquear una lista"
-#: src/view/screens/ProfileList.tsx:315
+#: src/view/screens/ProfileList.tsx:629
msgid "Block these accounts?"
msgstr "¿Bloquear estas cuentas?"
-#: src/view/screens/ProfileList.tsx:319
-msgid "Block this List"
-msgstr ""
+#: src/view/screens/ProfileList.tsx:320
+#~ msgid "Block this List"
+#~ msgstr ""
-#: src/view/com/lists/ListCard.tsx:109
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:60
+#: src/view/com/lists/ListCard.tsx:110
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:55
msgid "Blocked"
msgstr ""
-#: src/view/screens/Moderation.tsx:123
+#: src/screens/Moderation/index.tsx:267
msgid "Blocked accounts"
msgstr "Cuentas bloqueadas"
-#: src/Navigation.tsx:130
+#: src/Navigation.tsx:134
#: src/view/screens/ModerationBlockedAccounts.tsx:107
msgid "Blocked Accounts"
msgstr "Cuentas bloqueadas"
-#: src/view/com/profile/ProfileHeader.tsx:240
+#: src/view/com/profile/ProfileMenu.tsx:356
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
msgstr "Las cuentas bloqueadas no pueden responder en tus hilos, mencionarte ni interactuar contigo de ninguna otra forma."
@@ -422,48 +504,57 @@ msgstr "Las cuentas bloqueadas no pueden responder en tus hilos, mencionarte ni
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours."
msgstr "Las cuentas bloqueadas no pueden responder en tus hilos, mencionarte ni interactuar contigo de ninguna otra forma. Tú no verás su contenido y ellos no podrán ver el tuyo."
-#: src/view/com/post-thread/PostThread.tsx:267
+#: src/view/com/post-thread/PostThread.tsx:313
msgid "Blocked post."
msgstr "Publicación bloqueada."
-#: src/view/screens/ProfileList.tsx:317
+#: src/screens/Profile/Sections/Labels.tsx:152
+msgid "Blocking does not prevent this labeler from placing labels on your account."
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:631
msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
msgstr "El bloque es público. Las cuentas bloqueadas no pueden responder en tus hilos, mencionarte ni interactuar contigo de ninguna otra forma."
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:93
+#: src/view/com/profile/ProfileMenu.tsx:353
+msgid "Blocking will not prevent labels from being applied on your account, but it will stop this account from replying in your threads or interacting with you."
+msgstr ""
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:98
+#: src/view/com/auth/SplashScreen.web.tsx:169
msgid "Blog"
msgstr "Blog"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:31
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:32
#: src/view/com/auth/server-input/index.tsx:89
-#: src/view/com/auth/server-input/index.tsx:90
+#: src/view/com/auth/server-input/index.tsx:91
msgid "Bluesky"
msgstr "Bluesky"
-#: src/view/com/auth/server-input/index.tsx:150
+#: src/view/com/auth/server-input/index.tsx:154
msgid "Bluesky is an open network where you can choose your hosting provider. Custom hosting is now available in beta for developers."
msgstr ""
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:80
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:80
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:82
msgid "Bluesky is flexible."
msgstr "Bluesky es flexible."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:69
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:69
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:71
msgid "Bluesky is open."
msgstr "Bluesky es abierto."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:56
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:56
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:58
msgid "Bluesky is public."
msgstr "Bluesky es público."
#: src/view/com/modals/Waitlist.tsx:70
-msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
-msgstr "Bluesky utiliza las invitaciones para construir una comunidad más saludable. Si no conoces a nadie con una invitación, puedes apuntarte a la lista de espera y te enviaremos una en breve."
+#~ msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
+#~ msgstr "Bluesky utiliza las invitaciones para construir una comunidad más saludable. Si no conoces a nadie con una invitación, puedes apuntarte a la lista de espera y te enviaremos una en breve."
-#: src/view/screens/Moderation.tsx:226
+#: src/screens/Moderation/index.tsx:533
msgid "Bluesky will not show your profile and posts to logged-out users. Other apps may not honor this request. This does not make your account private."
msgstr "Bluesky no mostrará tu perfil ni tus publicaciones a los usuarios que hayan cerrado sesión. Es posible que otras aplicaciones no acepten esta solicitud. Esto no hace que tu cuenta sea privada."
@@ -471,15 +562,24 @@ msgstr "Bluesky no mostrará tu perfil ni tus publicaciones a los usuarios que h
#~ msgid "Bluesky.Social"
#~ msgstr "Bluesky.Social"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:53
+msgid "Blur images"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:51
+msgid "Blur images and filter from feeds"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:33
msgid "Books"
msgstr ""
-#: src/view/screens/Settings/index.tsx:859
-msgid "Build version {0} {1}"
-msgstr "Versión {0} {1}"
+#: src/view/screens/Settings/index.tsx:893
+#~ msgid "Build version {0} {1}"
+#~ msgstr "Versión {0} {1}"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:87
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:92
+#: src/view/com/auth/SplashScreen.web.tsx:166
msgid "Business"
msgstr "Negocios"
@@ -495,95 +595,113 @@ msgstr ""
msgid "by {0}"
msgstr ""
+#: src/components/LabelingServiceCard/index.tsx:57
+msgid "By {0}"
+msgstr ""
+
#: src/view/com/profile/ProfileSubpageHeader.tsx:161
msgid "by <0/>"
msgstr ""
+#: src/screens/Signup/StepInfo/Policies.tsx:74
+msgid "By creating an account you agree to the {els}."
+msgstr ""
+
#: src/view/com/profile/ProfileSubpageHeader.tsx:159
msgid "by you"
msgstr ""
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:60
-#: src/view/com/util/UserAvatar.tsx:224
-#: src/view/com/util/UserBanner.tsx:40
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:77
msgid "Camera"
msgstr "Cámara"
-#: src/view/com/modals/AddAppPasswords.tsx:216
+#: src/view/com/modals/AddAppPasswords.tsx:217
msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long."
msgstr "Sólo puede contener letras, números, espacios, guiones y guiones bajos. Debe tener al menos 4 caracteres, pero no más de 32."
-#: src/components/Prompt.tsx:91
-#: src/view/com/composer/Composer.tsx:300
-#: src/view/com/composer/Composer.tsx:305
+#: src/components/Menu/index.tsx:213
+#: src/components/Prompt.tsx:113
+#: src/components/Prompt.tsx:115
+#: src/components/TagMenu/index.tsx:268
+#: src/view/com/composer/Composer.tsx:317
+#: src/view/com/composer/Composer.tsx:322
#: src/view/com/modals/ChangeEmail.tsx:218
#: src/view/com/modals/ChangeEmail.tsx:220
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
-#: src/view/com/modals/CreateOrEditList.tsx:355
-#: src/view/com/modals/EditImage.tsx:323
-#: src/view/com/modals/EditProfile.tsx:249
+#: src/view/com/modals/ChangeHandle.tsx:154
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
+#: src/view/com/modals/CreateOrEditList.tsx:356
+#: src/view/com/modals/crop-image/CropImage.web.tsx:138
+#: src/view/com/modals/EditImage.tsx:324
+#: src/view/com/modals/EditProfile.tsx:250
#: src/view/com/modals/InAppBrowserConsent.tsx:78
-#: src/view/com/modals/LinkWarning.tsx:87
-#: src/view/com/modals/Repost.tsx:87
+#: src/view/com/modals/InAppBrowserConsent.tsx:80
+#: src/view/com/modals/LinkWarning.tsx:105
+#: src/view/com/modals/LinkWarning.tsx:107
+#: src/view/com/modals/Repost.tsx:88
#: src/view/com/modals/VerifyEmail.tsx:247
#: src/view/com/modals/VerifyEmail.tsx:253
-#: src/view/com/modals/Waitlist.tsx:142
-#: src/view/screens/Search/Search.tsx:693
-#: src/view/shell/desktop/Search.tsx:238
+#: src/view/screens/Search/Search.tsx:718
+#: src/view/shell/desktop/Search.tsx:239
msgid "Cancel"
msgstr "Cancelar"
-#: src/view/com/modals/Confirm.tsx:88
-#: src/view/com/modals/Confirm.tsx:91
-#: src/view/com/modals/CreateOrEditList.tsx:360
-#: src/view/com/modals/DeleteAccount.tsx:156
-#: src/view/com/modals/DeleteAccount.tsx:234
+#: src/view/com/modals/CreateOrEditList.tsx:361
+#: src/view/com/modals/DeleteAccount.tsx:155
+#: src/view/com/modals/DeleteAccount.tsx:233
msgctxt "action"
msgid "Cancel"
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:152
-#: src/view/com/modals/DeleteAccount.tsx:230
+#: src/view/com/modals/DeleteAccount.tsx:151
+#: src/view/com/modals/DeleteAccount.tsx:229
msgid "Cancel account deletion"
msgstr "Cancelar la eliminación de la cuenta"
-#: src/view/com/modals/ChangeHandle.tsx:149
+#: src/view/com/modals/ChangeHandle.tsx:150
msgid "Cancel change handle"
msgstr "Cancelar identificador de cambio"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:134
+#: src/view/com/modals/crop-image/CropImage.web.tsx:135
msgid "Cancel image crop"
msgstr "Cancelar recorte de imagen"
-#: src/view/com/modals/EditProfile.tsx:244
+#: src/view/com/modals/EditProfile.tsx:245
msgid "Cancel profile editing"
msgstr "Cancelar la edición de perfil"
-#: src/view/com/modals/Repost.tsx:78
+#: src/view/com/modals/Repost.tsx:79
msgid "Cancel quote post"
msgstr "Cancelar la publicación de un presupuesto"
#: src/view/com/modals/ListAddRemoveUsers.tsx:87
-#: src/view/shell/desktop/Search.tsx:234
+#: src/view/shell/desktop/Search.tsx:235
msgid "Cancel search"
msgstr "Cancelar búsqueda"
#: src/view/com/modals/Waitlist.tsx:136
-msgid "Cancel waitlist signup"
-msgstr "Cancelar la inscripción en la lista de espera"
+#~ msgid "Cancel waitlist signup"
+#~ msgstr "Cancelar la inscripción en la lista de espera"
+
+#: src/view/com/modals/LinkWarning.tsx:106
+msgid "Cancels opening the linked website"
+msgstr ""
+
+#: src/view/com/modals/VerifyEmail.tsx:152
+msgid "Change"
+msgstr ""
-#: src/view/screens/Settings/index.tsx:334
+#: src/view/screens/Settings/index.tsx:353
msgctxt "action"
msgid "Change"
msgstr "Cambiar"
-#: src/view/screens/Settings/index.tsx:696
+#: src/view/screens/Settings/index.tsx:716
msgid "Change handle"
msgstr "Cambiar el identificador"
-#: src/view/com/modals/ChangeHandle.tsx:161
-#: src/view/screens/Settings/index.tsx:705
+#: src/view/com/modals/ChangeHandle.tsx:162
+#: src/view/screens/Settings/index.tsx:727
msgid "Change Handle"
msgstr "Cambiar el identificador"
@@ -591,11 +709,12 @@ msgstr "Cambiar el identificador"
msgid "Change my email"
msgstr "Cambiar mi correo electrónico"
-#: src/view/screens/Settings/index.tsx:732
+#: src/view/screens/Settings/index.tsx:754
msgid "Change password"
msgstr ""
-#: src/view/screens/Settings/index.tsx:741
+#: src/view/com/modals/ChangePassword.tsx:141
+#: src/view/screens/Settings/index.tsx:765
msgid "Change Password"
msgstr ""
@@ -604,8 +723,8 @@ msgid "Change post language to {0}"
msgstr ""
#: src/view/screens/Settings/index.tsx:733
-msgid "Change your Bluesky password"
-msgstr ""
+#~ msgid "Change your Bluesky password"
+#~ msgstr ""
#: src/view/com/modals/ChangeEmail.tsx:109
msgid "Change Your Email"
@@ -624,7 +743,7 @@ msgstr "Echa un vistazo a algunas publicaciones recomendadas. Pulsa + para añad
msgid "Check out some recommended users. Follow them to see similar users."
msgstr "Echa un vistazo a algunos usuarios recomendados. Síguelos para ver usuarios similares."
-#: src/view/com/modals/DeleteAccount.tsx:169
+#: src/view/com/modals/DeleteAccount.tsx:168
msgid "Check your inbox for an email with the confirmation code to enter below:"
msgstr "Consulta tu bandeja de entrada para recibir un correo electrónico con el código de confirmación que debes introducir a continuación:"
@@ -633,19 +752,19 @@ msgid "Choose \"Everybody\" or \"Nobody\""
msgstr ""
#: src/view/screens/Settings/index.tsx:697
-msgid "Choose a new Bluesky username or create"
-msgstr ""
+#~ msgid "Choose a new Bluesky username or create"
+#~ msgstr ""
#: src/view/com/auth/server-input/index.tsx:79
msgid "Choose Service"
msgstr "Elige un Servicio"
-#: src/screens/Onboarding/StepFinished.tsx:135
+#: src/screens/Onboarding/StepFinished.tsx:139
msgid "Choose the algorithms that power your custom feeds."
msgstr ""
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:83
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:83
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:85
msgid "Choose the algorithms that power your experience with custom feeds."
msgstr "Elige los algoritmos que potencian tu experiencia con publicaciones personalizadas."
@@ -653,91 +772,111 @@ msgstr "Elige los algoritmos que potencian tu experiencia con publicaciones pers
#~ msgid "Choose your algorithmic feeds"
#~ msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:103
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:104
msgid "Choose your main feeds"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:215
+#: src/screens/Signup/StepInfo/index.tsx:112
msgid "Choose your password"
msgstr "Elige tu contraseña"
-#: src/view/screens/Settings/index.tsx:834
-#: src/view/screens/Settings/index.tsx:835
+#: src/view/screens/Settings/index.tsx:868
msgid "Clear all legacy storage data"
msgstr "Borrar todos los datos de almacenamiento heredados"
-#: src/view/screens/Settings/index.tsx:837
+#: src/view/screens/Settings/index.tsx:871
msgid "Clear all legacy storage data (restart after this)"
msgstr "Borrar todos los datos de almacenamiento heredados (reiniciar después de esto)"
-#: src/view/screens/Settings/index.tsx:846
-#: src/view/screens/Settings/index.tsx:847
+#: src/view/screens/Settings/index.tsx:880
msgid "Clear all storage data"
msgstr "Borrar todos los datos de almacenamiento"
-#: src/view/screens/Settings/index.tsx:849
+#: src/view/screens/Settings/index.tsx:883
msgid "Clear all storage data (restart after this)"
msgstr "Borrar todos los datos de almacenamiento (reiniciar después de esto)"
#: src/view/com/util/forms/SearchInput.tsx:88
-#: src/view/screens/Search/Search.tsx:674
+#: src/view/screens/Search/Search.tsx:699
msgid "Clear search query"
msgstr "Borrar consulta de búsqueda"
+#: src/view/screens/Settings/index.tsx:869
+msgid "Clears all legacy storage data"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:881
+msgid "Clears all storage data"
+msgstr ""
+
#: src/view/screens/Support.tsx:40
msgid "click here"
msgstr ""
+#: src/components/TagMenu/index.web.tsx:138
+msgid "Click here to open tag menu for {tag}"
+msgstr ""
+
+#: src/components/RichText.tsx:192
+msgid "Click here to open tag menu for #{tag}"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:35
msgid "Climate"
msgstr ""
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
msgid "Close"
msgstr ""
-#: src/components/Dialog/index.web.tsx:78
+#: src/components/Dialog/index.web.tsx:106
+#: src/components/Dialog/index.web.tsx:218
msgid "Close active dialog"
msgstr ""
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:38
+#: src/screens/Login/PasswordUpdatedForm.tsx:38
msgid "Close alert"
msgstr "Cerrar la alerta"
-#: src/view/com/util/BottomSheetCustomBackdrop.tsx:33
+#: src/view/com/util/BottomSheetCustomBackdrop.tsx:36
msgid "Close bottom drawer"
msgstr "Cierra el cajón inferior"
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:26
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:36
msgid "Close image"
msgstr "Cerrar la imagen"
-#: src/view/com/lightbox/Lightbox.web.tsx:119
+#: src/view/com/lightbox/Lightbox.web.tsx:129
msgid "Close image viewer"
msgstr "Cerrar el visor de imagen"
-#: src/view/shell/index.web.tsx:49
+#: src/view/shell/index.web.tsx:55
msgid "Close navigation footer"
msgstr "Cerrar el pie de página de navegación"
-#: src/view/shell/index.web.tsx:50
+#: src/components/Menu/index.tsx:207
+#: src/components/TagMenu/index.tsx:262
+msgid "Close this dialog"
+msgstr ""
+
+#: src/view/shell/index.web.tsx:56
msgid "Closes bottom navigation bar"
msgstr ""
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:39
+#: src/screens/Login/PasswordUpdatedForm.tsx:39
msgid "Closes password update alert"
msgstr ""
-#: src/view/com/composer/Composer.tsx:302
+#: src/view/com/composer/Composer.tsx:319
msgid "Closes post composer and discards post draft"
msgstr ""
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:27
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:37
msgid "Closes viewer for header image"
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:317
+#: src/view/com/notifications/FeedItem.tsx:321
msgid "Collapses list of users for a given notification"
msgstr ""
@@ -749,16 +888,20 @@ msgstr ""
msgid "Comics"
msgstr ""
-#: src/Navigation.tsx:227
+#: src/Navigation.tsx:241
#: src/view/screens/CommunityGuidelines.tsx:32
msgid "Community Guidelines"
msgstr "Directrices de la comunidad"
-#: src/screens/Onboarding/StepFinished.tsx:148
+#: src/screens/Onboarding/StepFinished.tsx:152
msgid "Complete onboarding and start using your account"
msgstr ""
-#: src/view/com/composer/Composer.tsx:417
+#: src/screens/Signup/index.tsx:154
+msgid "Complete the challenge"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:438
msgid "Compose posts up to {MAX_GRAPHEME_LENGTH} characters in length"
msgstr ""
@@ -766,81 +909,112 @@ msgstr ""
msgid "Compose reply"
msgstr "Redactar la respuesta"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:67
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:81
msgid "Configure content filtering setting for category: {0}"
msgstr ""
-#: src/components/Prompt.tsx:113
-#: src/view/com/modals/AppealLabel.tsx:98
+#: src/components/moderation/LabelPreference.tsx:81
+msgid "Configure content filtering setting for category: {name}"
+msgstr ""
+
+#: src/components/moderation/LabelPreference.tsx:244
+msgid "Configured in <0>moderation settings0>."
+msgstr ""
+
+#: src/components/Prompt.tsx:153
+#: src/components/Prompt.tsx:156
#: src/view/com/modals/SelfLabel.tsx:154
#: src/view/com/modals/VerifyEmail.tsx:231
#: src/view/com/modals/VerifyEmail.tsx:233
-#: src/view/screens/PreferencesHomeFeed.tsx:308
+#: src/view/screens/PreferencesFollowingFeed.tsx:308
#: src/view/screens/PreferencesThreads.tsx:159
msgid "Confirm"
msgstr "Confirmar"
#: src/view/com/modals/Confirm.tsx:75
#: src/view/com/modals/Confirm.tsx:78
-msgctxt "action"
-msgid "Confirm"
-msgstr ""
+#~ msgctxt "action"
+#~ msgid "Confirm"
+#~ msgstr ""
#: src/view/com/modals/ChangeEmail.tsx:193
#: src/view/com/modals/ChangeEmail.tsx:195
msgid "Confirm Change"
msgstr "Confirmar el cambio"
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:34
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:35
msgid "Confirm content language settings"
msgstr "Confirmar la configuración del idioma del contenido"
-#: src/view/com/modals/DeleteAccount.tsx:220
+#: src/view/com/modals/DeleteAccount.tsx:219
msgid "Confirm delete account"
msgstr "Confirmar eliminación de cuenta"
#: src/view/com/modals/ContentFilteringSettings.tsx:156
-msgid "Confirm your age to enable adult content."
+#~ msgid "Confirm your age to enable adult content."
+#~ msgstr ""
+
+#: src/screens/Moderation/index.tsx:301
+msgid "Confirm your age:"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:292
+msgid "Confirm your birthdate"
msgstr ""
#: src/view/com/modals/ChangeEmail.tsx:157
-#: src/view/com/modals/DeleteAccount.tsx:182
+#: src/view/com/modals/DeleteAccount.tsx:175
+#: src/view/com/modals/DeleteAccount.tsx:181
#: src/view/com/modals/VerifyEmail.tsx:165
msgid "Confirmation code"
msgstr "Código de confirmación"
#: src/view/com/modals/Waitlist.tsx:120
-msgid "Confirms signing up {email} to the waitlist"
-msgstr ""
+#~ msgid "Confirms signing up {email} to the waitlist"
+#~ msgstr ""
-#: src/view/com/auth/create/CreateAccount.tsx:182
-#: src/view/com/auth/login/LoginForm.tsx:278
+#: src/screens/Login/LoginForm.tsx:248
msgid "Connecting..."
msgstr "Conectando..."
-#: src/view/com/auth/create/CreateAccount.tsx:202
+#: src/screens/Signup/index.tsx:219
msgid "Contact support"
msgstr ""
-#: src/view/screens/Moderation.tsx:81
-msgid "Content filtering"
-msgstr "Filtro de contenido"
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "content"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:18
+msgid "Content Blocked"
+msgstr ""
+
+#: src/view/screens/Moderation.tsx:83
+#~ msgid "Content filtering"
+#~ msgstr "Filtro de contenido"
#: src/view/com/modals/ContentFilteringSettings.tsx:44
-msgid "Content Filtering"
-msgstr "Filtro de contenido"
+#~ msgid "Content Filtering"
+#~ msgstr "Filtro de contenido"
+
+#: src/screens/Moderation/index.tsx:285
+msgid "Content filters"
+msgstr ""
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74
#: src/view/screens/LanguageSettings.tsx:278
msgid "Content Languages"
msgstr "Lenguajes de contenido"
-#: src/view/com/modals/ModerationDetails.tsx:65
+#: src/components/moderation/ModerationDetailsDialog.tsx:75
+#: src/lib/moderation/useModerationCauseDescription.ts:75
msgid "Content Not Available"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:33
-#: src/view/com/util/moderation/ScreenHider.tsx:78
+#: src/components/moderation/ModerationDetailsDialog.tsx:46
+#: src/components/moderation/ScreenHider.tsx:99
+#: src/lib/moderation/useGlobalLabelStrings.ts:22
+#: src/lib/moderation/useModerationCauseDescription.ts:38
msgid "Content Warning"
msgstr "Advertencia de contenido"
@@ -848,28 +1022,38 @@ msgstr "Advertencia de contenido"
msgid "Content warnings"
msgstr "Advertencias de contenido"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:170
-#: src/screens/Onboarding/StepFollowingFeed.tsx:153
-#: src/screens/Onboarding/StepInterests/index.tsx:248
-#: src/screens/Onboarding/StepModeration/index.tsx:118
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:108
+#: src/components/Menu/index.web.tsx:84
+msgid "Context menu backdrop, click to close the menu."
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:161
+#: src/screens/Onboarding/StepFollowingFeed.tsx:154
+#: src/screens/Onboarding/StepInterests/index.tsx:252
+#: src/screens/Onboarding/StepModeration/index.tsx:103
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:118
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:96
msgid "Continue"
msgstr "Continuar"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:150
-#: src/screens/Onboarding/StepInterests/index.tsx:245
-#: src/screens/Onboarding/StepModeration/index.tsx:115
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:105
+#: src/components/AccountList.tsx:108
+msgid "Continue as {0} (currently signed in)"
+msgstr ""
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:151
+#: src/screens/Onboarding/StepInterests/index.tsx:249
+#: src/screens/Onboarding/StepModeration/index.tsx:100
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:115
+#: src/screens/Signup/index.tsx:198
msgid "Continue to next step"
msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:167
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:158
msgid "Continue to the next step"
msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:191
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:199
msgid "Continue to the next step without following any accounts"
msgstr ""
@@ -877,98 +1061,110 @@ msgstr ""
msgid "Cooking"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:195
-#: src/view/com/modals/InviteCodes.tsx:182
+#: src/view/com/modals/AddAppPasswords.tsx:196
+#: src/view/com/modals/InviteCodes.tsx:183
msgid "Copied"
msgstr "Copiado"
-#: src/view/screens/Settings/index.tsx:241
+#: src/view/screens/Settings/index.tsx:251
msgid "Copied build version to clipboard"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:76
-#: src/view/com/modals/InviteCodes.tsx:152
-#: src/view/com/util/forms/PostDropdownBtn.tsx:112
+#: src/view/com/modals/AddAppPasswords.tsx:77
+#: src/view/com/modals/ChangeHandle.tsx:326
+#: src/view/com/modals/InviteCodes.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:158
msgid "Copied to clipboard"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:189
+#: src/view/com/modals/AddAppPasswords.tsx:190
msgid "Copies app password"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:188
+#: src/view/com/modals/AddAppPasswords.tsx:189
msgid "Copy"
msgstr "Copiar"
-#: src/view/screens/ProfileList.tsx:417
+#: src/view/com/modals/ChangeHandle.tsx:480
+msgid "Copy {0}"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:388
msgid "Copy link to list"
msgstr "Copia el enlace a la lista"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
msgid "Copy link to post"
msgstr "Copia el enlace a la publicación"
-#: src/view/com/profile/ProfileHeader.tsx:294
-msgid "Copy link to profile"
-msgstr "Copia el enlace al perfil"
+#: src/view/com/profile/ProfileHeader.tsx:295
+#~ msgid "Copy link to profile"
+#~ msgstr "Copia el enlace al perfil"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:139
+#: src/view/com/util/forms/PostDropdownBtn.tsx:220
+#: src/view/com/util/forms/PostDropdownBtn.tsx:222
msgid "Copy post text"
msgstr "Copiar el texto de la publicación"
-#: src/Navigation.tsx:232
+#: src/Navigation.tsx:246
#: src/view/screens/CopyrightPolicy.tsx:29
msgid "Copyright Policy"
msgstr "Política de derechos de autor"
-#: src/view/screens/ProfileFeed.tsx:96
+#: src/view/screens/ProfileFeed.tsx:103
msgid "Could not load feed"
msgstr "No se ha podido cargar las publicaciones"
-#: src/view/screens/ProfileList.tsx:888
+#: src/view/screens/ProfileList.tsx:907
msgid "Could not load list"
msgstr "No se ha podido cargar la lista"
#: src/view/com/auth/create/Step2.tsx:91
-msgid "Country"
-msgstr ""
+#~ msgid "Country"
+#~ msgstr ""
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:62
-#: src/view/com/auth/SplashScreen.tsx:46
-#: src/view/com/auth/SplashScreen.web.tsx:77
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:65
+#: src/view/com/auth/SplashScreen.tsx:75
+#: src/view/com/auth/SplashScreen.web.tsx:104
msgid "Create a new account"
msgstr "Crear una cuenta nueva"
-#: src/view/screens/Settings/index.tsx:384
+#: src/view/screens/Settings/index.tsx:403
msgid "Create a new Bluesky account"
msgstr ""
-#: src/view/com/auth/create/CreateAccount.tsx:122
+#: src/screens/Signup/index.tsx:129
msgid "Create Account"
msgstr "Crear una cuenta"
-#: src/view/com/modals/AddAppPasswords.tsx:226
+#: src/view/com/modals/AddAppPasswords.tsx:227
msgid "Create App Password"
msgstr ""
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:54
-#: src/view/com/auth/SplashScreen.tsx:43
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:55
+#: src/view/com/auth/SplashScreen.tsx:66
+#: src/view/com/auth/SplashScreen.web.tsx:95
msgid "Create new account"
msgstr "Crear una cuenta nueva"
-#: src/view/screens/AppPasswords.tsx:249
+#: src/components/ReportDialog/SelectReportOptionView.tsx:93
+msgid "Create report for {0}"
+msgstr ""
+
+#: src/view/screens/AppPasswords.tsx:246
msgid "Created {0}"
msgstr "Creado {0}"
#: src/view/screens/ProfileFeed.tsx:616
-msgid "Created by <0/>"
-msgstr ""
+#~ msgid "Created by <0/>"
+#~ msgstr ""
#: src/view/screens/ProfileFeed.tsx:614
-msgid "Created by you"
-msgstr ""
+#~ msgid "Created by you"
+#~ msgstr ""
-#: src/view/com/composer/Composer.tsx:448
+#: src/view/com/composer/Composer.tsx:469
msgid "Creates a card with a thumbnail. The card links to {url}"
msgstr ""
@@ -976,16 +1172,17 @@ msgstr ""
msgid "Culture"
msgstr ""
-#: src/view/com/auth/server-input/index.tsx:95
-#: src/view/com/auth/server-input/index.tsx:96
+#: src/view/com/auth/server-input/index.tsx:97
+#: src/view/com/auth/server-input/index.tsx:99
msgid "Custom"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:389
+#: src/view/com/modals/ChangeHandle.tsx:388
msgid "Custom domain"
msgstr "Dominio personalizado"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:107
+#: src/view/screens/Feeds.tsx:692
msgid "Custom feeds built by the community bring you new experiences and help you find the content you love."
msgstr ""
@@ -997,8 +1194,8 @@ msgstr ""
#~ msgid "Danger Zone"
#~ msgstr "Zona de peligro"
-#: src/view/screens/Settings/index.tsx:485
-#: src/view/screens/Settings/index.tsx:511
+#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:530
msgid "Dark"
msgstr ""
@@ -1006,33 +1203,49 @@ msgstr ""
msgid "Dark mode"
msgstr ""
-#: src/view/screens/Settings/index.tsx:498
+#: src/view/screens/Settings/index.tsx:517
msgid "Dark Theme"
msgstr ""
+#: src/screens/Signup/StepInfo/index.tsx:132
+msgid "Date of birth"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:841
+msgid "Debug Moderation"
+msgstr ""
+
#: src/view/screens/Debug.tsx:83
msgid "Debug panel"
msgstr ""
-#: src/view/screens/Settings/index.tsx:772
+#: src/view/com/util/forms/PostDropdownBtn.tsx:319
+#: src/view/screens/AppPasswords.tsx:268
+#: src/view/screens/ProfileList.tsx:613
+msgid "Delete"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:796
msgid "Delete account"
msgstr "Borrar la cuenta"
-#: src/view/com/modals/DeleteAccount.tsx:87
+#: src/view/com/modals/DeleteAccount.tsx:86
msgid "Delete Account"
msgstr "Borrar la cuenta"
-#: src/view/screens/AppPasswords.tsx:222
-#: src/view/screens/AppPasswords.tsx:242
+#: src/view/screens/AppPasswords.tsx:239
msgid "Delete app password"
msgstr "Borrar la contraseña de la app"
-#: src/view/screens/ProfileList.tsx:363
-#: src/view/screens/ProfileList.tsx:444
+#: src/view/screens/AppPasswords.tsx:263
+msgid "Delete app password?"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:415
msgid "Delete List"
msgstr "Borrar la lista"
-#: src/view/com/modals/DeleteAccount.tsx:223
+#: src/view/com/modals/DeleteAccount.tsx:222
msgid "Delete my account"
msgstr "Borrar mi cuenta"
@@ -1040,30 +1253,35 @@ msgstr "Borrar mi cuenta"
#~ msgid "Delete my account…"
#~ msgstr "Borrar mi cuenta..."
-#: src/view/screens/Settings/index.tsx:784
+#: src/view/screens/Settings/index.tsx:808
msgid "Delete My Account…"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:302
+#: src/view/com/util/forms/PostDropdownBtn.tsx:304
msgid "Delete post"
msgstr "Borrar una publicación"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:232
+#: src/view/screens/ProfileList.tsx:608
+msgid "Delete this list?"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:314
msgid "Delete this post?"
msgstr "¿Borrar esta publicación?"
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:69
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:64
msgid "Deleted"
msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:259
+#: src/view/com/post-thread/PostThread.tsx:305
msgid "Deleted post."
msgstr "Se borró la publicación."
-#: src/view/com/modals/CreateOrEditList.tsx:300
-#: src/view/com/modals/CreateOrEditList.tsx:321
-#: src/view/com/modals/EditProfile.tsx:198
-#: src/view/com/modals/EditProfile.tsx:210
+#: src/view/com/modals/CreateOrEditList.tsx:301
+#: src/view/com/modals/CreateOrEditList.tsx:322
+#: src/view/com/modals/EditProfile.tsx:199
+#: src/view/com/modals/EditProfile.tsx:211
msgid "Description"
msgstr "Descripción"
@@ -1071,23 +1289,35 @@ msgstr "Descripción"
#~ msgid "Developer Tools"
#~ msgstr "Herramientas de desarrollador"
-#: src/view/com/composer/Composer.tsx:211
+#: src/view/com/composer/Composer.tsx:218
msgid "Did you want to say anything?"
msgstr "¿Quieres decir algo?"
-#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:523
msgid "Dim"
msgstr ""
-#: src/view/com/composer/Composer.tsx:144
+#: src/lib/moderation/useLabelBehaviorDescription.ts:32
+#: src/lib/moderation/useLabelBehaviorDescription.ts:42
+#: src/lib/moderation/useLabelBehaviorDescription.ts:68
+#: src/screens/Moderation/index.tsx:341
+msgid "Disabled"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:511
msgid "Discard"
msgstr "Descartar"
-#: src/view/com/composer/Composer.tsx:138
-msgid "Discard draft"
-msgstr "Descartar el borrador"
+#: src/view/com/composer/Composer.tsx:145
+#~ msgid "Discard draft"
+#~ msgstr "Descartar el borrador"
+
+#: src/view/com/composer/Composer.tsx:508
+msgid "Discard draft?"
+msgstr ""
-#: src/view/screens/Moderation.tsx:207
+#: src/screens/Moderation/index.tsx:518
+#: src/screens/Moderation/index.tsx:522
msgid "Discourage apps from showing my account to logged-out users"
msgstr "Evitar que las aplicaciones muestren mi cuenta a los usuarios desconectados"
@@ -1097,27 +1327,65 @@ msgid "Discover new custom feeds"
msgstr ""
#: src/view/screens/Feeds.tsx:473
-msgid "Discover new feeds"
-msgstr "Descubrir nuevas publicaciones"
+#~ msgid "Discover new feeds"
+#~ msgstr "Descubrir nuevas publicaciones"
+
+#: src/view/screens/Feeds.tsx:689
+msgid "Discover New Feeds"
+msgstr ""
-#: src/view/com/modals/EditProfile.tsx:192
+#: src/view/com/modals/EditProfile.tsx:193
msgid "Display name"
msgstr "Mostrar el nombre"
-#: src/view/com/modals/EditProfile.tsx:180
+#: src/view/com/modals/EditProfile.tsx:181
msgid "Display Name"
msgstr "Mostrar el nombre"
-#: src/view/com/modals/ChangeHandle.tsx:487
+#: src/view/com/modals/ChangeHandle.tsx:397
+msgid "DNS Panel"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:39
+msgid "Does not include nudity."
+msgstr ""
+
+#: src/screens/Signup/StepHandle.tsx:104
+msgid "Doesn't begin or end with a hyphen"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "Domain Value"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:488
msgid "Domain verified!"
msgstr "¡Dominio verificado!"
-#: src/view/com/auth/create/Step1.tsx:166
-msgid "Don't have an invite code?"
-msgstr ""
+#: src/view/com/auth/create/Step1.tsx:170
+#~ msgid "Don't have an invite code?"
+#~ msgstr ""
+
+#: src/components/dialogs/BirthDateSettings.tsx:119
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/components/forms/DateField/index.tsx:74
+#: src/components/forms/DateField/index.tsx:80
+#: src/view/com/auth/server-input/index.tsx:169
+#: src/view/com/auth/server-input/index.tsx:170
+#: src/view/com/modals/AddAppPasswords.tsx:227
+#: src/view/com/modals/AltImage.tsx:140
+#: src/view/com/modals/crop-image/CropImage.web.tsx:153
+#: src/view/com/modals/InviteCodes.tsx:81
+#: src/view/com/modals/InviteCodes.tsx:124
+#: src/view/com/modals/ListAddRemoveUsers.tsx:142
+#: src/view/screens/PreferencesFollowingFeed.tsx:311
+#: src/view/screens/Settings/ExportCarDialog.tsx:94
+#: src/view/screens/Settings/ExportCarDialog.tsx:96
+msgid "Done"
+msgstr "Listo"
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86
-#: src/view/com/modals/EditImage.tsx:333
+#: src/view/com/modals/EditImage.tsx:334
#: src/view/com/modals/ListAddRemoveUsers.tsx:144
#: src/view/com/modals/SelfLabel.tsx:157
#: src/view/com/modals/Threadgate.tsx:129
@@ -1129,72 +1397,68 @@ msgctxt "action"
msgid "Done"
msgstr ""
-#: src/view/com/auth/server-input/index.tsx:165
-#: src/view/com/auth/server-input/index.tsx:166
-#: src/view/com/modals/AddAppPasswords.tsx:226
-#: src/view/com/modals/AltImage.tsx:139
-#: src/view/com/modals/ContentFilteringSettings.tsx:88
-#: src/view/com/modals/ContentFilteringSettings.tsx:96
-#: src/view/com/modals/crop-image/CropImage.web.tsx:152
-#: src/view/com/modals/InviteCodes.tsx:80
-#: src/view/com/modals/InviteCodes.tsx:123
-#: src/view/com/modals/ListAddRemoveUsers.tsx:142
-#: src/view/screens/PreferencesHomeFeed.tsx:311
-#: src/view/screens/Settings/ExportCarDialog.tsx:93
-#: src/view/screens/Settings/ExportCarDialog.tsx:94
-msgid "Done"
-msgstr "Listo"
-
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:42
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:43
msgid "Done{extraText}"
msgstr "Listo{extraText}"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:45
-msgid "Double tap to sign in"
-msgstr ""
+#: src/view/com/auth/login/ChooseAccountForm.tsx:46
+#~ msgid "Double tap to sign in"
+#~ msgstr ""
#: src/view/screens/Settings/index.tsx:755
-msgid "Download Bluesky account data (repository)"
-msgstr ""
+#~ msgid "Download Bluesky account data (repository)"
+#~ msgstr ""
#: src/view/screens/Settings/ExportCarDialog.tsx:59
#: src/view/screens/Settings/ExportCarDialog.tsx:63
msgid "Download CAR file"
msgstr ""
-#: src/view/com/composer/text-input/TextInput.web.tsx:247
+#: src/view/com/composer/text-input/TextInput.web.tsx:249
msgid "Drop to add images"
msgstr ""
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:111
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:120
msgid "Due to Apple policies, adult content can only be enabled on the web after completing sign up."
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:185
+#: src/view/com/modals/ChangeHandle.tsx:258
+msgid "e.g. alice"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:186
msgid "e.g. Alice Roberts"
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:203
+#: src/view/com/modals/ChangeHandle.tsx:380
+msgid "e.g. alice.com"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:204
msgid "e.g. Artist, dog-lover, and avid reader."
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:283
-msgid "e.g. Great Posters"
+#: src/lib/moderation/useGlobalLabelStrings.ts:43
+msgid "E.g. artistic nudes."
msgstr ""
#: src/view/com/modals/CreateOrEditList.tsx:284
+msgid "e.g. Great Posters"
+msgstr ""
+
+#: src/view/com/modals/CreateOrEditList.tsx:285
msgid "e.g. Spammers"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:312
+#: src/view/com/modals/CreateOrEditList.tsx:313
msgid "e.g. The posters who never miss."
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:313
+#: src/view/com/modals/CreateOrEditList.tsx:314
msgid "e.g. Users that repeatedly reply with ads."
msgstr ""
-#: src/view/com/modals/InviteCodes.tsx:96
+#: src/view/com/modals/InviteCodes.tsx:97
msgid "Each code works once. You'll receive more invite codes periodically."
msgstr "Cada código funciona una vez. Recibirás más códigos de invitación periódicamente."
@@ -1203,50 +1467,58 @@ msgctxt "action"
msgid "Edit"
msgstr ""
+#: src/view/com/util/UserAvatar.tsx:299
+#: src/view/com/util/UserBanner.tsx:85
+msgid "Edit avatar"
+msgstr ""
+
#: src/view/com/composer/photos/Gallery.tsx:144
-#: src/view/com/modals/EditImage.tsx:207
+#: src/view/com/modals/EditImage.tsx:208
msgid "Edit image"
msgstr "Editar la imagen"
-#: src/view/screens/ProfileList.tsx:432
+#: src/view/screens/ProfileList.tsx:403
msgid "Edit list details"
msgstr "Editar los detalles de la lista"
-#: src/view/com/modals/CreateOrEditList.tsx:250
+#: src/view/com/modals/CreateOrEditList.tsx:251
msgid "Edit Moderation List"
msgstr ""
-#: src/Navigation.tsx:242
+#: src/Navigation.tsx:256
#: src/view/screens/Feeds.tsx:434
#: src/view/screens/SavedFeeds.tsx:84
msgid "Edit My Feeds"
msgstr "Editar mis noticias"
-#: src/view/com/modals/EditProfile.tsx:152
+#: src/view/com/modals/EditProfile.tsx:153
msgid "Edit my profile"
msgstr "Editar mi perfil"
-#: src/view/com/profile/ProfileHeader.tsx:417
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:171
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:168
msgid "Edit profile"
msgstr "Editar el perfil"
-#: src/view/com/profile/ProfileHeader.tsx:422
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:174
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:171
msgid "Edit Profile"
msgstr "Editar el perfil"
-#: src/view/screens/Feeds.tsx:356
+#: src/view/com/home/HomeHeaderLayout.web.tsx:62
+#: src/view/screens/Feeds.tsx:355
msgid "Edit Saved Feeds"
msgstr "Editar mis noticias guardadas"
-#: src/view/com/modals/CreateOrEditList.tsx:245
+#: src/view/com/modals/CreateOrEditList.tsx:246
msgid "Edit User List"
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:193
+#: src/view/com/modals/EditProfile.tsx:194
msgid "Edit your display name"
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:211
+#: src/view/com/modals/EditProfile.tsx:212
msgid "Edit your profile description"
msgstr ""
@@ -1254,17 +1526,12 @@ msgstr ""
msgid "Education"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:195
-#: src/view/com/auth/create/Step2.tsx:194
-#: src/view/com/auth/create/Step2.tsx:269
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:156
+#: src/screens/Signup/StepInfo/index.tsx:80
#: src/view/com/modals/ChangeEmail.tsx:141
-#: src/view/com/modals/Waitlist.tsx:88
msgid "Email"
msgstr "Correo electrónico"
-#: src/view/com/auth/create/Step1.tsx:186
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:147
+#: src/screens/Login/ForgotPasswordForm.tsx:99
msgid "Email address"
msgstr "Dirección de correo electrónico"
@@ -1281,69 +1548,95 @@ msgstr "Correo electrónico actualizado"
msgid "Email verified"
msgstr ""
-#: src/view/screens/Settings/index.tsx:312
+#: src/view/screens/Settings/index.tsx:331
msgid "Email:"
msgstr "Correo electrónico:"
-#: src/view/com/modals/EmbedConsent.tsx:113
+#: src/components/dialogs/EmbedConsent.tsx:101
msgid "Enable {0} only"
msgstr ""
-#: src/view/com/modals/ContentFilteringSettings.tsx:167
+#: src/screens/Moderation/index.tsx:329
+msgid "Enable adult content"
+msgstr ""
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:94
msgid "Enable Adult Content"
msgstr ""
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:76
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:77
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:79
msgid "Enable adult content in your feeds"
msgstr ""
-#: src/view/com/modals/EmbedConsent.tsx:97
-msgid "Enable External Media"
+#: src/components/dialogs/EmbedConsent.tsx:82
+#: src/components/dialogs/EmbedConsent.tsx:89
+msgid "Enable external media"
msgstr ""
+#: src/view/com/modals/EmbedConsent.tsx:97
+#~ msgid "Enable External Media"
+#~ msgstr ""
+
#: src/view/screens/PreferencesExternalEmbeds.tsx:75
msgid "Enable media players for"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:147
+#: src/view/screens/PreferencesFollowingFeed.tsx:147
msgid "Enable this setting to only see replies between people you follow."
msgstr "Activa esta opción para ver sólo las respuestas de las personas a las que sigues."
-#: src/view/screens/Profile.tsx:455
+#: src/components/dialogs/EmbedConsent.tsx:94
+msgid "Enable this source only"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:339
+msgid "Enabled"
+msgstr ""
+
+#: src/screens/Profile/Sections/Feed.tsx:84
msgid "End of feed"
msgstr "Fin de noticias"
-#: src/view/com/modals/AddAppPasswords.tsx:166
+#: src/view/com/modals/AddAppPasswords.tsx:167
msgid "Enter a name for this App Password"
msgstr ""
+#: src/screens/Login/SetNewPasswordForm.tsx:139
+msgid "Enter a password"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:99
+#: src/components/dialogs/MutedWords.tsx:100
+msgid "Enter a word or tag"
+msgstr ""
+
#: src/view/com/modals/VerifyEmail.tsx:105
msgid "Enter Confirmation Code"
msgstr ""
-#: src/view/com/modals/ChangePassword.tsx:151
+#: src/view/com/modals/ChangePassword.tsx:153
msgid "Enter the code you received to change your password."
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:371
+#: src/view/com/modals/ChangeHandle.tsx:370
msgid "Enter the domain you want to use"
msgstr "Introduce el dominio que quieres utilizar"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:107
+#: src/screens/Login/ForgotPasswordForm.tsx:119
msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password."
msgstr "Introduce el correo electrónico que utilizaste para crear tu cuenta. Te enviaremos un \"código de restablecimiento\" para que puedas establecer una nueva contraseña."
-#: src/view/com/auth/create/Step1.tsx:247
-#: src/view/com/modals/BirthDateSettings.tsx:74
+#: src/components/dialogs/BirthDateSettings.tsx:108
msgid "Enter your birth date"
msgstr ""
#: src/view/com/modals/Waitlist.tsx:78
-msgid "Enter your email"
-msgstr ""
+#~ msgid "Enter your email"
+#~ msgstr ""
-#: src/view/com/auth/create/Step1.tsx:191
+#: src/screens/Login/ForgotPasswordForm.tsx:105
+#: src/screens/Signup/StepInfo/index.tsx:91
msgid "Enter your email address"
msgstr "Introduce la dirección de correo electrónico"
@@ -1356,14 +1649,18 @@ msgid "Enter your new email address below."
msgstr "Introduce tu nueva dirección de correo electrónico a continuación."
#: src/view/com/auth/create/Step2.tsx:188
-msgid "Enter your phone number"
-msgstr ""
+#~ msgid "Enter your phone number"
+#~ msgstr ""
-#: src/view/com/auth/login/Login.tsx:99
+#: src/screens/Login/index.tsx:101
msgid "Enter your username and password"
msgstr "Introduce tu nombre de usuario y contraseña"
-#: src/view/screens/Search/Search.tsx:109
+#: src/screens/Signup/StepCaptcha/index.tsx:49
+msgid "Error receiving captcha response."
+msgstr ""
+
+#: src/view/screens/Search/Search.tsx:111
msgid "Error:"
msgstr "Error:"
@@ -1371,24 +1668,36 @@ msgstr "Error:"
msgid "Everybody"
msgstr "Todos"
-#: src/view/com/modals/ChangeHandle.tsx:150
+#: src/lib/moderation/useReportOptions.ts:66
+msgid "Excessive mentions or replies"
+msgstr ""
+
+#: src/view/com/modals/DeleteAccount.tsx:230
+msgid "Exits account deletion process"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:151
msgid "Exits handle change process"
msgstr ""
-#: src/view/com/lightbox/Lightbox.web.tsx:120
+#: src/view/com/modals/crop-image/CropImage.web.tsx:136
+msgid "Exits image cropping process"
+msgstr ""
+
+#: src/view/com/lightbox/Lightbox.web.tsx:130
msgid "Exits image view"
msgstr ""
#: src/view/com/modals/ListAddRemoveUsers.tsx:88
-#: src/view/shell/desktop/Search.tsx:235
+#: src/view/shell/desktop/Search.tsx:236
msgid "Exits inputting search query"
msgstr ""
#: src/view/com/modals/Waitlist.tsx:138
-msgid "Exits signing up for waitlist with {email}"
-msgstr ""
+#~ msgid "Exits signing up for waitlist with {email}"
+#~ msgstr ""
-#: src/view/com/lightbox/Lightbox.web.tsx:163
+#: src/view/com/lightbox/Lightbox.web.tsx:183
msgid "Expand alt text"
msgstr "Expandir el texto alt"
@@ -1397,44 +1706,53 @@ msgstr "Expandir el texto alt"
msgid "Expand or collapse the full post you are replying to"
msgstr ""
-#: src/view/screens/Settings/index.tsx:753
+#: src/lib/moderation/useGlobalLabelStrings.ts:47
+msgid "Explicit or potentially disturbing media."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:35
+msgid "Explicit sexual images."
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:777
msgid "Export my data"
msgstr ""
#: src/view/screens/Settings/ExportCarDialog.tsx:44
-#: src/view/screens/Settings/index.tsx:764
+#: src/view/screens/Settings/index.tsx:788
msgid "Export My Data"
msgstr ""
-#: src/view/com/modals/EmbedConsent.tsx:64
+#: src/components/dialogs/EmbedConsent.tsx:55
+#: src/components/dialogs/EmbedConsent.tsx:59
msgid "External Media"
msgstr ""
-#: src/view/com/modals/EmbedConsent.tsx:75
+#: src/components/dialogs/EmbedConsent.tsx:71
#: src/view/screens/PreferencesExternalEmbeds.tsx:66
msgid "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."
msgstr ""
-#: src/Navigation.tsx:258
+#: src/Navigation.tsx:275
#: src/view/screens/PreferencesExternalEmbeds.tsx:52
-#: src/view/screens/Settings/index.tsx:657
+#: src/view/screens/Settings/index.tsx:677
msgid "External Media Preferences"
msgstr ""
-#: src/view/screens/Settings/index.tsx:648
+#: src/view/screens/Settings/index.tsx:668
msgid "External media settings"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:115
-#: src/view/com/modals/AddAppPasswords.tsx:119
+#: src/view/com/modals/AddAppPasswords.tsx:116
+#: src/view/com/modals/AddAppPasswords.tsx:120
msgid "Failed to create app password."
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:206
+#: src/view/com/modals/CreateOrEditList.tsx:207
msgid "Failed to create the list. Check your internet connection and try again."
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:88
+#: src/view/com/util/forms/PostDropdownBtn.tsx:125
msgid "Failed to delete post, please try again"
msgstr ""
@@ -1443,34 +1761,39 @@ msgstr ""
msgid "Failed to load recommended feeds"
msgstr "Error al cargar las noticias recomendadas"
-#: src/Navigation.tsx:192
+#: src/view/com/lightbox/Lightbox.tsx:83
+msgid "Failed to save image: {0}"
+msgstr ""
+
+#: src/Navigation.tsx:196
msgid "Feed"
msgstr ""
-#: src/view/com/feeds/FeedSourceCard.tsx:229
+#: src/view/com/feeds/FeedSourceCard.tsx:218
msgid "Feed by {0}"
msgstr ""
-#: src/view/screens/Feeds.tsx:631
+#: src/view/screens/Feeds.tsx:605
msgid "Feed offline"
msgstr "Noticias fuera de línea"
#: src/view/com/feeds/FeedPage.tsx:143
-msgid "Feed Preferences"
-msgstr "Preferencias de noticias"
+#~ msgid "Feed Preferences"
+#~ msgstr "Preferencias de noticias"
-#: src/view/shell/desktop/RightNav.tsx:69
-#: src/view/shell/Drawer.tsx:311
+#: src/view/shell/desktop/RightNav.tsx:61
+#: src/view/shell/Drawer.tsx:314
msgid "Feedback"
msgstr "Comentarios"
-#: src/Navigation.tsx:442
-#: src/view/screens/Feeds.tsx:548
-#: src/view/screens/Profile.tsx:184
-#: src/view/shell/bottom-bar/BottomBar.tsx:181
-#: src/view/shell/desktop/LeftNav.tsx:342
-#: src/view/shell/Drawer.tsx:476
-#: src/view/shell/Drawer.tsx:477
+#: src/Navigation.tsx:464
+#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:524
+#: src/view/screens/Profile.tsx:194
+#: src/view/shell/bottom-bar/BottomBar.tsx:191
+#: src/view/shell/desktop/LeftNav.tsx:346
+#: src/view/shell/Drawer.tsx:479
+#: src/view/shell/Drawer.tsx:480
msgid "Feeds"
msgstr "Noticias"
@@ -1490,11 +1813,19 @@ msgstr "Se crean las noticias por los usuarios para crear colecciones de conteni
msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information."
msgstr "Las noticias son algoritmos personalizados que los usuarios construyen con un poco de experiencia en codificación. <0/> para más información."
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:70
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:80
msgid "Feeds can be topical as well!"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:151
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "File Contents"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:66
+msgid "Filter from feeds"
+msgstr ""
+
+#: src/screens/Onboarding/StepFinished.tsx:155
msgid "Finalizing"
msgstr ""
@@ -1504,21 +1835,25 @@ msgstr ""
msgid "Find accounts to follow"
msgstr ""
-#: src/view/screens/Search/Search.tsx:439
+#: src/view/screens/Search/Search.tsx:442
msgid "Find users on Bluesky"
msgstr "Encontrar usuarios en Bluesky"
-#: src/view/screens/Search/Search.tsx:437
+#: src/view/screens/Search/Search.tsx:440
msgid "Find users with the search tool on the right"
msgstr "Encuentra usuarios con la herramienta de búsqueda de la derecha"
-#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:155
msgid "Finding similar accounts..."
msgstr "Encontrar cuentas similares..."
+#: src/view/screens/PreferencesFollowingFeed.tsx:111
+msgid "Fine-tune the content you see on your Following feed."
+msgstr ""
+
#: src/view/screens/PreferencesHomeFeed.tsx:111
-msgid "Fine-tune the content you see on your home screen."
-msgstr "Ajusta el contenido que ves en tu pantalla de inicio."
+#~ msgid "Fine-tune the content you see on your home screen."
+#~ msgstr "Ajusta el contenido que ves en tu pantalla de inicio."
#: src/view/screens/PreferencesThreads.tsx:60
msgid "Fine-tune the discussion threads."
@@ -1528,41 +1863,52 @@ msgstr "Ajusta los hilos de discusión."
msgid "Fitness"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:131
+#: src/screens/Onboarding/StepFinished.tsx:135
msgid "Flexible"
msgstr ""
-#: src/view/com/modals/EditImage.tsx:115
+#: src/view/com/modals/EditImage.tsx:116
msgid "Flip horizontal"
msgstr ""
-#: src/view/com/modals/EditImage.tsx:120
-#: src/view/com/modals/EditImage.tsx:287
+#: src/view/com/modals/EditImage.tsx:121
+#: src/view/com/modals/EditImage.tsx:288
msgid "Flip vertically"
msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:181
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:512
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:189
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:236
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:146
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
msgid "Follow"
msgstr "Seguir"
-#: src/view/com/profile/FollowButton.tsx:64
+#: src/view/com/profile/FollowButton.tsx:69
msgctxt "action"
msgid "Follow"
msgstr ""
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:58
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:122
-#: src/view/com/profile/ProfileHeader.tsx:503
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:221
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:128
msgid "Follow {0}"
msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:179
+#: src/view/com/profile/ProfileMenu.tsx:242
+#: src/view/com/profile/ProfileMenu.tsx:253
+msgid "Follow Account"
+msgstr ""
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:187
msgid "Follow All"
msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:174
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:144
+msgid "Follow Back"
+msgstr ""
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:182
msgid "Follow selected accounts and continue to the next step"
msgstr ""
@@ -1570,7 +1916,7 @@ msgstr ""
msgid "Follow some users to get started. We can recommend you more users based on who you find interesting."
msgstr "Sigue a algunos usuarios para empezar. Podemos recomendarte más usuarios en función de los que te parezcan interesantes."
-#: src/view/com/profile/ProfileCard.tsx:194
+#: src/view/com/profile/ProfileCard.tsx:216
msgid "Followed by {0}"
msgstr ""
@@ -1578,29 +1924,43 @@ msgstr ""
msgid "Followed users"
msgstr "Usuarios seguidos"
-#: src/view/screens/PreferencesHomeFeed.tsx:154
+#: src/view/screens/PreferencesFollowingFeed.tsx:154
msgid "Followed users only"
msgstr "Solo usuarios seguidos"
-#: src/view/com/notifications/FeedItem.tsx:166
+#: src/view/com/notifications/FeedItem.tsx:170
msgid "followed you"
msgstr ""
+#: src/view/com/profile/ProfileFollowers.tsx:104
#: src/view/screens/ProfileFollowers.tsx:25
msgid "Followers"
msgstr "Seguidores"
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:494
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:234
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:149
+#: src/view/com/profile/ProfileFollows.tsx:104
#: src/view/screens/ProfileFollows.tsx:25
msgid "Following"
msgstr "Siguiendo"
-#: src/view/com/profile/ProfileHeader.tsx:148
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:93
msgid "Following {0}"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:545
+#: src/view/screens/Settings/index.tsx:553
+msgid "Following feed preferences"
+msgstr ""
+
+#: src/Navigation.tsx:262
+#: src/view/com/home/HomeHeaderLayout.web.tsx:50
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:84
+#: src/view/screens/PreferencesFollowingFeed.tsx:104
+#: src/view/screens/Settings/index.tsx:562
+msgid "Following Feed Preferences"
+msgstr ""
+
+#: src/screens/Profile/Header/Handle.tsx:24
msgid "Follows you"
msgstr "Te siguen"
@@ -1612,29 +1972,46 @@ msgstr ""
msgid "Food"
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:111
+#: src/view/com/modals/DeleteAccount.tsx:110
msgid "For security reasons, we'll need to send a confirmation code to your email address."
msgstr "Por razones de seguridad, tendremos que enviarte un código de confirmación a tu dirección de correo electrónico."
-#: src/view/com/modals/AddAppPasswords.tsx:209
+#: src/view/com/modals/AddAppPasswords.tsx:210
msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one."
msgstr "Por razones de seguridad, no podrás volver a verla. Si pierdes esta contraseña, tendrás que generar una nueva."
-#: src/view/com/auth/login/LoginForm.tsx:241
-msgid "Forgot"
-msgstr "Lo olvidé"
+#: src/view/com/auth/login/LoginForm.tsx:244
+#~ msgid "Forgot"
+#~ msgstr "Lo olvidé"
-#: src/view/com/auth/login/LoginForm.tsx:238
-msgid "Forgot password"
-msgstr "Olvidé mi contraseña"
+#: src/view/com/auth/login/LoginForm.tsx:241
+#~ msgid "Forgot password"
+#~ msgstr "Olvidé mi contraseña"
-#: src/view/com/auth/login/Login.tsx:127
-#: src/view/com/auth/login/Login.tsx:143
+#: src/screens/Login/index.tsx:129
+#: src/screens/Login/index.tsx:144
msgid "Forgot Password"
msgstr "Olvidé mi contraseña"
-#: src/view/com/posts/FeedItem.tsx:189
-msgctxt "from-feed"
+#: src/screens/Login/LoginForm.tsx:201
+msgid "Forgot password?"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:212
+msgid "Forgot?"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:52
+msgid "Frequently Posts Unwanted Content"
+msgstr ""
+
+#: src/screens/Hashtag.tsx:109
+#: src/screens/Hashtag.tsx:149
+msgid "From @{sanitizedAuthor}"
+msgstr ""
+
+#: src/view/com/posts/FeedItem.tsx:179
+msgctxt "from-feed"
msgid "From <0/>"
msgstr ""
@@ -1647,100 +2024,144 @@ msgstr "Galería"
msgid "Get Started"
msgstr "Comenzar"
-#: src/view/com/auth/LoggedOut.tsx:81
+#: src/lib/moderation/useReportOptions.ts:37
+msgid "Glaring violations of law or terms of service"
+msgstr ""
+
+#: src/components/moderation/ScreenHider.tsx:151
+#: src/components/moderation/ScreenHider.tsx:160
#: src/view/com/auth/LoggedOut.tsx:82
-#: src/view/com/util/moderation/ScreenHider.tsx:123
-#: src/view/shell/desktop/LeftNav.tsx:104
+#: src/view/com/auth/LoggedOut.tsx:83
+#: src/view/screens/NotFound.tsx:55
+#: src/view/screens/ProfileFeed.tsx:112
+#: src/view/screens/ProfileList.tsx:916
+#: src/view/shell/desktop/LeftNav.tsx:108
msgid "Go back"
msgstr "Regresar"
-#: src/view/screens/ProfileFeed.tsx:105
-#: src/view/screens/ProfileFeed.tsx:110
-#: src/view/screens/ProfileList.tsx:897
-#: src/view/screens/ProfileList.tsx:902
+#: src/components/Error.tsx:91
+#: src/screens/Profile/ErrorState.tsx:62
+#: src/screens/Profile/ErrorState.tsx:66
+#: src/view/screens/NotFound.tsx:54
+#: src/view/screens/ProfileFeed.tsx:117
+#: src/view/screens/ProfileList.tsx:921
msgid "Go Back"
msgstr "Regresar"
-#: src/screens/Onboarding/Layout.tsx:104
-#: src/screens/Onboarding/Layout.tsx:193
+#: src/components/ReportDialog/SelectReportOptionView.tsx:73
+#: src/components/ReportDialog/SubmitView.tsx:104
+#: src/screens/Onboarding/Layout.tsx:102
+#: src/screens/Onboarding/Layout.tsx:191
+#: src/screens/Signup/index.tsx:173
msgid "Go back to previous step"
msgstr ""
-#: src/view/screens/Search/Search.tsx:724
-#: src/view/shell/desktop/Search.tsx:262
+#: src/view/screens/NotFound.tsx:55
+msgid "Go home"
+msgstr ""
+
+#: src/view/screens/NotFound.tsx:54
+msgid "Go Home"
+msgstr ""
+
+#: src/view/screens/Search/Search.tsx:749
+#: src/view/shell/desktop/Search.tsx:263
msgid "Go to @{queryMaybeHandle}"
msgstr ""
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:189
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:218
-#: src/view/com/auth/login/LoginForm.tsx:288
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:195
-#: src/view/com/modals/ChangePassword.tsx:165
+#: src/screens/Login/ForgotPasswordForm.tsx:172
+#: src/view/com/modals/ChangePassword.tsx:167
msgid "Go to next"
msgstr "Ir al siguiente"
-#: src/view/com/modals/ChangeHandle.tsx:265
+#: src/lib/moderation/useGlobalLabelStrings.ts:46
+msgid "Graphic Media"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:266
msgid "Handle"
msgstr "Identificador"
-#: src/view/com/auth/create/CreateAccount.tsx:197
+#: src/lib/moderation/useReportOptions.ts:32
+msgid "Harassment, trolling, or intolerance"
+msgstr ""
+
+#: src/Navigation.tsx:282
+msgid "Hashtag"
+msgstr ""
+
+#: src/components/RichText.tsx:188
+#~ msgid "Hashtag: {tag}"
+#~ msgstr ""
+
+#: src/components/RichText.tsx:191
+msgid "Hashtag: #{tag}"
+msgstr ""
+
+#: src/screens/Signup/index.tsx:217
msgid "Having trouble?"
msgstr ""
-#: src/view/shell/desktop/RightNav.tsx:98
-#: src/view/shell/Drawer.tsx:321
+#: src/view/shell/desktop/RightNav.tsx:90
+#: src/view/shell/Drawer.tsx:324
msgid "Help"
msgstr "Ayuda"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:132
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:140
msgid "Here are some accounts for you to follow"
msgstr ""
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:79
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:89
msgid "Here are some popular topical feeds. You can choose to follow as many as you like."
msgstr ""
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:74
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:84
msgid "Here are some topical feeds based on your interests: {interestsText}. You can choose to follow as many as you like."
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:153
+#: src/view/com/modals/AddAppPasswords.tsx:154
msgid "Here is your app password."
msgstr "Aquí tienes tu contraseña de la app."
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:41
-#: src/view/com/modals/ContentFilteringSettings.tsx:251
-#: src/view/com/util/moderation/ContentHider.tsx:105
-#: src/view/com/util/moderation/PostHider.tsx:108
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:134
+#: src/components/moderation/PostHider.tsx:107
+#: src/lib/moderation/useLabelBehaviorDescription.ts:15
+#: src/lib/moderation/useLabelBehaviorDescription.ts:20
+#: src/lib/moderation/useLabelBehaviorDescription.ts:25
+#: src/lib/moderation/useLabelBehaviorDescription.ts:30
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:52
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:76
+#: src/view/com/util/forms/PostDropdownBtn.tsx:328
msgid "Hide"
msgstr "Ocultar"
-#: src/view/com/modals/ContentFilteringSettings.tsx:224
-#: src/view/com/notifications/FeedItem.tsx:325
+#: src/view/com/notifications/FeedItem.tsx:329
msgctxt "action"
msgid "Hide"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:187
+#: src/view/com/util/forms/PostDropdownBtn.tsx:276
+#: src/view/com/util/forms/PostDropdownBtn.tsx:278
msgid "Hide post"
msgstr "Ocultar publicación"
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:67
+#: src/components/moderation/PostHider.tsx:64
msgid "Hide the content"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:191
+#: src/view/com/util/forms/PostDropdownBtn.tsx:325
msgid "Hide this post?"
msgstr "¿Ocultar esta publicación?"
-#: src/view/com/notifications/FeedItem.tsx:315
+#: src/view/com/notifications/FeedItem.tsx:319
msgid "Hide user list"
msgstr "Ocultar la lista de usuarios"
-#: src/view/com/profile/ProfileHeader.tsx:486
-msgid "Hides posts from {0} in your feed"
-msgstr ""
+#: src/view/com/profile/ProfileHeader.tsx:487
+#~ msgid "Hides posts from {0} in your feed"
+#~ msgstr ""
#: src/view/com/posts/FeedErrorMessage.tsx:111
msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue."
@@ -1762,11 +2183,19 @@ msgstr "El servidor de noticias ha respondido de forma incorrecta. Por favor, in
msgid "Hmm, we're having trouble finding this feed. It may have been deleted."
msgstr "Tenemos problemas para encontrar esta noticia. Puede que la hayan borrado."
-#: src/Navigation.tsx:432
-#: src/view/shell/bottom-bar/BottomBar.tsx:137
-#: src/view/shell/desktop/LeftNav.tsx:306
-#: src/view/shell/Drawer.tsx:398
-#: src/view/shell/Drawer.tsx:399
+#: src/screens/Moderation/index.tsx:59
+msgid "Hmmmm, it seems we're having trouble loading this data. See below for more details. If this issue persists, please contact us."
+msgstr ""
+
+#: src/screens/Profile/ErrorState.tsx:31
+msgid "Hmmmm, we couldn't load that moderation service."
+msgstr ""
+
+#: src/Navigation.tsx:454
+#: src/view/shell/bottom-bar/BottomBar.tsx:147
+#: src/view/shell/desktop/LeftNav.tsx:310
+#: src/view/shell/Drawer.tsx:401
+#: src/view/shell/Drawer.tsx:402
msgid "Home"
msgstr "Página inicial"
@@ -1774,11 +2203,17 @@ msgstr "Página inicial"
#: src/view/com/pager/FeedsTabBarMobile.tsx:123
#: src/view/screens/PreferencesHomeFeed.tsx:104
#: src/view/screens/Settings/index.tsx:543
-msgid "Home Feed Preferences"
-msgstr "Preferencias de noticias de la página inicial"
+#~ msgid "Home Feed Preferences"
+#~ msgstr "Preferencias de noticias de la página inicial"
-#: src/view/com/auth/create/Step1.tsx:78
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:120
+#: src/view/com/modals/ChangeHandle.tsx:420
+msgid "Host:"
+msgstr ""
+
+#: src/screens/Login/ForgotPasswordForm.tsx:89
+#: src/screens/Login/LoginForm.tsx:134
+#: src/screens/Signup/StepInfo/index.tsx:40
+#: src/view/com/modals/ChangeHandle.tsx:281
msgid "Hosting provider"
msgstr "Proveedor de alojamiento"
@@ -1794,11 +2229,11 @@ msgstr "Tengo un código"
msgid "I have a confirmation code"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:283
+#: src/view/com/modals/ChangeHandle.tsx:284
msgid "I have my own domain"
msgstr "Tengo mi propio dominio"
-#: src/view/com/lightbox/Lightbox.web.tsx:165
+#: src/view/com/lightbox/Lightbox.web.tsx:185
msgid "If alt text is long, toggles alt text expanded state"
msgstr ""
@@ -1806,84 +2241,108 @@ msgstr ""
msgid "If none are selected, suitable for all ages."
msgstr "Si no se selecciona ninguno, es apto para todas las edades."
-#: src/view/com/modals/ChangePassword.tsx:146
+#: src/screens/Signup/StepInfo/Policies.tsx:83
+msgid "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."
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:610
+msgid "If you delete this list, you won't be able to recover it."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:316
+msgid "If you remove this post, you won't be able to recover it."
+msgstr ""
+
+#: src/view/com/modals/ChangePassword.tsx:148
msgid "If you want to change your password, we will send you a code to verify that this is your account."
msgstr ""
+#: src/lib/moderation/useReportOptions.ts:36
+msgid "Illegal and Urgent"
+msgstr ""
+
#: src/view/com/util/images/Gallery.tsx:38
msgid "Image"
msgstr ""
-#: src/view/com/modals/AltImage.tsx:120
+#: src/view/com/modals/AltImage.tsx:121
msgid "Image alt text"
msgstr "Texto alt de la imagen"
#: src/view/com/util/UserAvatar.tsx:311
#: src/view/com/util/UserBanner.tsx:118
-msgid "Image options"
-msgstr "Opciones de la imagen"
+#~ msgid "Image options"
+#~ msgstr "Opciones de la imagen"
+
+#: src/lib/moderation/useReportOptions.ts:47
+msgid "Impersonation or false claims about identity or affiliation"
+msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:138
+#: src/screens/Login/SetNewPasswordForm.tsx:127
msgid "Input code sent to your email for password reset"
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:184
+#: src/view/com/modals/DeleteAccount.tsx:183
msgid "Input confirmation code for account deletion"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:196
-msgid "Input email for Bluesky account"
-msgstr ""
+#: src/view/com/auth/create/Step1.tsx:177
+#~ msgid "Input email for Bluesky account"
+#~ msgstr ""
-#: src/view/com/auth/create/Step1.tsx:154
-msgid "Input invite code to proceed"
-msgstr ""
+#: src/view/com/auth/create/Step1.tsx:151
+#~ msgid "Input invite code to proceed"
+#~ msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/AddAppPasswords.tsx:181
msgid "Input name for app password"
msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:162
+#: src/screens/Login/SetNewPasswordForm.tsx:151
msgid "Input new password"
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:203
+#: src/view/com/modals/DeleteAccount.tsx:202
msgid "Input password for account deletion"
msgstr ""
#: src/view/com/auth/create/Step2.tsx:196
-msgid "Input phone number for SMS verification"
-msgstr ""
+#~ msgid "Input phone number for SMS verification"
+#~ msgstr ""
-#: src/view/com/auth/login/LoginForm.tsx:230
+#: src/screens/Login/LoginForm.tsx:195
msgid "Input the password tied to {identifier}"
msgstr ""
-#: src/view/com/auth/login/LoginForm.tsx:197
+#: src/screens/Login/LoginForm.tsx:168
msgid "Input the username or email address you used at signup"
msgstr ""
#: src/view/com/auth/create/Step2.tsx:271
-msgid "Input the verification code we have texted to you"
-msgstr ""
+#~ msgid "Input the verification code we have texted to you"
+#~ msgstr ""
#: src/view/com/modals/Waitlist.tsx:90
-msgid "Input your email to get on the Bluesky waitlist"
-msgstr ""
+#~ msgid "Input your email to get on the Bluesky waitlist"
+#~ msgstr ""
-#: src/view/com/auth/login/LoginForm.tsx:229
+#: src/screens/Login/LoginForm.tsx:194
msgid "Input your password"
msgstr ""
-#: src/view/com/auth/create/Step3.tsx:42
+#: src/view/com/modals/ChangeHandle.tsx:389
+msgid "Input your preferred hosting provider"
+msgstr ""
+
+#: src/screens/Signup/StepHandle.tsx:62
msgid "Input your user handle"
msgstr ""
-#: src/view/com/post-thread/PostThreadItem.tsx:225
+#: src/view/com/post-thread/PostThreadItem.tsx:221
msgid "Invalid or unsupported post record"
msgstr ""
-#: src/view/com/auth/login/LoginForm.tsx:113
+#: src/screens/Login/LoginForm.tsx:114
msgid "Invalid username or password"
msgstr "Nombre de usuario o contraseña no válidos"
@@ -1891,20 +2350,19 @@ msgstr "Nombre de usuario o contraseña no válidos"
#~ msgid "Invite"
#~ msgstr "Invitar"
-#: src/view/com/modals/InviteCodes.tsx:93
+#: src/view/com/modals/InviteCodes.tsx:94
msgid "Invite a Friend"
msgstr "Invitar a un amigo"
-#: src/view/com/auth/create/Step1.tsx:144
-#: src/view/com/auth/create/Step1.tsx:153
+#: src/screens/Signup/StepInfo/index.tsx:58
msgid "Invite code"
msgstr "Código de invitación"
-#: src/view/com/auth/create/state.ts:199
+#: src/screens/Signup/state.ts:278
msgid "Invite code not accepted. Check that you input it correctly and try again."
msgstr "No se acepta el código de invitación. Comprueba que lo has introducido correctamente e inténtalo de nuevo."
-#: src/view/com/modals/InviteCodes.tsx:170
+#: src/view/com/modals/InviteCodes.tsx:171
msgid "Invite codes: {0} available"
msgstr ""
@@ -1912,83 +2370,120 @@ msgstr ""
#~ msgid "Invite codes: {invitesAvailable} available"
#~ msgstr "Códigos de invitación: {invitesAvailable} disponibles"
-#: src/view/com/modals/InviteCodes.tsx:169
+#: src/view/com/modals/InviteCodes.tsx:170
msgid "Invite codes: 1 available"
msgstr ""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:64
+#: src/screens/Onboarding/StepFollowingFeed.tsx:65
msgid "It shows posts from the people you follow as they happen."
msgstr ""
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:99
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:104
+#: src/view/com/auth/SplashScreen.web.tsx:172
msgid "Jobs"
msgstr "Tareas"
#: src/view/com/modals/Waitlist.tsx:67
-msgid "Join the waitlist"
-msgstr "Únete a la lista de espera"
+#~ msgid "Join the waitlist"
+#~ msgstr "Únete a la lista de espera"
-#: src/view/com/auth/create/Step1.tsx:170
#: src/view/com/auth/create/Step1.tsx:174
-msgid "Join the waitlist."
-msgstr "Únete a la lista de espera."
+#: src/view/com/auth/create/Step1.tsx:178
+#~ msgid "Join the waitlist."
+#~ msgstr "Únete a la lista de espera."
#: src/view/com/modals/Waitlist.tsx:128
-msgid "Join Waitlist"
-msgstr "Únete a la lista de espera"
+#~ msgid "Join Waitlist"
+#~ msgstr "Únete a la lista de espera"
#: src/screens/Onboarding/index.tsx:24
msgid "Journalism"
msgstr ""
+#: src/components/moderation/LabelsOnMe.tsx:59
+msgid "label has been placed on this {labelTarget}"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:144
+msgid "Labeled by {0}."
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:142
+msgid "Labeled by the author."
+msgstr ""
+
+#: src/view/screens/Profile.tsx:188
+msgid "Labels"
+msgstr ""
+
+#: src/screens/Profile/Sections/Labels.tsx:142
+msgid "Labels are annotations on users and content. They can be used to hide, warn, and categorize the network."
+msgstr ""
+
+#: src/components/moderation/LabelsOnMe.tsx:61
+msgid "labels have been placed on this {labelTarget}"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:62
+msgid "Labels on your account"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:64
+msgid "Labels on your content"
+msgstr ""
+
#: src/view/com/composer/select-language/SelectLangBtn.tsx:104
msgid "Language selection"
msgstr "Escoger el idioma"
-#: src/view/screens/Settings/index.tsx:594
+#: src/view/screens/Settings/index.tsx:614
msgid "Language settings"
msgstr ""
-#: src/Navigation.tsx:140
+#: src/Navigation.tsx:144
#: src/view/screens/LanguageSettings.tsx:89
msgid "Language Settings"
msgstr "Configuración del idioma"
-#: src/view/screens/Settings/index.tsx:603
+#: src/view/screens/Settings/index.tsx:623
msgid "Languages"
msgstr "Idiomas"
#: src/view/com/auth/create/StepHeader.tsx:20
-msgid "Last step!"
-msgstr ""
+#~ msgid "Last step!"
+#~ msgstr ""
#: src/view/com/util/moderation/ContentHider.tsx:103
-msgid "Learn more"
-msgstr "Aprender más"
+#~ msgid "Learn more"
+#~ msgstr "Aprender más"
-#: src/view/com/util/moderation/PostAlerts.tsx:47
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:65
-#: src/view/com/util/moderation/ScreenHider.tsx:104
+#: src/components/moderation/ScreenHider.tsx:136
msgid "Learn More"
msgstr "Aprender más"
-#: src/view/com/util/moderation/ContentHider.tsx:85
-#: src/view/com/util/moderation/PostAlerts.tsx:40
-#: src/view/com/util/moderation/PostHider.tsx:78
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:49
-#: src/view/com/util/moderation/ScreenHider.tsx:101
+#: src/components/moderation/ContentHider.tsx:65
+#: src/components/moderation/ContentHider.tsx:128
+msgid "Learn more about the moderation applied to this content."
+msgstr ""
+
+#: src/components/moderation/PostHider.tsx:85
+#: src/components/moderation/ScreenHider.tsx:125
msgid "Learn more about this warning"
msgstr "Aprender más acerca de esta advertencia"
-#: src/view/screens/Moderation.tsx:243
+#: src/screens/Moderation/index.tsx:549
msgid "Learn more about what is public on Bluesky."
msgstr "Más información sobre lo que es público en Bluesky."
+#: src/components/moderation/ContentHider.tsx:152
+msgid "Learn more."
+msgstr ""
+
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82
msgid "Leave them all unchecked to see any language."
msgstr "Déjalos todos sin marcar para ver cualquier idioma."
-#: src/view/com/modals/LinkWarning.tsx:51
+#: src/view/com/modals/LinkWarning.tsx:65
msgid "Leaving Bluesky"
msgstr "Salir de Bluesky"
@@ -1996,63 +2491,72 @@ msgstr "Salir de Bluesky"
msgid "left to go."
msgstr ""
-#: src/view/screens/Settings/index.tsx:278
+#: src/view/screens/Settings/index.tsx:296
msgid "Legacy storage cleared, you need to restart the app now."
msgstr ""
-#: src/view/com/auth/login/Login.tsx:128
-#: src/view/com/auth/login/Login.tsx:144
+#: src/screens/Login/index.tsx:130
+#: src/screens/Login/index.tsx:145
msgid "Let's get your password reset!"
msgstr "¡Vamos a restablecer tu contraseña!"
-#: src/screens/Onboarding/StepFinished.tsx:151
+#: src/screens/Onboarding/StepFinished.tsx:155
msgid "Let's go!"
msgstr ""
#: src/view/com/util/UserAvatar.tsx:248
#: src/view/com/util/UserBanner.tsx:62
-msgid "Library"
-msgstr "Librería"
+#~ msgid "Library"
+#~ msgstr "Librería"
-#: src/view/screens/Settings/index.tsx:479
+#: src/view/screens/Settings/index.tsx:498
msgid "Light"
msgstr ""
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Like"
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:591
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:258
+#: src/view/screens/ProfileFeed.tsx:573
msgid "Like this feed"
msgstr "Dar «me gusta» a esta noticia"
-#: src/Navigation.tsx:197
+#: src/components/LikesDialog.tsx:87
+#: src/Navigation.tsx:201
+#: src/Navigation.tsx:206
msgid "Liked by"
msgstr "Le ha gustado a"
+#: src/screens/Profile/ProfileLabelerLikedBy.tsx:29
#: src/view/screens/PostLikedBy.tsx:27
#: src/view/screens/ProfileFeedLikedBy.tsx:27
msgid "Liked By"
msgstr ""
-#: src/view/com/feeds/FeedSourceCard.tsx:277
+#: src/view/com/feeds/FeedSourceCard.tsx:268
msgid "Liked by {0} {1}"
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:606
+#: src/components/LabelingServiceCard/index.tsx:72
+msgid "Liked by {count} {0}"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:278
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:292
+#: src/view/screens/ProfileFeed.tsx:588
msgid "Liked by {likeCount} {0}"
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:170
+#: src/view/com/notifications/FeedItem.tsx:174
msgid "liked your custom feed"
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:155
+#: src/view/com/notifications/FeedItem.tsx:159
msgid "liked your post"
msgstr ""
-#: src/view/screens/Profile.tsx:183
+#: src/view/screens/Profile.tsx:193
msgid "Likes"
msgstr "Cantidad de «Me gusta»"
@@ -2060,67 +2564,68 @@ msgstr "Cantidad de «Me gusta»"
msgid "Likes on this post"
msgstr ""
-#: src/Navigation.tsx:166
+#: src/Navigation.tsx:170
msgid "List"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:261
+#: src/view/com/modals/CreateOrEditList.tsx:262
msgid "List Avatar"
msgstr "Avatar de la lista"
-#: src/view/screens/ProfileList.tsx:323
+#: src/view/screens/ProfileList.tsx:311
msgid "List blocked"
msgstr ""
-#: src/view/com/feeds/FeedSourceCard.tsx:231
+#: src/view/com/feeds/FeedSourceCard.tsx:220
msgid "List by {0}"
msgstr ""
-#: src/view/screens/ProfileList.tsx:377
+#: src/view/screens/ProfileList.tsx:355
msgid "List deleted"
msgstr ""
-#: src/view/screens/ProfileList.tsx:282
+#: src/view/screens/ProfileList.tsx:283
msgid "List muted"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:275
+#: src/view/com/modals/CreateOrEditList.tsx:276
msgid "List Name"
msgstr "Nombre de la lista"
-#: src/view/screens/ProfileList.tsx:342
+#: src/view/screens/ProfileList.tsx:325
msgid "List unblocked"
msgstr ""
-#: src/view/screens/ProfileList.tsx:301
+#: src/view/screens/ProfileList.tsx:297
msgid "List unmuted"
msgstr ""
-#: src/Navigation.tsx:110
-#: src/view/screens/Profile.tsx:185
-#: src/view/shell/desktop/LeftNav.tsx:379
-#: src/view/shell/Drawer.tsx:492
-#: src/view/shell/Drawer.tsx:493
+#: src/Navigation.tsx:114
+#: src/view/screens/Profile.tsx:189
+#: src/view/screens/Profile.tsx:195
+#: src/view/shell/desktop/LeftNav.tsx:383
+#: src/view/shell/Drawer.tsx:495
+#: src/view/shell/Drawer.tsx:496
msgid "Lists"
msgstr "Listas"
-#: src/view/com/post-thread/PostThread.tsx:276
-#: src/view/com/post-thread/PostThread.tsx:284
-msgid "Load more posts"
-msgstr "Cargar más publicaciones"
+#: src/view/com/post-thread/PostThread.tsx:333
+#: src/view/com/post-thread/PostThread.tsx:341
+#~ msgid "Load more posts"
+#~ msgstr "Cargar más publicaciones"
#: src/view/screens/Notifications.tsx:159
msgid "Load new notifications"
msgstr "Cargar notificaciones nuevas"
-#: src/view/com/feeds/FeedPage.tsx:190
-#: src/view/screens/Profile.tsx:440
-#: src/view/screens/ProfileFeed.tsx:494
-#: src/view/screens/ProfileList.tsx:680
+#: src/screens/Profile/Sections/Feed.tsx:70
+#: src/view/com/feeds/FeedPage.tsx:138
+#: src/view/screens/ProfileFeed.tsx:496
+#: src/view/screens/ProfileList.tsx:695
msgid "Load new posts"
msgstr "Cargar publicaciones nuevas"
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:99
msgid "Loading..."
msgstr "Cargando..."
@@ -2128,7 +2633,7 @@ msgstr "Cargando..."
#~ msgid "Local dev server"
#~ msgstr "Servidor de desarrollo local"
-#: src/Navigation.tsx:207
+#: src/Navigation.tsx:221
msgid "Log"
msgstr ""
@@ -2139,19 +2644,35 @@ msgstr ""
msgid "Log out"
msgstr ""
-#: src/view/screens/Moderation.tsx:136
+#: src/screens/Moderation/index.tsx:442
msgid "Logged-out visibility"
msgstr "Visibilidad de desconexión"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:133
+#: src/components/AccountList.tsx:54
msgid "Login to account that is not listed"
msgstr "Acceder a una cuenta que no está en la lista"
-#: src/view/com/modals/LinkWarning.tsx:65
+#: src/screens/Login/SetNewPasswordForm.tsx:116
+msgid "Looks like XXXXX-XXXXX"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:79
msgid "Make sure this is where you intend to go!"
msgstr "¡Asegúrate de que es aquí a donde pretendes ir!"
-#: src/view/screens/Profile.tsx:182
+#: src/components/dialogs/MutedWords.tsx:82
+msgid "Manage your muted words and tags"
+msgstr ""
+
+#: src/view/com/auth/create/Step2.tsx:118
+#~ msgid "May not be longer than 253 characters"
+#~ msgstr ""
+
+#: src/view/com/auth/create/Step2.tsx:109
+#~ msgid "May only contain letters and numbers"
+#~ msgstr ""
+
+#: src/view/screens/Profile.tsx:192
msgid "Media"
msgstr "Medios"
@@ -2163,115 +2684,178 @@ msgstr "usuarios mencionados"
msgid "Mentioned users"
msgstr "Usuarios mencionados"
-#: src/view/com/util/ViewHeader.tsx:81
-#: src/view/screens/Search/Search.tsx:623
+#: src/view/com/util/ViewHeader.tsx:87
+#: src/view/screens/Search/Search.tsx:648
msgid "Menu"
msgstr "Menú"
-#: src/view/com/posts/FeedErrorMessage.tsx:197
+#: src/view/com/posts/FeedErrorMessage.tsx:192
msgid "Message from server: {0}"
msgstr "Mensaje del servidor: {0}"
-#: src/Navigation.tsx:115
-#: src/view/screens/Moderation.tsx:64
-#: src/view/screens/Settings/index.tsx:625
-#: src/view/shell/desktop/LeftNav.tsx:397
-#: src/view/shell/Drawer.tsx:511
-#: src/view/shell/Drawer.tsx:512
+#: src/lib/moderation/useReportOptions.ts:45
+msgid "Misleading Account"
+msgstr ""
+
+#: src/Navigation.tsx:119
+#: src/screens/Moderation/index.tsx:104
+#: src/view/screens/Settings/index.tsx:645
+#: src/view/shell/desktop/LeftNav.tsx:401
+#: src/view/shell/Drawer.tsx:514
+#: src/view/shell/Drawer.tsx:515
msgid "Moderation"
msgstr "Moderación"
-#: src/view/com/lists/ListCard.tsx:92
+#: src/components/moderation/ModerationDetailsDialog.tsx:112
+msgid "Moderation details"
+msgstr ""
+
+#: src/view/com/lists/ListCard.tsx:93
#: src/view/com/modals/UserAddRemoveLists.tsx:206
msgid "Moderation list by {0}"
msgstr ""
-#: src/view/screens/ProfileList.tsx:774
+#: src/view/screens/ProfileList.tsx:789
msgid "Moderation list by <0/>"
msgstr ""
-#: src/view/com/lists/ListCard.tsx:90
+#: src/view/com/lists/ListCard.tsx:91
#: src/view/com/modals/UserAddRemoveLists.tsx:204
-#: src/view/screens/ProfileList.tsx:772
+#: src/view/screens/ProfileList.tsx:787
msgid "Moderation list by you"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:197
+#: src/view/com/modals/CreateOrEditList.tsx:198
msgid "Moderation list created"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:183
+#: src/view/com/modals/CreateOrEditList.tsx:184
msgid "Moderation list updated"
msgstr ""
-#: src/view/screens/Moderation.tsx:95
+#: src/screens/Moderation/index.tsx:243
msgid "Moderation lists"
msgstr "Listas de moderación"
-#: src/Navigation.tsx:120
+#: src/Navigation.tsx:124
#: src/view/screens/ModerationModlists.tsx:58
msgid "Moderation Lists"
msgstr "Listas de moderación"
-#: src/view/screens/Settings/index.tsx:619
+#: src/view/screens/Settings/index.tsx:639
msgid "Moderation settings"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:35
+#: src/Navigation.tsx:216
+msgid "Moderation states"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:215
+msgid "Moderation tools"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:48
+#: src/lib/moderation/useModerationCauseDescription.ts:40
msgid "Moderator has chosen to set a general warning on the content."
msgstr ""
-#: src/view/shell/desktop/Feeds.tsx:63
+#: src/view/com/post-thread/PostThreadItem.tsx:541
+msgid "More"
+msgstr ""
+
+#: src/view/shell/desktop/Feeds.tsx:65
msgid "More feeds"
msgstr "Más canales de noticias"
-#: src/view/com/profile/ProfileHeader.tsx:522
-#: src/view/screens/ProfileFeed.tsx:362
-#: src/view/screens/ProfileList.tsx:616
+#: src/view/screens/ProfileList.tsx:599
msgid "More options"
msgstr "Más opciones"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:270
-msgid "More post options"
-msgstr ""
+#: src/view/com/util/forms/PostDropdownBtn.tsx:315
+#~ msgid "More post options"
+#~ msgstr ""
#: src/view/screens/PreferencesThreads.tsx:82
msgid "Most-liked replies first"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:326
+#: src/view/com/auth/create/Step2.tsx:122
+#~ msgid "Must be at least 3 characters"
+#~ msgstr ""
+
+#: src/components/TagMenu/index.tsx:249
+msgid "Mute"
+msgstr ""
+
+#: src/components/TagMenu/index.web.tsx:105
+msgid "Mute {truncatedTag}"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:279
+#: src/view/com/profile/ProfileMenu.tsx:286
msgid "Mute Account"
msgstr "Silenciar la cuenta"
-#: src/view/screens/ProfileList.tsx:543
+#: src/view/screens/ProfileList.tsx:518
msgid "Mute accounts"
msgstr "Silenciar las cuentas"
-#: src/view/screens/ProfileList.tsx:490
+#: src/components/TagMenu/index.tsx:209
+msgid "Mute all {displayTag} posts"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:211
+#~ msgid "Mute all {tag} posts"
+#~ msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:148
+msgid "Mute in tags only"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:133
+msgid "Mute in text & tags"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:461
+#: src/view/screens/ProfileList.tsx:624
msgid "Mute list"
msgstr "Silenciar la lista"
-#: src/view/screens/ProfileList.tsx:274
+#: src/view/screens/ProfileList.tsx:619
msgid "Mute these accounts?"
msgstr "¿Silenciar estas cuentas?"
-#: src/view/screens/ProfileList.tsx:278
-msgid "Mute this List"
+#: src/view/screens/ProfileList.tsx:279
+#~ msgid "Mute this List"
+#~ msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:126
+msgid "Mute this word in post text and tags"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:141
+msgid "Mute this word in tags only"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:257
msgid "Mute thread"
msgstr "Silenciar el hilo"
-#: src/view/com/lists/ListCard.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:267
+#: src/view/com/util/forms/PostDropdownBtn.tsx:269
+msgid "Mute words & tags"
+msgstr ""
+
+#: src/view/com/lists/ListCard.tsx:102
msgid "Muted"
msgstr ""
-#: src/view/screens/Moderation.tsx:109
+#: src/screens/Moderation/index.tsx:255
msgid "Muted accounts"
msgstr "Cuentas silenciadas"
-#: src/Navigation.tsx:125
+#: src/Navigation.tsx:129
#: src/view/screens/ModerationMutedAccounts.tsx:107
msgid "Muted Accounts"
msgstr "Cuentas silenciadas"
@@ -2280,15 +2864,24 @@ msgstr "Cuentas silenciadas"
msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private."
msgstr "Las cuentas silenciadas eliminan sus publicaciones de tu canal de noticias y de tus notificaciones. Las cuentas silenciadas son completamente privadas."
-#: src/view/screens/ProfileList.tsx:276
+#: src/lib/moderation/useModerationCauseDescription.ts:85
+msgid "Muted by \"{0}\""
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:231
+msgid "Muted words & tags"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:621
msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them."
msgstr "Silenciar es privado. Las cuentas silenciadas pueden interactuar contigo, pero no verás sus publicaciones ni recibirás notificaciones suyas."
-#: src/view/com/modals/BirthDateSettings.tsx:56
+#: src/components/dialogs/BirthDateSettings.tsx:35
+#: src/components/dialogs/BirthDateSettings.tsx:38
msgid "My Birthday"
msgstr "Mi cumpleaños"
-#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:663
msgid "My Feeds"
msgstr "Mis canales de noticias"
@@ -2296,32 +2889,40 @@ msgstr "Mis canales de noticias"
msgid "My Profile"
msgstr "Mi perfil"
-#: src/view/screens/Settings/index.tsx:582
+#: src/view/screens/Settings/index.tsx:596
+msgid "My saved feeds"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:602
msgid "My Saved Feeds"
msgstr "Mis canales de noticias guardados"
#: src/view/com/auth/server-input/index.tsx:118
-msgid "my-server.com"
-msgstr ""
+#~ msgid "my-server.com"
+#~ msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:179
-#: src/view/com/modals/CreateOrEditList.tsx:290
+#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/CreateOrEditList.tsx:291
msgid "Name"
msgstr "Nombre"
-#: src/view/com/modals/CreateOrEditList.tsx:145
+#: src/view/com/modals/CreateOrEditList.tsx:146
msgid "Name is required"
msgstr ""
+#: src/lib/moderation/useReportOptions.ts:57
+#: src/lib/moderation/useReportOptions.ts:78
+#: src/lib/moderation/useReportOptions.ts:86
+msgid "Name or Description Violates Community Standards"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:25
msgid "Nature"
msgstr ""
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:190
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:219
-#: src/view/com/auth/login/LoginForm.tsx:289
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:196
-#: src/view/com/modals/ChangePassword.tsx:166
+#: src/screens/Login/ForgotPasswordForm.tsx:173
+#: src/screens/Login/LoginForm.tsx:254
+#: src/view/com/modals/ChangePassword.tsx:168
msgid "Navigates to the next screen"
msgstr ""
@@ -2329,20 +2930,32 @@ msgstr ""
msgid "Navigates to your profile"
msgstr ""
+#: src/components/ReportDialog/SelectReportOptionView.tsx:122
+msgid "Need to report a copyright violation?"
+msgstr ""
+
#: src/view/com/modals/EmbedConsent.tsx:107
#: src/view/com/modals/EmbedConsent.tsx:123
-msgid "Never load embeds from {0}"
-msgstr ""
+#~ msgid "Never load embeds from {0}"
+#~ msgstr ""
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:72
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:72
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:74
msgid "Never lose access to your followers and data."
msgstr "No pierdas nunca el acceso a tus seguidores y datos."
-#: src/screens/Onboarding/StepFinished.tsx:119
+#: src/screens/Onboarding/StepFinished.tsx:123
msgid "Never lose access to your followers or data."
msgstr ""
+#: src/components/dialogs/MutedWords.tsx:293
+#~ msgid "Nevermind"
+#~ msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:519
+msgid "Nevermind, create a handle for me"
+msgstr ""
+
#: src/view/screens/Lists.tsx:76
msgctxt "action"
msgid "New"
@@ -2352,39 +2965,39 @@ msgstr ""
msgid "New"
msgstr "Nuevo"
-#: src/view/com/modals/CreateOrEditList.tsx:252
+#: src/view/com/modals/CreateOrEditList.tsx:253
msgid "New Moderation List"
msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:150
+#: src/view/com/modals/ChangePassword.tsx:212
msgid "New password"
msgstr ""
-#: src/view/com/modals/ChangePassword.tsx:215
+#: src/view/com/modals/ChangePassword.tsx:217
msgid "New Password"
msgstr ""
-#: src/view/com/feeds/FeedPage.tsx:201
+#: src/view/com/feeds/FeedPage.tsx:149
msgctxt "action"
msgid "New post"
msgstr ""
-#: src/view/screens/Feeds.tsx:581
+#: src/view/screens/Feeds.tsx:555
#: src/view/screens/Notifications.tsx:168
-#: src/view/screens/Profile.tsx:382
-#: src/view/screens/ProfileFeed.tsx:432
-#: src/view/screens/ProfileList.tsx:195
-#: src/view/screens/ProfileList.tsx:223
-#: src/view/shell/desktop/LeftNav.tsx:248
+#: src/view/screens/Profile.tsx:452
+#: src/view/screens/ProfileFeed.tsx:434
+#: src/view/screens/ProfileList.tsx:199
+#: src/view/screens/ProfileList.tsx:227
+#: src/view/shell/desktop/LeftNav.tsx:252
msgid "New post"
msgstr "Publicación nueva"
-#: src/view/shell/desktop/LeftNav.tsx:258
+#: src/view/shell/desktop/LeftNav.tsx:262
msgctxt "action"
msgid "New Post"
msgstr "Publicación nueva"
-#: src/view/com/modals/CreateOrEditList.tsx:247
+#: src/view/com/modals/CreateOrEditList.tsx:248
msgid "New User List"
msgstr ""
@@ -2396,15 +3009,16 @@ msgstr ""
msgid "News"
msgstr ""
-#: src/view/com/auth/create/CreateAccount.tsx:161
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:182
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:192
-#: src/view/com/auth/login/LoginForm.tsx:291
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:187
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:198
+#: src/screens/Login/ForgotPasswordForm.tsx:143
+#: src/screens/Login/ForgotPasswordForm.tsx:150
+#: src/screens/Login/LoginForm.tsx:253
+#: src/screens/Login/LoginForm.tsx:260
+#: src/screens/Login/SetNewPasswordForm.tsx:174
+#: src/screens/Login/SetNewPasswordForm.tsx:180
+#: src/screens/Signup/index.tsx:205
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79
-#: src/view/com/modals/ChangePassword.tsx:251
#: src/view/com/modals/ChangePassword.tsx:253
+#: src/view/com/modals/ChangePassword.tsx:255
msgid "Next"
msgstr "Siguiente"
@@ -2413,48 +3027,61 @@ msgctxt "action"
msgid "Next"
msgstr ""
-#: src/view/com/lightbox/Lightbox.web.tsx:149
+#: src/view/com/lightbox/Lightbox.web.tsx:169
msgid "Next image"
msgstr "Imagen nueva"
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:200
-#: src/view/screens/PreferencesHomeFeed.tsx:235
-#: src/view/screens/PreferencesHomeFeed.tsx:272
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:200
+#: src/view/screens/PreferencesFollowingFeed.tsx:235
+#: src/view/screens/PreferencesFollowingFeed.tsx:272
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "No"
msgstr "No"
-#: src/view/screens/ProfileFeed.tsx:584
-#: src/view/screens/ProfileList.tsx:754
+#: src/view/screens/ProfileFeed.tsx:562
+#: src/view/screens/ProfileList.tsx:769
msgid "No description"
msgstr "Sin descripción"
-#: src/view/com/profile/ProfileHeader.tsx:169
+#: src/view/com/modals/ChangeHandle.tsx:405
+msgid "No DNS Panel"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:118
msgid "No longer following {0}"
msgstr ""
+#: src/screens/Signup/StepHandle.tsx:114
+msgid "No longer than 253 characters"
+msgstr ""
+
#: src/view/com/notifications/Feed.tsx:109
msgid "No notifications yet!"
msgstr ""
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:97
-#: src/view/com/composer/text-input/web/Autocomplete.tsx:191
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:101
+#: src/view/com/composer/text-input/web/Autocomplete.tsx:195
msgid "No result"
msgstr "Sin resultados"
-#: src/view/screens/Feeds.tsx:524
+#: src/components/Lists.tsx:183
+msgid "No results found"
+msgstr ""
+
+#: src/view/screens/Feeds.tsx:495
msgid "No results found for \"{query}\""
msgstr "No se han encontrado resultados para \"{query}\""
#: src/view/com/modals/ListAddRemoveUsers.tsx:127
-#: src/view/screens/Search/Search.tsx:280
-#: src/view/screens/Search/Search.tsx:308
+#: src/view/screens/Search/Search.tsx:283
+#: src/view/screens/Search/Search.tsx:311
msgid "No results found for {query}"
msgstr "No se han encontrado resultados para {query}"
-#: src/view/com/modals/EmbedConsent.tsx:129
+#: src/components/dialogs/EmbedConsent.tsx:105
+#: src/components/dialogs/EmbedConsent.tsx:112
msgid "No thanks"
msgstr ""
@@ -2462,12 +3089,21 @@ msgstr ""
msgid "Nobody"
msgstr "Nadie"
+#: src/components/LikedByList.tsx:79
+#: src/components/LikesDialog.tsx:99
+msgid "Nobody has liked this yet. Maybe you should be the first!"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:42
+msgid "Non-sexual Nudity"
+msgstr ""
+
#: src/view/com/modals/SelfLabel.tsx:135
msgid "Not Applicable."
msgstr "No aplicable."
-#: src/Navigation.tsx:105
-#: src/view/screens/Profile.tsx:106
+#: src/Navigation.tsx:109
+#: src/view/screens/Profile.tsx:99
msgid "Not Found"
msgstr ""
@@ -2476,17 +3112,23 @@ msgstr ""
msgid "Not right now"
msgstr ""
-#: src/view/screens/Moderation.tsx:233
+#: src/view/com/profile/ProfileMenu.tsx:368
+#: src/view/com/util/forms/PostDropdownBtn.tsx:342
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:246
+msgid "Note about sharing"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:540
msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites."
msgstr "Nota: Bluesky es una red abierta y pública. Esta configuración sólo limita la visibilidad de tu contenido en la aplicación y el sitio web de Bluesky, y es posible que otras aplicaciones no respeten esta configuración. Otras aplicaciones y sitios web pueden seguir mostrando tu contenido a los usuarios que hayan cerrado sesión."
-#: src/Navigation.tsx:447
+#: src/Navigation.tsx:469
#: src/view/screens/Notifications.tsx:124
#: src/view/screens/Notifications.tsx:148
-#: src/view/shell/bottom-bar/BottomBar.tsx:205
-#: src/view/shell/desktop/LeftNav.tsx:361
-#: src/view/shell/Drawer.tsx:435
-#: src/view/shell/Drawer.tsx:436
+#: src/view/shell/bottom-bar/BottomBar.tsx:215
+#: src/view/shell/desktop/LeftNav.tsx:365
+#: src/view/shell/Drawer.tsx:438
+#: src/view/shell/Drawer.tsx:439
msgid "Notifications"
msgstr "Notificaciones"
@@ -2494,15 +3136,36 @@ msgstr "Notificaciones"
msgid "Nudity"
msgstr ""
-#: src/view/com/util/ErrorBoundary.tsx:35
+#: src/lib/moderation/useReportOptions.ts:71
+msgid "Nudity or adult content not labeled as such"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:71
+#~ msgid "Nudity or pornography not labeled as such"
+#~ msgstr ""
+
+#: src/screens/Signup/index.tsx:142
+msgid "of"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:11
+msgid "Off"
+msgstr ""
+
+#: src/view/com/util/ErrorBoundary.tsx:49
msgid "Oh no!"
msgstr "¡Qué problema!"
-#: src/screens/Onboarding/StepInterests/index.tsx:128
+#: src/screens/Onboarding/StepInterests/index.tsx:132
msgid "Oh no! Something went wrong."
msgstr ""
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:41
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:126
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:327
+msgid "OK"
+msgstr ""
+
+#: src/screens/Login/PasswordUpdatedForm.tsx:44
msgid "Okay"
msgstr "Está bien"
@@ -2510,11 +3173,11 @@ msgstr "Está bien"
msgid "Oldest replies first"
msgstr ""
-#: src/view/screens/Settings/index.tsx:234
+#: src/view/screens/Settings/index.tsx:244
msgid "Onboarding reset"
msgstr ""
-#: src/view/com/composer/Composer.tsx:375
+#: src/view/com/composer/Composer.tsx:392
msgid "One or more images is missing alt text."
msgstr "Falta el texto alternativo en una o varias imágenes."
@@ -2522,32 +3185,66 @@ msgstr "Falta el texto alternativo en una o varias imágenes."
msgid "Only {0} can reply."
msgstr "Solo {0} puede responder."
-#: src/view/screens/AppPasswords.tsx:65
-#: src/view/screens/Profile.tsx:106
+#: src/screens/Signup/StepHandle.tsx:97
+msgid "Only contains letters, numbers, and hyphens"
+msgstr ""
+
+#: src/components/Lists.tsx:75
+msgid "Oops, something went wrong!"
+msgstr ""
+
+#: src/components/Lists.tsx:170
+#: src/view/screens/AppPasswords.tsx:67
+#: src/view/screens/Profile.tsx:99
msgid "Oops!"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:115
+#: src/screens/Onboarding/StepFinished.tsx:119
msgid "Open"
msgstr ""
-#: src/view/com/composer/Composer.tsx:470
-#: src/view/com/composer/Composer.tsx:471
+#: src/view/screens/Moderation.tsx:75
+#~ msgid "Open content filtering settings"
+#~ msgstr ""
+
+#: src/view/com/composer/Composer.tsx:491
+#: src/view/com/composer/Composer.tsx:492
msgid "Open emoji picker"
msgstr ""
-#: src/view/screens/Settings/index.tsx:712
+#: src/view/screens/ProfileFeed.tsx:300
+msgid "Open feed options menu"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:734
msgid "Open links with in-app browser"
msgstr ""
-#: src/view/com/pager/FeedsTabBarMobile.tsx:87
+#: src/screens/Moderation/index.tsx:227
+msgid "Open muted words and tags settings"
+msgstr ""
+
+#: src/view/screens/Moderation.tsx:92
+#~ msgid "Open muted words settings"
+#~ msgstr ""
+
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:50
msgid "Open navigation"
msgstr "Abrir navegación"
-#: src/view/screens/Settings/index.tsx:804
+#: src/view/com/util/forms/PostDropdownBtn.tsx:183
+msgid "Open post options menu"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:828
+#: src/view/screens/Settings/index.tsx:838
msgid "Open storybook page"
msgstr ""
+#: src/view/screens/Settings/index.tsx:816
+msgid "Open system log"
+msgstr ""
+
#: src/view/com/util/forms/DropdownButton.tsx:154
msgid "Opens {numItems} options"
msgstr ""
@@ -2556,11 +3253,11 @@ msgstr ""
msgid "Opens additional details for a debug entry"
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:348
+#: src/view/com/notifications/FeedItem.tsx:353
msgid "Opens an expanded list of users in this notification"
msgstr ""
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:61
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:78
msgid "Opens camera on device"
msgstr ""
@@ -2568,7 +3265,7 @@ msgstr ""
msgid "Opens composer"
msgstr ""
-#: src/view/screens/Settings/index.tsx:595
+#: src/view/screens/Settings/index.tsx:615
msgid "Opens configurable language settings"
msgstr "Abrir la configuración del idioma que se puede ajustar"
@@ -2576,71 +3273,117 @@ msgstr "Abrir la configuración del idioma que se puede ajustar"
msgid "Opens device photo gallery"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:419
-msgid "Opens editor for profile display name, avatar, background image, and description"
-msgstr ""
+#: src/view/com/profile/ProfileHeader.tsx:420
+#~ msgid "Opens editor for profile display name, avatar, background image, and description"
+#~ msgstr ""
-#: src/view/screens/Settings/index.tsx:649
+#: src/view/screens/Settings/index.tsx:669
msgid "Opens external embeds settings"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:574
-msgid "Opens followers list"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:57
+#: src/view/com/auth/SplashScreen.tsx:68
+#: src/view/com/auth/SplashScreen.web.tsx:97
+msgid "Opens flow to create a new Bluesky account"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:593
-msgid "Opens following list"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:75
+#: src/view/com/auth/SplashScreen.tsx:83
+#: src/view/com/auth/SplashScreen.web.tsx:112
+msgid "Opens flow to sign into your existing Bluesky account"
msgstr ""
+#: src/view/com/profile/ProfileHeader.tsx:575
+#~ msgid "Opens followers list"
+#~ msgstr ""
+
+#: src/view/com/profile/ProfileHeader.tsx:594
+#~ msgid "Opens following list"
+#~ msgstr ""
+
#: src/view/screens/Settings.tsx:412
#~ msgid "Opens invite code list"
#~ msgstr ""
-#: src/view/com/modals/InviteCodes.tsx:172
+#: src/view/com/modals/InviteCodes.tsx:173
msgid "Opens list of invite codes"
msgstr "Abre la lista de códigos de invitación"
+#: src/view/screens/Settings/index.tsx:798
+msgid "Opens modal for account deletion confirmation. Requires email code"
+msgstr ""
+
#: src/view/screens/Settings/index.tsx:774
-msgid "Opens modal for account deletion confirmation. Requires email code."
+#~ msgid "Opens modal for account deletion confirmation. Requires email code."
+#~ msgstr ""
+
+#: src/view/screens/Settings/index.tsx:756
+msgid "Opens modal for changing your Bluesky password"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:281
+#: src/view/screens/Settings/index.tsx:718
+msgid "Opens modal for choosing a new Bluesky handle"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:779
+msgid "Opens modal for downloading your Bluesky account data (repository)"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:968
+msgid "Opens modal for email verification"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:282
msgid "Opens modal for using custom domain"
msgstr "Abre el modal para usar el dominio personalizado"
-#: src/view/screens/Settings/index.tsx:620
+#: src/view/screens/Settings/index.tsx:640
msgid "Opens moderation settings"
msgstr "Abre la configuración de moderación"
-#: src/view/com/auth/login/LoginForm.tsx:239
+#: src/screens/Login/LoginForm.tsx:202
msgid "Opens password reset form"
msgstr ""
-#: src/view/screens/Feeds.tsx:357
+#: src/view/com/home/HomeHeaderLayout.web.tsx:63
+#: src/view/screens/Feeds.tsx:356
msgid "Opens screen to edit Saved Feeds"
msgstr ""
-#: src/view/screens/Settings/index.tsx:576
+#: src/view/screens/Settings/index.tsx:597
msgid "Opens screen with all saved feeds"
msgstr "Abre la pantalla con todas las noticias guardadas"
+#: src/view/screens/Settings/index.tsx:696
+msgid "Opens the app password settings"
+msgstr ""
+
#: src/view/screens/Settings/index.tsx:676
-msgid "Opens the app password settings page"
-msgstr "Abre la página de configuración de la contraseña de la app"
+#~ msgid "Opens the app password settings page"
+#~ msgstr "Abre la página de configuración de la contraseña de la app"
+
+#: src/view/screens/Settings/index.tsx:554
+msgid "Opens the Following feed preferences"
+msgstr ""
#: src/view/screens/Settings/index.tsx:535
-msgid "Opens the home feed preferences"
-msgstr "Abre las preferencias de noticias de la página inicial"
+#~ msgid "Opens the home feed preferences"
+#~ msgstr "Abre las preferencias de noticias de la página inicial"
+
+#: src/view/com/modals/LinkWarning.tsx:93
+msgid "Opens the linked website"
+msgstr ""
-#: src/view/screens/Settings/index.tsx:805
+#: src/view/screens/Settings/index.tsx:829
+#: src/view/screens/Settings/index.tsx:839
msgid "Opens the storybook page"
msgstr "Abre la página del libro de cuentos"
-#: src/view/screens/Settings/index.tsx:793
+#: src/view/screens/Settings/index.tsx:817
msgid "Opens the system log page"
msgstr "Abre la página de la bitácora del sistema"
-#: src/view/screens/Settings/index.tsx:556
+#: src/view/screens/Settings/index.tsx:575
msgid "Opens the threads preferences"
msgstr "Abre las preferencias de hilos"
@@ -2648,11 +3391,19 @@ msgstr "Abre las preferencias de hilos"
msgid "Option {0} of {numItems}"
msgstr ""
+#: src/components/ReportDialog/SubmitView.tsx:162
+msgid "Optionally provide additional information below:"
+msgstr ""
+
#: src/view/com/modals/Threadgate.tsx:89
msgid "Or combine these options:"
msgstr ""
-#: src/view/com/auth/login/ChooseAccountForm.tsx:138
+#: src/lib/moderation/useReportOptions.ts:25
+msgid "Other"
+msgstr ""
+
+#: src/components/AccountList.tsx:73
msgid "Other account"
msgstr "Otra cuenta"
@@ -2664,6 +3415,7 @@ msgstr "Otra cuenta"
msgid "Other..."
msgstr "Otro..."
+#: src/components/Lists.tsx:184
#: src/view/screens/NotFound.tsx:45
msgid "Page not found"
msgstr "Página no encontrada"
@@ -2672,27 +3424,30 @@ msgstr "Página no encontrada"
msgid "Page Not Found"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:210
-#: src/view/com/auth/create/Step1.tsx:220
-#: src/view/com/auth/login/LoginForm.tsx:226
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:161
-#: src/view/com/modals/DeleteAccount.tsx:202
+#: src/screens/Login/LoginForm.tsx:178
+#: src/screens/Signup/StepInfo/index.tsx:101
+#: src/view/com/modals/DeleteAccount.tsx:194
+#: src/view/com/modals/DeleteAccount.tsx:201
msgid "Password"
msgstr "Contraseña"
-#: src/view/com/auth/login/Login.tsx:157
+#: src/view/com/modals/ChangePassword.tsx:142
+msgid "Password Changed"
+msgstr ""
+
+#: src/screens/Login/index.tsx:157
msgid "Password updated"
msgstr "Contraseña actualizada"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:28
+#: src/screens/Login/PasswordUpdatedForm.tsx:30
msgid "Password updated!"
msgstr "¡Contraseña actualizada!"
-#: src/Navigation.tsx:160
+#: src/Navigation.tsx:164
msgid "People followed by @{0}"
msgstr ""
-#: src/Navigation.tsx:153
+#: src/Navigation.tsx:157
msgid "People following @{0}"
msgstr ""
@@ -2709,85 +3464,101 @@ msgid "Pets"
msgstr ""
#: src/view/com/auth/create/Step2.tsx:183
-msgid "Phone number"
-msgstr ""
+#~ msgid "Phone number"
+#~ msgstr ""
#: src/view/com/modals/SelfLabel.tsx:121
msgid "Pictures meant for adults."
msgstr "Imágenes destinadas a adultos."
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:292
+#: src/view/screens/ProfileList.tsx:563
msgid "Pin to home"
msgstr ""
+#: src/view/screens/ProfileFeed.tsx:295
+msgid "Pin to Home"
+msgstr ""
+
#: src/view/screens/SavedFeeds.tsx:88
msgid "Pinned Feeds"
msgstr "Canales de noticias anclados"
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:111
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:123
msgid "Play {0}"
msgstr ""
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:54
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:55
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:57
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:58
msgid "Play Video"
msgstr ""
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:110
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:122
msgid "Plays the GIF"
msgstr ""
-#: src/view/com/auth/create/state.ts:177
+#: src/screens/Signup/state.ts:241
msgid "Please choose your handle."
msgstr "Por favor, elige tu identificador."
-#: src/view/com/auth/create/state.ts:160
+#: src/screens/Signup/state.ts:234
msgid "Please choose your password."
msgstr "Por favor, elige tu contraseña."
+#: src/screens/Signup/state.ts:251
+msgid "Please complete the verification captcha."
+msgstr ""
+
#: src/view/com/modals/ChangeEmail.tsx:67
msgid "Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed."
msgstr "Por favor, confirma tu correo electrónico antes de cambiarlo. Se trata de un requisito temporal mientras se añaden herramientas de actualización de correo electrónico, y pronto se eliminará."
-#: src/view/com/modals/AddAppPasswords.tsx:90
+#: src/view/com/modals/AddAppPasswords.tsx:91
msgid "Please enter a name for your app password. All spaces is not allowed."
msgstr ""
#: src/view/com/auth/create/Step2.tsx:206
-msgid "Please enter a phone number that can receive SMS text messages."
-msgstr ""
+#~ msgid "Please enter a phone number that can receive SMS text messages."
+#~ msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:145
+#: src/view/com/modals/AddAppPasswords.tsx:146
msgid "Please enter a unique name for this App Password or use our randomly generated one."
msgstr "Introduce un nombre único para la contraseña de esta app o utiliza una generada aleatoriamente."
-#: src/view/com/auth/create/state.ts:170
-msgid "Please enter the code you received by SMS."
+#: src/components/dialogs/MutedWords.tsx:67
+msgid "Please enter a valid word, tag, or phrase to mute"
msgstr ""
+#: src/view/com/auth/create/state.ts:170
+#~ msgid "Please enter the code you received by SMS."
+#~ msgstr ""
+
#: src/view/com/auth/create/Step2.tsx:282
-msgid "Please enter the verification code sent to {phoneNumberFormatted}."
-msgstr ""
+#~ msgid "Please enter the verification code sent to {phoneNumberFormatted}."
+#~ msgstr ""
-#: src/view/com/auth/create/state.ts:146
+#: src/screens/Signup/state.ts:220
msgid "Please enter your email."
msgstr "Introduce tu correo electrónico."
-#: src/view/com/modals/DeleteAccount.tsx:191
+#: src/view/com/modals/DeleteAccount.tsx:190
msgid "Please enter your password as well:"
msgstr "Introduce tu contraseña, también:"
+#: src/components/moderation/LabelsOnMeDialog.tsx:221
+msgid "Please explain why you think this label was incorrectly applied by {0}"
+msgstr ""
+
#: src/view/com/modals/AppealLabel.tsx:72
#: src/view/com/modals/AppealLabel.tsx:75
-msgid "Please tell us why you think this content warning was incorrectly applied!"
-msgstr "Por favor, dinos por qué crees que esta advertencia de contenido se ha aplicado incorrectamente!"
+#~ msgid "Please tell us why you think this content warning was incorrectly applied!"
+#~ msgstr "Por favor, dinos por qué crees que esta advertencia de contenido se ha aplicado incorrectamente!"
#: src/view/com/modals/VerifyEmail.tsx:101
msgid "Please Verify Your Email"
msgstr ""
-#: src/view/com/composer/Composer.tsx:215
+#: src/view/com/composer/Composer.tsx:222
msgid "Please wait for your link card to finish loading"
msgstr "Por favor, espera a que tu tarjeta de enlace termine de cargarse"
@@ -2799,35 +3570,49 @@ msgstr ""
msgid "Porn"
msgstr ""
-#: src/view/com/composer/Composer.tsx:350
-#: src/view/com/composer/Composer.tsx:358
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#~ msgid "Pornography"
+#~ msgstr ""
+
+#: src/view/com/composer/Composer.tsx:367
+#: src/view/com/composer/Composer.tsx:375
msgctxt "action"
msgid "Post"
msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:246
+#: src/view/com/post-thread/PostThread.tsx:292
msgctxt "description"
msgid "Post"
msgstr "Publicación"
-#: src/view/com/post-thread/PostThreadItem.tsx:174
+#: src/view/com/post-thread/PostThreadItem.tsx:175
msgid "Post by {0}"
msgstr ""
-#: src/Navigation.tsx:172
-#: src/Navigation.tsx:179
-#: src/Navigation.tsx:186
+#: src/Navigation.tsx:176
+#: src/Navigation.tsx:183
+#: src/Navigation.tsx:190
msgid "Post by @{0}"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:84
+#: src/view/com/util/forms/PostDropdownBtn.tsx:105
msgid "Post deleted"
msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:398
+#: src/view/com/post-thread/PostThread.tsx:157
msgid "Post hidden"
msgstr "Publicación oculta"
+#: src/components/moderation/ModerationDetailsDialog.tsx:97
+#: src/lib/moderation/useModerationCauseDescription.ts:99
+msgid "Post Hidden by Muted Word"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:100
+#: src/lib/moderation/useModerationCauseDescription.ts:108
+msgid "Post Hidden by You"
+msgstr ""
+
#: src/view/com/composer/select-language/SelectLangBtn.tsx:87
msgid "Post language"
msgstr "Lenguaje de la publicación"
@@ -2836,23 +3621,42 @@ msgstr "Lenguaje de la publicación"
msgid "Post Languages"
msgstr "Lenguajes de la publicación"
-#: src/view/com/post-thread/PostThread.tsx:450
+#: src/view/com/post-thread/PostThread.tsx:152
+#: src/view/com/post-thread/PostThread.tsx:164
msgid "Post not found"
msgstr "Publicación no encontrada"
-#: src/view/screens/Profile.tsx:180
+#: src/components/TagMenu/index.tsx:253
+msgid "posts"
+msgstr ""
+
+#: src/view/screens/Profile.tsx:190
msgid "Posts"
msgstr "Publicaciones"
+#: src/components/dialogs/MutedWords.tsx:89
+msgid "Posts can be muted based on their text, their tags, or both."
+msgstr ""
+
#: src/view/com/posts/FeedErrorMessage.tsx:64
msgid "Posts hidden"
msgstr ""
-#: src/view/com/modals/LinkWarning.tsx:46
+#: src/view/com/modals/LinkWarning.tsx:60
msgid "Potentially Misleading Link"
msgstr "Enlace potencialmente engañoso"
-#: src/view/com/lightbox/Lightbox.web.tsx:135
+#: src/components/forms/HostingProvider.tsx:45
+msgid "Press to change hosting provider"
+msgstr ""
+
+#: src/components/Error.tsx:74
+#: src/components/Lists.tsx:80
+#: src/screens/Signup/index.tsx:186
+msgid "Press to retry"
+msgstr ""
+
+#: src/view/com/lightbox/Lightbox.web.tsx:150
msgid "Previous image"
msgstr "Imagen previa"
@@ -2864,39 +3668,45 @@ msgstr "Lenguajes primarios"
msgid "Prioritize Your Follows"
msgstr "Priorizar los usuarios a los que sigue"
-#: src/view/screens/Settings/index.tsx:632
-#: src/view/shell/desktop/RightNav.tsx:80
+#: src/view/screens/Settings/index.tsx:652
+#: src/view/shell/desktop/RightNav.tsx:72
msgid "Privacy"
msgstr "Privacidad"
-#: src/Navigation.tsx:217
+#: src/Navigation.tsx:231
+#: src/screens/Signup/StepInfo/Policies.tsx:56
#: src/view/screens/PrivacyPolicy.tsx:29
-#: src/view/screens/Settings/index.tsx:891
-#: src/view/shell/Drawer.tsx:262
+#: src/view/screens/Settings/index.tsx:923
+#: src/view/shell/Drawer.tsx:265
msgid "Privacy Policy"
msgstr "Política de privacidad"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:198
+#: src/screens/Login/ForgotPasswordForm.tsx:156
msgid "Processing..."
msgstr "Procesando..."
-#: src/view/shell/bottom-bar/BottomBar.tsx:247
-#: src/view/shell/desktop/LeftNav.tsx:415
+#: src/view/screens/DebugMod.tsx:888
+#: src/view/screens/Profile.tsx:342
+msgid "profile"
+msgstr ""
+
+#: src/view/shell/bottom-bar/BottomBar.tsx:260
+#: src/view/shell/desktop/LeftNav.tsx:419
#: src/view/shell/Drawer.tsx:70
-#: src/view/shell/Drawer.tsx:546
-#: src/view/shell/Drawer.tsx:547
+#: src/view/shell/Drawer.tsx:549
+#: src/view/shell/Drawer.tsx:550
msgid "Profile"
msgstr "Perfil"
-#: src/view/com/modals/EditProfile.tsx:128
+#: src/view/com/modals/EditProfile.tsx:129
msgid "Profile updated"
msgstr ""
-#: src/view/screens/Settings/index.tsx:949
+#: src/view/screens/Settings/index.tsx:981
msgid "Protect your account by verifying your email."
msgstr "Protege tu cuenta verificando tu correo electrónico."
-#: src/screens/Onboarding/StepFinished.tsx:101
+#: src/screens/Onboarding/StepFinished.tsx:105
msgid "Public"
msgstr ""
@@ -2908,15 +3718,15 @@ msgstr "Listas públicas y compartibles de usuarios para silenciar o bloquear en
msgid "Public, shareable lists which can drive feeds."
msgstr "Listas públicas y compartibles que pueden impulsar las noticias."
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish post"
msgstr ""
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish reply"
msgstr ""
-#: src/view/com/modals/Repost.tsx:65
+#: src/view/com/modals/Repost.tsx:66
msgctxt "action"
msgid "Quote post"
msgstr "Citar una publicación"
@@ -2925,7 +3735,7 @@ msgstr "Citar una publicación"
msgid "Quote post"
msgstr "Citar una publicación"
-#: src/view/com/modals/Repost.tsx:70
+#: src/view/com/modals/Repost.tsx:71
msgctxt "action"
msgid "Quote Post"
msgstr "Citar una publicación"
@@ -2934,10 +3744,14 @@ msgstr "Citar una publicación"
msgid "Random (aka \"Poster's Roulette\")"
msgstr ""
-#: src/view/com/modals/EditImage.tsx:236
+#: src/view/com/modals/EditImage.tsx:237
msgid "Ratios"
msgstr "Proporciones"
+#: src/view/screens/Search/Search.tsx:777
+msgid "Recent Searches"
+msgstr ""
+
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116
msgid "Recommended Feeds"
msgstr "Canales de noticias recomendados"
@@ -2946,35 +3760,50 @@ msgstr "Canales de noticias recomendados"
msgid "Recommended Users"
msgstr "Usuarios recomendados"
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/components/dialogs/MutedWords.tsx:286
+#: src/view/com/feeds/FeedSourceCard.tsx:283
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/SelfLabel.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/com/util/UserAvatar.tsx:285
-#: src/view/com/util/UserBanner.tsx:91
+#: src/view/com/posts/FeedErrorMessage.tsx:204
msgid "Remove"
msgstr "Eliminar"
-#: src/view/com/feeds/FeedSourceCard.tsx:106
-msgid "Remove {0} from my feeds?"
-msgstr "¿Eliminar {0} de mis canales de noticias?"
+#: src/view/com/feeds/FeedSourceCard.tsx:108
+#~ msgid "Remove {0} from my feeds?"
+#~ msgstr "¿Eliminar {0} de mis canales de noticias?"
#: src/view/com/util/AccountDropdownBtn.tsx:22
msgid "Remove account"
msgstr "Eliminar la cuenta"
-#: src/view/com/posts/FeedErrorMessage.tsx:131
-#: src/view/com/posts/FeedErrorMessage.tsx:166
+#: src/view/com/util/UserAvatar.tsx:358
+msgid "Remove Avatar"
+msgstr ""
+
+#: src/view/com/util/UserBanner.tsx:148
+msgid "Remove Banner"
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:160
msgid "Remove feed"
msgstr "Eliminar el canal de noticias"
-#: src/view/com/feeds/FeedSourceCard.tsx:105
-#: src/view/com/feeds/FeedSourceCard.tsx:167
-#: src/view/com/feeds/FeedSourceCard.tsx:172
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/posts/FeedErrorMessage.tsx:201
+msgid "Remove feed?"
+msgstr ""
+
+#: src/view/com/feeds/FeedSourceCard.tsx:173
+#: src/view/com/feeds/FeedSourceCard.tsx:233
+#: src/view/screens/ProfileFeed.tsx:335
+#: src/view/screens/ProfileFeed.tsx:341
msgid "Remove from my feeds"
msgstr "Eliminar de mis canales de noticias"
+#: src/view/com/feeds/FeedSourceCard.tsx:278
+msgid "Remove from my feeds?"
+msgstr ""
+
#: src/view/com/composer/photos/Gallery.tsx:167
msgid "Remove image"
msgstr "Eliminar la imagen"
@@ -2983,33 +3812,44 @@ msgstr "Eliminar la imagen"
msgid "Remove image preview"
msgstr "Eliminar la vista previa de la imagen"
-#: src/view/com/modals/Repost.tsx:47
+#: src/components/dialogs/MutedWords.tsx:329
+msgid "Remove mute word from your list"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:48
msgid "Remove repost"
msgstr ""
-#: src/view/com/feeds/FeedSourceCard.tsx:173
-msgid "Remove this feed from my feeds?"
-msgstr "¿Eliminar este canal de mis canales de noticias?"
+#: src/view/com/feeds/FeedSourceCard.tsx:175
+#~ msgid "Remove this feed from my feeds?"
+#~ msgstr "¿Eliminar este canal de mis canales de noticias?"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:202
+msgid "Remove this feed from your saved feeds"
+msgstr ""
#: src/view/com/posts/FeedErrorMessage.tsx:132
-msgid "Remove this feed from your saved feeds?"
-msgstr "¿Eliminar este canal de mis canales de noticias guardados?"
+#~ msgid "Remove this feed from your saved feeds?"
+#~ msgstr "¿Eliminar este canal de mis canales de noticias guardados?"
#: src/view/com/modals/ListAddRemoveUsers.tsx:199
#: src/view/com/modals/UserAddRemoveLists.tsx:152
msgid "Removed from list"
msgstr "Eliminar de la lista"
-#: src/view/com/feeds/FeedSourceCard.tsx:111
-#: src/view/com/feeds/FeedSourceCard.tsx:178
+#: src/view/com/feeds/FeedSourceCard.tsx:121
msgid "Removed from my feeds"
msgstr ""
+#: src/view/screens/ProfileFeed.tsx:209
+msgid "Removed from your feeds"
+msgstr ""
+
#: src/view/com/composer/ExternalEmbed.tsx:71
msgid "Removes default thumbnail from {0}"
msgstr ""
-#: src/view/screens/Profile.tsx:181
+#: src/view/screens/Profile.tsx:191
msgid "Replies"
msgstr "Respuestas"
@@ -3017,45 +3857,71 @@ msgstr "Respuestas"
msgid "Replies to this thread are disabled"
msgstr "Las respuestas a este hilo están desactivadas"
-#: src/view/com/composer/Composer.tsx:348
+#: src/view/com/composer/Composer.tsx:365
msgctxt "action"
msgid "Reply"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:144
+#: src/view/screens/PreferencesFollowingFeed.tsx:144
msgid "Reply Filters"
msgstr "Filtros de respuestas"
#: src/view/com/post/Post.tsx:166
-#: src/view/com/posts/FeedItem.tsx:287
+#: src/view/com/posts/FeedItem.tsx:280
msgctxt "description"
msgid "Reply to <0/>"
msgstr ""
#: src/view/com/modals/report/Modal.tsx:166
-msgid "Report {collectionName}"
-msgstr "Informe de {collectionName}"
+#~ msgid "Report {collectionName}"
+#~ msgstr "Informe de {collectionName}"
-#: src/view/com/profile/ProfileHeader.tsx:360
+#: src/view/com/profile/ProfileMenu.tsx:319
+#: src/view/com/profile/ProfileMenu.tsx:322
msgid "Report Account"
msgstr "Informe de la cuenta"
-#: src/view/screens/ProfileFeed.tsx:292
+#: src/components/ReportDialog/index.tsx:49
+msgid "Report dialog"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:352
+#: src/view/screens/ProfileFeed.tsx:354
msgid "Report feed"
msgstr "Informe del canal de noticias"
-#: src/view/screens/ProfileList.tsx:458
+#: src/view/screens/ProfileList.tsx:429
msgid "Report List"
msgstr "Informe de la lista"
-#: src/view/com/modals/report/SendReportButton.tsx:37
-#: src/view/com/util/forms/PostDropdownBtn.tsx:210
+#: src/view/com/util/forms/PostDropdownBtn.tsx:292
+#: src/view/com/util/forms/PostDropdownBtn.tsx:294
msgid "Report post"
msgstr "Informe de la publicación"
-#: src/view/com/modals/Repost.tsx:43
-#: src/view/com/modals/Repost.tsx:48
-#: src/view/com/modals/Repost.tsx:53
+#: src/components/ReportDialog/SelectReportOptionView.tsx:42
+msgid "Report this content"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:55
+msgid "Report this feed"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:52
+msgid "Report this list"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:49
+msgid "Report this post"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:46
+msgid "Report this user"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:44
+#: src/view/com/modals/Repost.tsx:49
+#: src/view/com/modals/Repost.tsx:54
#: src/view/com/util/post-ctrls/RepostButton.tsx:61
msgctxt "action"
msgid "Repost"
@@ -3074,15 +3940,15 @@ msgstr "Volver a publicar o citar publicación"
msgid "Reposted By"
msgstr "Vuelto a publicar por"
-#: src/view/com/posts/FeedItem.tsx:207
+#: src/view/com/posts/FeedItem.tsx:197
msgid "Reposted by {0}"
msgstr "Vuelto a publicar por {0}"
-#: src/view/com/posts/FeedItem.tsx:224
+#: src/view/com/posts/FeedItem.tsx:214
msgid "Reposted by <0/>"
msgstr "Vuelto a publicar por <0/>"
-#: src/view/com/notifications/FeedItem.tsx:162
+#: src/view/com/notifications/FeedItem.tsx:166
msgid "reposted your post"
msgstr ""
@@ -3096,60 +3962,61 @@ msgid "Request Change"
msgstr "Solicitar un cambio"
#: src/view/com/auth/create/Step2.tsx:219
-msgid "Request code"
-msgstr ""
+#~ msgid "Request code"
+#~ msgstr ""
-#: src/view/com/modals/ChangePassword.tsx:239
#: src/view/com/modals/ChangePassword.tsx:241
+#: src/view/com/modals/ChangePassword.tsx:243
msgid "Request Code"
msgstr ""
-#: src/view/screens/Settings/index.tsx:456
+#: src/view/screens/Settings/index.tsx:475
msgid "Require alt text before posting"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:149
+#: src/screens/Signup/StepInfo/index.tsx:69
msgid "Required for this provider"
msgstr "Requerido para este proveedor"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:124
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:136
+#: src/view/com/modals/ChangePassword.tsx:185
msgid "Reset code"
msgstr "Restablecer el código"
-#: src/view/com/modals/ChangePassword.tsx:190
+#: src/view/com/modals/ChangePassword.tsx:192
msgid "Reset Code"
msgstr ""
#: src/view/screens/Settings/index.tsx:824
-msgid "Reset onboarding"
-msgstr ""
+#~ msgid "Reset onboarding"
+#~ msgstr ""
-#: src/view/screens/Settings/index.tsx:827
+#: src/view/screens/Settings/index.tsx:858
+#: src/view/screens/Settings/index.tsx:861
msgid "Reset onboarding state"
msgstr "Restablecer el estado de incorporación"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:104
+#: src/screens/Login/ForgotPasswordForm.tsx:86
msgid "Reset password"
msgstr "Restablecer la contraseña"
#: src/view/screens/Settings/index.tsx:814
-msgid "Reset preferences"
-msgstr ""
+#~ msgid "Reset preferences"
+#~ msgstr ""
-#: src/view/screens/Settings/index.tsx:817
+#: src/view/screens/Settings/index.tsx:848
+#: src/view/screens/Settings/index.tsx:851
msgid "Reset preferences state"
msgstr "Restablecer el estado de preferencias"
-#: src/view/screens/Settings/index.tsx:825
+#: src/view/screens/Settings/index.tsx:859
msgid "Resets the onboarding state"
msgstr "Restablece el estado de incorporación"
-#: src/view/screens/Settings/index.tsx:815
+#: src/view/screens/Settings/index.tsx:849
msgid "Resets the preferences state"
msgstr "Restablecer el estado de preferencias"
-#: src/view/com/auth/login/LoginForm.tsx:269
+#: src/screens/Login/LoginForm.tsx:235
msgid "Retries login"
msgstr ""
@@ -3158,105 +4025,150 @@ msgstr ""
msgid "Retries the last action, which errored out"
msgstr ""
-#: src/screens/Onboarding/StepInterests/index.tsx:221
-#: src/screens/Onboarding/StepInterests/index.tsx:224
-#: src/view/com/auth/create/CreateAccount.tsx:170
-#: src/view/com/auth/create/CreateAccount.tsx:175
-#: src/view/com/auth/create/Step2.tsx:255
-#: src/view/com/auth/login/LoginForm.tsx:268
-#: src/view/com/auth/login/LoginForm.tsx:271
+#: src/components/Error.tsx:79
+#: src/components/Lists.tsx:91
+#: src/screens/Login/LoginForm.tsx:234
+#: src/screens/Login/LoginForm.tsx:241
+#: src/screens/Onboarding/StepInterests/index.tsx:225
+#: src/screens/Onboarding/StepInterests/index.tsx:228
+#: src/screens/Signup/index.tsx:193
#: src/view/com/util/error/ErrorMessage.tsx:55
#: src/view/com/util/error/ErrorScreen.tsx:72
msgid "Retry"
msgstr "Volver a intentar"
#: src/view/com/auth/create/Step2.tsx:247
-msgid "Retry."
-msgstr ""
+#~ msgid "Retry."
+#~ msgstr ""
-#: src/view/screens/ProfileList.tsx:898
+#: src/components/Error.tsx:86
+#: src/view/screens/ProfileList.tsx:917
msgid "Return to previous page"
msgstr ""
-#: src/view/shell/desktop/RightNav.tsx:55
-msgid "SANDBOX. Posts and accounts are not permanent."
+#: src/view/screens/NotFound.tsx:59
+msgid "Returns to home page"
msgstr ""
-#: src/view/com/lightbox/Lightbox.tsx:132
-#: src/view/com/modals/CreateOrEditList.tsx:345
-msgctxt "action"
-msgid "Save"
+#: src/view/screens/NotFound.tsx:58
+#: src/view/screens/ProfileFeed.tsx:113
+msgid "Returns to previous page"
msgstr ""
-#: src/view/com/modals/BirthDateSettings.tsx:94
-#: src/view/com/modals/BirthDateSettings.tsx:97
-#: src/view/com/modals/ChangeHandle.tsx:173
-#: src/view/com/modals/CreateOrEditList.tsx:337
-#: src/view/com/modals/EditProfile.tsx:224
-#: src/view/screens/ProfileFeed.tsx:345
+#: src/view/shell/desktop/RightNav.tsx:55
+#~ msgid "SANDBOX. Posts and accounts are not permanent."
+#~ msgstr ""
+
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/view/com/modals/ChangeHandle.tsx:174
+#: src/view/com/modals/CreateOrEditList.tsx:338
+#: src/view/com/modals/EditProfile.tsx:225
msgid "Save"
msgstr "Guardar"
-#: src/view/com/modals/AltImage.tsx:130
+#: src/view/com/lightbox/Lightbox.tsx:132
+#: src/view/com/modals/CreateOrEditList.tsx:346
+msgctxt "action"
+msgid "Save"
+msgstr ""
+
+#: src/view/com/modals/AltImage.tsx:131
msgid "Save alt text"
msgstr "Guardar el texto alt"
-#: src/view/com/modals/EditProfile.tsx:232
+#: src/components/dialogs/BirthDateSettings.tsx:119
+msgid "Save birthday"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:233
msgid "Save Changes"
msgstr "Guardar cambios"
-#: src/view/com/modals/ChangeHandle.tsx:170
+#: src/view/com/modals/ChangeHandle.tsx:171
msgid "Save handle change"
msgstr "Guardar el cambio de identificador"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:144
+#: src/view/com/modals/crop-image/CropImage.web.tsx:145
msgid "Save image crop"
msgstr "Guardar el recorte de imagen"
+#: src/view/screens/ProfileFeed.tsx:336
+#: src/view/screens/ProfileFeed.tsx:342
+msgid "Save to my feeds"
+msgstr ""
+
#: src/view/screens/SavedFeeds.tsx:122
msgid "Saved Feeds"
msgstr "Guardar canales de noticias"
-#: src/view/com/modals/EditProfile.tsx:225
+#: src/view/com/lightbox/Lightbox.tsx:81
+msgid "Saved to your camera roll."
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:213
+msgid "Saved to your feeds"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:226
msgid "Saves any changes to your profile"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:171
+#: src/view/com/modals/ChangeHandle.tsx:172
msgid "Saves handle change to {handle}"
msgstr ""
+#: src/view/com/modals/crop-image/CropImage.web.tsx:146
+msgid "Saves image crop settings"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:36
msgid "Science"
msgstr ""
-#: src/view/screens/ProfileList.tsx:854
+#: src/view/screens/ProfileList.tsx:873
msgid "Scroll to top"
msgstr ""
-#: src/Navigation.tsx:437
-#: src/view/com/auth/LoggedOut.tsx:122
+#: src/Navigation.tsx:459
+#: src/view/com/auth/LoggedOut.tsx:123
#: src/view/com/modals/ListAddRemoveUsers.tsx:75
#: src/view/com/util/forms/SearchInput.tsx:67
#: src/view/com/util/forms/SearchInput.tsx:79
-#: src/view/screens/Search/Search.tsx:418
-#: src/view/screens/Search/Search.tsx:645
-#: src/view/screens/Search/Search.tsx:663
-#: src/view/shell/bottom-bar/BottomBar.tsx:159
-#: src/view/shell/desktop/LeftNav.tsx:324
-#: src/view/shell/desktop/Search.tsx:214
-#: src/view/shell/desktop/Search.tsx:223
-#: src/view/shell/Drawer.tsx:362
-#: src/view/shell/Drawer.tsx:363
+#: src/view/screens/Search/Search.tsx:421
+#: src/view/screens/Search/Search.tsx:670
+#: src/view/screens/Search/Search.tsx:688
+#: src/view/shell/bottom-bar/BottomBar.tsx:169
+#: src/view/shell/desktop/LeftNav.tsx:328
+#: src/view/shell/desktop/Search.tsx:215
+#: src/view/shell/desktop/Search.tsx:224
+#: src/view/shell/Drawer.tsx:365
+#: src/view/shell/Drawer.tsx:366
msgid "Search"
msgstr "Buscar"
-#: src/view/screens/Search/Search.tsx:712
-#: src/view/shell/desktop/Search.tsx:255
+#: src/view/screens/Search/Search.tsx:737
+#: src/view/shell/desktop/Search.tsx:256
msgid "Search for \"{query}\""
msgstr ""
-#: src/view/com/auth/LoggedOut.tsx:104
+#: src/components/TagMenu/index.tsx:145
+msgid "Search for all posts by @{authorHandle} with tag {displayTag}"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:145
+#~ msgid "Search for all posts by @{authorHandle} with tag {tag}"
+#~ msgstr ""
+
+#: src/components/TagMenu/index.tsx:94
+msgid "Search for all posts with tag {displayTag}"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:90
+#~ msgid "Search for all posts with tag {tag}"
+#~ msgstr ""
+
#: src/view/com/auth/LoggedOut.tsx:105
+#: src/view/com/auth/LoggedOut.tsx:106
#: src/view/com/modals/ListAddRemoveUsers.tsx:70
msgid "Search for users"
msgstr "Buscar usuarios"
@@ -3265,11 +4177,35 @@ msgstr "Buscar usuarios"
msgid "Security Step Required"
msgstr "Se requiere un paso de seguridad"
+#: src/components/TagMenu/index.web.tsx:66
+msgid "See {truncatedTag} posts"
+msgstr ""
+
+#: src/components/TagMenu/index.web.tsx:83
+msgid "See {truncatedTag} posts by user"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:128
+msgid "See <0>{displayTag}0> posts"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:187
+msgid "See <0>{displayTag}0> posts by this user"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:128
+#~ msgid "See <0>{tag}0> posts"
+#~ msgstr ""
+
+#: src/components/TagMenu/index.tsx:189
+#~ msgid "See <0>{tag}0> posts by this user"
+#~ msgstr ""
+
#: src/view/screens/SavedFeeds.tsx:163
msgid "See this guide"
msgstr ""
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:39
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:40
msgid "See what's next"
msgstr "Ver lo que sigue"
@@ -3277,27 +4213,43 @@ msgstr "Ver lo que sigue"
msgid "Select {item}"
msgstr ""
+#: src/screens/Login/ChooseAccountForm.tsx:61
+msgid "Select account"
+msgstr ""
+
#: src/view/com/modals/ServerInput.tsx:75
#~ msgid "Select Bluesky Social"
#~ msgstr "Seleccionar Bluesky Social"
-#: src/view/com/auth/login/Login.tsx:117
+#: src/screens/Login/index.tsx:120
msgid "Select from an existing account"
msgstr "Selecciona de una cuenta existente"
+#: src/view/screens/LanguageSettings.tsx:299
+msgid "Select languages"
+msgstr ""
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:30
+msgid "Select moderator"
+msgstr ""
+
#: src/view/com/util/Selector.tsx:107
msgid "Select option {i} of {numItems}"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:99
-#: src/view/com/auth/login/LoginForm.tsx:150
-msgid "Select service"
-msgstr "Selecciona el servicio"
+#: src/view/com/auth/create/Step1.tsx:96
+#: src/view/com/auth/login/LoginForm.tsx:153
+#~ msgid "Select service"
+#~ msgstr "Selecciona el servicio"
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:52
msgid "Select some accounts below to follow"
msgstr ""
+#: src/components/ReportDialog/SubmitView.tsx:135
+msgid "Select the moderation service(s) to report to"
+msgstr ""
+
#: src/view/com/auth/server-input/index.tsx:82
msgid "Select the service that hosts your data."
msgstr ""
@@ -3306,11 +4258,11 @@ msgstr ""
#~ msgid "Select the types of content that you want to see (or not see), and we'll handle the rest."
#~ msgstr ""
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:90
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:100
msgid "Select topical feeds to follow from the list below"
msgstr ""
-#: src/screens/Onboarding/StepModeration/index.tsx:75
+#: src/screens/Onboarding/StepModeration/index.tsx:63
msgid "Select what you want to see (or not see), and we’ll handle the rest."
msgstr ""
@@ -3319,26 +4271,34 @@ msgid "Select which languages you want your subscribed feeds to include. If none
msgstr "Selecciona qué idiomas quieres que incluyan tus canales de noticias suscritos. Si no seleccionas ninguno, se mostrarán todos los idiomas."
#: src/view/screens/LanguageSettings.tsx:98
-msgid "Select your app language for the default text to display in the app"
-msgstr "Selecciona el idioma de tu app para el texto que se mostrará por defecto en la app"
+#~ msgid "Select your app language for the default text to display in the app"
+#~ msgstr "Selecciona el idioma de tu app para el texto que se mostrará por defecto en la app"
+
+#: src/view/screens/LanguageSettings.tsx:98
+msgid "Select your app language for the default text to display in the app."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/index.tsx:133
+msgid "Select your date of birth"
+msgstr ""
-#: src/screens/Onboarding/StepInterests/index.tsx:196
+#: src/screens/Onboarding/StepInterests/index.tsx:200
msgid "Select your interests from the options below"
msgstr ""
#: src/view/com/auth/create/Step2.tsx:155
-msgid "Select your phone's country"
-msgstr ""
+#~ msgid "Select your phone's country"
+#~ msgstr ""
#: src/view/screens/LanguageSettings.tsx:190
msgid "Select your preferred language for translations in your feed."
msgstr "Selecciona el idioma que prefieras para las traducciones de tus noticias."
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:116
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:117
msgid "Select your primary algorithmic feeds"
msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:142
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:133
msgid "Select your secondary algorithmic feeds"
msgstr ""
@@ -3347,79 +4307,92 @@ msgstr ""
msgid "Send Confirmation Email"
msgstr "Enviar el mensaje de confirmación"
-#: src/view/com/modals/DeleteAccount.tsx:131
+#: src/view/com/modals/DeleteAccount.tsx:130
msgid "Send email"
msgstr "Enviar el mensaje"
-#: src/view/com/modals/DeleteAccount.tsx:144
+#: src/view/com/modals/DeleteAccount.tsx:143
msgctxt "action"
msgid "Send Email"
msgstr "Enviar el mensaje"
-#: src/view/shell/Drawer.tsx:295
-#: src/view/shell/Drawer.tsx:316
+#: src/view/shell/Drawer.tsx:298
+#: src/view/shell/Drawer.tsx:319
msgid "Send feedback"
msgstr "Enviar comentarios"
+#: src/components/ReportDialog/SubmitView.tsx:214
+#: src/components/ReportDialog/SubmitView.tsx:218
+msgid "Send report"
+msgstr ""
+
#: src/view/com/modals/report/SendReportButton.tsx:45
-msgid "Send Report"
-msgstr "Enviar el informe"
+#~ msgid "Send Report"
+#~ msgstr "Enviar el informe"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:44
+msgid "Send report to {0}"
+msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:133
+#: src/view/com/modals/DeleteAccount.tsx:132
msgid "Sends email with confirmation code for account deletion"
msgstr ""
-#: src/view/com/auth/server-input/index.tsx:110
+#: src/view/com/auth/server-input/index.tsx:114
msgid "Server address"
msgstr ""
#: src/view/com/modals/ContentFilteringSettings.tsx:311
-msgid "Set {value} for {labelGroup} content moderation policy"
-msgstr ""
+#~ msgid "Set {value} for {labelGroup} content moderation policy"
+#~ msgstr ""
#: src/view/com/modals/ContentFilteringSettings.tsx:160
#: src/view/com/modals/ContentFilteringSettings.tsx:179
-msgctxt "action"
-msgid "Set Age"
+#~ msgctxt "action"
+#~ msgid "Set Age"
+#~ msgstr ""
+
+#: src/screens/Moderation/index.tsx:304
+msgid "Set birthdate"
msgstr ""
#: src/view/screens/Settings/index.tsx:488
-msgid "Set color theme to dark"
-msgstr ""
+#~ msgid "Set color theme to dark"
+#~ msgstr ""
#: src/view/screens/Settings/index.tsx:481
-msgid "Set color theme to light"
-msgstr ""
+#~ msgid "Set color theme to light"
+#~ msgstr ""
#: src/view/screens/Settings/index.tsx:475
-msgid "Set color theme to system setting"
-msgstr ""
+#~ msgid "Set color theme to system setting"
+#~ msgstr ""
#: src/view/screens/Settings/index.tsx:514
-msgid "Set dark theme to the dark theme"
-msgstr ""
+#~ msgid "Set dark theme to the dark theme"
+#~ msgstr ""
#: src/view/screens/Settings/index.tsx:507
-msgid "Set dark theme to the dim theme"
-msgstr ""
+#~ msgid "Set dark theme to the dim theme"
+#~ msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:104
+#: src/screens/Login/SetNewPasswordForm.tsx:102
msgid "Set new password"
msgstr "Establecer la contraseña nueva"
-#: src/view/com/auth/create/Step1.tsx:221
-msgid "Set password"
-msgstr ""
+#: src/view/com/auth/create/Step1.tsx:202
+#~ msgid "Set password"
+#~ msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:225
+#: src/view/screens/PreferencesFollowingFeed.tsx:225
msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible."
msgstr "Establece este ajuste en \"No\" para ocultar todas las publicaciones de citas de tus noticias. Las repeticiones seguirán siendo visibles."
-#: src/view/screens/PreferencesHomeFeed.tsx:122
+#: src/view/screens/PreferencesFollowingFeed.tsx:122
msgid "Set this setting to \"No\" to hide all replies from your feed."
msgstr "Establece este ajuste en \"No\" para ocultar todas las respuestas de tus noticias."
-#: src/view/screens/PreferencesHomeFeed.tsx:191
+#: src/view/screens/PreferencesFollowingFeed.tsx:191
msgid "Set this setting to \"No\" to hide all reposts from your feed."
msgstr "Establece este ajuste en \"No\" para ocultar todas las veces que se han vuelto a publicar desde tus noticias."
@@ -3428,35 +4401,71 @@ msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is a
msgstr "Establece este ajuste en \"Sí\" para mostrar las respuestas en una vista de hilos. Se trata de una función experimental."
#: src/view/screens/PreferencesHomeFeed.tsx:261
-msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
-msgstr "Establece este ajuste en \"Sí\" para mostrar muestras de tus noticias guardadas en tu siguiente canal de noticias. Se trata de una función experimental."
+#~ msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
+#~ msgstr "Establece este ajuste en \"Sí\" para mostrar muestras de tus noticias guardadas en tu siguiente canal de noticias. Se trata de una función experimental."
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:261
+msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your Following feed. This is an experimental feature."
+msgstr ""
-#: src/screens/Onboarding/Layout.tsx:50
+#: src/screens/Onboarding/Layout.tsx:48
msgid "Set up your account"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:266
+#: src/view/com/modals/ChangeHandle.tsx:267
msgid "Sets Bluesky username"
msgstr ""
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:157
+#: src/view/screens/Settings/index.tsx:507
+msgid "Sets color theme to dark"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:500
+msgid "Sets color theme to light"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:494
+msgid "Sets color theme to system setting"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:533
+msgid "Sets dark theme to the dark theme"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:526
+msgid "Sets dark theme to the dim theme"
+msgstr ""
+
+#: src/screens/Login/ForgotPasswordForm.tsx:113
msgid "Sets email for password reset"
msgstr ""
#: src/view/com/auth/login/ForgotPasswordForm.tsx:122
-msgid "Sets hosting provider for password reset"
+#~ msgid "Sets hosting provider for password reset"
+#~ msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:124
+msgid "Sets image aspect ratio to square"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:114
+msgid "Sets image aspect ratio to tall"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:100
-#: src/view/com/auth/login/LoginForm.tsx:151
-msgid "Sets server for the Bluesky client"
+#: src/view/com/modals/crop-image/CropImage.web.tsx:104
+msgid "Sets image aspect ratio to wide"
msgstr ""
-#: src/Navigation.tsx:135
-#: src/view/screens/Settings/index.tsx:294
-#: src/view/shell/desktop/LeftNav.tsx:433
-#: src/view/shell/Drawer.tsx:567
-#: src/view/shell/Drawer.tsx:568
+#: src/view/com/auth/create/Step1.tsx:97
+#: src/view/com/auth/login/LoginForm.tsx:154
+#~ msgid "Sets server for the Bluesky client"
+#~ msgstr ""
+
+#: src/Navigation.tsx:139
+#: src/view/screens/Settings/index.tsx:313
+#: src/view/shell/desktop/LeftNav.tsx:437
+#: src/view/shell/Drawer.tsx:570
+#: src/view/shell/Drawer.tsx:571
msgid "Settings"
msgstr "Configuraciones"
@@ -3464,72 +4473,105 @@ msgstr "Configuraciones"
msgid "Sexual activity or erotic nudity."
msgstr "Actividad sexual o desnudez erótica."
+#: src/lib/moderation/useGlobalLabelStrings.ts:38
+msgid "Sexually Suggestive"
+msgstr ""
+
#: src/view/com/lightbox/Lightbox.tsx:141
msgctxt "action"
msgid "Share"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:294
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
-#: src/view/screens/ProfileList.tsx:417
+#: src/view/com/profile/ProfileMenu.tsx:215
+#: src/view/com/profile/ProfileMenu.tsx:224
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:235
+#: src/view/screens/ProfileList.tsx:388
msgid "Share"
msgstr "Compartir"
-#: src/view/screens/ProfileFeed.tsx:304
+#: src/view/com/profile/ProfileMenu.tsx:373
+#: src/view/com/util/forms/PostDropdownBtn.tsx:347
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:251
+msgid "Share anyway"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:362
+#: src/view/screens/ProfileFeed.tsx:364
msgid "Share feed"
msgstr "Compartir las noticias"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:43
-#: src/view/com/modals/ContentFilteringSettings.tsx:266
-#: src/view/com/util/moderation/ContentHider.tsx:107
-#: src/view/com/util/moderation/PostHider.tsx:108
-#: src/view/screens/Settings/index.tsx:344
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
+msgid "Share Link"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:92
+msgid "Shares the linked website"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:136
+#: src/components/moderation/PostHider.tsx:107
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:54
+#: src/view/screens/Settings/index.tsx:363
msgid "Show"
msgstr "Mostrar"
-#: src/view/screens/PreferencesHomeFeed.tsx:68
+#: src/view/screens/PreferencesFollowingFeed.tsx:68
msgid "Show all replies"
msgstr ""
-#: src/view/com/util/moderation/ScreenHider.tsx:132
+#: src/components/moderation/ScreenHider.tsx:169
+#: src/components/moderation/ScreenHider.tsx:172
msgid "Show anyway"
msgstr "Mostrar de todas maneras"
-#: src/view/com/modals/EmbedConsent.tsx:87
-msgid "Show embeds from {0}"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:27
+#: src/lib/moderation/useLabelBehaviorDescription.ts:63
+msgid "Show badge"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:458
+#: src/lib/moderation/useLabelBehaviorDescription.ts:61
+msgid "Show badge and filter from feeds"
+msgstr ""
+
+#: src/view/com/modals/EmbedConsent.tsx:87
+#~ msgid "Show embeds from {0}"
+#~ msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:200
msgid "Show follows similar to {0}"
msgstr ""
-#: src/view/com/post-thread/PostThreadItem.tsx:539
-#: src/view/com/post/Post.tsx:197
-#: src/view/com/posts/FeedItem.tsx:363
+#: src/view/com/post-thread/PostThreadItem.tsx:507
+#: src/view/com/post/Post.tsx:201
+#: src/view/com/posts/FeedItem.tsx:355
msgid "Show More"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:258
+#: src/view/screens/PreferencesFollowingFeed.tsx:258
msgid "Show Posts from My Feeds"
msgstr "Mostrar publicaciones de mis noticias"
-#: src/view/screens/PreferencesHomeFeed.tsx:222
+#: src/view/screens/PreferencesFollowingFeed.tsx:222
msgid "Show Quote Posts"
msgstr "Mostrar publicaciones de citas"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:118
+#: src/screens/Onboarding/StepFollowingFeed.tsx:119
msgid "Show quote-posts in Following feed"
msgstr ""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:134
+#: src/screens/Onboarding/StepFollowingFeed.tsx:135
msgid "Show quotes in Following"
msgstr ""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:94
+#: src/screens/Onboarding/StepFollowingFeed.tsx:95
msgid "Show re-posts in Following feed"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:119
+#: src/view/screens/PreferencesFollowingFeed.tsx:119
msgid "Show Replies"
msgstr "Mostrar respuestas"
@@ -3537,87 +4579,98 @@ msgstr "Mostrar respuestas"
msgid "Show replies by people you follow before all other replies."
msgstr "Mostrar las respuestas de las personas a quienes sigues antes que el resto de respuestas."
-#: src/screens/Onboarding/StepFollowingFeed.tsx:86
+#: src/screens/Onboarding/StepFollowingFeed.tsx:87
msgid "Show replies in Following"
msgstr ""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:70
+#: src/screens/Onboarding/StepFollowingFeed.tsx:71
msgid "Show replies in Following feed"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:70
+#: src/view/screens/PreferencesFollowingFeed.tsx:70
msgid "Show replies with at least {value} {0}"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:188
+#: src/view/screens/PreferencesFollowingFeed.tsx:188
msgid "Show Reposts"
msgstr "Mostrar publicaciones que se han publicado nuevamente"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:110
+#: src/screens/Onboarding/StepFollowingFeed.tsx:111
msgid "Show reposts in Following"
msgstr ""
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:68
+#: src/components/moderation/PostHider.tsx:64
msgid "Show the content"
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:346
+#: src/view/com/notifications/FeedItem.tsx:351
msgid "Show users"
msgstr "Mostrar usuarios"
-#: src/view/com/profile/ProfileHeader.tsx:461
-msgid "Shows a list of users similar to this user."
+#: src/lib/moderation/useLabelBehaviorDescription.ts:58
+msgid "Show warning"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:56
+msgid "Show warning and filter from feeds"
msgstr ""
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:124
-#: src/view/com/profile/ProfileHeader.tsx:505
+#: src/view/com/profile/ProfileHeader.tsx:462
+#~ msgid "Shows a list of users similar to this user."
+#~ msgstr ""
+
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:130
msgid "Shows posts from {0} in your feed"
msgstr ""
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:70
-#: src/view/com/auth/login/Login.tsx:98
-#: src/view/com/auth/SplashScreen.tsx:54
-#: src/view/shell/bottom-bar/BottomBar.tsx:285
-#: src/view/shell/bottom-bar/BottomBar.tsx:286
-#: src/view/shell/bottom-bar/BottomBar.tsx:288
+#: src/screens/Login/index.tsx:100
+#: src/screens/Login/index.tsx:119
+#: src/screens/Login/LoginForm.tsx:131
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:73
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:83
+#: src/view/com/auth/SplashScreen.tsx:81
+#: src/view/com/auth/SplashScreen.tsx:90
+#: src/view/com/auth/SplashScreen.web.tsx:110
+#: src/view/com/auth/SplashScreen.web.tsx:119
+#: src/view/shell/bottom-bar/BottomBar.tsx:300
+#: src/view/shell/bottom-bar/BottomBar.tsx:301
+#: src/view/shell/bottom-bar/BottomBar.tsx:303
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:178
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:179
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:181
#: src/view/shell/NavSignupCard.tsx:58
#: src/view/shell/NavSignupCard.tsx:59
+#: src/view/shell/NavSignupCard.tsx:61
msgid "Sign in"
msgstr "Iniciar sesión"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:78
-#: src/view/com/auth/SplashScreen.tsx:57
-#: src/view/com/auth/SplashScreen.web.tsx:87
-msgid "Sign In"
-msgstr "Iniciar sesión"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:82
+#: src/view/com/auth/SplashScreen.tsx:86
+#: src/view/com/auth/SplashScreen.web.tsx:91
+#~ msgid "Sign In"
+#~ msgstr "Iniciar sesión"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:44
+#: src/components/AccountList.tsx:109
msgid "Sign in as {0}"
msgstr "Iniciar sesión como {0}"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:118
-#: src/view/com/auth/login/Login.tsx:116
+#: src/screens/Login/ChooseAccountForm.tsx:64
msgid "Sign in as..."
msgstr "Iniciar sesión como ..."
-#: src/view/com/auth/login/LoginForm.tsx:137
-msgid "Sign into"
-msgstr "Iniciar sesión en"
+#: src/view/com/auth/login/LoginForm.tsx:140
+#~ msgid "Sign into"
+#~ msgstr "Iniciar sesión en"
-#: src/view/com/modals/SwitchAccount.tsx:64
-#: src/view/com/modals/SwitchAccount.tsx:69
-#: src/view/screens/Settings/index.tsx:100
-#: src/view/screens/Settings/index.tsx:103
+#: src/view/screens/Settings/index.tsx:107
+#: src/view/screens/Settings/index.tsx:110
msgid "Sign out"
msgstr "Cerrar sesión"
-#: src/view/shell/bottom-bar/BottomBar.tsx:275
-#: src/view/shell/bottom-bar/BottomBar.tsx:276
-#: src/view/shell/bottom-bar/BottomBar.tsx:278
+#: src/view/shell/bottom-bar/BottomBar.tsx:290
+#: src/view/shell/bottom-bar/BottomBar.tsx:291
+#: src/view/shell/bottom-bar/BottomBar.tsx:293
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:168
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:169
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:171
@@ -3631,35 +4684,36 @@ msgstr "Inscribirse"
msgid "Sign up or sign in to join the conversation"
msgstr "Regístrate o inicia sesión para unirte a la conversación"
-#: src/view/com/util/moderation/ScreenHider.tsx:76
+#: src/components/moderation/ScreenHider.tsx:97
+#: src/lib/moderation/useGlobalLabelStrings.ts:28
msgid "Sign-in Required"
msgstr "Se requiere iniciar sesión"
-#: src/view/screens/Settings/index.tsx:355
+#: src/view/screens/Settings/index.tsx:374
msgid "Signed in as"
msgstr "Se inició sesión como"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:103
+#: src/screens/Login/ChooseAccountForm.tsx:48
msgid "Signed in as @{0}"
msgstr ""
-#: src/view/com/modals/SwitchAccount.tsx:66
-msgid "Signs {0} out of Bluesky"
-msgstr ""
+#: src/view/com/modals/SwitchAccount.tsx:70
+#~ msgid "Signs {0} out of Bluesky"
+#~ msgstr ""
-#: src/screens/Onboarding/StepInterests/index.tsx:235
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:195
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:33
+#: src/screens/Onboarding/StepInterests/index.tsx:239
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:203
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:35
msgid "Skip"
msgstr "Saltarse este paso"
-#: src/screens/Onboarding/StepInterests/index.tsx:232
+#: src/screens/Onboarding/StepInterests/index.tsx:236
msgid "Skip this flow"
msgstr ""
#: src/view/com/auth/create/Step2.tsx:82
-msgid "SMS verification"
-msgstr ""
+#~ msgid "SMS verification"
+#~ msgstr ""
#: src/screens/Onboarding/index.tsx:40
msgid "Software Dev"
@@ -3669,11 +4723,21 @@ msgstr ""
#~ msgid "Something went wrong and we're not sure what."
#~ msgstr ""
-#: src/view/com/modals/Waitlist.tsx:51
-msgid "Something went wrong. Check your email and try again."
+#: src/components/ReportDialog/index.tsx:59
+#: src/screens/Moderation/index.tsx:114
+#: src/screens/Profile/Sections/Labels.tsx:76
+msgid "Something went wrong, please try again."
msgstr ""
-#: src/App.native.tsx:61
+#: src/components/Lists.tsx:203
+#~ msgid "Something went wrong!"
+#~ msgstr ""
+
+#: src/view/com/modals/Waitlist.tsx:51
+#~ msgid "Something went wrong. Check your email and try again."
+#~ msgstr ""
+
+#: src/App.native.tsx:66
msgid "Sorry! Your session expired. Please log in again."
msgstr ""
@@ -3685,11 +4749,23 @@ msgstr "Clasificar respuestas"
msgid "Sort replies to the same post by:"
msgstr "Ordenar las respuestas a un mismo mensaje por:"
+#: src/components/moderation/LabelsOnMeDialog.tsx:146
+msgid "Source:"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:65
+msgid "Spam"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:53
+msgid "Spam; excessive mentions or replies"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:30
msgid "Sports"
msgstr ""
-#: src/view/com/modals/crop-image/CropImage.web.tsx:122
+#: src/view/com/modals/crop-image/CropImage.web.tsx:123
msgid "Square"
msgstr "Cuadrado"
@@ -3697,45 +4773,62 @@ msgstr "Cuadrado"
#~ msgid "Staging"
#~ msgstr "Puesta en escena"
-#: src/view/screens/Settings/index.tsx:871
+#: src/view/screens/Settings/index.tsx:903
msgid "Status page"
msgstr "Página de estado"
-#: src/view/com/auth/create/StepHeader.tsx:22
-msgid "Step {0} of {numSteps}"
+#: src/screens/Signup/index.tsx:142
+msgid "Step"
msgstr ""
-#: src/view/screens/Settings/index.tsx:274
+#: src/view/com/auth/create/StepHeader.tsx:22
+#~ msgid "Step {0} of {numSteps}"
+#~ msgstr ""
+
+#: src/view/screens/Settings/index.tsx:292
msgid "Storage cleared, you need to restart the app now."
msgstr ""
-#: src/Navigation.tsx:202
-#: src/view/screens/Settings/index.tsx:807
+#: src/Navigation.tsx:211
+#: src/view/screens/Settings/index.tsx:831
msgid "Storybook"
msgstr "Libro de cuentos"
-#: src/view/com/modals/AppealLabel.tsx:101
+#: src/components/moderation/LabelsOnMeDialog.tsx:255
+#: src/components/moderation/LabelsOnMeDialog.tsx:256
msgid "Submit"
msgstr "Enviar"
-#: src/view/screens/ProfileList.tsx:607
+#: src/view/screens/ProfileList.tsx:590
msgid "Subscribe"
msgstr "Suscribirse"
-#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:173
+#: src/screens/Profile/Sections/Labels.tsx:180
+msgid "Subscribe to @{0} to use these labels:"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:221
+msgid "Subscribe to Labeler"
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:172
#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:307
msgid "Subscribe to the {0} feed"
msgstr ""
-#: src/view/screens/ProfileList.tsx:603
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:184
+msgid "Subscribe to this labeler"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:586
msgid "Subscribe to this list"
msgstr "Suscribirse a esta lista"
-#: src/view/screens/Search/Search.tsx:373
+#: src/view/screens/Search/Search.tsx:376
msgid "Suggested Follows"
msgstr "Usuarios sugeridos a seguir"
-#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:64
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:65
msgid "Suggested for you"
msgstr ""
@@ -3743,7 +4836,7 @@ msgstr ""
msgid "Suggestive"
msgstr ""
-#: src/Navigation.tsx:212
+#: src/Navigation.tsx:226
#: src/view/screens/Support.tsx:30
#: src/view/screens/Support.tsx:33
msgid "Support"
@@ -3753,29 +4846,40 @@ msgstr "Soporte"
#~ msgid "Swipe up to see more"
#~ msgstr ""
-#: src/view/com/modals/SwitchAccount.tsx:117
+#: src/components/dialogs/SwitchAccount.tsx:46
+#: src/components/dialogs/SwitchAccount.tsx:49
msgid "Switch Account"
msgstr "Cambiar a otra cuenta"
-#: src/view/com/modals/SwitchAccount.tsx:97
-#: src/view/screens/Settings/index.tsx:130
+#: src/view/screens/Settings/index.tsx:139
msgid "Switch to {0}"
msgstr ""
-#: src/view/com/modals/SwitchAccount.tsx:98
-#: src/view/screens/Settings/index.tsx:131
+#: src/view/screens/Settings/index.tsx:140
msgid "Switches the account you are logged in to"
msgstr ""
-#: src/view/screens/Settings/index.tsx:472
+#: src/view/screens/Settings/index.tsx:491
msgid "System"
msgstr ""
-#: src/view/screens/Settings/index.tsx:795
+#: src/view/screens/Settings/index.tsx:819
msgid "System log"
msgstr "Bitácora del sistema"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:112
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "tag"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:78
+msgid "Tag menu: {displayTag}"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:74
+#~ msgid "Tag menu: {tag}"
+#~ msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:113
msgid "Tall"
msgstr "Alto"
@@ -3787,26 +4891,53 @@ msgstr ""
msgid "Tech"
msgstr ""
-#: src/view/shell/desktop/RightNav.tsx:89
+#: src/view/shell/desktop/RightNav.tsx:81
msgid "Terms"
msgstr "Condiciones"
-#: src/Navigation.tsx:222
-#: src/view/screens/Settings/index.tsx:885
+#: src/Navigation.tsx:236
+#: src/screens/Signup/StepInfo/Policies.tsx:49
+#: src/view/screens/Settings/index.tsx:917
#: src/view/screens/TermsOfService.tsx:29
-#: src/view/shell/Drawer.tsx:256
+#: src/view/shell/Drawer.tsx:259
msgid "Terms of Service"
msgstr "Condiciones de servicio"
-#: src/view/com/modals/AppealLabel.tsx:70
-#: src/view/com/modals/report/InputIssueDetails.tsx:51
+#: src/lib/moderation/useReportOptions.ts:58
+#: src/lib/moderation/useReportOptions.ts:79
+#: src/lib/moderation/useReportOptions.ts:87
+msgid "Terms used violate community standards"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "text"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:219
msgid "Text input field"
msgstr "Campo de introducción de texto"
-#: src/view/com/profile/ProfileHeader.tsx:262
+#: src/components/ReportDialog/SubmitView.tsx:78
+msgid "Thank you. Your report has been sent."
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:465
+msgid "That contains the following:"
+msgstr ""
+
+#: src/screens/Signup/index.tsx:84
+msgid "That handle is already taken."
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:283
+#: src/view/com/profile/ProfileMenu.tsx:349
msgid "The account will be able to interact with you after unblocking."
msgstr "La cuenta podrá interactuar contigo tras el desbloqueo."
+#: src/components/moderation/ModerationDetailsDialog.tsx:127
+msgid "the author"
+msgstr ""
+
#: src/view/screens/CommunityGuidelines.tsx:36
msgid "The Community Guidelines have been moved to <0/>"
msgstr "Las Directrices Comunitarias se ha trasladado a <0/>"
@@ -3815,11 +4946,20 @@ msgstr "Las Directrices Comunitarias se ha trasladado a <0/>"
msgid "The Copyright Policy has been moved to <0/>"
msgstr "La Política de derechos de autor se han trasladado a <0/>"
-#: src/screens/Onboarding/Layout.tsx:60
+#: src/components/moderation/LabelsOnMeDialog.tsx:48
+msgid "The following labels were applied to your account."
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:49
+msgid "The following labels were applied to your content."
+msgstr ""
+
+#: src/screens/Onboarding/Layout.tsx:58
msgid "The following steps will help customize your Bluesky experience."
msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:453
+#: src/view/com/post-thread/PostThread.tsx:153
+#: src/view/com/post-thread/PostThread.tsx:165
msgid "The post may have been deleted."
msgstr "Es posible que se haya borrado la publicación."
@@ -3835,24 +4975,25 @@ msgstr "Se ha movido el formulario de soporte. Si necesitas ayuda, por favor <0/
msgid "The Terms of Service have been moved to"
msgstr "Las condiciones de servicio se han trasladado a"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:150
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:141
msgid "There are many feeds to try:"
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:549
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:112
+#: src/view/screens/ProfileFeed.tsx:544
msgid "There was an an issue contacting the server, please check your internet connection and try again."
msgstr ""
-#: src/view/com/posts/FeedErrorMessage.tsx:139
+#: src/view/com/posts/FeedErrorMessage.tsx:138
msgid "There was an an issue removing this feed. Please check your internet connection and try again."
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:209
+#: src/view/screens/ProfileFeed.tsx:218
msgid "There was an an issue updating your feeds, please check your internet connection and try again."
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:236
-#: src/view/screens/ProfileList.tsx:266
+#: src/view/screens/ProfileFeed.tsx:245
+#: src/view/screens/ProfileList.tsx:275
#: src/view/screens/SavedFeeds.tsx:209
#: src/view/screens/SavedFeeds.tsx:231
#: src/view/screens/SavedFeeds.tsx:252
@@ -3861,9 +5002,8 @@ msgstr ""
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:57
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:66
-#: src/view/com/feeds/FeedSourceCard.tsx:113
-#: src/view/com/feeds/FeedSourceCard.tsx:127
-#: src/view/com/feeds/FeedSourceCard.tsx:181
+#: src/view/com/feeds/FeedSourceCard.tsx:110
+#: src/view/com/feeds/FeedSourceCard.tsx:123
msgid "There was an issue contacting your server"
msgstr ""
@@ -3871,7 +5011,7 @@ msgstr ""
msgid "There was an issue fetching notifications. Tap here to try again."
msgstr ""
-#: src/view/com/posts/Feed.tsx:263
+#: src/view/com/posts/Feed.tsx:287
msgid "There was an issue fetching posts. Tap here to try again."
msgstr ""
@@ -3884,34 +5024,40 @@ msgstr ""
msgid "There was an issue fetching your lists. Tap here to try again."
msgstr ""
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:63
-#: src/view/com/modals/ContentFilteringSettings.tsx:126
+#: src/components/ReportDialog/SubmitView.tsx:83
+msgid "There was an issue sending your report. Please check your internet connection."
+msgstr ""
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:65
msgid "There was an issue syncing your preferences with the server"
msgstr ""
-#: src/view/screens/AppPasswords.tsx:66
+#: src/view/screens/AppPasswords.tsx:68
msgid "There was an issue with fetching your app passwords"
msgstr ""
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:93
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:105
-#: src/view/com/profile/ProfileHeader.tsx:156
-#: src/view/com/profile/ProfileHeader.tsx:177
-#: src/view/com/profile/ProfileHeader.tsx:216
-#: src/view/com/profile/ProfileHeader.tsx:229
-#: src/view/com/profile/ProfileHeader.tsx:249
-#: src/view/com/profile/ProfileHeader.tsx:271
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:105
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:127
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:99
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:111
+#: src/view/com/profile/ProfileMenu.tsx:106
+#: src/view/com/profile/ProfileMenu.tsx:117
+#: src/view/com/profile/ProfileMenu.tsx:132
+#: src/view/com/profile/ProfileMenu.tsx:143
+#: src/view/com/profile/ProfileMenu.tsx:157
+#: src/view/com/profile/ProfileMenu.tsx:170
msgid "There was an issue! {0}"
msgstr ""
-#: src/view/screens/ProfileList.tsx:287
-#: src/view/screens/ProfileList.tsx:306
-#: src/view/screens/ProfileList.tsx:328
-#: src/view/screens/ProfileList.tsx:347
+#: src/view/screens/ProfileList.tsx:288
+#: src/view/screens/ProfileList.tsx:302
+#: src/view/screens/ProfileList.tsx:316
+#: src/view/screens/ProfileList.tsx:330
msgid "There was an issue. Please check your internet connection and try again."
msgstr ""
-#: src/view/com/util/ErrorBoundary.tsx:36
+#: src/view/com/util/ErrorBoundary.tsx:51
msgid "There was an unexpected issue in the application. Please let us know if this happened to you!"
msgstr "Se ha producido un problema inesperado en la aplicación. Por favor, ¡avísanos si te ha ocurrido esto!"
@@ -3920,26 +5066,39 @@ msgid "There's been a rush of new users to Bluesky! We'll activate your account
msgstr ""
#: src/view/com/auth/create/Step2.tsx:55
-msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
-msgstr ""
+#~ msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
+#~ msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:138
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:146
msgid "These are popular accounts you might like:"
msgstr ""
-#: src/view/com/util/moderation/ScreenHider.tsx:88
+#: src/components/moderation/ScreenHider.tsx:116
msgid "This {screenDescription} has been flagged:"
msgstr "Esta {screenDescription} ha sido marcada:"
-#: src/view/com/util/moderation/ScreenHider.tsx:83
+#: src/components/moderation/ScreenHider.tsx:111
msgid "This account has requested that users sign in to view their profile."
msgstr "Esta cuenta ha solicitado que los usuarios inicien sesión para ver su perfil."
-#: src/view/com/modals/EmbedConsent.tsx:68
+#: src/components/moderation/LabelsOnMeDialog.tsx:204
+msgid "This appeal will be sent to <0>{0}0>."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:19
+msgid "This content has been hidden by the moderators."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:24
+msgid "This content has received a general warning from moderators."
+msgstr ""
+
+#: src/components/dialogs/EmbedConsent.tsx:64
msgid "This content is hosted by {0}. Do you want to enable external media?"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:67
+#: src/components/moderation/ModerationDetailsDialog.tsx:77
+#: src/lib/moderation/useModerationCauseDescription.ts:77
msgid "This content is not available because one of the users involved has blocked the other."
msgstr ""
@@ -3948,16 +5107,20 @@ msgid "This content is not viewable without a Bluesky account."
msgstr "Este contenido no se puede ver sin una cuenta Bluesky."
#: src/view/screens/Settings/ExportCarDialog.tsx:75
-msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
+#~ msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
+#~ msgstr ""
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:75
+msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost0>."
msgstr ""
#: src/view/com/posts/FeedErrorMessage.tsx:114
msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later."
msgstr "Este canal de noticias está recibiendo mucho tráfico y no está disponible temporalmente. Vuelve a intentarlo más tarde."
-#: src/view/screens/Profile.tsx:420
-#: src/view/screens/ProfileFeed.tsx:475
-#: src/view/screens/ProfileList.tsx:660
+#: src/screens/Profile/Sections/Feed.tsx:50
+#: src/view/screens/ProfileFeed.tsx:477
+#: src/view/screens/ProfileList.tsx:675
msgid "This feed is empty!"
msgstr ""
@@ -3965,7 +5128,7 @@ msgstr ""
msgid "This feed is empty! You may need to follow more users or tune your language settings."
msgstr ""
-#: src/view/com/modals/BirthDateSettings.tsx:61
+#: src/components/dialogs/BirthDateSettings.tsx:41
msgid "This information is not shared with other users."
msgstr "Esta información no se comparte con otros usuarios."
@@ -3973,48 +5136,110 @@ msgstr "Esta información no se comparte con otros usuarios."
msgid "This is important in case you ever need to change your email or reset your password."
msgstr "Esto es importante por si alguna vez necesitas cambiar tu correo electrónico o restablecer tu contraseña."
-#: src/view/com/modals/LinkWarning.tsx:58
+#: src/components/moderation/ModerationDetailsDialog.tsx:124
+msgid "This label was applied by {0}."
+msgstr ""
+
+#: src/screens/Profile/Sections/Labels.tsx:167
+msgid "This labeler hasn't declared what labels it publishes, and may not be active."
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:72
msgid "This link is taking you to the following website:"
msgstr "Este enlace te lleva al siguiente sitio web:"
-#: src/view/screens/ProfileList.tsx:834
+#: src/view/screens/ProfileList.tsx:853
msgid "This list is empty!"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:106
+#: src/screens/Profile/ErrorState.tsx:40
+msgid "This moderation service is unavailable. See below for more details. If this issue persists, contact us."
+msgstr ""
+
+#: src/view/com/modals/AddAppPasswords.tsx:107
msgid "This name is already in use"
msgstr ""
-#: src/view/com/post-thread/PostThreadItem.tsx:122
+#: src/view/com/post-thread/PostThreadItem.tsx:125
msgid "This post has been deleted."
msgstr "Esta publicación ha sido eliminada."
-#: src/view/com/modals/ModerationDetails.tsx:62
+#: src/view/com/util/forms/PostDropdownBtn.tsx:344
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:248
+msgid "This post is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:326
+msgid "This post will be hidden from feeds."
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:370
+msgid "This profile is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/Policies.tsx:37
+msgid "This service has not provided terms of service or a privacy policy."
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:445
+msgid "This should create a domain record at:"
+msgstr ""
+
+#: src/view/com/profile/ProfileFollowers.tsx:87
+msgid "This user doesn't have any followers."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:72
+#: src/lib/moderation/useModerationCauseDescription.ts:68
msgid "This user has blocked you. You cannot view their content."
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:42
-msgid "This user is included in the <0/> list which you have blocked."
+#: src/lib/moderation/useGlobalLabelStrings.ts:30
+msgid "This user has requested that their content only be shown to signed-in users."
msgstr ""
+#: src/view/com/modals/ModerationDetails.tsx:42
+#~ msgid "This user is included in the <0/> list which you have blocked."
+#~ msgstr ""
+
#: src/view/com/modals/ModerationDetails.tsx:74
-msgid "This user is included in the <0/> list which you have muted."
+#~ msgid "This user is included in the <0/> list which you have muted."
+#~ msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:55
+msgid "This user is included in the <0>{0}0> list which you have blocked."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:84
+msgid "This user is included in the <0>{0}0> list which you have muted."
msgstr ""
#: src/view/com/modals/ModerationDetails.tsx:74
#~ msgid "This user is included the <0/> list which you have muted."
#~ msgstr ""
+#: src/view/com/profile/ProfileFollows.tsx:87
+msgid "This user isn't following anyone."
+msgstr ""
+
#: src/view/com/modals/SelfLabel.tsx:137
msgid "This warning is only available for posts with media attached."
msgstr "Esta advertencia sólo está disponible para las publicaciones con medios adjuntos."
-#: src/view/com/util/forms/PostDropdownBtn.tsx:192
-msgid "This will hide this post from your feeds."
-msgstr "Esto ocultará esta entrada de tus contenidos."
+#: src/components/dialogs/MutedWords.tsx:283
+msgid "This will delete {0} from your muted words. You can always add it back later."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:282
+#~ msgid "This will hide this post from your feeds."
+#~ msgstr "Esto ocultará esta entrada de tus contenidos."
+
+#: src/view/screens/Settings/index.tsx:574
+msgid "Thread preferences"
+msgstr ""
#: src/view/screens/PreferencesThreads.tsx:53
-#: src/view/screens/Settings/index.tsx:565
+#: src/view/screens/Settings/index.tsx:584
msgid "Thread Preferences"
msgstr "Preferencias de hilos"
@@ -4022,21 +5247,34 @@ msgstr "Preferencias de hilos"
msgid "Threaded Mode"
msgstr "Modo con hilos"
-#: src/Navigation.tsx:252
+#: src/Navigation.tsx:269
msgid "Threads Preferences"
msgstr ""
+#: src/components/ReportDialog/SelectLabelerView.tsx:33
+msgid "To whom would you like to send this report?"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:112
+msgid "Toggle between muted word options."
+msgstr ""
+
#: src/view/com/util/forms/DropdownButton.tsx:246
msgid "Toggle dropdown"
msgstr "Conmutar el menú desplegable"
-#: src/view/com/modals/EditImage.tsx:271
+#: src/screens/Moderation/index.tsx:332
+msgid "Toggle to enable or disable adult content"
+msgstr ""
+
+#: src/view/com/modals/EditImage.tsx:272
msgid "Transformations"
msgstr "Transformaciones"
-#: src/view/com/post-thread/PostThreadItem.tsx:686
-#: src/view/com/post-thread/PostThreadItem.tsx:688
-#: src/view/com/util/forms/PostDropdownBtn.tsx:125
+#: src/view/com/post-thread/PostThreadItem.tsx:644
+#: src/view/com/post-thread/PostThreadItem.tsx:646
+#: src/view/com/util/forms/PostDropdownBtn.tsx:212
+#: src/view/com/util/forms/PostDropdownBtn.tsx:214
msgid "Translate"
msgstr "Traducir"
@@ -4045,85 +5283,141 @@ msgctxt "action"
msgid "Try again"
msgstr "Intentar nuevamente"
-#: src/view/screens/ProfileList.tsx:505
+#: src/view/com/modals/ChangeHandle.tsx:428
+msgid "Type:"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:478
msgid "Un-block list"
msgstr "Desbloquear una lista"
-#: src/view/screens/ProfileList.tsx:490
+#: src/view/screens/ProfileList.tsx:461
msgid "Un-mute list"
msgstr "Desactivar la opción de silenciar la lista"
-#: src/view/com/auth/create/CreateAccount.tsx:66
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:87
-#: src/view/com/auth/login/Login.tsx:76
-#: src/view/com/auth/login/LoginForm.tsx:118
+#: src/screens/Login/ForgotPasswordForm.tsx:74
+#: src/screens/Login/index.tsx:78
+#: src/screens/Login/LoginForm.tsx:119
+#: src/screens/Login/SetNewPasswordForm.tsx:77
+#: src/screens/Signup/index.tsx:63
#: src/view/com/modals/ChangePassword.tsx:70
msgid "Unable to contact your service. Please check your Internet connection."
msgstr "No se puede contactar con tu servicio. Comprueba tu conexión a Internet."
-#: src/view/com/profile/ProfileHeader.tsx:432
-#: src/view/screens/ProfileList.tsx:589
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:181
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+#: src/view/screens/ProfileList.tsx:572
msgid "Unblock"
msgstr "Desbloquear"
-#: src/view/com/profile/ProfileHeader.tsx:435
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:186
msgctxt "action"
msgid "Unblock"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:260
-#: src/view/com/profile/ProfileHeader.tsx:344
+#: src/view/com/profile/ProfileMenu.tsx:299
+#: src/view/com/profile/ProfileMenu.tsx:305
msgid "Unblock Account"
msgstr "Desbloquear una cuenta"
-#: src/view/com/modals/Repost.tsx:42
-#: src/view/com/modals/Repost.tsx:55
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:281
+#: src/view/com/profile/ProfileMenu.tsx:343
+msgid "Unblock Account?"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:43
+#: src/view/com/modals/Repost.tsx:56
#: src/view/com/util/post-ctrls/RepostButton.tsx:60
#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
msgid "Undo repost"
msgstr "Deshacer esta publicación"
-#: src/view/com/profile/FollowButton.tsx:55
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
+msgid "Unfollow"
+msgstr ""
+
+#: src/view/com/profile/FollowButton.tsx:60
msgctxt "action"
msgid "Unfollow"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:484
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:220
msgid "Unfollow {0}"
msgstr ""
-#: src/view/com/auth/create/state.ts:300
-msgid "Unfortunately, you do not meet the requirements to create an account."
-msgstr "Lamentablemente, no cumples los requisitos para crear una cuenta."
+#: src/view/com/profile/ProfileMenu.tsx:241
+#: src/view/com/profile/ProfileMenu.tsx:251
+msgid "Unfollow Account"
+msgstr ""
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/auth/create/state.ts:262
+#~ msgid "Unfortunately, you do not meet the requirements to create an account."
+#~ msgstr "Lamentablemente, no cumples los requisitos para crear una cuenta."
+
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Unlike"
msgstr ""
-#: src/view/screens/ProfileList.tsx:596
+#: src/view/screens/ProfileFeed.tsx:573
+msgid "Unlike this feed"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:249
+#: src/view/screens/ProfileList.tsx:579
msgid "Unmute"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:325
+#: src/components/TagMenu/index.web.tsx:104
+msgid "Unmute {truncatedTag}"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:278
+#: src/view/com/profile/ProfileMenu.tsx:284
msgid "Unmute Account"
msgstr "Desactivar la opción de silenciar la cuenta"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/components/TagMenu/index.tsx:208
+msgid "Unmute all {displayTag} posts"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:210
+#~ msgid "Unmute all {tag} posts"
+#~ msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:256
msgid "Unmute thread"
msgstr "Desactivar la opción de silenciar el hilo"
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:295
+#: src/view/screens/ProfileList.tsx:563
msgid "Unpin"
msgstr ""
-#: src/view/screens/ProfileList.tsx:473
+#: src/view/screens/ProfileFeed.tsx:292
+msgid "Unpin from home"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:444
msgid "Unpin moderation list"
msgstr "Desanclar la lista de moderación"
-#: src/view/screens/ProfileFeed.tsx:345
-msgid "Unsave"
+#: src/view/screens/ProfileFeed.tsx:346
+#~ msgid "Unsave"
+#~ msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:219
+msgid "Unsubscribe"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:183
+msgid "Unsubscribe from this labeler"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:70
+msgid "Unwanted Sexual Content"
msgstr ""
#: src/view/com/modals/UserAddRemoveLists.tsx:70
@@ -4131,22 +5425,53 @@ msgid "Update {displayName} in Lists"
msgstr "Actualizar {displayName} en Listas"
#: src/lib/hooks/useOTAUpdate.ts:15
-msgid "Update Available"
-msgstr "Actualización disponible"
+#~ msgid "Update Available"
+#~ msgstr "Actualización disponible"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:204
+#: src/view/com/modals/ChangeHandle.tsx:508
+msgid "Update to {handle}"
+msgstr ""
+
+#: src/screens/Login/SetNewPasswordForm.tsx:186
msgid "Updating..."
msgstr "Actualizando..."
-#: src/view/com/modals/ChangeHandle.tsx:455
+#: src/view/com/modals/ChangeHandle.tsx:454
msgid "Upload a text file to:"
msgstr "Carga un archivo de texto en:"
-#: src/view/screens/AppPasswords.tsx:195
+#: src/view/com/util/UserAvatar.tsx:326
+#: src/view/com/util/UserAvatar.tsx:329
+#: src/view/com/util/UserBanner.tsx:116
+#: src/view/com/util/UserBanner.tsx:119
+msgid "Upload from Camera"
+msgstr ""
+
+#: src/view/com/util/UserAvatar.tsx:343
+#: src/view/com/util/UserBanner.tsx:133
+msgid "Upload from Files"
+msgstr ""
+
+#: src/view/com/util/UserAvatar.tsx:337
+#: src/view/com/util/UserAvatar.tsx:341
+#: src/view/com/util/UserBanner.tsx:127
+#: src/view/com/util/UserBanner.tsx:131
+msgid "Upload from Library"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:408
+msgid "Use a file on your server"
+msgstr ""
+
+#: src/view/screens/AppPasswords.tsx:197
msgid "Use app passwords to login to other Bluesky clients without giving full access to your account or password."
msgstr "Utiliza las contraseñas de la app para iniciar sesión en otros clientes Bluesky sin dar acceso completo a tu cuenta o contraseña."
-#: src/view/com/modals/ChangeHandle.tsx:515
+#: src/view/com/modals/ChangeHandle.tsx:517
+msgid "Use bsky.social as hosting provider"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:516
msgid "Use default provider"
msgstr "Utiliza un proveedor predeterminado"
@@ -4160,7 +5485,11 @@ msgstr ""
msgid "Use my default browser"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:155
+#: src/view/com/modals/ChangeHandle.tsx:400
+msgid "Use the DNS panel"
+msgstr ""
+
+#: src/view/com/modals/AddAppPasswords.tsx:156
msgid "Use this to sign into the other app along with your handle."
msgstr "Utilízalo para iniciar sesión en la otra aplicación junto con tu identificador."
@@ -4168,46 +5497,55 @@ msgstr "Utilízalo para iniciar sesión en la otra aplicación junto con tu iden
#~ msgid "Use your domain as your Bluesky client service provider"
#~ msgstr ""
-#: src/view/com/modals/InviteCodes.tsx:200
+#: src/view/com/modals/InviteCodes.tsx:201
msgid "Used by:"
msgstr "Usado por:"
-#: src/view/com/modals/ModerationDetails.tsx:54
+#: src/components/moderation/ModerationDetailsDialog.tsx:64
+#: src/lib/moderation/useModerationCauseDescription.ts:56
msgid "User Blocked"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:40
+#: src/lib/moderation/useModerationCauseDescription.ts:48
+msgid "User Blocked by \"{0}\""
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:53
msgid "User Blocked by List"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:60
+#: src/lib/moderation/useModerationCauseDescription.ts:66
+msgid "User Blocking You"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:70
msgid "User Blocks You"
msgstr ""
-#: src/view/com/auth/create/Step3.tsx:41
-msgid "User handle"
-msgstr "Identificador del usuario"
+#: src/view/com/auth/create/Step2.tsx:79
+#~ msgid "User handle"
+#~ msgstr "Identificador del usuario"
-#: src/view/com/lists/ListCard.tsx:84
+#: src/view/com/lists/ListCard.tsx:85
#: src/view/com/modals/UserAddRemoveLists.tsx:198
msgid "User list by {0}"
msgstr ""
-#: src/view/screens/ProfileList.tsx:762
+#: src/view/screens/ProfileList.tsx:777
msgid "User list by <0/>"
msgstr ""
-#: src/view/com/lists/ListCard.tsx:82
+#: src/view/com/lists/ListCard.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:196
-#: src/view/screens/ProfileList.tsx:760
+#: src/view/screens/ProfileList.tsx:775
msgid "User list by you"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:196
+#: src/view/com/modals/CreateOrEditList.tsx:197
msgid "User list created"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:182
+#: src/view/com/modals/CreateOrEditList.tsx:183
msgid "User list updated"
msgstr ""
@@ -4215,12 +5553,11 @@ msgstr ""
msgid "User Lists"
msgstr "Listas de usuarios"
-#: src/view/com/auth/login/LoginForm.tsx:177
-#: src/view/com/auth/login/LoginForm.tsx:195
+#: src/screens/Login/LoginForm.tsx:151
msgid "Username or email address"
msgstr "Nombre de usuario o dirección de correo electrónico"
-#: src/view/screens/ProfileList.tsx:796
+#: src/view/screens/ProfileList.tsx:811
msgid "Users"
msgstr "Usuarios"
@@ -4232,19 +5569,31 @@ msgstr "usuarios seguidos por <0/>"
msgid "Users in \"{0}\""
msgstr "Usuarios en «{0}»"
+#: src/components/LikesDialog.tsx:85
+msgid "Users that have liked this content or profile"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:436
+msgid "Value:"
+msgstr ""
+
#: src/view/com/auth/create/Step2.tsx:243
-msgid "Verification code"
+#~ msgid "Verification code"
+#~ msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:509
+msgid "Verify {0}"
msgstr ""
-#: src/view/screens/Settings/index.tsx:910
+#: src/view/screens/Settings/index.tsx:942
msgid "Verify email"
msgstr "Verificar el correo electrónico"
-#: src/view/screens/Settings/index.tsx:935
+#: src/view/screens/Settings/index.tsx:967
msgid "Verify my email"
msgstr "Verificar mi correo electrónico"
-#: src/view/screens/Settings/index.tsx:944
+#: src/view/screens/Settings/index.tsx:976
msgid "Verify My Email"
msgstr "Verificar mi correo electrónico"
@@ -4257,11 +5606,15 @@ msgstr "Verificar el correo electrónico nuevo"
msgid "Verify Your Email"
msgstr ""
+#: src/view/screens/Settings/index.tsx:893
+msgid "Version {0}"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:42
msgid "Video Games"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:661
+#: src/screens/Profile/Header/Shell.tsx:107
msgid "View {0}'s avatar"
msgstr ""
@@ -4269,11 +5622,23 @@ msgstr ""
msgid "View debug entry"
msgstr "Ver entrada de depuración"
-#: src/view/com/posts/FeedSlice.tsx:103
+#: src/components/ReportDialog/SelectReportOptionView.tsx:131
+msgid "View details"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:126
+msgid "View details for reporting a copyright violation"
+msgstr ""
+
+#: src/view/com/posts/FeedSlice.tsx:99
msgid "View full thread"
msgstr ""
-#: src/view/com/posts/FeedErrorMessage.tsx:172
+#: src/components/moderation/LabelsOnMe.tsx:51
+msgid "View information about these labels"
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:166
msgid "View profile"
msgstr ""
@@ -4281,24 +5646,47 @@ msgstr ""
msgid "View the avatar"
msgstr "Ver el avatar"
-#: src/view/com/modals/LinkWarning.tsx:75
+#: src/components/LabelingServiceCard/index.tsx:140
+msgid "View the labeling service provided by @{0}"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:585
+msgid "View users who like this feed"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
msgid "Visit Site"
msgstr "Visitar el sitio"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:42
-#: src/view/com/modals/ContentFilteringSettings.tsx:259
+#: src/components/moderation/LabelPreference.tsx:135
+#: src/lib/moderation/useLabelBehaviorDescription.ts:17
+#: src/lib/moderation/useLabelBehaviorDescription.ts:22
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:53
msgid "Warn"
msgstr ""
+#: src/lib/moderation/useLabelBehaviorDescription.ts:48
+msgid "Warn content"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:46
+msgid "Warn content and filter from feeds"
+msgstr ""
+
#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:134
-msgid "We also think you'll like \"For You\" by Skygaze:"
+#~ msgid "We also think you'll like \"For You\" by Skygaze:"
+#~ msgstr ""
+
+#: src/screens/Hashtag.tsx:133
+msgid "We couldn't find any results for that hashtag."
msgstr ""
#: src/screens/Deactivated.tsx:133
msgid "We estimate {estimatedTime} until your account is ready."
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:93
+#: src/screens/Onboarding/StepFinished.tsx:97
msgid "We hope you have a wonderful time. Remember, Bluesky is:"
msgstr ""
@@ -4310,11 +5698,23 @@ msgstr ""
#~ msgid "We recommend \"For You\" by Skygaze:"
#~ msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:124
+#: src/components/dialogs/MutedWords.tsx:203
+msgid "We recommend avoiding common words that appear in many posts, since it can result in no posts being shown."
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:125
msgid "We recommend our \"Discover\" feed:"
msgstr ""
-#: src/screens/Onboarding/StepInterests/index.tsx:133
+#: src/components/dialogs/BirthDateSettings.tsx:52
+msgid "We were unable to load your birth date preferences. Please try again."
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:385
+msgid "We were unable to load your configured labelers at this time."
+msgstr ""
+
+#: src/screens/Onboarding/StepInterests/index.tsx:137
msgid "We weren't able to connect. Please try again to continue setting up your account. If it continues to fail, you can skip this flow."
msgstr ""
@@ -4323,43 +5723,53 @@ msgid "We will let you know when your account is ready."
msgstr ""
#: src/view/com/modals/AppealLabel.tsx:48
-msgid "We'll look into your appeal promptly."
-msgstr ""
+#~ msgid "We'll look into your appeal promptly."
+#~ msgstr ""
-#: src/screens/Onboarding/StepInterests/index.tsx:138
+#: src/screens/Onboarding/StepInterests/index.tsx:142
msgid "We'll use this to help customize your experience."
msgstr ""
-#: src/view/com/auth/create/CreateAccount.tsx:123
+#: src/screens/Signup/index.tsx:130
msgid "We're so excited to have you join us!"
msgstr "¡Nos hace mucha ilusión que te unas a nosotros!"
-#: src/view/screens/ProfileList.tsx:85
+#: src/view/screens/ProfileList.tsx:89
msgid "We're sorry, but we were unable to resolve this list. If this persists, please contact the list creator, @{handleOrDid}."
msgstr ""
-#: src/view/screens/Search/Search.tsx:253
+#: src/components/dialogs/MutedWords.tsx:229
+msgid "We're sorry, but we weren't able to load your muted words at this time. Please try again."
+msgstr ""
+
+#: src/view/screens/Search/Search.tsx:256
msgid "We're sorry, but your search could not be completed. Please try again in a few minutes."
msgstr "Lo sentimos, pero no se ha podido completar tu búsqueda. Vuelve a intentarlo dentro de unos minutos."
+#: src/components/Lists.tsx:188
#: src/view/screens/NotFound.tsx:48
msgid "We're sorry! We can't find the page you were looking for."
msgstr "Lo sentimos. No encontramos la página que buscabas."
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:46
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:321
+msgid "We're sorry! You can only subscribe to ten labelers, and you've reached your limit of ten."
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:48
msgid "Welcome to <0>Bluesky0>"
msgstr "Bienvenido a <0>Bluesky0>"
-#: src/screens/Onboarding/StepInterests/index.tsx:130
+#: src/screens/Onboarding/StepInterests/index.tsx:134
msgid "What are your interests?"
msgstr ""
#: src/view/com/modals/report/Modal.tsx:169
-msgid "What is the issue with this {collectionName}?"
-msgstr "¿Cuál es el problema con esta {collectionName}?"
+#~ msgid "What is the issue with this {collectionName}?"
+#~ msgstr "¿Cuál es el problema con esta {collectionName}?"
-#: src/view/com/auth/SplashScreen.tsx:34
-#: src/view/com/composer/Composer.tsx:279
+#: src/view/com/auth/SplashScreen.tsx:58
+#: src/view/com/auth/SplashScreen.web.tsx:84
+#: src/view/com/composer/Composer.tsx:296
msgid "What's up?"
msgstr "¿Qué hay de nuevo?"
@@ -4376,16 +5786,36 @@ msgstr "¿Qué idiomas te gustaría ver en tus noticias algorítmicas?"
msgid "Who can reply"
msgstr "Quién puede responder"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:102
+#: src/components/ReportDialog/SelectReportOptionView.tsx:43
+msgid "Why should this content be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:56
+msgid "Why should this feed be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:53
+msgid "Why should this list be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:50
+msgid "Why should this post be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:47
+msgid "Why should this user be reviewed?"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:103
msgid "Wide"
msgstr "Ancho"
-#: src/view/com/composer/Composer.tsx:415
+#: src/view/com/composer/Composer.tsx:436
msgid "Write post"
msgstr "Redactar una publicación"
-#: src/view/com/composer/Composer.tsx:278
-#: src/view/com/composer/Prompt.tsx:33
+#: src/view/com/composer/Composer.tsx:295
+#: src/view/com/composer/Prompt.tsx:37
msgid "Write your reply"
msgstr "Redactar tu respuesta"
@@ -4394,14 +5824,14 @@ msgid "Writers"
msgstr ""
#: src/view/com/auth/create/Step2.tsx:263
-msgid "XXXXXX"
-msgstr ""
+#~ msgid "XXXXXX"
+#~ msgstr ""
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:77
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:201
-#: src/view/screens/PreferencesHomeFeed.tsx:236
-#: src/view/screens/PreferencesHomeFeed.tsx:271
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:201
+#: src/view/screens/PreferencesFollowingFeed.tsx:236
+#: src/view/screens/PreferencesFollowingFeed.tsx:271
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "Yes"
@@ -4415,6 +5845,10 @@ msgstr "Sí"
msgid "You are in line."
msgstr ""
+#: src/view/com/profile/ProfileFollows.tsx:86
+msgid "You are not following anyone."
+msgstr ""
+
#: src/view/com/posts/FollowingEmptyState.tsx:67
#: src/view/com/posts/FollowingEndOfFeed.tsx:68
msgid "You can also discover new Custom Feeds to follow."
@@ -4424,16 +5858,20 @@ msgstr ""
#~ msgid "You can also try our \"Discover\" algorithm:"
#~ msgstr ""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:142
+#: src/screens/Onboarding/StepFollowingFeed.tsx:143
msgid "You can change these settings later."
msgstr ""
-#: src/view/com/auth/login/Login.tsx:158
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:31
+#: src/screens/Login/index.tsx:158
+#: src/screens/Login/PasswordUpdatedForm.tsx:33
msgid "You can now sign in with your new password."
msgstr "Ahora puedes iniciar sesión con tu nueva contraseña."
-#: src/view/com/modals/InviteCodes.tsx:66
+#: src/view/com/profile/ProfileFollowers.tsx:86
+msgid "You do not have any followers."
+msgstr ""
+
+#: src/view/com/modals/InviteCodes.tsx:67
msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer."
msgstr "¡Aún no tienes códigos de invitación! Te enviaremos algunos cuando lleves un poco más de tiempo en Bluesky."
@@ -4441,7 +5879,7 @@ msgstr "¡Aún no tienes códigos de invitación! Te enviaremos algunos cuando l
msgid "You don't have any pinned feeds."
msgstr "No tienes ninguna noticia anclada."
-#: src/view/screens/Feeds.tsx:451
+#: src/view/screens/Feeds.tsx:452
msgid "You don't have any saved feeds!"
msgstr "¡No tienes ninguna noticia guardada!"
@@ -4449,25 +5887,44 @@ msgstr "¡No tienes ninguna noticia guardada!"
msgid "You don't have any saved feeds."
msgstr "No tienes ninguna noticia guardada."
-#: src/view/com/post-thread/PostThread.tsx:401
+#: src/view/com/post-thread/PostThread.tsx:159
msgid "You have blocked the author or you have been blocked by the author."
msgstr "Has bloqueado al autor o has sido bloqueado por el autor."
-#: src/view/com/modals/ModerationDetails.tsx:56
+#: src/components/moderation/ModerationDetailsDialog.tsx:66
+#: src/lib/moderation/useModerationCauseDescription.ts:50
+#: src/lib/moderation/useModerationCauseDescription.ts:58
msgid "You have blocked this user. You cannot view their content."
msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:57
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:92
+#: src/screens/Login/SetNewPasswordForm.tsx:54
+#: src/screens/Login/SetNewPasswordForm.tsx:91
#: src/view/com/modals/ChangePassword.tsx:87
#: src/view/com/modals/ChangePassword.tsx:121
msgid "You have entered an invalid code. It should look like XXXXX-XXXXX."
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:87
-msgid "You have muted this user."
+#: src/lib/moderation/useModerationCauseDescription.ts:109
+msgid "You have hidden this post"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:101
+msgid "You have hidden this post."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:94
+#: src/lib/moderation/useModerationCauseDescription.ts:92
+msgid "You have muted this account."
msgstr ""
+#: src/lib/moderation/useModerationCauseDescription.ts:86
+msgid "You have muted this user"
+msgstr ""
+
+#: src/view/com/modals/ModerationDetails.tsx:87
+#~ msgid "You have muted this user."
+#~ msgstr ""
+
#: src/view/com/feeds/ProfileFeedgens.tsx:136
msgid "You have no feeds."
msgstr "No tienes noticias."
@@ -4478,38 +5935,62 @@ msgid "You have no lists."
msgstr "No tienes listas."
#: src/view/screens/ModerationBlockedAccounts.tsx:132
-msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
-msgstr "Aún no has bloqueado ninguna cuenta. Para bloquear una cuenta, ve a su perfil y selecciona \"Bloquear cuenta\" en el menú de su cuenta."
+msgid "You have not blocked any accounts yet. To block an account, go to their profile and select \"Block account\" from the menu on their account."
+msgstr ""
-#: src/view/screens/AppPasswords.tsx:87
+#: src/view/screens/ModerationBlockedAccounts.tsx:132
+#~ msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
+#~ msgstr "Aún no has bloqueado ninguna cuenta. Para bloquear una cuenta, ve a su perfil y selecciona \"Bloquear cuenta\" en el menú de su cuenta."
+
+#: src/view/screens/AppPasswords.tsx:89
msgid "You have not created any app passwords yet. You can create one by pressing the button below."
msgstr "Aún no has creado ninguna contraseña de aplicación. Puedes crear una pulsando el botón de abajo."
#: src/view/screens/ModerationMutedAccounts.tsx:131
-msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
-msgstr "Aún no has silenciado ninguna cuenta. Para silenciar una cuenta, ve a su perfil y selecciona \"Silenciar cuenta\" en el menú de su cuenta."
+msgid "You have not muted any accounts yet. To mute an account, go to their profile and select \"Mute account\" from the menu on their account."
+msgstr ""
-#: src/view/com/modals/ContentFilteringSettings.tsx:175
-msgid "You must be 18 or older to enable adult content."
+#: src/view/screens/ModerationMutedAccounts.tsx:131
+#~ msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
+#~ msgstr "Aún no has silenciado ninguna cuenta. Para silenciar una cuenta, ve a su perfil y selecciona \"Silenciar cuenta\" en el menú de su cuenta."
+
+#: src/components/dialogs/MutedWords.tsx:249
+msgid "You haven't muted any words or tags yet"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:68
+msgid "You may appeal these labels if you feel they were placed in error."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/Policies.tsx:79
+msgid "You must be 13 years of age or older to sign up."
msgstr ""
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:103
+#: src/view/com/modals/ContentFilteringSettings.tsx:175
+#~ msgid "You must be 18 or older to enable adult content."
+#~ msgstr ""
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:110
msgid "You must be 18 years or older to enable adult content"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:98
+#: src/components/ReportDialog/SubmitView.tsx:205
+msgid "You must select at least one labeler for a report"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:144
msgid "You will no longer receive notifications for this thread"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:147
msgid "You will now receive notifications for this thread"
msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:107
+#: src/screens/Login/SetNewPasswordForm.tsx:104
msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password."
msgstr "Recibirás un correo electrónico con un \"código de restablecimiento\". Introduce ese código aquí y, a continuación, introduce tu nueva contraseña."
-#: src/screens/Onboarding/StepModeration/index.tsx:72
+#: src/screens/Onboarding/StepModeration/index.tsx:60
msgid "You're in control"
msgstr ""
@@ -4519,19 +6000,24 @@ msgstr ""
msgid "You're in line"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:90
+#: src/screens/Onboarding/StepFinished.tsx:94
msgid "You're ready to go!"
msgstr ""
+#: src/components/moderation/ModerationDetailsDialog.tsx:98
+#: src/lib/moderation/useModerationCauseDescription.ts:101
+msgid "You've chosen to hide a word or tag within this post."
+msgstr ""
+
#: src/view/com/posts/FollowingEndOfFeed.tsx:48
msgid "You've reached the end of your feed! Find some more accounts to follow."
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:74
+#: src/screens/Signup/index.tsx:150
msgid "Your account"
msgstr "Tu cuenta"
-#: src/view/com/modals/DeleteAccount.tsx:67
+#: src/view/com/modals/DeleteAccount.tsx:68
msgid "Your account has been deleted"
msgstr ""
@@ -4539,7 +6025,7 @@ msgstr ""
msgid "Your account repository, containing all public data records, can be downloaded as a \"CAR\" file. This file does not include media embeds, such as images, or your private data, which must be fetched separately."
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:234
+#: src/screens/Signup/StepInfo/index.tsx:121
msgid "Your birth date"
msgstr "Tu fecha de nacimiento"
@@ -4547,19 +6033,19 @@ msgstr "Tu fecha de nacimiento"
msgid "Your choice will be saved, but can be changed later in settings."
msgstr ""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:61
+#: src/screens/Onboarding/StepFollowingFeed.tsx:62
msgid "Your default feed is \"Following\""
msgstr ""
-#: src/view/com/auth/create/state.ts:153
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:70
+#: src/screens/Login/ForgotPasswordForm.tsx:57
+#: src/screens/Signup/state.ts:227
#: src/view/com/modals/ChangePassword.tsx:54
msgid "Your email appears to be invalid."
msgstr "Tu correo electrónico parece no ser válido."
#: src/view/com/modals/Waitlist.tsx:109
-msgid "Your email has been saved! We'll be in touch soon."
-msgstr "¡Hemos guardado tu correo electrónico! Pronto nos pondremos en contacto contigo."
+#~ msgid "Your email has been saved! We'll be in touch soon."
+#~ msgstr "¡Hemos guardado tu correo electrónico! Pronto nos pondremos en contacto contigo."
#: src/view/com/modals/ChangeEmail.tsx:125
msgid "Your email has been updated but not verified. As a next step, please verify your new email."
@@ -4573,11 +6059,11 @@ msgstr "Tu correo electrónico aún no ha sido verificado. Este es un paso de se
msgid "Your following feed is empty! Follow more users to see what's happening."
msgstr ""
-#: src/view/com/auth/create/Step3.tsx:45
+#: src/screens/Signup/StepHandle.tsx:72
msgid "Your full handle will be"
msgstr "Tu identificador completo será"
-#: src/view/com/modals/ChangeHandle.tsx:270
+#: src/view/com/modals/ChangeHandle.tsx:271
msgid "Your full handle will be <0>@{0}0>"
msgstr ""
@@ -4587,29 +6073,32 @@ msgstr ""
#~ msgid "Your invite codes are hidden when logged in using an App Password"
#~ msgstr "Tus códigos de invitación están ocultos cuando inicias sesión con una contraseña de la app"
-#: src/view/com/modals/ChangePassword.tsx:155
+#: src/components/dialogs/MutedWords.tsx:220
+msgid "Your muted words"
+msgstr ""
+
+#: src/view/com/modals/ChangePassword.tsx:157
msgid "Your password has been changed successfully!"
msgstr ""
-#: src/view/com/composer/Composer.tsx:267
+#: src/view/com/composer/Composer.tsx:284
msgid "Your post has been published"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:105
+#: src/screens/Onboarding/StepFinished.tsx:109
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:59
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:59
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:61
msgid "Your posts, likes, and blocks are public. Mutes are private."
msgstr "Tus publicaciones, Me gustas y bloqueos son públicos. Las cuentas silenciadas son privadas."
-#: src/view/com/modals/SwitchAccount.tsx:84
-#: src/view/screens/Settings/index.tsx:118
+#: src/view/screens/Settings/index.tsx:125
msgid "Your profile"
msgstr "Tu perfil"
-#: src/view/com/composer/Composer.tsx:266
+#: src/view/com/composer/Composer.tsx:283
msgid "Your reply has been published"
msgstr ""
-#: src/view/com/auth/create/Step3.tsx:28
+#: src/screens/Signup/index.tsx:152
msgid "Your user handle"
msgstr "Tu identificador del usuario"
diff --git a/src/locale/locales/fi/messages.po b/src/locale/locales/fi/messages.po
new file mode 100644
index 0000000000..d5ff67405d
--- /dev/null
+++ b/src/locale/locales/fi/messages.po
@@ -0,0 +1,6104 @@
+msgid ""
+msgstr ""
+"POT-Creation-Date: 2023-11-05 16:01-0800\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: @lingui/cli\n"
+"Language: fi\n"
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: @jaoler.fi\n"
+"Language-Team: @pekka.bsky.social,@jaoler.fi,@rahi.bsky.social\n"
+"Plural-Forms: \n"
+
+#: src/view/com/modals/VerifyEmail.tsx:142
+msgid "(no email)"
+msgstr "(ei sähköpostiosoitetta)"
+
+#: src/view/shell/desktop/RightNav.tsx:168
+#~ msgid "{0, plural, one {# invite code available} other {# invite codes available}}"
+#~ msgstr ""
+
+#: src/screens/Profile/Header/Metrics.tsx:44
+msgid "{following} following"
+msgstr "{following} seurattua"
+
+#: src/view/shell/desktop/RightNav.tsx:151
+#~ msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}"
+#~ msgstr ""
+
+#: src/view/screens/Settings.tsx:435
+#: src/view/shell/Drawer.tsx:664
+#~ msgid "{invitesAvailable} invite code available"
+#~ msgstr ""
+
+#: src/view/screens/Settings.tsx:437
+#: src/view/shell/Drawer.tsx:666
+#~ msgid "{invitesAvailable} invite codes available"
+#~ msgstr ""
+
+#: src/view/shell/Drawer.tsx:443
+msgid "{numUnreadNotifications} unread"
+msgstr "{numUnreadNotifications} lukematonta"
+
+#: src/view/com/threadgate/WhoCanReply.tsx:158
+msgid "<0/> members"
+msgstr "<0/> jäsentä"
+
+#: src/view/shell/Drawer.tsx:97
+msgid "<0>{0}0> following"
+msgstr "<0>{0}0> seurattua"
+
+#: src/screens/Profile/Header/Metrics.tsx:45
+msgid "<0>{following} 0><1>following1>"
+msgstr "<0>{following} 0><1>seurattua1>"
+
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:30
+msgid "<0>Choose your0><1>Recommended1><2>Feeds2>"
+msgstr "<0>Valitse0><1>Suositellut1><2>syötteet2>"
+
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:37
+msgid "<0>Follow some0><1>Recommended1><2>Users2>"
+msgstr "<0>Seuraa joitakin0><1>suositeltuja1><2>käyttäjiä2>"
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:21
+msgid "<0>Welcome to0><1>Bluesky1>"
+msgstr "<0>Tervetuloa0><1>Blueskyhin1>"
+
+#: src/screens/Profile/Header/Handle.tsx:42
+msgid "⚠Invalid Handle"
+msgstr "⚠Virheellinen käyttäjätunnus"
+
+#: src/view/com/util/moderation/LabelInfo.tsx:45
+#~ msgid "A content warning has been applied to this {0}."
+#~ msgstr "Tämä {0} sisältää sisältövaroituksen."
+
+#: src/lib/hooks/useOTAUpdate.ts:16
+#~ msgid "A new version of the app is available. Please update to continue using the app."
+#~ msgstr "Sovelluksen uusi versio on saatavilla. Päivitä jatkaaksesi sovelluksen käyttöä."
+
+#: src/view/com/util/ViewHeader.tsx:89
+#: src/view/screens/Search/Search.tsx:649
+msgid "Access navigation links and settings"
+msgstr "Siirry navigointilinkkeihin ja asetuksiin"
+
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:52
+msgid "Access profile and other navigation links"
+msgstr "Siirry profiiliin ja muihin navigointilinkkeihin"
+
+#: src/view/com/modals/EditImage.tsx:300
+#: src/view/screens/Settings/index.tsx:470
+msgid "Accessibility"
+msgstr "Saavutettavuus"
+
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "account"
+msgstr "käyttäjätili"
+
+#: src/screens/Login/LoginForm.tsx:144
+#: src/view/screens/Settings/index.tsx:327
+#: src/view/screens/Settings/index.tsx:743
+msgid "Account"
+msgstr "Käyttäjätili"
+
+#: src/view/com/profile/ProfileMenu.tsx:139
+msgid "Account blocked"
+msgstr "Käyttäjtili on estetty"
+
+#: src/view/com/profile/ProfileMenu.tsx:153
+msgid "Account followed"
+msgstr "Käyttäjätili seurannassa"
+
+#: src/view/com/profile/ProfileMenu.tsx:113
+msgid "Account muted"
+msgstr "Käyttäjätili hiljennetty"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:93
+#: src/lib/moderation/useModerationCauseDescription.ts:91
+msgid "Account Muted"
+msgstr "Käyttäjätili hiljennetty"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:82
+msgid "Account Muted by List"
+msgstr "Käyttäjätili hiljennetty listalla"
+
+#: src/view/com/util/AccountDropdownBtn.tsx:41
+msgid "Account options"
+msgstr "Käyttäjätilin asetukset"
+
+#: src/view/com/util/AccountDropdownBtn.tsx:25
+msgid "Account removed from quick access"
+msgstr "Käyttäjätili poistettu pikalinkeistä"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:137
+#: src/view/com/profile/ProfileMenu.tsx:128
+msgid "Account unblocked"
+msgstr "Käyttäjätilin esto poistettu"
+
+#: src/view/com/profile/ProfileMenu.tsx:166
+msgid "Account unfollowed"
+msgstr "Käyttäjätilin seuranta lopetettu"
+
+#: src/view/com/profile/ProfileMenu.tsx:102
+msgid "Account unmuted"
+msgstr "Käyttäjätilin hiljennys poistettu"
+
+#: src/components/dialogs/MutedWords.tsx:164
+#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:150
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
+#: src/view/com/modals/UserAddRemoveLists.tsx:219
+#: src/view/screens/ProfileList.tsx:827
+msgid "Add"
+msgstr "Lisää"
+
+#: src/view/com/modals/SelfLabel.tsx:56
+msgid "Add a content warning"
+msgstr "Lisää sisältövaroitus"
+
+#: src/view/screens/ProfileList.tsx:817
+msgid "Add a user to this list"
+msgstr "Lisää käyttäjä tähän listaan"
+
+#: src/components/dialogs/SwitchAccount.tsx:55
+#: src/view/screens/Settings/index.tsx:402
+#: src/view/screens/Settings/index.tsx:411
+msgid "Add account"
+msgstr "Lisää käyttäjätili"
+
+#: src/view/com/composer/photos/Gallery.tsx:119
+#: src/view/com/composer/photos/Gallery.tsx:180
+#: src/view/com/modals/AltImage.tsx:117
+msgid "Add alt text"
+msgstr "Lisää ALT-teksti"
+
+#: src/view/screens/AppPasswords.tsx:104
+#: src/view/screens/AppPasswords.tsx:145
+#: src/view/screens/AppPasswords.tsx:158
+msgid "Add App Password"
+msgstr "Lisää sovelluksen salasana"
+
+#: src/view/com/modals/report/InputIssueDetails.tsx:41
+#: src/view/com/modals/report/Modal.tsx:191
+#~ msgid "Add details"
+#~ msgstr "Lisää tiedot"
+
+#: src/view/com/modals/report/Modal.tsx:194
+#~ msgid "Add details to report"
+#~ msgstr "Lisää tiedot raporttiin"
+
+#: src/view/com/composer/Composer.tsx:467
+msgid "Add link card"
+msgstr "Lisää linkkikortti"
+
+#: src/view/com/composer/Composer.tsx:472
+msgid "Add link card:"
+msgstr "Lisää linkkikortti:"
+
+#: src/components/dialogs/MutedWords.tsx:157
+msgid "Add mute word for configured settings"
+msgstr "Lisää hiljennetty sana määritettyihin asetuksiin"
+
+#: src/components/dialogs/MutedWords.tsx:86
+msgid "Add muted words and tags"
+msgstr "Lisää hiljennetyt sanat ja aihetunnisteet"
+
+#: src/view/com/modals/ChangeHandle.tsx:416
+msgid "Add the following DNS record to your domain:"
+msgstr "Lisää seuraava DNS-merkintä verkkotunnukseesi:"
+
+#: src/view/com/profile/ProfileMenu.tsx:263
+#: src/view/com/profile/ProfileMenu.tsx:266
+msgid "Add to Lists"
+msgstr "Lisää listoihin"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:234
+msgid "Add to my feeds"
+msgstr "Lisää syötteisiini"
+
+#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:139
+msgid "Added"
+msgstr "Lisätty"
+
+#: src/view/com/modals/ListAddRemoveUsers.tsx:191
+#: src/view/com/modals/UserAddRemoveLists.tsx:144
+msgid "Added to list"
+msgstr "Lisätty listaan"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:108
+msgid "Added to my feeds"
+msgstr "Lisätty syötteisiini"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:173
+msgid "Adjust the number of likes a reply must have to be shown in your feed."
+msgstr "Säädä, kuinka monta tykkäystä vastauksen on saatava näkyäkseen syötteessäsi."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:117
+#: src/view/com/modals/SelfLabel.tsx:75
+msgid "Adult Content"
+msgstr "Aikuissisältöä"
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:141
+#~ msgid "Adult content can only be enabled via the Web at <0/>."
+#~ msgstr "Aikuissisältö voidaan ottaa käyttöön vain verkon kautta osoitteessa <0/>."
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
+#~ msgid "Adult content can only be enabled via the Web at <0>bsky.app0>."
+#~ msgstr ""
+
+#: src/components/moderation/LabelPreference.tsx:242
+msgid "Adult content is disabled."
+msgstr "Aikuissisältö on estetty"
+
+#: src/screens/Moderation/index.tsx:375
+#: src/view/screens/Settings/index.tsx:684
+msgid "Advanced"
+msgstr "Edistyneemmät"
+
+#: src/view/screens/Feeds.tsx:666
+msgid "All the feeds you've saved, right in one place."
+msgstr "Kaikki tallentamasi syötteet yhdessä paikassa."
+
+#: src/screens/Login/ForgotPasswordForm.tsx:178
+#: src/view/com/modals/ChangePassword.tsx:170
+msgid "Already have a code?"
+msgstr "Onko sinulla jo koodi?"
+
+#: src/screens/Login/ChooseAccountForm.tsx:39
+msgid "Already signed in as @{0}"
+msgstr "Kirjautuneena sisään nimellä @{0}"
+
+#: src/view/com/composer/photos/Gallery.tsx:130
+msgid "ALT"
+msgstr "ALT"
+
+#: src/view/com/modals/EditImage.tsx:316
+msgid "Alt text"
+msgstr "ALT-teksti"
+
+#: src/view/com/composer/photos/Gallery.tsx:209
+msgid "Alt text describes images for blind and low-vision users, and helps give context to everyone."
+msgstr "ALT-teksti kuvailee kuvia sokeille ja heikkonäköisille käyttäjille sekä lisää kontekstia kaikille."
+
+#: src/view/com/modals/VerifyEmail.tsx:124
+msgid "An email has been sent to {0}. It includes a confirmation code which you can enter below."
+msgstr "Sähköposti on lähetetty osoitteeseen {0}. Siinä on vahvistuskoodi, jonka voit syöttää alla."
+
+#: src/view/com/modals/ChangeEmail.tsx:119
+msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below."
+msgstr "Sähköposti on lähetetty aiempaan osoitteeseesi, {0}. Siinä on vahvistuskoodi, jonka voit syöttää alla."
+
+#: src/lib/moderation/useReportOptions.ts:26
+msgid "An issue not included in these options"
+msgstr "Ongelma, jota ei ole sisällytetty näihin vaihtoehtoihin"
+
+#: src/view/com/profile/FollowButton.tsx:35
+#: src/view/com/profile/FollowButton.tsx:45
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:188
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:198
+msgid "An issue occurred, please try again."
+msgstr "Tapahtui virhe, yritä uudelleen."
+
+#: src/view/com/notifications/FeedItem.tsx:240
+#: src/view/com/threadgate/WhoCanReply.tsx:178
+msgid "and"
+msgstr "ja"
+
+#: src/screens/Onboarding/index.tsx:32
+msgid "Animals"
+msgstr "Eläimet"
+
+#: src/lib/moderation/useReportOptions.ts:31
+msgid "Anti-Social Behavior"
+msgstr "Epäsosiaalinen käytös"
+
+#: src/view/screens/LanguageSettings.tsx:95
+msgid "App Language"
+msgstr "Sovelluksen kieli"
+
+#: src/view/screens/AppPasswords.tsx:223
+msgid "App password deleted"
+msgstr "Sovelluksen salasana poistettu"
+
+#: src/view/com/modals/AddAppPasswords.tsx:135
+msgid "App Password names can only contain letters, numbers, spaces, dashes, and underscores."
+msgstr "Sovelluksen salasanan nimet voivat sisältää vain kirjaimia, numeroita, välilyöntejä, viivoja ja alaviivoja."
+
+#: src/view/com/modals/AddAppPasswords.tsx:100
+msgid "App Password names must be at least 4 characters long."
+msgstr "Sovelluksen salasanojen nimien on oltava vähintään 4 merkkiä pitkiä."
+
+#: src/view/screens/Settings/index.tsx:695
+msgid "App password settings"
+msgstr "Sovelluksen salasanan asetukset"
+
+#: src/view/screens/Settings.tsx:650
+#~ msgid "App passwords"
+#~ msgstr ""
+
+#: src/Navigation.tsx:251
+#: src/view/screens/AppPasswords.tsx:189
+#: src/view/screens/Settings/index.tsx:704
+msgid "App Passwords"
+msgstr "Sovellussalasanat"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:133
+#: src/components/moderation/LabelsOnMeDialog.tsx:136
+msgid "Appeal"
+msgstr "Valita"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:201
+msgid "Appeal \"{0}\" label"
+msgstr "Valita \"{0}\" -merkinnästä"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:295
+#~ msgid "Appeal content warning"
+#~ msgstr "Valita sisältövaroituksesta"
+
+#: src/view/com/modals/AppealLabel.tsx:65
+#~ msgid "Appeal Content Warning"
+#~ msgstr "Valita sisältövaroituksesta"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:192
+msgid "Appeal submitted."
+msgstr "Valitus jätetty."
+
+#: src/view/com/util/moderation/LabelInfo.tsx:52
+#~ msgid "Appeal this decision"
+#~ msgstr "Valita tästä päätöksestä"
+
+#: src/view/com/util/moderation/LabelInfo.tsx:56
+#~ msgid "Appeal this decision."
+#~ msgstr "Valita tästä päätöksestä."
+
+#: src/view/screens/Settings/index.tsx:485
+msgid "Appearance"
+msgstr "Ulkonäkö"
+
+#: src/view/screens/AppPasswords.tsx:265
+msgid "Are you sure you want to delete the app password \"{name}\"?"
+msgstr "Haluatko varmasti poistaa sovellussalasanan \"{name}\"?"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:280
+msgid "Are you sure you want to remove {0} from your feeds?"
+msgstr "Haluatko varmasti poistaa {0} syötteistäsi?"
+
+#: src/view/com/composer/Composer.tsx:509
+msgid "Are you sure you'd like to discard this draft?"
+msgstr "Haluatko varmasti hylätä tämän luonnoksen?"
+
+#: src/components/dialogs/MutedWords.tsx:281
+msgid "Are you sure?"
+msgstr "Oletko varma?"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:278
+#~ msgid "Are you sure? This cannot be undone."
+#~ msgstr "Oletko varma? Tätä ei voi perua."
+
+#: src/view/com/composer/select-language/SuggestedLanguage.tsx:60
+msgid "Are you writing in <0>{0}0>?"
+msgstr "Onko viestisi kieli <0>{0}0>?"
+
+#: src/screens/Onboarding/index.tsx:26
+msgid "Art"
+msgstr "Taide"
+
+#: src/view/com/modals/SelfLabel.tsx:123
+msgid "Artistic or non-erotic nudity."
+msgstr "Taiteellinen tai ei-eroottinen alastomuus."
+
+#: src/screens/Signup/StepHandle.tsx:118
+msgid "At least 3 characters"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:246
+#: src/components/moderation/LabelsOnMeDialog.tsx:247
+#: src/screens/Login/ChooseAccountForm.tsx:73
+#: src/screens/Login/ChooseAccountForm.tsx:78
+#: src/screens/Login/ForgotPasswordForm.tsx:129
+#: src/screens/Login/ForgotPasswordForm.tsx:135
+#: src/screens/Login/LoginForm.tsx:221
+#: src/screens/Login/LoginForm.tsx:227
+#: src/screens/Login/SetNewPasswordForm.tsx:160
+#: src/screens/Login/SetNewPasswordForm.tsx:166
+#: src/screens/Profile/Header/Shell.tsx:96
+#: src/screens/Signup/index.tsx:179
+#: src/view/com/util/ViewHeader.tsx:87
+msgid "Back"
+msgstr "Takaisin"
+
+#: src/view/com/post-thread/PostThread.tsx:480
+#~ msgctxt "action"
+#~ msgid "Back"
+#~ msgstr "Takaisin"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:144
+msgid "Based on your interest in {interestsText}"
+msgstr "Perustuen kiinnostukseesi {interestsText}"
+
+#: src/view/screens/Settings/index.tsx:542
+msgid "Basics"
+msgstr "Perusasiat"
+
+#: src/components/dialogs/BirthDateSettings.tsx:107
+msgid "Birthday"
+msgstr "Syntymäpäivä"
+
+#: src/view/screens/Settings/index.tsx:359
+msgid "Birthday:"
+msgstr "Syntymäpäivä:"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+msgid "Block"
+msgstr "Estä"
+
+#: src/view/com/profile/ProfileMenu.tsx:300
+#: src/view/com/profile/ProfileMenu.tsx:307
+msgid "Block Account"
+msgstr "Estä käyttäjä"
+
+#: src/view/com/profile/ProfileMenu.tsx:344
+msgid "Block Account?"
+msgstr "Estä käyttäjätili?"
+
+#: src/view/screens/ProfileList.tsx:530
+msgid "Block accounts"
+msgstr "Estä käyttäjätilit"
+
+#: src/view/screens/ProfileList.tsx:478
+#: src/view/screens/ProfileList.tsx:634
+msgid "Block list"
+msgstr "Estettyjen lista"
+
+#: src/view/screens/ProfileList.tsx:629
+msgid "Block these accounts?"
+msgstr "Estetäänkö nämä käyttäjät?"
+
+#: src/view/screens/ProfileList.tsx:320
+#~ msgid "Block this List"
+#~ msgstr "Estä tämä lista"
+
+#: src/view/com/lists/ListCard.tsx:110
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:55
+msgid "Blocked"
+msgstr "Estetty"
+
+#: src/screens/Moderation/index.tsx:267
+msgid "Blocked accounts"
+msgstr "Estetyt käyttäjät"
+
+#: src/Navigation.tsx:134
+#: src/view/screens/ModerationBlockedAccounts.tsx:107
+msgid "Blocked Accounts"
+msgstr "Estetyt käyttäjät"
+
+#: src/view/com/profile/ProfileMenu.tsx:356
+msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
+msgstr "Estetyt käyttäjät eivät voi vastata viesteihisi, mainita sinua tai muuten olla vuorovaikutuksessa kanssasi."
+
+#: src/view/screens/ModerationBlockedAccounts.tsx:115
+msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours."
+msgstr "Estetyt käyttäjät eivät voi vastata viesteihisi, mainita sinua tai muuten olla vuorovaikutuksessa kanssasi. Et näe heidän sisältöään ja he eivät näe sinun sisältöäsi."
+
+#: src/view/com/post-thread/PostThread.tsx:313
+msgid "Blocked post."
+msgstr "Estetty viesti."
+
+#: src/screens/Profile/Sections/Labels.tsx:152
+msgid "Blocking does not prevent this labeler from placing labels on your account."
+msgstr "Estäminen ei estä tätä merkitsijää asettamasta merkintöjä tilillesi."
+
+#: src/view/screens/ProfileList.tsx:631
+msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
+msgstr "Estäminen on julkista. Estetyt käyttäjät eivät voi vastata viesteihisi, mainita sinua tai muuten olla vuorovaikutuksessa kanssasi."
+
+#: src/view/com/profile/ProfileMenu.tsx:353
+msgid "Blocking will not prevent labels from being applied on your account, but it will stop this account from replying in your threads or interacting with you."
+msgstr "Estäminen ei estä merkintöjen tekemistä tilillesi, mutta se estää kyseistä tiliä vastaamasta ketjuissasi tai muuten vuorovaikuttamasta kanssasi."
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:98
+#: src/view/com/auth/SplashScreen.web.tsx:169
+msgid "Blog"
+msgstr "Blogi"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:32
+#: src/view/com/auth/server-input/index.tsx:89
+#: src/view/com/auth/server-input/index.tsx:91
+msgid "Bluesky"
+msgstr "Bluesky"
+
+#: src/view/com/auth/server-input/index.tsx:154
+msgid "Bluesky is an open network where you can choose your hosting provider. Custom hosting is now available in beta for developers."
+msgstr "Bluesky on avoin verkko, jossa voit valita palveluntarjoajasi. Räätälöity palveluntarjoajan määritys on nyt saatavilla betavaiheen kehittäjille."
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:80
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:82
+msgid "Bluesky is flexible."
+msgstr "Bluesky on joustava."
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:69
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:71
+msgid "Bluesky is open."
+msgstr "Bluesky on avoin."
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:56
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:58
+msgid "Bluesky is public."
+msgstr "Bluesky on julkinen."
+
+#: src/view/com/modals/Waitlist.tsx:70
+#~ msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
+#~ msgstr "Bluesky käyttää kutsuja rakentaakseen terveellisemmän yhteisön. Jos et tunne ketään, jolla on kutsu, voit ilmoittautua odotuslistalle, niin lähetämme sinulle pian yhden."
+
+#: src/screens/Moderation/index.tsx:533
+msgid "Bluesky will not show your profile and posts to logged-out users. Other apps may not honor this request. This does not make your account private."
+msgstr "Bluesky ei näytä profiiliasi ja viestejäsi kirjautumattomille käyttäjille. Toiset sovellukset eivät ehkä noudata tätä asetusta. Tämä ei tee käyttäjätilistäsi yksityistä."
+
+#: src/view/com/modals/ServerInput.tsx:78
+#~ msgid "Bluesky.Social"
+#~ msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:53
+msgid "Blur images"
+msgstr "Sumenna kuvat"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:51
+msgid "Blur images and filter from feeds"
+msgstr "Sumenna kuvat ja suodata syötteistä"
+
+#: src/screens/Onboarding/index.tsx:33
+msgid "Books"
+msgstr "Kirjat"
+
+#: src/view/screens/Settings/index.tsx:893
+#~ msgid "Build version {0} {1}"
+#~ msgstr "Versio {0} {1}"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:92
+#: src/view/com/auth/SplashScreen.web.tsx:166
+msgid "Business"
+msgstr "Yritys"
+
+#: src/view/com/modals/ServerInput.tsx:115
+#~ msgid "Button disabled. Input custom domain to proceed."
+#~ msgstr "Painike poistettu käytöstä. Anna mukautettu verkkotunnus jatkaaksesi."
+
+#: src/view/com/profile/ProfileSubpageHeader.tsx:157
+msgid "by —"
+msgstr "käyttäjä —"
+
+#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:100
+msgid "by {0}"
+msgstr "käyttäjältä {0}"
+
+#: src/components/LabelingServiceCard/index.tsx:57
+msgid "By {0}"
+msgstr ""
+
+#: src/view/com/profile/ProfileSubpageHeader.tsx:161
+msgid "by <0/>"
+msgstr "käyttäjältä <0/>"
+
+#: src/screens/Signup/StepInfo/Policies.tsx:74
+msgid "By creating an account you agree to the {els}."
+msgstr "Luomalla käyttäjätilin hyväksyt {els}."
+
+#: src/view/com/profile/ProfileSubpageHeader.tsx:159
+msgid "by you"
+msgstr "sinulta"
+
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:77
+msgid "Camera"
+msgstr "Kamera"
+
+#: src/view/com/modals/AddAppPasswords.tsx:217
+msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long."
+msgstr "Voi sisältää vain kirjaimia, numeroita, välilyöntejä, viivoja ja alaviivoja. Täytyy olla vähintään 4 merkkiä pitkä, mutta enintään 32 merkkiä pitkä."
+
+#: src/components/Menu/index.tsx:213
+#: src/components/Prompt.tsx:113
+#: src/components/Prompt.tsx:115
+#: src/components/TagMenu/index.tsx:268
+#: src/view/com/composer/Composer.tsx:317
+#: src/view/com/composer/Composer.tsx:322
+#: src/view/com/modals/ChangeEmail.tsx:218
+#: src/view/com/modals/ChangeEmail.tsx:220
+#: src/view/com/modals/ChangeHandle.tsx:154
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
+#: src/view/com/modals/CreateOrEditList.tsx:356
+#: src/view/com/modals/crop-image/CropImage.web.tsx:138
+#: src/view/com/modals/EditImage.tsx:324
+#: src/view/com/modals/EditProfile.tsx:250
+#: src/view/com/modals/InAppBrowserConsent.tsx:78
+#: src/view/com/modals/InAppBrowserConsent.tsx:80
+#: src/view/com/modals/LinkWarning.tsx:105
+#: src/view/com/modals/LinkWarning.tsx:107
+#: src/view/com/modals/Repost.tsx:88
+#: src/view/com/modals/VerifyEmail.tsx:247
+#: src/view/com/modals/VerifyEmail.tsx:253
+#: src/view/screens/Search/Search.tsx:718
+#: src/view/shell/desktop/Search.tsx:239
+msgid "Cancel"
+msgstr "Peruuta"
+
+#: src/view/com/modals/CreateOrEditList.tsx:361
+#: src/view/com/modals/DeleteAccount.tsx:155
+#: src/view/com/modals/DeleteAccount.tsx:233
+msgctxt "action"
+msgid "Cancel"
+msgstr "Peruuta"
+
+#: src/view/com/modals/DeleteAccount.tsx:151
+#: src/view/com/modals/DeleteAccount.tsx:229
+msgid "Cancel account deletion"
+msgstr "Peruuta käyttäjätilin poisto"
+
+#: src/view/com/modals/ChangeHandle.tsx:150
+msgid "Cancel change handle"
+msgstr "Peruuta käyttäjätunnuksen vaihto"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:135
+msgid "Cancel image crop"
+msgstr "Peruuta kuvan rajaus"
+
+#: src/view/com/modals/EditProfile.tsx:245
+msgid "Cancel profile editing"
+msgstr "Peruuta profiilin muokkaus"
+
+#: src/view/com/modals/Repost.tsx:79
+msgid "Cancel quote post"
+msgstr "Peruuta uudelleenpostaus"
+
+#: src/view/com/modals/ListAddRemoveUsers.tsx:87
+#: src/view/shell/desktop/Search.tsx:235
+msgid "Cancel search"
+msgstr "Peruuta haku"
+
+#: src/view/com/modals/Waitlist.tsx:136
+#~ msgid "Cancel waitlist signup"
+#~ msgstr "Peruuta odotuslistalle liittyminen"
+
+#: src/view/com/modals/LinkWarning.tsx:106
+msgid "Cancels opening the linked website"
+msgstr "Peruuttaa linkitetyn verkkosivuston avaamisen"
+
+#: src/view/com/modals/VerifyEmail.tsx:152
+msgid "Change"
+msgstr "Vaihda"
+
+#: src/view/screens/Settings/index.tsx:353
+msgctxt "action"
+msgid "Change"
+msgstr "Vaihda"
+
+#: src/view/screens/Settings/index.tsx:716
+msgid "Change handle"
+msgstr "Vaihda käyttäjätunnus"
+
+#: src/view/com/modals/ChangeHandle.tsx:162
+#: src/view/screens/Settings/index.tsx:727
+msgid "Change Handle"
+msgstr "Vaihda käyttäjätunnus"
+
+#: src/view/com/modals/VerifyEmail.tsx:147
+msgid "Change my email"
+msgstr "Vaihda sähköpostiosoitteeni"
+
+#: src/view/screens/Settings/index.tsx:754
+msgid "Change password"
+msgstr "Vaihda salasana"
+
+#: src/view/com/modals/ChangePassword.tsx:141
+#: src/view/screens/Settings/index.tsx:765
+msgid "Change Password"
+msgstr "Vaihda salasana"
+
+#: src/view/com/composer/select-language/SuggestedLanguage.tsx:73
+msgid "Change post language to {0}"
+msgstr "Vaihda julkaisun kieleksi {0}"
+
+#: src/view/screens/Settings/index.tsx:733
+#~ msgid "Change your Bluesky password"
+#~ msgstr "Vaihda Bluesky-salasanasi"
+
+#: src/view/com/modals/ChangeEmail.tsx:109
+msgid "Change Your Email"
+msgstr "Vaihda sähköpostiosoitteesi"
+
+#: src/screens/Deactivated.tsx:72
+#: src/screens/Deactivated.tsx:76
+msgid "Check my status"
+msgstr "Tarkista tilani"
+
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:121
+msgid "Check out some recommended feeds. Tap + to add them to your list of pinned feeds."
+msgstr "Katso joitakin suositeltuja syötteitä. Napauta + lisätäksesi ne kiinnitettyjen syötteiden luetteloon."
+
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:185
+msgid "Check out some recommended users. Follow them to see similar users."
+msgstr "Tutustu suositeltuihin käyttäjiin. Seuraa heitä löytääksesi samankaltaisia käyttäjiä."
+
+#: src/view/com/modals/DeleteAccount.tsx:168
+msgid "Check your inbox for an email with the confirmation code to enter below:"
+msgstr "Tarkista sähköpostisi ja syötä saamasi vahvistuskoodi alle:"
+
+#: src/view/com/modals/Threadgate.tsx:72
+msgid "Choose \"Everybody\" or \"Nobody\""
+msgstr "Valitse \"Kaikki\" tai \"Ei kukaan\""
+
+#: src/view/screens/Settings/index.tsx:697
+#~ msgid "Choose a new Bluesky username or create"
+#~ msgstr "Valitse uusi Bluesky-käyttäjätunnus tai luo"
+
+#: src/view/com/auth/server-input/index.tsx:79
+msgid "Choose Service"
+msgstr "Valitse palvelu"
+
+#: src/screens/Onboarding/StepFinished.tsx:139
+msgid "Choose the algorithms that power your custom feeds."
+msgstr "Valitse algoritmit, jotka ohjaavat mukautettuja syötteitäsi."
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:83
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:85
+msgid "Choose the algorithms that power your experience with custom feeds."
+msgstr "Valitse algoritmit, jotka ohjaavat kokemustasi mukautettujen syötteiden kanssa."
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:103
+#~ msgid "Choose your algorithmic feeds"
+#~ msgstr "Valitse algoritmiperustaiset syötteet"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:104
+msgid "Choose your main feeds"
+msgstr "Valitse pääsyötteet"
+
+#: src/screens/Signup/StepInfo/index.tsx:112
+msgid "Choose your password"
+msgstr "Valitse salasanasi"
+
+#: src/view/screens/Settings/index.tsx:868
+msgid "Clear all legacy storage data"
+msgstr "Tyhjennä kaikki vanhan tietomallin mukaiset tiedot"
+
+#: src/view/screens/Settings/index.tsx:871
+msgid "Clear all legacy storage data (restart after this)"
+msgstr "Tyhjennä kaikki vanhan tietomallin tiedot (käynnistä uudelleen tämän jälkeen)"
+
+#: src/view/screens/Settings/index.tsx:880
+msgid "Clear all storage data"
+msgstr "Tyhjennä kaikki tallennukset"
+
+#: src/view/screens/Settings/index.tsx:883
+msgid "Clear all storage data (restart after this)"
+msgstr "Tyhjennä kaikki tallennukset (käynnistä uudelleen tämän jälkeen)"
+
+#: src/view/com/util/forms/SearchInput.tsx:88
+#: src/view/screens/Search/Search.tsx:699
+msgid "Clear search query"
+msgstr "Tyhjennä hakukysely"
+
+#: src/view/screens/Settings/index.tsx:869
+msgid "Clears all legacy storage data"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:881
+msgid "Clears all storage data"
+msgstr "Tyhjentää kaikki tallennustiedot"
+
+#: src/view/screens/Support.tsx:40
+msgid "click here"
+msgstr "klikkaa tästä"
+
+#: src/components/TagMenu/index.web.tsx:138
+msgid "Click here to open tag menu for {tag}"
+msgstr "Avaa tästä valikko aihetunnisteelle {tag}"
+
+#: src/components/RichText.tsx:192
+msgid "Click here to open tag menu for #{tag}"
+msgstr "Klikkaa tästä avataksesi valikon aihetunnisteelle #{tag}."
+
+#: src/screens/Onboarding/index.tsx:35
+msgid "Climate"
+msgstr "Ilmasto"
+
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
+msgid "Close"
+msgstr "Sulje"
+
+#: src/components/Dialog/index.web.tsx:106
+#: src/components/Dialog/index.web.tsx:218
+msgid "Close active dialog"
+msgstr "Sulje aktiivinen ikkuna"
+
+#: src/screens/Login/PasswordUpdatedForm.tsx:38
+msgid "Close alert"
+msgstr "Sulje hälytys"
+
+#: src/view/com/util/BottomSheetCustomBackdrop.tsx:36
+msgid "Close bottom drawer"
+msgstr "Sulje alavalinnat"
+
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:36
+msgid "Close image"
+msgstr "Sulje kuva"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:129
+msgid "Close image viewer"
+msgstr "Sulje kuvankatselu"
+
+#: src/view/shell/index.web.tsx:55
+msgid "Close navigation footer"
+msgstr "Sulje alanavigointi"
+
+#: src/components/Menu/index.tsx:207
+#: src/components/TagMenu/index.tsx:262
+msgid "Close this dialog"
+msgstr "Sulje tämä valintaikkuna"
+
+#: src/view/shell/index.web.tsx:56
+msgid "Closes bottom navigation bar"
+msgstr "Sulkee alanavigaation"
+
+#: src/screens/Login/PasswordUpdatedForm.tsx:39
+msgid "Closes password update alert"
+msgstr "Sulkee salasanan päivitysilmoituksen"
+
+#: src/view/com/composer/Composer.tsx:319
+msgid "Closes post composer and discards post draft"
+msgstr "Sulkee editorin ja hylkää luonnoksen"
+
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:37
+msgid "Closes viewer for header image"
+msgstr "Sulkee kuvan katseluohjelman"
+
+#: src/view/com/notifications/FeedItem.tsx:321
+msgid "Collapses list of users for a given notification"
+msgstr "Pienentää käyttäjäluettelon annetulle ilmoitukselle"
+
+#: src/screens/Onboarding/index.tsx:41
+msgid "Comedy"
+msgstr "Komedia"
+
+#: src/screens/Onboarding/index.tsx:27
+msgid "Comics"
+msgstr "Sarjakuvat"
+
+#: src/Navigation.tsx:241
+#: src/view/screens/CommunityGuidelines.tsx:32
+msgid "Community Guidelines"
+msgstr "Yhteisöohjeet"
+
+#: src/screens/Onboarding/StepFinished.tsx:152
+msgid "Complete onboarding and start using your account"
+msgstr "Suorita käyttöönotto loppuun ja aloita käyttäjätilisi käyttö"
+
+#: src/screens/Signup/index.tsx:154
+msgid "Complete the challenge"
+msgstr "Tee haaste loppuun"
+
+#: src/view/com/composer/Composer.tsx:438
+msgid "Compose posts up to {MAX_GRAPHEME_LENGTH} characters in length"
+msgstr "Laadi viestejä, joiden pituus on enintään {MAX_GRAPHEME_LENGTH} merkkiä"
+
+#: src/view/com/composer/Prompt.tsx:24
+msgid "Compose reply"
+msgstr "Kirjoita vastaus"
+
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:81
+msgid "Configure content filtering setting for category: {0}"
+msgstr "Määritä sisällönsuodatusasetus aiheille: {0}"
+
+#: src/components/moderation/LabelPreference.tsx:81
+msgid "Configure content filtering setting for category: {name}"
+msgstr ""
+
+#: src/components/moderation/LabelPreference.tsx:244
+msgid "Configured in <0>moderation settings0>."
+msgstr ""
+
+#: src/components/Prompt.tsx:153
+#: src/components/Prompt.tsx:156
+#: src/view/com/modals/SelfLabel.tsx:154
+#: src/view/com/modals/VerifyEmail.tsx:231
+#: src/view/com/modals/VerifyEmail.tsx:233
+#: src/view/screens/PreferencesFollowingFeed.tsx:308
+#: src/view/screens/PreferencesThreads.tsx:159
+msgid "Confirm"
+msgstr "Vahvista"
+
+#: src/view/com/modals/Confirm.tsx:75
+#: src/view/com/modals/Confirm.tsx:78
+#~ msgctxt "action"
+#~ msgid "Confirm"
+#~ msgstr "Vahvista"
+
+#: src/view/com/modals/ChangeEmail.tsx:193
+#: src/view/com/modals/ChangeEmail.tsx:195
+msgid "Confirm Change"
+msgstr "Vahvista muutos"
+
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:35
+msgid "Confirm content language settings"
+msgstr "Vahvista sisällön kieliasetukset"
+
+#: src/view/com/modals/DeleteAccount.tsx:219
+msgid "Confirm delete account"
+msgstr "Vahvista käyttäjätilin poisto"
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:156
+#~ msgid "Confirm your age to enable adult content."
+#~ msgstr "Vahvista ikäsi nähdäksesi ikärajarajoitettua sisältöä"
+
+#: src/screens/Moderation/index.tsx:301
+msgid "Confirm your age:"
+msgstr "Vahvista ikäsi:"
+
+#: src/screens/Moderation/index.tsx:292
+msgid "Confirm your birthdate"
+msgstr "Vahvista syntymäaikasi"
+
+#: src/view/com/modals/ChangeEmail.tsx:157
+#: src/view/com/modals/DeleteAccount.tsx:175
+#: src/view/com/modals/DeleteAccount.tsx:181
+#: src/view/com/modals/VerifyEmail.tsx:165
+msgid "Confirmation code"
+msgstr "Vahvistuskoodi"
+
+#: src/view/com/modals/Waitlist.tsx:120
+#~ msgid "Confirms signing up {email} to the waitlist"
+#~ msgstr "Vahvistaa sähköpostiosoitteen {email} - rekisteröinnin odotuslistalle"
+
+#: src/screens/Login/LoginForm.tsx:248
+msgid "Connecting..."
+msgstr "Yhdistetään..."
+
+#: src/screens/Signup/index.tsx:219
+msgid "Contact support"
+msgstr "Ota yhteyttä tukeen"
+
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "content"
+msgstr "sisältö"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:18
+msgid "Content Blocked"
+msgstr "Sisältö estetty"
+
+#: src/view/screens/Moderation.tsx:83
+#~ msgid "Content filtering"
+#~ msgstr "Sisällönsuodatus"
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:44
+#~ msgid "Content Filtering"
+#~ msgstr "Sisällönsuodatus"
+
+#: src/screens/Moderation/index.tsx:285
+msgid "Content filters"
+msgstr "Sisältösuodattimet"
+
+#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74
+#: src/view/screens/LanguageSettings.tsx:278
+msgid "Content Languages"
+msgstr "Sisältöjen kielet"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:75
+#: src/lib/moderation/useModerationCauseDescription.ts:75
+msgid "Content Not Available"
+msgstr "Sisältö ei ole saatavilla"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:46
+#: src/components/moderation/ScreenHider.tsx:99
+#: src/lib/moderation/useGlobalLabelStrings.ts:22
+#: src/lib/moderation/useModerationCauseDescription.ts:38
+msgid "Content Warning"
+msgstr "Sisältövaroitus"
+
+#: src/view/com/composer/labels/LabelsBtn.tsx:31
+msgid "Content warnings"
+msgstr "Sisältövaroitukset"
+
+#: src/components/Menu/index.web.tsx:84
+msgid "Context menu backdrop, click to close the menu."
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:161
+#: src/screens/Onboarding/StepFollowingFeed.tsx:154
+#: src/screens/Onboarding/StepInterests/index.tsx:252
+#: src/screens/Onboarding/StepModeration/index.tsx:103
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:118
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:96
+msgid "Continue"
+msgstr "Jatka"
+
+#: src/components/AccountList.tsx:108
+msgid "Continue as {0} (currently signed in)"
+msgstr ""
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:151
+#: src/screens/Onboarding/StepInterests/index.tsx:249
+#: src/screens/Onboarding/StepModeration/index.tsx:100
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:115
+#: src/screens/Signup/index.tsx:198
+msgid "Continue to next step"
+msgstr "Jatka seuraavaan vaiheeseen"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:158
+msgid "Continue to the next step"
+msgstr "Jatka seuraavaan vaiheeseen"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:199
+msgid "Continue to the next step without following any accounts"
+msgstr "Jatka seuraavaan vaiheeseen seuraamatta yhtään tiliä"
+
+#: src/screens/Onboarding/index.tsx:44
+msgid "Cooking"
+msgstr "Ruoanlaitto"
+
+#: src/view/com/modals/AddAppPasswords.tsx:196
+#: src/view/com/modals/InviteCodes.tsx:183
+msgid "Copied"
+msgstr "Kopioitu"
+
+#: src/view/screens/Settings/index.tsx:251
+msgid "Copied build version to clipboard"
+msgstr "Ohjelmiston versio kopioitu leikepöydälle"
+
+#: src/view/com/modals/AddAppPasswords.tsx:77
+#: src/view/com/modals/ChangeHandle.tsx:326
+#: src/view/com/modals/InviteCodes.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:158
+msgid "Copied to clipboard"
+msgstr "Kopioitu leikepöydälle"
+
+#: src/view/com/modals/AddAppPasswords.tsx:190
+msgid "Copies app password"
+msgstr "Kopioi sovellussalasanan"
+
+#: src/view/com/modals/AddAppPasswords.tsx:189
+msgid "Copy"
+msgstr "Kopioi"
+
+#: src/view/com/modals/ChangeHandle.tsx:480
+msgid "Copy {0}"
+msgstr "Kopioi {0}"
+
+#: src/view/screens/ProfileList.tsx:388
+msgid "Copy link to list"
+msgstr "Kopioi listan linkki"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
+msgid "Copy link to post"
+msgstr "Kopioi julkaisun linkki"
+
+#: src/view/com/profile/ProfileHeader.tsx:295
+#~ msgid "Copy link to profile"
+#~ msgstr "Kopioi linkki profiiliin"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:220
+#: src/view/com/util/forms/PostDropdownBtn.tsx:222
+msgid "Copy post text"
+msgstr "Kopioi viestin teksti"
+
+#: src/Navigation.tsx:246
+#: src/view/screens/CopyrightPolicy.tsx:29
+msgid "Copyright Policy"
+msgstr "Tekijänoikeuskäytäntö"
+
+#: src/view/screens/ProfileFeed.tsx:103
+msgid "Could not load feed"
+msgstr "Syötettä ei voitu ladata"
+
+#: src/view/screens/ProfileList.tsx:907
+msgid "Could not load list"
+msgstr "Listaa ei voitu ladata"
+
+#: src/view/com/auth/create/Step2.tsx:91
+#~ msgid "Country"
+#~ msgstr "Maa"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:65
+#: src/view/com/auth/SplashScreen.tsx:75
+#: src/view/com/auth/SplashScreen.web.tsx:104
+msgid "Create a new account"
+msgstr "Luo uusi käyttäjätili"
+
+#: src/view/screens/Settings/index.tsx:403
+msgid "Create a new Bluesky account"
+msgstr "Luo uusi Bluesky-tili"
+
+#: src/screens/Signup/index.tsx:129
+msgid "Create Account"
+msgstr "Luo käyttäjätili"
+
+#: src/view/com/modals/AddAppPasswords.tsx:227
+msgid "Create App Password"
+msgstr "Luo sovellussalasana"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:55
+#: src/view/com/auth/SplashScreen.tsx:66
+#: src/view/com/auth/SplashScreen.web.tsx:95
+msgid "Create new account"
+msgstr "Luo uusi käyttäjätili"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:93
+msgid "Create report for {0}"
+msgstr "Luo raportti: {0}"
+
+#: src/view/screens/AppPasswords.tsx:246
+msgid "Created {0}"
+msgstr "{0} luotu"
+
+#: src/view/screens/ProfileFeed.tsx:616
+#~ msgid "Created by <0/>"
+#~ msgstr "Luonut <0/>"
+
+#: src/view/screens/ProfileFeed.tsx:614
+#~ msgid "Created by you"
+#~ msgstr "Luomasi sisältö"
+
+#: src/view/com/composer/Composer.tsx:469
+msgid "Creates a card with a thumbnail. The card links to {url}"
+msgstr "Luo kortin pikkukuvan kanssa. Kortti linkittyy osoitteeseen {url}"
+
+#: src/screens/Onboarding/index.tsx:29
+msgid "Culture"
+msgstr "Kulttuuri"
+
+#: src/view/com/auth/server-input/index.tsx:97
+#: src/view/com/auth/server-input/index.tsx:99
+msgid "Custom"
+msgstr "Mukautettu"
+
+#: src/view/com/modals/ChangeHandle.tsx:388
+msgid "Custom domain"
+msgstr "Mukautettu verkkotunnus"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:107
+#: src/view/screens/Feeds.tsx:692
+msgid "Custom feeds built by the community bring you new experiences and help you find the content you love."
+msgstr "Yhteisön rakentamat mukautetut syötteet tuovat sinulle uusia kokemuksia ja auttavat löytämään mieluisaa sisältöä."
+
+#: src/view/screens/PreferencesExternalEmbeds.tsx:55
+msgid "Customize media from external sites."
+msgstr "Muokkaa ulkoisten sivustojen mediasisältöjen asetuksia"
+
+#: src/view/screens/Settings.tsx:687
+#~ msgid "Danger Zone"
+#~ msgstr ""
+
+#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:530
+msgid "Dark"
+msgstr "Tumma"
+
+#: src/view/screens/Debug.tsx:63
+msgid "Dark mode"
+msgstr "Tumma ulkoasu"
+
+#: src/view/screens/Settings/index.tsx:517
+msgid "Dark Theme"
+msgstr "Tumma teema"
+
+#: src/screens/Signup/StepInfo/index.tsx:132
+msgid "Date of birth"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:841
+msgid "Debug Moderation"
+msgstr ""
+
+#: src/view/screens/Debug.tsx:83
+msgid "Debug panel"
+msgstr "Vianetsintäpaneeli"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:319
+#: src/view/screens/AppPasswords.tsx:268
+#: src/view/screens/ProfileList.tsx:613
+msgid "Delete"
+msgstr "Poista"
+
+#: src/view/screens/Settings/index.tsx:796
+msgid "Delete account"
+msgstr "Poista käyttäjätili"
+
+#: src/view/com/modals/DeleteAccount.tsx:86
+msgid "Delete Account"
+msgstr "Poista käyttäjätili"
+
+#: src/view/screens/AppPasswords.tsx:239
+msgid "Delete app password"
+msgstr "Poista sovellussalasana"
+
+#: src/view/screens/AppPasswords.tsx:263
+msgid "Delete app password?"
+msgstr "Poista sovellussalasana"
+
+#: src/view/screens/ProfileList.tsx:415
+msgid "Delete List"
+msgstr "Poista lista"
+
+#: src/view/com/modals/DeleteAccount.tsx:222
+msgid "Delete my account"
+msgstr "Poista käyttäjätilini"
+
+#: src/view/screens/Settings.tsx:706
+#~ msgid "Delete my account…"
+#~ msgstr ""
+
+#: src/view/screens/Settings/index.tsx:808
+msgid "Delete My Account…"
+msgstr "Poista käyttäjätilini…"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:302
+#: src/view/com/util/forms/PostDropdownBtn.tsx:304
+msgid "Delete post"
+msgstr "Poista viesti"
+
+#: src/view/screens/ProfileList.tsx:608
+msgid "Delete this list?"
+msgstr "Poista tämä lista?"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:314
+msgid "Delete this post?"
+msgstr "Poista tämä viesti?"
+
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:64
+msgid "Deleted"
+msgstr "Poistettu"
+
+#: src/view/com/post-thread/PostThread.tsx:305
+msgid "Deleted post."
+msgstr "Poistettu viesti."
+
+#: src/view/com/modals/CreateOrEditList.tsx:301
+#: src/view/com/modals/CreateOrEditList.tsx:322
+#: src/view/com/modals/EditProfile.tsx:199
+#: src/view/com/modals/EditProfile.tsx:211
+msgid "Description"
+msgstr "Kuvaus"
+
+#: src/view/screens/Settings.tsx:760
+#~ msgid "Developer Tools"
+#~ msgstr "Kehittäjätyökalut"
+
+#: src/view/com/composer/Composer.tsx:218
+msgid "Did you want to say anything?"
+msgstr "Haluatko sanoa jotain?"
+
+#: src/view/screens/Settings/index.tsx:523
+msgid "Dim"
+msgstr "Himmeä"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:32
+#: src/lib/moderation/useLabelBehaviorDescription.ts:42
+#: src/lib/moderation/useLabelBehaviorDescription.ts:68
+#: src/screens/Moderation/index.tsx:341
+msgid "Disabled"
+msgstr "Poistettu käytöstä"
+
+#: src/view/com/composer/Composer.tsx:511
+msgid "Discard"
+msgstr "Hylkää"
+
+#: src/view/com/composer/Composer.tsx:145
+#~ msgid "Discard draft"
+#~ msgstr "Hylkää luonnos"
+
+#: src/view/com/composer/Composer.tsx:508
+msgid "Discard draft?"
+msgstr "Hylkää luonnos?"
+
+#: src/screens/Moderation/index.tsx:518
+#: src/screens/Moderation/index.tsx:522
+msgid "Discourage apps from showing my account to logged-out users"
+msgstr "Estä sovelluksia näyttämästä tiliäni kirjautumattomille käyttäjille"
+
+#: src/view/com/posts/FollowingEmptyState.tsx:74
+#: src/view/com/posts/FollowingEndOfFeed.tsx:75
+msgid "Discover new custom feeds"
+msgstr "Löydä uusia mukautettuja syötteitä"
+
+#: src/view/screens/Feeds.tsx:473
+#~ msgid "Discover new feeds"
+#~ msgstr ""
+
+#: src/view/screens/Feeds.tsx:689
+msgid "Discover New Feeds"
+msgstr "Löydä uusia syötteitä"
+
+#: src/view/com/modals/EditProfile.tsx:193
+msgid "Display name"
+msgstr "Näyttönimi"
+
+#: src/view/com/modals/EditProfile.tsx:181
+msgid "Display Name"
+msgstr "Näyttönimi"
+
+#: src/view/com/modals/ChangeHandle.tsx:397
+msgid "DNS Panel"
+msgstr "DNS-paneeli"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:39
+msgid "Does not include nudity."
+msgstr "Ei sisällä alastomuutta."
+
+#: src/screens/Signup/StepHandle.tsx:104
+msgid "Doesn't begin or end with a hyphen"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "Domain Value"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:488
+msgid "Domain verified!"
+msgstr "Verkkotunnus vahvistettu!"
+
+#: src/view/com/auth/create/Step1.tsx:170
+#~ msgid "Don't have an invite code?"
+#~ msgstr "Eikö sinulla ole kutsukoodia?"
+
+#: src/components/dialogs/BirthDateSettings.tsx:119
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/components/forms/DateField/index.tsx:74
+#: src/components/forms/DateField/index.tsx:80
+#: src/view/com/auth/server-input/index.tsx:169
+#: src/view/com/auth/server-input/index.tsx:170
+#: src/view/com/modals/AddAppPasswords.tsx:227
+#: src/view/com/modals/AltImage.tsx:140
+#: src/view/com/modals/crop-image/CropImage.web.tsx:153
+#: src/view/com/modals/InviteCodes.tsx:81
+#: src/view/com/modals/InviteCodes.tsx:124
+#: src/view/com/modals/ListAddRemoveUsers.tsx:142
+#: src/view/screens/PreferencesFollowingFeed.tsx:311
+#: src/view/screens/Settings/ExportCarDialog.tsx:94
+#: src/view/screens/Settings/ExportCarDialog.tsx:96
+msgid "Done"
+msgstr "Valmis"
+
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86
+#: src/view/com/modals/EditImage.tsx:334
+#: src/view/com/modals/ListAddRemoveUsers.tsx:144
+#: src/view/com/modals/SelfLabel.tsx:157
+#: src/view/com/modals/Threadgate.tsx:129
+#: src/view/com/modals/Threadgate.tsx:132
+#: src/view/com/modals/UserAddRemoveLists.tsx:95
+#: src/view/com/modals/UserAddRemoveLists.tsx:98
+#: src/view/screens/PreferencesThreads.tsx:162
+msgctxt "action"
+msgid "Done"
+msgstr "Valmis"
+
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:43
+msgid "Done{extraText}"
+msgstr "Valmis{extraText}"
+
+#: src/view/com/auth/login/ChooseAccountForm.tsx:46
+#~ msgid "Double tap to sign in"
+#~ msgstr "Kaksoisnapauta kirjautuaksesi sisään"
+
+#: src/view/screens/Settings/index.tsx:755
+#~ msgid "Download Bluesky account data (repository)"
+#~ msgstr "Lataa Bluesky-tilin tiedot (repository)"
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:59
+#: src/view/screens/Settings/ExportCarDialog.tsx:63
+msgid "Download CAR file"
+msgstr "Lataa CAR tiedosto"
+
+#: src/view/com/composer/text-input/TextInput.web.tsx:249
+msgid "Drop to add images"
+msgstr "Raahaa tähän lisätäksesi kuvia"
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:120
+msgid "Due to Apple policies, adult content can only be enabled on the web after completing sign up."
+msgstr "Applen sääntöjen vuoksi aikuisviihde voidaan ottaa käyttöön vasta rekisteröitymisen jälkeen."
+
+#: src/view/com/modals/ChangeHandle.tsx:258
+msgid "e.g. alice"
+msgstr "esim. maija"
+
+#: src/view/com/modals/EditProfile.tsx:186
+msgid "e.g. Alice Roberts"
+msgstr "esim. Maija Mallikas"
+
+#: src/view/com/modals/ChangeHandle.tsx:380
+msgid "e.g. alice.com"
+msgstr "esim. liisa.fi"
+
+#: src/view/com/modals/EditProfile.tsx:204
+msgid "e.g. Artist, dog-lover, and avid reader."
+msgstr "esim. Taiteilija, koiraharrastaja ja innokas lukija."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:43
+msgid "E.g. artistic nudes."
+msgstr "Esimerkiksi taiteelliset alastonkuvat."
+
+#: src/view/com/modals/CreateOrEditList.tsx:284
+msgid "e.g. Great Posters"
+msgstr "esim. Loistavat kirjoittajat"
+
+#: src/view/com/modals/CreateOrEditList.tsx:285
+msgid "e.g. Spammers"
+msgstr "esim. Roskapostittajat"
+
+#: src/view/com/modals/CreateOrEditList.tsx:313
+msgid "e.g. The posters who never miss."
+msgstr "esim. Julkaisijat, jotka osuvat maaliin aina."
+
+#: src/view/com/modals/CreateOrEditList.tsx:314
+msgid "e.g. Users that repeatedly reply with ads."
+msgstr "esim. Käyttäjät, jotka vastaavat toistuvasti mainoksilla."
+
+#: src/view/com/modals/InviteCodes.tsx:97
+msgid "Each code works once. You'll receive more invite codes periodically."
+msgstr "Jokainen koodi toimii vain kerran. Saat lisää kutsukoodeja säännöllisin väliajoin."
+
+#: src/view/com/lists/ListMembers.tsx:149
+msgctxt "action"
+msgid "Edit"
+msgstr "Muokkaa"
+
+#: src/view/com/util/UserAvatar.tsx:299
+#: src/view/com/util/UserBanner.tsx:85
+msgid "Edit avatar"
+msgstr "Muokkaa profiilikuvaa"
+
+#: src/view/com/composer/photos/Gallery.tsx:144
+#: src/view/com/modals/EditImage.tsx:208
+msgid "Edit image"
+msgstr "Muokkaa kuvaa"
+
+#: src/view/screens/ProfileList.tsx:403
+msgid "Edit list details"
+msgstr "Muokkaa listan tietoja"
+
+#: src/view/com/modals/CreateOrEditList.tsx:251
+msgid "Edit Moderation List"
+msgstr "Muokkaa moderaatiolistaa"
+
+#: src/Navigation.tsx:256
+#: src/view/screens/Feeds.tsx:434
+#: src/view/screens/SavedFeeds.tsx:84
+msgid "Edit My Feeds"
+msgstr "Muokkaa syötteitä"
+
+#: src/view/com/modals/EditProfile.tsx:153
+msgid "Edit my profile"
+msgstr "Muokkaa profiilia"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:171
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:168
+msgid "Edit profile"
+msgstr "Muokkaa profiilia"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:174
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:171
+msgid "Edit Profile"
+msgstr "Muokkaa profiilia"
+
+#: src/view/com/home/HomeHeaderLayout.web.tsx:62
+#: src/view/screens/Feeds.tsx:355
+msgid "Edit Saved Feeds"
+msgstr "Muokkaa tallennettuja syötteitä"
+
+#: src/view/com/modals/CreateOrEditList.tsx:246
+msgid "Edit User List"
+msgstr "Muokkaa käyttäjälistaa"
+
+#: src/view/com/modals/EditProfile.tsx:194
+msgid "Edit your display name"
+msgstr "Muokkaa näyttönimeäsi"
+
+#: src/view/com/modals/EditProfile.tsx:212
+msgid "Edit your profile description"
+msgstr "Muokkaa profiilin kuvausta"
+
+#: src/screens/Onboarding/index.tsx:34
+msgid "Education"
+msgstr "Koulutus"
+
+#: src/screens/Signup/StepInfo/index.tsx:80
+#: src/view/com/modals/ChangeEmail.tsx:141
+msgid "Email"
+msgstr "Sähköposti"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:99
+msgid "Email address"
+msgstr "Sähköpostiosoite"
+
+#: src/view/com/modals/ChangeEmail.tsx:56
+#: src/view/com/modals/ChangeEmail.tsx:88
+msgid "Email updated"
+msgstr "Sähköpostiosoite päivitetty"
+
+#: src/view/com/modals/ChangeEmail.tsx:111
+msgid "Email Updated"
+msgstr "Sähköpostiosoite päivitetty"
+
+#: src/view/com/modals/VerifyEmail.tsx:78
+msgid "Email verified"
+msgstr "Sähköpostiosoite vahvistettu"
+
+#: src/view/screens/Settings/index.tsx:331
+msgid "Email:"
+msgstr "Sähköpostiosoite:"
+
+#: src/components/dialogs/EmbedConsent.tsx:101
+msgid "Enable {0} only"
+msgstr "Ota käyttöön vain {0}"
+
+#: src/screens/Moderation/index.tsx:329
+msgid "Enable adult content"
+msgstr "Ota aikuissisältö käyttöön"
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:94
+msgid "Enable Adult Content"
+msgstr "Ota aikuissisältö käyttöön"
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:79
+msgid "Enable adult content in your feeds"
+msgstr "Näytä aikuissisältöä syötteissäsi"
+
+#: src/components/dialogs/EmbedConsent.tsx:82
+#: src/components/dialogs/EmbedConsent.tsx:89
+msgid "Enable external media"
+msgstr ""
+
+#: src/view/com/modals/EmbedConsent.tsx:97
+#~ msgid "Enable External Media"
+#~ msgstr "Ota ulkoinen media käyttöön"
+
+#: src/view/screens/PreferencesExternalEmbeds.tsx:75
+msgid "Enable media players for"
+msgstr "Ota mediatoistimet käyttöön kohteille"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:147
+msgid "Enable this setting to only see replies between people you follow."
+msgstr "Ota tämä asetus käyttöön nähdäksesi vastaukset vain seuraamiltasi ihmisiltä."
+
+#: src/components/dialogs/EmbedConsent.tsx:94
+msgid "Enable this source only"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:339
+msgid "Enabled"
+msgstr "Käytössä"
+
+#: src/screens/Profile/Sections/Feed.tsx:84
+msgid "End of feed"
+msgstr "Syötteen loppu"
+
+#: src/view/com/modals/AddAppPasswords.tsx:167
+msgid "Enter a name for this App Password"
+msgstr "Anna sovellusalasanalle nimi"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:139
+msgid "Enter a password"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:99
+#: src/components/dialogs/MutedWords.tsx:100
+msgid "Enter a word or tag"
+msgstr "Kirjoita sana tai aihetunniste"
+
+#: src/view/com/modals/VerifyEmail.tsx:105
+msgid "Enter Confirmation Code"
+msgstr "Syötä vahvistuskoodi"
+
+#: src/view/com/modals/ChangePassword.tsx:153
+msgid "Enter the code you received to change your password."
+msgstr "Anna saamasi koodi vaihtaaksesi salasanasi."
+
+#: src/view/com/modals/ChangeHandle.tsx:370
+msgid "Enter the domain you want to use"
+msgstr "Anna verkkotunnus, jota haluat käyttää"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:119
+msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password."
+msgstr "Anna sähköpostiosoite, jotaa käytit tilin luomiseen. Lähetämme sinulle \"nollauskoodin\", jotta voit määritellä uuden salasanan."
+
+#: src/components/dialogs/BirthDateSettings.tsx:108
+msgid "Enter your birth date"
+msgstr "Syötä syntymäaikasi"
+
+#: src/view/com/modals/Waitlist.tsx:78
+#~ msgid "Enter your email"
+#~ msgstr "Syötä sähköpostiosoitteesi"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:105
+#: src/screens/Signup/StepInfo/index.tsx:91
+msgid "Enter your email address"
+msgstr "Syötä sähköpostiosoitteesi"
+
+#: src/view/com/modals/ChangeEmail.tsx:41
+msgid "Enter your new email above"
+msgstr "Syötä uusi sähköpostiosoitteesi yläpuolelle"
+
+#: src/view/com/modals/ChangeEmail.tsx:117
+msgid "Enter your new email address below."
+msgstr "Syötä uusi sähköpostiosoitteesi alle"
+
+#: src/view/com/auth/create/Step2.tsx:188
+#~ msgid "Enter your phone number"
+#~ msgstr "Syötä puhelinnumerosi"
+
+#: src/screens/Login/index.tsx:101
+msgid "Enter your username and password"
+msgstr "Syötä käyttäjätunnuksesi ja salasanasi"
+
+#: src/screens/Signup/StepCaptcha/index.tsx:49
+msgid "Error receiving captcha response."
+msgstr "Virhe captcha-vastauksen vastaanottamisessa."
+
+#: src/view/screens/Search/Search.tsx:111
+msgid "Error:"
+msgstr "Virhe:"
+
+#: src/view/com/modals/Threadgate.tsx:76
+msgid "Everybody"
+msgstr "Kaikki"
+
+#: src/lib/moderation/useReportOptions.ts:66
+msgid "Excessive mentions or replies"
+msgstr "Liialliset maininnat tai vastaukset"
+
+#: src/view/com/modals/DeleteAccount.tsx:230
+msgid "Exits account deletion process"
+msgstr "Keskeyttää tilin poistoprosessin"
+
+#: src/view/com/modals/ChangeHandle.tsx:151
+msgid "Exits handle change process"
+msgstr "Peruuttaa käyttäjätunnuksen vaihtamisen"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:136
+msgid "Exits image cropping process"
+msgstr "Keskeyttää kuvan rajausprosessin"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:130
+msgid "Exits image view"
+msgstr "Poistuu kuvan katselutilasta"
+
+#: src/view/com/modals/ListAddRemoveUsers.tsx:88
+#: src/view/shell/desktop/Search.tsx:236
+msgid "Exits inputting search query"
+msgstr "Poistuu hakukyselyn kirjoittamisesta"
+
+#: src/view/com/modals/Waitlist.tsx:138
+#~ msgid "Exits signing up for waitlist with {email}"
+#~ msgstr "Poistuu odotuslistalle liittymisestä sähköpostilla {email}"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:183
+msgid "Expand alt text"
+msgstr "Laajenna ALT-teksti"
+
+#: src/view/com/composer/ComposerReplyTo.tsx:81
+#: src/view/com/composer/ComposerReplyTo.tsx:84
+msgid "Expand or collapse the full post you are replying to"
+msgstr "Laajenna tai pienennä viesti johon olit vastaamassa"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:47
+msgid "Explicit or potentially disturbing media."
+msgstr "Selvästi tai mahdollisesti häiritsevä media."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:35
+msgid "Explicit sexual images."
+msgstr "Selvästi seksuaalista kuvamateriaalia."
+
+#: src/view/screens/Settings/index.tsx:777
+msgid "Export my data"
+msgstr "Vie tietoni"
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:44
+#: src/view/screens/Settings/index.tsx:788
+msgid "Export My Data"
+msgstr "Vie tietoni"
+
+#: src/components/dialogs/EmbedConsent.tsx:55
+#: src/components/dialogs/EmbedConsent.tsx:59
+msgid "External Media"
+msgstr "Ulkoiset mediat"
+
+#: src/components/dialogs/EmbedConsent.tsx:71
+#: src/view/screens/PreferencesExternalEmbeds.tsx:66
+msgid "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."
+msgstr "Ulkoiset mediat voivat sallia verkkosivustojen kerätä tietoja sinusta ja laitteestasi. Tietoja ei lähetetä eikä pyydetä, ennen kuin painat \"toista\"-painiketta."
+
+#: src/Navigation.tsx:275
+#: src/view/screens/PreferencesExternalEmbeds.tsx:52
+#: src/view/screens/Settings/index.tsx:677
+msgid "External Media Preferences"
+msgstr "Ulkoisten mediasoittimien asetukset"
+
+#: src/view/screens/Settings/index.tsx:668
+msgid "External media settings"
+msgstr "Ulkoisten mediasoittimien asetukset"
+
+#: src/view/com/modals/AddAppPasswords.tsx:116
+#: src/view/com/modals/AddAppPasswords.tsx:120
+msgid "Failed to create app password."
+msgstr "Sovellussalasanan luominen epäonnistui."
+
+#: src/view/com/modals/CreateOrEditList.tsx:207
+msgid "Failed to create the list. Check your internet connection and try again."
+msgstr "Listan luominen epäonnistui. Tarkista internetyhteytesi ja yritä uudelleen."
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:125
+msgid "Failed to delete post, please try again"
+msgstr "Viestin poistaminen epäonnistui, yritä uudelleen"
+
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:109
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:141
+msgid "Failed to load recommended feeds"
+msgstr "Suositeltujen syötteiden lataaminen epäonnistui"
+
+#: src/view/com/lightbox/Lightbox.tsx:83
+msgid "Failed to save image: {0}"
+msgstr "Kuvan {0} tallennus epäonnistui"
+
+#: src/Navigation.tsx:196
+msgid "Feed"
+msgstr "Syöte"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:218
+msgid "Feed by {0}"
+msgstr "Syöte käyttäjältä {0}"
+
+#: src/view/screens/Feeds.tsx:605
+msgid "Feed offline"
+msgstr "Syöte ei ole käytettävissä"
+
+#: src/view/com/feeds/FeedPage.tsx:143
+#~ msgid "Feed Preferences"
+#~ msgstr "Syötteen asetukset"
+
+#: src/view/shell/desktop/RightNav.tsx:61
+#: src/view/shell/Drawer.tsx:314
+msgid "Feedback"
+msgstr "Palaute"
+
+#: src/Navigation.tsx:464
+#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:524
+#: src/view/screens/Profile.tsx:194
+#: src/view/shell/bottom-bar/BottomBar.tsx:191
+#: src/view/shell/desktop/LeftNav.tsx:346
+#: src/view/shell/Drawer.tsx:479
+#: src/view/shell/Drawer.tsx:480
+msgid "Feeds"
+msgstr "Syötteet"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
+#~ msgid "Feeds are created by users and can give you entirely new experiences."
+#~ msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
+#~ msgid "Feeds are created by users and organizations. They offer you varied experiences and suggest content you may like using algorithms."
+#~ msgstr ""
+
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:57
+msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting."
+msgstr "Käyttäjät luovat syötteitä sisällön kuratointiin. Valitse joitakin syötteitä, jotka koet mielenkiintoisiksi."
+
+#: src/view/screens/SavedFeeds.tsx:156
+msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information."
+msgstr "Syötteet ovat käyttäjien rakentamia mukautettuja algoritmeja, jotka vaativat vain vähän koodaustaitoja. <0/> lisätietoa varten."
+
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:80
+msgid "Feeds can be topical as well!"
+msgstr "Syötteet voivat olla myös aihepiirikohtaisia!"
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "File Contents"
+msgstr "Tiedoston sisältö"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:66
+msgid "Filter from feeds"
+msgstr "Suodata syötteistä"
+
+#: src/screens/Onboarding/StepFinished.tsx:155
+msgid "Finalizing"
+msgstr "Viimeistely"
+
+#: src/view/com/posts/CustomFeedEmptyState.tsx:47
+#: src/view/com/posts/FollowingEmptyState.tsx:57
+#: src/view/com/posts/FollowingEndOfFeed.tsx:58
+msgid "Find accounts to follow"
+msgstr "Etsi seurattavia tilejä"
+
+#: src/view/screens/Search/Search.tsx:442
+msgid "Find users on Bluesky"
+msgstr "Etsi käyttäjiä Bluesky-palvelusta"
+
+#: src/view/screens/Search/Search.tsx:440
+msgid "Find users with the search tool on the right"
+msgstr "Etsi käyttäjiä oikealla olevan hakutyökalun avulla"
+
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:155
+msgid "Finding similar accounts..."
+msgstr "Etsitään samankaltaisia käyttäjätilejä"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:111
+msgid "Fine-tune the content you see on your Following feed."
+msgstr "Hienosäädä näkemääsi sisältöä Seuratut-syötteessäsi."
+
+#: src/view/screens/PreferencesHomeFeed.tsx:111
+#~ msgid "Fine-tune the content you see on your home screen."
+#~ msgstr "Hienosäädä näkemääsi sisältöä pääsivulla."
+
+#: src/view/screens/PreferencesThreads.tsx:60
+msgid "Fine-tune the discussion threads."
+msgstr "Hienosäädä keskusteluketjuja."
+
+#: src/screens/Onboarding/index.tsx:38
+msgid "Fitness"
+msgstr "Kuntoilu"
+
+#: src/screens/Onboarding/StepFinished.tsx:135
+msgid "Flexible"
+msgstr "Joustava"
+
+#: src/view/com/modals/EditImage.tsx:116
+msgid "Flip horizontal"
+msgstr "Käännä vaakasuunnassa"
+
+#: src/view/com/modals/EditImage.tsx:121
+#: src/view/com/modals/EditImage.tsx:288
+msgid "Flip vertically"
+msgstr "Käännä pystysuunnassa"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:189
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:236
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:146
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
+msgid "Follow"
+msgstr "Seuraa"
+
+#: src/view/com/profile/FollowButton.tsx:69
+msgctxt "action"
+msgid "Follow"
+msgstr "Seuraa"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:58
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:221
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:128
+msgid "Follow {0}"
+msgstr "Seuraa {0}"
+
+#: src/view/com/profile/ProfileMenu.tsx:242
+#: src/view/com/profile/ProfileMenu.tsx:253
+msgid "Follow Account"
+msgstr ""
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:187
+msgid "Follow All"
+msgstr "Seuraa kaikkia"
+
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:144
+msgid "Follow Back"
+msgstr ""
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:182
+msgid "Follow selected accounts and continue to the next step"
+msgstr "Seuraa valittuja tilejä ja siirry seuraavaan vaiheeseen"
+
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:64
+msgid "Follow some users to get started. We can recommend you more users based on who you find interesting."
+msgstr "Seuraa joitakin käyttäjiä aloittaaksesi. Suosittelemme sinulle lisää käyttäjiä sen perusteella, ketä pidät mielenkiintoisena."
+
+#: src/view/com/profile/ProfileCard.tsx:216
+msgid "Followed by {0}"
+msgstr "Seuraajina {0}"
+
+#: src/view/com/modals/Threadgate.tsx:98
+msgid "Followed users"
+msgstr "Seuratut käyttäjät"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:154
+msgid "Followed users only"
+msgstr "Vain seuratut käyttäjät"
+
+#: src/view/com/notifications/FeedItem.tsx:170
+msgid "followed you"
+msgstr "seurasi sinua"
+
+#: src/view/com/profile/ProfileFollowers.tsx:104
+#: src/view/screens/ProfileFollowers.tsx:25
+msgid "Followers"
+msgstr "Seuraajat"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:234
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:149
+#: src/view/com/profile/ProfileFollows.tsx:104
+#: src/view/screens/ProfileFollows.tsx:25
+msgid "Following"
+msgstr "Seurataan"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:93
+msgid "Following {0}"
+msgstr "Seurataan {0}"
+
+#: src/view/screens/Settings/index.tsx:553
+msgid "Following feed preferences"
+msgstr "Seuratut -syötteen asetukset"
+
+#: src/Navigation.tsx:262
+#: src/view/com/home/HomeHeaderLayout.web.tsx:50
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:84
+#: src/view/screens/PreferencesFollowingFeed.tsx:104
+#: src/view/screens/Settings/index.tsx:562
+msgid "Following Feed Preferences"
+msgstr "Seuratut -syötteen asetukset"
+
+#: src/screens/Profile/Header/Handle.tsx:24
+msgid "Follows you"
+msgstr "Seuraa sinua"
+
+#: src/view/com/profile/ProfileCard.tsx:141
+msgid "Follows You"
+msgstr "Seuraa sinua"
+
+#: src/screens/Onboarding/index.tsx:43
+msgid "Food"
+msgstr "Ruoka"
+
+#: src/view/com/modals/DeleteAccount.tsx:110
+msgid "For security reasons, we'll need to send a confirmation code to your email address."
+msgstr "Turvallisuussyistä meidän on lähetettävä vahvistuskoodi sähköpostiosoitteeseesi."
+
+#: src/view/com/modals/AddAppPasswords.tsx:210
+msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one."
+msgstr "Turvallisuussyistä et näe tätä uudelleen. Jos unohdat tämän salasanan, sinun on luotava uusi."
+
+#: src/view/com/auth/login/LoginForm.tsx:244
+#~ msgid "Forgot"
+#~ msgstr "Unohtui"
+
+#: src/view/com/auth/login/LoginForm.tsx:241
+#~ msgid "Forgot password"
+#~ msgstr "Unohtunut salasana"
+
+#: src/screens/Login/index.tsx:129
+#: src/screens/Login/index.tsx:144
+msgid "Forgot Password"
+msgstr "Unohtunut salasana"
+
+#: src/screens/Login/LoginForm.tsx:201
+msgid "Forgot password?"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:212
+msgid "Forgot?"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:52
+msgid "Frequently Posts Unwanted Content"
+msgstr "Julkaisee usein ei-toivottua sisältöä"
+
+#: src/screens/Hashtag.tsx:109
+#: src/screens/Hashtag.tsx:149
+msgid "From @{sanitizedAuthor}"
+msgstr ""
+
+#: src/view/com/posts/FeedItem.tsx:179
+msgctxt "from-feed"
+msgid "From <0/>"
+msgstr "Lähde: <0/>"
+
+#: src/view/com/composer/photos/SelectPhotoBtn.tsx:43
+msgid "Gallery"
+msgstr "Galleria"
+
+#: src/view/com/modals/VerifyEmail.tsx:189
+#: src/view/com/modals/VerifyEmail.tsx:191
+msgid "Get Started"
+msgstr "Aloita tästä"
+
+#: src/lib/moderation/useReportOptions.ts:37
+msgid "Glaring violations of law or terms of service"
+msgstr "Ilmeisiä lain tai käyttöehtojen rikkomuksia"
+
+#: src/components/moderation/ScreenHider.tsx:151
+#: src/components/moderation/ScreenHider.tsx:160
+#: src/view/com/auth/LoggedOut.tsx:82
+#: src/view/com/auth/LoggedOut.tsx:83
+#: src/view/screens/NotFound.tsx:55
+#: src/view/screens/ProfileFeed.tsx:112
+#: src/view/screens/ProfileList.tsx:916
+#: src/view/shell/desktop/LeftNav.tsx:108
+msgid "Go back"
+msgstr "Palaa takaisin"
+
+#: src/components/Error.tsx:91
+#: src/screens/Profile/ErrorState.tsx:62
+#: src/screens/Profile/ErrorState.tsx:66
+#: src/view/screens/NotFound.tsx:54
+#: src/view/screens/ProfileFeed.tsx:117
+#: src/view/screens/ProfileList.tsx:921
+msgid "Go Back"
+msgstr "Palaa takaisin"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:73
+#: src/components/ReportDialog/SubmitView.tsx:104
+#: src/screens/Onboarding/Layout.tsx:102
+#: src/screens/Onboarding/Layout.tsx:191
+#: src/screens/Signup/index.tsx:173
+msgid "Go back to previous step"
+msgstr "Palaa edelliseen vaiheeseen"
+
+#: src/view/screens/NotFound.tsx:55
+msgid "Go home"
+msgstr "Palaa alkuun"
+
+#: src/view/screens/NotFound.tsx:54
+msgid "Go Home"
+msgstr "Palaa alkuun"
+
+#: src/view/screens/Search/Search.tsx:749
+#: src/view/shell/desktop/Search.tsx:263
+msgid "Go to @{queryMaybeHandle}"
+msgstr "Siirry @{queryMaybeHandle}"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:172
+#: src/view/com/modals/ChangePassword.tsx:167
+msgid "Go to next"
+msgstr "Siirry seuraavaan"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:46
+msgid "Graphic Media"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:266
+msgid "Handle"
+msgstr "Käyttäjätunnus"
+
+#: src/lib/moderation/useReportOptions.ts:32
+msgid "Harassment, trolling, or intolerance"
+msgstr "Häirintä, trollaus tai suvaitsemattomuus"
+
+#: src/Navigation.tsx:282
+msgid "Hashtag"
+msgstr "Aihetunniste"
+
+#: src/components/RichText.tsx:188
+#~ msgid "Hashtag: {tag}"
+#~ msgstr "Aihetunniste: {tag}"
+
+#: src/components/RichText.tsx:191
+msgid "Hashtag: #{tag}"
+msgstr "Aihetunniste #{tag}"
+
+#: src/screens/Signup/index.tsx:217
+msgid "Having trouble?"
+msgstr "Ongelmia?"
+
+#: src/view/shell/desktop/RightNav.tsx:90
+#: src/view/shell/Drawer.tsx:324
+msgid "Help"
+msgstr "Ohje"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:140
+msgid "Here are some accounts for you to follow"
+msgstr "Tässä on joitakin tilejä seurattavaksi"
+
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:89
+msgid "Here are some popular topical feeds. You can choose to follow as many as you like."
+msgstr "Tässä on joitakin suosittuja aihepiirikohtaisia syötteitä. Voit valita seurattavaksi niin monta kuin haluat."
+
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:84
+msgid "Here are some topical feeds based on your interests: {interestsText}. You can choose to follow as many as you like."
+msgstr "Tässä on joitakin aihepiirikohtaisia syötteitä kiinnostuksiesi perusteella: {interestsText}. Voit valita seurata niin montaa kuin haluat."
+
+#: src/view/com/modals/AddAppPasswords.tsx:154
+msgid "Here is your app password."
+msgstr "Tässä on sovelluksesi salasana."
+
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:134
+#: src/components/moderation/PostHider.tsx:107
+#: src/lib/moderation/useLabelBehaviorDescription.ts:15
+#: src/lib/moderation/useLabelBehaviorDescription.ts:20
+#: src/lib/moderation/useLabelBehaviorDescription.ts:25
+#: src/lib/moderation/useLabelBehaviorDescription.ts:30
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:52
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:76
+#: src/view/com/util/forms/PostDropdownBtn.tsx:328
+msgid "Hide"
+msgstr "Piilota"
+
+#: src/view/com/notifications/FeedItem.tsx:329
+msgctxt "action"
+msgid "Hide"
+msgstr "Piilota"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:276
+#: src/view/com/util/forms/PostDropdownBtn.tsx:278
+msgid "Hide post"
+msgstr "Piilota viesti"
+
+#: src/components/moderation/ContentHider.tsx:67
+#: src/components/moderation/PostHider.tsx:64
+msgid "Hide the content"
+msgstr "Piilota sisältö"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:325
+msgid "Hide this post?"
+msgstr "Piilota tämä viesti?"
+
+#: src/view/com/notifications/FeedItem.tsx:319
+msgid "Hide user list"
+msgstr "Piilota käyttäjäluettelo"
+
+#: src/view/com/profile/ProfileHeader.tsx:487
+#~ msgid "Hides posts from {0} in your feed"
+#~ msgstr "Piilottaa viestit käyttäjältä {0} syötteessäsi"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:111
+msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue."
+msgstr "Hmm, jokin ongelma ilmeni ottaessa yhteyttä syötteen palvelimeen. Ilmoita asiasta syötteen omistajalle."
+
+#: src/view/com/posts/FeedErrorMessage.tsx:99
+msgid "Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue."
+msgstr "Hmm, syötteen palvelin vaikuttaa olevan väärin konfiguroitu. Ilmoita asiasta syötteen omistajalle."
+
+#: src/view/com/posts/FeedErrorMessage.tsx:105
+msgid "Hmm, the feed server appears to be offline. Please let the feed owner know about this issue."
+msgstr "Hmm, syötteen palvelin vaikuttaa olevan poissa käytöstä. Ilmoita asiasta syötteen omistajalle."
+
+#: src/view/com/posts/FeedErrorMessage.tsx:102
+msgid "Hmm, the feed server gave a bad response. Please let the feed owner know about this issue."
+msgstr "Hmm, syötteen palvelin antoi virheellisen vastauksen. Ilmoita asiasta syötteen omistajalle."
+
+#: src/view/com/posts/FeedErrorMessage.tsx:96
+msgid "Hmm, we're having trouble finding this feed. It may have been deleted."
+msgstr "Hmm, meillä on vaikeuksia löytää tätä syötettä. Se saattaa olla poistettu."
+
+#: src/screens/Moderation/index.tsx:59
+msgid "Hmmmm, it seems we're having trouble loading this data. See below for more details. If this issue persists, please contact us."
+msgstr "Hmm, vaikuttaa siltä, että tämän datan lataamisessa on ongelmia. Katso lisätietoja alta. Jos ongelma jatkuu, ole hyvä ja ota yhteyttä meihin."
+
+#: src/screens/Profile/ErrorState.tsx:31
+msgid "Hmmmm, we couldn't load that moderation service."
+msgstr "Hmm, emme pystyneet avaamaan kyseistä moderaatiopalvelua."
+
+#: src/Navigation.tsx:454
+#: src/view/shell/bottom-bar/BottomBar.tsx:147
+#: src/view/shell/desktop/LeftNav.tsx:310
+#: src/view/shell/Drawer.tsx:401
+#: src/view/shell/Drawer.tsx:402
+msgid "Home"
+msgstr "Koti"
+
+#: src/Navigation.tsx:247
+#: src/view/com/pager/FeedsTabBarMobile.tsx:123
+#: src/view/screens/PreferencesHomeFeed.tsx:104
+#: src/view/screens/Settings/index.tsx:543
+#~ msgid "Home Feed Preferences"
+#~ msgstr "Aloitussivun syötteiden asetukset"
+
+#: src/view/com/modals/ChangeHandle.tsx:420
+msgid "Host:"
+msgstr ""
+
+#: src/screens/Login/ForgotPasswordForm.tsx:89
+#: src/screens/Login/LoginForm.tsx:134
+#: src/screens/Signup/StepInfo/index.tsx:40
+#: src/view/com/modals/ChangeHandle.tsx:281
+msgid "Hosting provider"
+msgstr "Hostingyritys"
+
+#: src/view/com/modals/InAppBrowserConsent.tsx:44
+msgid "How should we open this link?"
+msgstr "Kuinka haluat avata tämän linkin?"
+
+#: src/view/com/modals/VerifyEmail.tsx:214
+msgid "I have a code"
+msgstr "Minulla on koodi"
+
+#: src/view/com/modals/VerifyEmail.tsx:216
+msgid "I have a confirmation code"
+msgstr "Minulla on vahvistuskoodi"
+
+#: src/view/com/modals/ChangeHandle.tsx:284
+msgid "I have my own domain"
+msgstr "Minulla on oma verkkotunnus"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:185
+msgid "If alt text is long, toggles alt text expanded state"
+msgstr "Jos ALT-teksti on pitkä, vaihtaa ALT-tekstin laajennetun tilan"
+
+#: src/view/com/modals/SelfLabel.tsx:127
+msgid "If none are selected, suitable for all ages."
+msgstr "Jos mitään ei ole valittu, sopii kaikenikäisille."
+
+#: src/screens/Signup/StepInfo/Policies.tsx:83
+msgid "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."
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:610
+msgid "If you delete this list, you won't be able to recover it."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:316
+msgid "If you remove this post, you won't be able to recover it."
+msgstr ""
+
+#: src/view/com/modals/ChangePassword.tsx:148
+msgid "If you want to change your password, we will send you a code to verify that this is your account."
+msgstr "Jos haluat vaihtaa salasanasi, lähetämme sinulle koodin varmistaaksemme, että tämä on käyttäjätilisi."
+
+#: src/lib/moderation/useReportOptions.ts:36
+msgid "Illegal and Urgent"
+msgstr "Laiton ja kiireellinen"
+
+#: src/view/com/util/images/Gallery.tsx:38
+msgid "Image"
+msgstr "Kuva"
+
+#: src/view/com/modals/AltImage.tsx:121
+msgid "Image alt text"
+msgstr "Kuvan ALT-teksti"
+
+#: src/view/com/util/UserAvatar.tsx:311
+#: src/view/com/util/UserBanner.tsx:118
+#~ msgid "Image options"
+#~ msgstr "Kuva-asetukset"
+
+#: src/lib/moderation/useReportOptions.ts:47
+msgid "Impersonation or false claims about identity or affiliation"
+msgstr "Henkilöllisyyden tai yhteyksien vääristely tai vääriä väitteitä niistä"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:127
+msgid "Input code sent to your email for password reset"
+msgstr "Syötä sähköpostiisi lähetetty koodi salasanan nollaamista varten"
+
+#: src/view/com/modals/DeleteAccount.tsx:183
+msgid "Input confirmation code for account deletion"
+msgstr "Syötä vahvistuskoodi käyttäjätilin poistoa varten"
+
+#: src/view/com/auth/create/Step1.tsx:177
+#~ msgid "Input email for Bluesky account"
+#~ msgstr "Syötä sähköposti Bluesky-tiliä varten"
+
+#: src/view/com/auth/create/Step1.tsx:151
+#~ msgid "Input invite code to proceed"
+#~ msgstr "Syötä kutsukoodi jatkaaksesi"
+
+#: src/view/com/modals/AddAppPasswords.tsx:181
+msgid "Input name for app password"
+msgstr "Syötä nimi sovellussalasanaa varten"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:151
+msgid "Input new password"
+msgstr "Syötä uusi salasana"
+
+#: src/view/com/modals/DeleteAccount.tsx:202
+msgid "Input password for account deletion"
+msgstr "Syötä salasana käyttäjätilin poistoa varten"
+
+#: src/view/com/auth/create/Step2.tsx:196
+#~ msgid "Input phone number for SMS verification"
+#~ msgstr "Syötä puhelinnumero SMS-varmennusta varten"
+
+#: src/screens/Login/LoginForm.tsx:195
+msgid "Input the password tied to {identifier}"
+msgstr "Syötä salasana, joka liittyy kohteeseen {identifier}"
+
+#: src/screens/Login/LoginForm.tsx:168
+msgid "Input the username or email address you used at signup"
+msgstr "Syötä käyttäjätunnus tai sähköpostiosoite, jonka käytit rekisteröityessäsi"
+
+#: src/view/com/auth/create/Step2.tsx:271
+#~ msgid "Input the verification code we have texted to you"
+#~ msgstr "Syötä sinulle tekstattu varmennuskoodi"
+
+#: src/view/com/modals/Waitlist.tsx:90
+#~ msgid "Input your email to get on the Bluesky waitlist"
+#~ msgstr "Syötä sähköpostiosoitteesi päästäksesi Bluesky-jonoon"
+
+#: src/screens/Login/LoginForm.tsx:194
+msgid "Input your password"
+msgstr "Syötä salasanasi"
+
+#: src/view/com/modals/ChangeHandle.tsx:389
+msgid "Input your preferred hosting provider"
+msgstr "Syötä haluamasi palveluntarjoaja"
+
+#: src/screens/Signup/StepHandle.tsx:62
+msgid "Input your user handle"
+msgstr "Syötä käyttäjätunnuksesi"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:221
+msgid "Invalid or unsupported post record"
+msgstr "Virheellinen tai ei tuettu tietue"
+
+#: src/screens/Login/LoginForm.tsx:114
+msgid "Invalid username or password"
+msgstr "Virheellinen käyttäjätunnus tai salasana"
+
+#: src/view/screens/Settings.tsx:411
+#~ msgid "Invite"
+#~ msgstr "Kutsu"
+
+#: src/view/com/modals/InviteCodes.tsx:94
+msgid "Invite a Friend"
+msgstr "Kutsu ystävä"
+
+#: src/screens/Signup/StepInfo/index.tsx:58
+msgid "Invite code"
+msgstr "Kutsukoodi"
+
+#: src/screens/Signup/state.ts:278
+msgid "Invite code not accepted. Check that you input it correctly and try again."
+msgstr "Kutsukoodia ei hyväksytty. Tarkista, että syötit sen oikein ja yritä uudelleen."
+
+#: src/view/com/modals/InviteCodes.tsx:171
+msgid "Invite codes: {0} available"
+msgstr "Kutsukoodit: {0} saatavilla"
+
+#: src/view/shell/Drawer.tsx:645
+#~ msgid "Invite codes: {invitesAvailable} available"
+#~ msgstr ""
+
+#: src/view/com/modals/InviteCodes.tsx:170
+msgid "Invite codes: 1 available"
+msgstr "Kutsukoodit: 1 saatavilla"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:65
+msgid "It shows posts from the people you follow as they happen."
+msgstr "Se näyttää viestejä seuraamiltasi ihmisiltä reaaliajassa."
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:104
+#: src/view/com/auth/SplashScreen.web.tsx:172
+msgid "Jobs"
+msgstr "Työpaikat"
+
+#: src/view/com/modals/Waitlist.tsx:67
+#~ msgid "Join the waitlist"
+#~ msgstr "Liity odotuslistalle"
+
+#: src/view/com/auth/create/Step1.tsx:174
+#: src/view/com/auth/create/Step1.tsx:178
+#~ msgid "Join the waitlist."
+#~ msgstr "Liity odotuslistalle."
+
+#: src/view/com/modals/Waitlist.tsx:128
+#~ msgid "Join Waitlist"
+#~ msgstr "Liity odotuslistalle"
+
+#: src/screens/Onboarding/index.tsx:24
+msgid "Journalism"
+msgstr "Journalismi"
+
+#: src/components/moderation/LabelsOnMe.tsx:59
+msgid "label has been placed on this {labelTarget}"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:144
+msgid "Labeled by {0}."
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:142
+msgid "Labeled by the author."
+msgstr ""
+
+#: src/view/screens/Profile.tsx:188
+msgid "Labels"
+msgstr ""
+
+#: src/screens/Profile/Sections/Labels.tsx:142
+msgid "Labels are annotations on users and content. They can be used to hide, warn, and categorize the network."
+msgstr ""
+
+#: src/components/moderation/LabelsOnMe.tsx:61
+msgid "labels have been placed on this {labelTarget}"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:62
+msgid "Labels on your account"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:64
+msgid "Labels on your content"
+msgstr ""
+
+#: src/view/com/composer/select-language/SelectLangBtn.tsx:104
+msgid "Language selection"
+msgstr "Kielen valinta"
+
+#: src/view/screens/Settings/index.tsx:614
+msgid "Language settings"
+msgstr "Kielen asetukset"
+
+#: src/Navigation.tsx:144
+#: src/view/screens/LanguageSettings.tsx:89
+msgid "Language Settings"
+msgstr "Kielen asetukset"
+
+#: src/view/screens/Settings/index.tsx:623
+msgid "Languages"
+msgstr "Kielet"
+
+#: src/view/com/auth/create/StepHeader.tsx:20
+#~ msgid "Last step!"
+#~ msgstr "Viimeinen vaihe!"
+
+#: src/view/com/util/moderation/ContentHider.tsx:103
+#~ msgid "Learn more"
+#~ msgstr "Lue lisää"
+
+#: src/components/moderation/ScreenHider.tsx:136
+msgid "Learn More"
+msgstr "Lue lisää"
+
+#: src/components/moderation/ContentHider.tsx:65
+#: src/components/moderation/ContentHider.tsx:128
+msgid "Learn more about the moderation applied to this content."
+msgstr ""
+
+#: src/components/moderation/PostHider.tsx:85
+#: src/components/moderation/ScreenHider.tsx:125
+msgid "Learn more about this warning"
+msgstr "Lue lisää tästä varoituksesta"
+
+#: src/screens/Moderation/index.tsx:549
+msgid "Learn more about what is public on Bluesky."
+msgstr "Lue lisää siitä, mikä on julkista Blueskyssa."
+
+#: src/components/moderation/ContentHider.tsx:152
+msgid "Learn more."
+msgstr "Lue lisää."
+
+#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82
+msgid "Leave them all unchecked to see any language."
+msgstr "Jätä kaikki valitsematta nähdäksesi minkä tahansa kielen."
+
+#: src/view/com/modals/LinkWarning.tsx:65
+msgid "Leaving Bluesky"
+msgstr "Poistuminen Blueskysta"
+
+#: src/screens/Deactivated.tsx:128
+msgid "left to go."
+msgstr "jäljellä."
+
+#: src/view/screens/Settings/index.tsx:296
+msgid "Legacy storage cleared, you need to restart the app now."
+msgstr "Legacy tietovarasto tyhjennetty, sinun on käynnistettävä sovellus uudelleen nyt."
+
+#: src/screens/Login/index.tsx:130
+#: src/screens/Login/index.tsx:145
+msgid "Let's get your password reset!"
+msgstr "Aloitetaan salasanasi nollaus!"
+
+#: src/screens/Onboarding/StepFinished.tsx:155
+msgid "Let's go!"
+msgstr "Aloitetaan!"
+
+#: src/view/com/util/UserAvatar.tsx:248
+#: src/view/com/util/UserBanner.tsx:62
+#~ msgid "Library"
+#~ msgstr "Kirjasto"
+
+#: src/view/screens/Settings/index.tsx:498
+msgid "Light"
+msgstr "Vaalea"
+
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
+msgid "Like"
+msgstr "Tykkää"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:258
+#: src/view/screens/ProfileFeed.tsx:573
+msgid "Like this feed"
+msgstr "Tykkää tästä syötteestä"
+
+#: src/components/LikesDialog.tsx:87
+#: src/Navigation.tsx:201
+#: src/Navigation.tsx:206
+msgid "Liked by"
+msgstr "Tykänneet"
+
+#: src/screens/Profile/ProfileLabelerLikedBy.tsx:29
+#: src/view/screens/PostLikedBy.tsx:27
+#: src/view/screens/ProfileFeedLikedBy.tsx:27
+msgid "Liked By"
+msgstr "Tykänneet"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:268
+msgid "Liked by {0} {1}"
+msgstr "Tykännyt {0} {1}"
+
+#: src/components/LabelingServiceCard/index.tsx:72
+msgid "Liked by {count} {0}"
+msgstr "Tykännyt {count} {0}"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:278
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:292
+#: src/view/screens/ProfileFeed.tsx:588
+msgid "Liked by {likeCount} {0}"
+msgstr "Tykännyt {likeCount} {0}"
+
+#: src/view/com/notifications/FeedItem.tsx:174
+msgid "liked your custom feed"
+msgstr "tykkäsi mukautetusta syötteestäsi"
+
+#: src/view/com/notifications/FeedItem.tsx:159
+msgid "liked your post"
+msgstr "tykkäsi viestistäsi"
+
+#: src/view/screens/Profile.tsx:193
+msgid "Likes"
+msgstr "Tykkäykset"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:182
+msgid "Likes on this post"
+msgstr "Tykkäykset tässä viestissä"
+
+#: src/Navigation.tsx:170
+msgid "List"
+msgstr "Lista"
+
+#: src/view/com/modals/CreateOrEditList.tsx:262
+msgid "List Avatar"
+msgstr "Listan kuvake"
+
+#: src/view/screens/ProfileList.tsx:311
+msgid "List blocked"
+msgstr "Lista estetty"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:220
+msgid "List by {0}"
+msgstr "Listan on luonut {0}"
+
+#: src/view/screens/ProfileList.tsx:355
+msgid "List deleted"
+msgstr "Lista poistettu"
+
+#: src/view/screens/ProfileList.tsx:283
+msgid "List muted"
+msgstr "Lista hiljennetty"
+
+#: src/view/com/modals/CreateOrEditList.tsx:276
+msgid "List Name"
+msgstr "Listan nimi"
+
+#: src/view/screens/ProfileList.tsx:325
+msgid "List unblocked"
+msgstr "Listaa estosta poistetut"
+
+#: src/view/screens/ProfileList.tsx:297
+msgid "List unmuted"
+msgstr "Listaa hiljennyksestä poistetut"
+
+#: src/Navigation.tsx:114
+#: src/view/screens/Profile.tsx:189
+#: src/view/screens/Profile.tsx:195
+#: src/view/shell/desktop/LeftNav.tsx:383
+#: src/view/shell/Drawer.tsx:495
+#: src/view/shell/Drawer.tsx:496
+msgid "Lists"
+msgstr "Listat"
+
+#: src/view/com/post-thread/PostThread.tsx:333
+#: src/view/com/post-thread/PostThread.tsx:341
+#~ msgid "Load more posts"
+#~ msgstr "Lataa lisää viestejä"
+
+#: src/view/screens/Notifications.tsx:159
+msgid "Load new notifications"
+msgstr "Lataa uusia ilmoituksia"
+
+#: src/screens/Profile/Sections/Feed.tsx:70
+#: src/view/com/feeds/FeedPage.tsx:138
+#: src/view/screens/ProfileFeed.tsx:496
+#: src/view/screens/ProfileList.tsx:695
+msgid "Load new posts"
+msgstr "Lataa uusia viestejä"
+
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:99
+msgid "Loading..."
+msgstr "Ladataan..."
+
+#: src/view/com/modals/ServerInput.tsx:50
+#~ msgid "Local dev server"
+#~ msgstr ""
+
+#: src/Navigation.tsx:221
+msgid "Log"
+msgstr "Loki"
+
+#: src/screens/Deactivated.tsx:149
+#: src/screens/Deactivated.tsx:152
+#: src/screens/Deactivated.tsx:178
+#: src/screens/Deactivated.tsx:181
+msgid "Log out"
+msgstr "Kirjaudu ulos"
+
+#: src/screens/Moderation/index.tsx:442
+msgid "Logged-out visibility"
+msgstr "Näkyvyys kirjautumattomana"
+
+#: src/components/AccountList.tsx:54
+msgid "Login to account that is not listed"
+msgstr "Kirjaudu tiliin, joka ei ole luettelossa"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:116
+msgid "Looks like XXXXX-XXXXX"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:79
+msgid "Make sure this is where you intend to go!"
+msgstr "Varmista, että olet menossa oikeaan paikkaan!"
+
+#: src/components/dialogs/MutedWords.tsx:82
+msgid "Manage your muted words and tags"
+msgstr "Hallinnoi hiljennettyjä sanoja ja aihetunnisteita"
+
+#: src/view/com/auth/create/Step2.tsx:118
+#~ msgid "May not be longer than 253 characters"
+#~ msgstr "Ei saa olla pidempi kuin 253 merkkiä"
+
+#: src/view/com/auth/create/Step2.tsx:109
+#~ msgid "May only contain letters and numbers"
+#~ msgstr "Ei saa olla pidempi kuin 253 merkkiä"
+
+#: src/view/screens/Profile.tsx:192
+msgid "Media"
+msgstr "Media"
+
+#: src/view/com/threadgate/WhoCanReply.tsx:139
+msgid "mentioned users"
+msgstr "mainitut käyttäjät"
+
+#: src/view/com/modals/Threadgate.tsx:93
+msgid "Mentioned users"
+msgstr "Mainitut käyttäjät"
+
+#: src/view/com/util/ViewHeader.tsx:87
+#: src/view/screens/Search/Search.tsx:648
+msgid "Menu"
+msgstr "Valikko"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:192
+msgid "Message from server: {0}"
+msgstr "Viesti palvelimelta: {0}"
+
+#: src/lib/moderation/useReportOptions.ts:45
+msgid "Misleading Account"
+msgstr "Harhaanjohtava käyttäjätili"
+
+#: src/Navigation.tsx:119
+#: src/screens/Moderation/index.tsx:104
+#: src/view/screens/Settings/index.tsx:645
+#: src/view/shell/desktop/LeftNav.tsx:401
+#: src/view/shell/Drawer.tsx:514
+#: src/view/shell/Drawer.tsx:515
+msgid "Moderation"
+msgstr "Moderointi"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:112
+msgid "Moderation details"
+msgstr "Moderaation yksityiskohdat"
+
+#: src/view/com/lists/ListCard.tsx:93
+#: src/view/com/modals/UserAddRemoveLists.tsx:206
+msgid "Moderation list by {0}"
+msgstr "Moderointilista käyttäjältä {0}"
+
+#: src/view/screens/ProfileList.tsx:789
+msgid "Moderation list by <0/>"
+msgstr "Moderointilista käyttäjältä <0/>"
+
+#: src/view/com/lists/ListCard.tsx:91
+#: src/view/com/modals/UserAddRemoveLists.tsx:204
+#: src/view/screens/ProfileList.tsx:787
+msgid "Moderation list by you"
+msgstr "Sinun moderointilistasi"
+
+#: src/view/com/modals/CreateOrEditList.tsx:198
+msgid "Moderation list created"
+msgstr "Moderointilista luotu"
+
+#: src/view/com/modals/CreateOrEditList.tsx:184
+msgid "Moderation list updated"
+msgstr "Moderointilista päivitetty"
+
+#: src/screens/Moderation/index.tsx:243
+msgid "Moderation lists"
+msgstr "Moderointilistat"
+
+#: src/Navigation.tsx:124
+#: src/view/screens/ModerationModlists.tsx:58
+msgid "Moderation Lists"
+msgstr "Moderointilistat"
+
+#: src/view/screens/Settings/index.tsx:639
+msgid "Moderation settings"
+msgstr "Moderointiasetukset"
+
+#: src/Navigation.tsx:216
+msgid "Moderation states"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:215
+msgid "Moderation tools"
+msgstr "Moderointityökalut"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:48
+#: src/lib/moderation/useModerationCauseDescription.ts:40
+msgid "Moderator has chosen to set a general warning on the content."
+msgstr "Ylläpitäjä on asettanut yleisen varoituksen sisällölle."
+
+#: src/view/com/post-thread/PostThreadItem.tsx:541
+msgid "More"
+msgstr "Lisää"
+
+#: src/view/shell/desktop/Feeds.tsx:65
+msgid "More feeds"
+msgstr "Lisää syötteitä"
+
+#: src/view/screens/ProfileList.tsx:599
+msgid "More options"
+msgstr "Lisää asetuksia"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:315
+#~ msgid "More post options"
+#~ msgstr "Lisää viestiasetuksia"
+
+#: src/view/screens/PreferencesThreads.tsx:82
+msgid "Most-liked replies first"
+msgstr "Eniten tykätyt vastaukset ensin"
+
+#: src/view/com/auth/create/Step2.tsx:122
+#~ msgid "Must be at least 3 characters"
+#~ msgstr "Täytyy olla vähintään 3 merkkiä"
+
+#: src/components/TagMenu/index.tsx:249
+msgid "Mute"
+msgstr "Hiljennä"
+
+#: src/components/TagMenu/index.web.tsx:105
+msgid "Mute {truncatedTag}"
+msgstr "Hiljennä {truncatedTag}"
+
+#: src/view/com/profile/ProfileMenu.tsx:279
+#: src/view/com/profile/ProfileMenu.tsx:286
+msgid "Mute Account"
+msgstr "Hiljennä käyttäjä"
+
+#: src/view/screens/ProfileList.tsx:518
+msgid "Mute accounts"
+msgstr "Hiljennä käyttäjät"
+
+#: src/components/TagMenu/index.tsx:209
+msgid "Mute all {displayTag} posts"
+msgstr "Hiljennä kaikki {displayTag} viestit"
+
+#: src/components/TagMenu/index.tsx:211
+#~ msgid "Mute all {tag} posts"
+#~ msgstr "Hiljennä kaikki {tag}-viestit"
+
+#: src/components/dialogs/MutedWords.tsx:148
+msgid "Mute in tags only"
+msgstr "Hiljennä vain aihetunnisteissa"
+
+#: src/components/dialogs/MutedWords.tsx:133
+msgid "Mute in text & tags"
+msgstr "Hiljennä tekstissä ja aihetunnisteissa"
+
+#: src/view/screens/ProfileList.tsx:461
+#: src/view/screens/ProfileList.tsx:624
+msgid "Mute list"
+msgstr "Hiljennä lista"
+
+#: src/view/screens/ProfileList.tsx:619
+msgid "Mute these accounts?"
+msgstr "Hiljennä nämä käyttäjät?"
+
+#: src/view/screens/ProfileList.tsx:279
+#~ msgid "Mute this List"
+#~ msgstr "Hiljennä tämä lista"
+
+#: src/components/dialogs/MutedWords.tsx:126
+msgid "Mute this word in post text and tags"
+msgstr "Hiljennä tämä sana viesteissä ja aihetunnisteissa"
+
+#: src/components/dialogs/MutedWords.tsx:141
+msgid "Mute this word in tags only"
+msgstr "Hiljennä tämä sana vain aihetunnisteissa"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:257
+msgid "Mute thread"
+msgstr "Hiljennä keskustelu"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:267
+#: src/view/com/util/forms/PostDropdownBtn.tsx:269
+msgid "Mute words & tags"
+msgstr "Hiljennä sanat ja aihetunnisteet"
+
+#: src/view/com/lists/ListCard.tsx:102
+msgid "Muted"
+msgstr "Hiljennetty"
+
+#: src/screens/Moderation/index.tsx:255
+msgid "Muted accounts"
+msgstr "Hiljennetyt käyttäjät"
+
+#: src/Navigation.tsx:129
+#: src/view/screens/ModerationMutedAccounts.tsx:107
+msgid "Muted Accounts"
+msgstr "Hiljennetyt käyttäjätilit"
+
+#: src/view/screens/ModerationMutedAccounts.tsx:115
+msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private."
+msgstr "Hiljennettyjen käyttäjien viestit poistetaan syötteestäsi ja ilmoituksistasi. Hiljennykset ovat täysin yksityisiä."
+
+#: src/lib/moderation/useModerationCauseDescription.ts:85
+msgid "Muted by \"{0}\""
+msgstr "Hiljentäjä: \"{0}\""
+
+#: src/screens/Moderation/index.tsx:231
+msgid "Muted words & tags"
+msgstr "Hiljennetyt sanat ja aihetunnisteet"
+
+#: src/view/screens/ProfileList.tsx:621
+msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them."
+msgstr "Hiljennys on yksityinen. Hiljennetyt käyttäjät voivat edelleen vuorovaikuttaa kanssasi, mutta et näe heidän viestejään tai saa ilmoituksia heiltä."
+
+#: src/components/dialogs/BirthDateSettings.tsx:35
+#: src/components/dialogs/BirthDateSettings.tsx:38
+msgid "My Birthday"
+msgstr "Syntymäpäiväni"
+
+#: src/view/screens/Feeds.tsx:663
+msgid "My Feeds"
+msgstr "Omat syötteet"
+
+#: src/view/shell/desktop/LeftNav.tsx:65
+msgid "My Profile"
+msgstr "Profiilini"
+
+#: src/view/screens/Settings/index.tsx:596
+msgid "My saved feeds"
+msgstr "Tallennetut syötteeni"
+
+#: src/view/screens/Settings/index.tsx:602
+msgid "My Saved Feeds"
+msgstr "Tallennetut syötteeni"
+
+#: src/view/com/auth/server-input/index.tsx:118
+#~ msgid "my-server.com"
+#~ msgstr "oma-palvelimeni.com"
+
+#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/CreateOrEditList.tsx:291
+msgid "Name"
+msgstr "Nimi"
+
+#: src/view/com/modals/CreateOrEditList.tsx:146
+msgid "Name is required"
+msgstr "Nimi vaaditaan"
+
+#: src/lib/moderation/useReportOptions.ts:57
+#: src/lib/moderation/useReportOptions.ts:78
+#: src/lib/moderation/useReportOptions.ts:86
+msgid "Name or Description Violates Community Standards"
+msgstr "Nimi tai kuvaus rikkoo yhteisön sääntöjä"
+
+#: src/screens/Onboarding/index.tsx:25
+msgid "Nature"
+msgstr "Luonto"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:173
+#: src/screens/Login/LoginForm.tsx:254
+#: src/view/com/modals/ChangePassword.tsx:168
+msgid "Navigates to the next screen"
+msgstr "Siirtyy seuraavalle näytölle"
+
+#: src/view/shell/Drawer.tsx:71
+msgid "Navigates to your profile"
+msgstr "Siirtyy profiiliisi"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:122
+msgid "Need to report a copyright violation?"
+msgstr "Tarvitseeko ilmoittaa tekijänoikeusrikkomuksesta?"
+
+#: src/view/com/modals/EmbedConsent.tsx:107
+#: src/view/com/modals/EmbedConsent.tsx:123
+#~ msgid "Never load embeds from {0}"
+#~ msgstr "Älä koskaan lataa upotuksia taholta {0}"
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:72
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:74
+msgid "Never lose access to your followers and data."
+msgstr "Älä koskaan menetä pääsyä seuraajiisi ja tietoihisi."
+
+#: src/screens/Onboarding/StepFinished.tsx:123
+msgid "Never lose access to your followers or data."
+msgstr "Älä koskaan menetä pääsyä seuraajiisi tai tietoihisi."
+
+#: src/components/dialogs/MutedWords.tsx:244
+#~ msgid "Nevermind"
+#~ msgstr "Ei väliä"
+
+#: src/view/com/modals/ChangeHandle.tsx:519
+msgid "Nevermind, create a handle for me"
+msgstr ""
+
+#: src/view/screens/Lists.tsx:76
+msgctxt "action"
+msgid "New"
+msgstr "Uusi"
+
+#: src/view/screens/ModerationModlists.tsx:78
+msgid "New"
+msgstr "Uusi"
+
+#: src/view/com/modals/CreateOrEditList.tsx:253
+msgid "New Moderation List"
+msgstr "Uusi moderointilista"
+
+#: src/view/com/modals/ChangePassword.tsx:212
+msgid "New password"
+msgstr "Uusi salasana"
+
+#: src/view/com/modals/ChangePassword.tsx:217
+msgid "New Password"
+msgstr "Uusi salasana"
+
+#: src/view/com/feeds/FeedPage.tsx:149
+msgctxt "action"
+msgid "New post"
+msgstr "Uusi viesti"
+
+#: src/view/screens/Feeds.tsx:555
+#: src/view/screens/Notifications.tsx:168
+#: src/view/screens/Profile.tsx:452
+#: src/view/screens/ProfileFeed.tsx:434
+#: src/view/screens/ProfileList.tsx:199
+#: src/view/screens/ProfileList.tsx:227
+#: src/view/shell/desktop/LeftNav.tsx:252
+msgid "New post"
+msgstr "Uusi viesti"
+
+#: src/view/shell/desktop/LeftNav.tsx:262
+msgctxt "action"
+msgid "New Post"
+msgstr "Uusi viesti"
+
+#: src/view/com/modals/CreateOrEditList.tsx:248
+msgid "New User List"
+msgstr "Uusi käyttäjälista"
+
+#: src/view/screens/PreferencesThreads.tsx:79
+msgid "Newest replies first"
+msgstr "Uusimmat vastaukset ensin"
+
+#: src/screens/Onboarding/index.tsx:23
+msgid "News"
+msgstr "Uutiset"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:143
+#: src/screens/Login/ForgotPasswordForm.tsx:150
+#: src/screens/Login/LoginForm.tsx:253
+#: src/screens/Login/LoginForm.tsx:260
+#: src/screens/Login/SetNewPasswordForm.tsx:174
+#: src/screens/Login/SetNewPasswordForm.tsx:180
+#: src/screens/Signup/index.tsx:205
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79
+#: src/view/com/modals/ChangePassword.tsx:253
+#: src/view/com/modals/ChangePassword.tsx:255
+msgid "Next"
+msgstr "Seuraava"
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:103
+msgctxt "action"
+msgid "Next"
+msgstr "Seuraava"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:169
+msgid "Next image"
+msgstr "Seuraava kuva"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:200
+#: src/view/screens/PreferencesFollowingFeed.tsx:235
+#: src/view/screens/PreferencesFollowingFeed.tsx:272
+#: src/view/screens/PreferencesThreads.tsx:106
+#: src/view/screens/PreferencesThreads.tsx:129
+msgid "No"
+msgstr "Ei"
+
+#: src/view/screens/ProfileFeed.tsx:562
+#: src/view/screens/ProfileList.tsx:769
+msgid "No description"
+msgstr "Ei kuvausta"
+
+#: src/view/com/modals/ChangeHandle.tsx:405
+msgid "No DNS Panel"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:118
+msgid "No longer following {0}"
+msgstr "Et enää seuraa käyttäjää {0}"
+
+#: src/screens/Signup/StepHandle.tsx:114
+msgid "No longer than 253 characters"
+msgstr ""
+
+#: src/view/com/notifications/Feed.tsx:109
+msgid "No notifications yet!"
+msgstr "Ei vielä ilmoituksia!"
+
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:101
+#: src/view/com/composer/text-input/web/Autocomplete.tsx:195
+msgid "No result"
+msgstr "Ei tuloksia"
+
+#: src/components/Lists.tsx:183
+msgid "No results found"
+msgstr "Tuloksia ei löydetty"
+
+#: src/view/screens/Feeds.tsx:495
+msgid "No results found for \"{query}\""
+msgstr "Ei tuloksia haulle \"{query}\""
+
+#: src/view/com/modals/ListAddRemoveUsers.tsx:127
+#: src/view/screens/Search/Search.tsx:283
+#: src/view/screens/Search/Search.tsx:311
+msgid "No results found for {query}"
+msgstr "Ei tuloksia haulle {query}"
+
+#: src/components/dialogs/EmbedConsent.tsx:105
+#: src/components/dialogs/EmbedConsent.tsx:112
+msgid "No thanks"
+msgstr "Ei kiitos"
+
+#: src/view/com/modals/Threadgate.tsx:82
+msgid "Nobody"
+msgstr "Ei kukaan"
+
+#: src/components/LikedByList.tsx:79
+#: src/components/LikesDialog.tsx:99
+msgid "Nobody has liked this yet. Maybe you should be the first!"
+msgstr "Kukaan ei ole vielä tykännyt tästä. Ehkä sinun pitäisi olla ensimmäinen!"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:42
+msgid "Non-sexual Nudity"
+msgstr "Ei-seksuaalinen alastomuus"
+
+#: src/view/com/modals/SelfLabel.tsx:135
+msgid "Not Applicable."
+msgstr "Ei sovellettavissa."
+
+#: src/Navigation.tsx:109
+#: src/view/screens/Profile.tsx:99
+msgid "Not Found"
+msgstr "Ei löytynyt"
+
+#: src/view/com/modals/VerifyEmail.tsx:246
+#: src/view/com/modals/VerifyEmail.tsx:252
+msgid "Not right now"
+msgstr "Ei juuri nyt"
+
+#: src/view/com/profile/ProfileMenu.tsx:368
+#: src/view/com/util/forms/PostDropdownBtn.tsx:342
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:246
+msgid "Note about sharing"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:540
+msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites."
+msgstr "Huomio: Bluesky on avoin ja julkinen verkosto. Tämä asetus rajoittaa vain sisältösi näkyvyyttä Bluesky-sovelluksessa ja -sivustolla, eikä muut sovellukset ehkä kunnioita tässä asetuksissaan. Sisältösi voi silti näkyä uloskirjautuneille käyttäjille muissa sovelluksissa ja verkkosivustoilla."
+
+#: src/Navigation.tsx:469
+#: src/view/screens/Notifications.tsx:124
+#: src/view/screens/Notifications.tsx:148
+#: src/view/shell/bottom-bar/BottomBar.tsx:215
+#: src/view/shell/desktop/LeftNav.tsx:365
+#: src/view/shell/Drawer.tsx:438
+#: src/view/shell/Drawer.tsx:439
+msgid "Notifications"
+msgstr "Ilmoitukset"
+
+#: src/view/com/modals/SelfLabel.tsx:103
+msgid "Nudity"
+msgstr "Alastomuus"
+
+#: src/lib/moderation/useReportOptions.ts:71
+msgid "Nudity or adult content not labeled as such"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:71
+#~ msgid "Nudity or pornography not labeled as such"
+#~ msgstr ""
+
+#: src/screens/Signup/index.tsx:142
+msgid "of"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:11
+msgid "Off"
+msgstr ""
+
+#: src/view/com/util/ErrorBoundary.tsx:49
+msgid "Oh no!"
+msgstr "Voi ei!"
+
+#: src/screens/Onboarding/StepInterests/index.tsx:132
+msgid "Oh no! Something went wrong."
+msgstr "Voi ei! Jokin meni pieleen."
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:126
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:327
+msgid "OK"
+msgstr "OK"
+
+#: src/screens/Login/PasswordUpdatedForm.tsx:44
+msgid "Okay"
+msgstr "Selvä"
+
+#: src/view/screens/PreferencesThreads.tsx:78
+msgid "Oldest replies first"
+msgstr "Vanhimmat vastaukset ensin"
+
+#: src/view/screens/Settings/index.tsx:244
+msgid "Onboarding reset"
+msgstr "Käyttöönoton nollaus"
+
+#: src/view/com/composer/Composer.tsx:392
+msgid "One or more images is missing alt text."
+msgstr "Yksi tai useampi kuva on ilman vaihtoehtoista Alt-tekstiä."
+
+#: src/view/com/threadgate/WhoCanReply.tsx:100
+msgid "Only {0} can reply."
+msgstr "Vain {0} voi vastata."
+
+#: src/screens/Signup/StepHandle.tsx:97
+msgid "Only contains letters, numbers, and hyphens"
+msgstr ""
+
+#: src/components/Lists.tsx:75
+msgid "Oops, something went wrong!"
+msgstr ""
+
+#: src/components/Lists.tsx:170
+#: src/view/screens/AppPasswords.tsx:67
+#: src/view/screens/Profile.tsx:99
+msgid "Oops!"
+msgstr "Hups!"
+
+#: src/screens/Onboarding/StepFinished.tsx:119
+msgid "Open"
+msgstr "Avaa"
+
+#: src/view/screens/Moderation.tsx:75
+#~ msgid "Open content filtering settings"
+#~ msgstr "Avaa sisällönsuodatusasetukset"
+
+#: src/view/com/composer/Composer.tsx:491
+#: src/view/com/composer/Composer.tsx:492
+msgid "Open emoji picker"
+msgstr "Avaa emoji-valitsin"
+
+#: src/view/screens/ProfileFeed.tsx:300
+msgid "Open feed options menu"
+msgstr "Avaa syötteen asetusvalikko"
+
+#: src/view/screens/Settings/index.tsx:734
+msgid "Open links with in-app browser"
+msgstr "Avaa linkit sovelluksen sisäisellä selaimella"
+
+#: src/screens/Moderation/index.tsx:227
+msgid "Open muted words and tags settings"
+msgstr "Avaa hiljennettyjen sanojen ja aihetunnisteiden asetukset"
+
+#: src/view/screens/Moderation.tsx:92
+#~ msgid "Open muted words settings"
+#~ msgstr "Avaa hiljennettyjen sanojen asetukset"
+
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:50
+msgid "Open navigation"
+msgstr "Avaa navigointi"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:183
+msgid "Open post options menu"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:828
+#: src/view/screens/Settings/index.tsx:838
+msgid "Open storybook page"
+msgstr "Avaa storybook-sivu"
+
+#: src/view/screens/Settings/index.tsx:816
+msgid "Open system log"
+msgstr "Avaa järjestelmäloki"
+
+#: src/view/com/util/forms/DropdownButton.tsx:154
+msgid "Opens {numItems} options"
+msgstr "Avaa {numItems} asetusta"
+
+#: src/view/screens/Log.tsx:54
+msgid "Opens additional details for a debug entry"
+msgstr "Avaa debug lisätiedot"
+
+#: src/view/com/notifications/FeedItem.tsx:353
+msgid "Opens an expanded list of users in this notification"
+msgstr "Avaa laajennetun listan tämän ilmoituksen käyttäjistä"
+
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:78
+msgid "Opens camera on device"
+msgstr "Avaa laitteen kameran"
+
+#: src/view/com/composer/Prompt.tsx:25
+msgid "Opens composer"
+msgstr "Avaa editorin"
+
+#: src/view/screens/Settings/index.tsx:615
+msgid "Opens configurable language settings"
+msgstr "Avaa mukautettavat kielen asetukset"
+
+#: src/view/com/composer/photos/SelectPhotoBtn.tsx:44
+msgid "Opens device photo gallery"
+msgstr "Avaa laitteen valokuvat"
+
+#: src/view/com/profile/ProfileHeader.tsx:420
+#~ msgid "Opens editor for profile display name, avatar, background image, and description"
+#~ msgstr "Avaa editorin profiilin näyttönimeä, avataria, taustakuvaa ja kuvausta varten"
+
+#: src/view/screens/Settings/index.tsx:669
+msgid "Opens external embeds settings"
+msgstr "Avaa ulkoiset upotusasetukset"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:57
+#: src/view/com/auth/SplashScreen.tsx:68
+#: src/view/com/auth/SplashScreen.web.tsx:97
+msgid "Opens flow to create a new Bluesky account"
+msgstr ""
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:75
+#: src/view/com/auth/SplashScreen.tsx:83
+#: src/view/com/auth/SplashScreen.web.tsx:112
+msgid "Opens flow to sign into your existing Bluesky account"
+msgstr ""
+
+#: src/view/com/profile/ProfileHeader.tsx:575
+#~ msgid "Opens followers list"
+#~ msgstr "Avaa seuraajalistan"
+
+#: src/view/com/profile/ProfileHeader.tsx:594
+#~ msgid "Opens following list"
+#~ msgstr "Avaa seurattavien listan"
+
+#: src/view/screens/Settings.tsx:412
+#~ msgid "Opens invite code list"
+#~ msgstr ""
+
+#: src/view/com/modals/InviteCodes.tsx:173
+msgid "Opens list of invite codes"
+msgstr "Avaa kutsukoodien luettelon"
+
+#: src/view/screens/Settings/index.tsx:798
+msgid "Opens modal for account deletion confirmation. Requires email code"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:774
+#~ msgid "Opens modal for account deletion confirmation. Requires email code."
+#~ msgstr "Avaa tilin poistovahvistuksen. Vaatii sähköpostikoodin."
+
+#: src/view/screens/Settings/index.tsx:756
+msgid "Opens modal for changing your Bluesky password"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:718
+msgid "Opens modal for choosing a new Bluesky handle"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:779
+msgid "Opens modal for downloading your Bluesky account data (repository)"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:968
+msgid "Opens modal for email verification"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:282
+msgid "Opens modal for using custom domain"
+msgstr "Avaa asetukset oman verkkotunnuksen käyttöönottoon"
+
+#: src/view/screens/Settings/index.tsx:640
+msgid "Opens moderation settings"
+msgstr "Avaa moderointiasetukset"
+
+#: src/screens/Login/LoginForm.tsx:202
+msgid "Opens password reset form"
+msgstr "Avaa salasanan palautuslomakkeen"
+
+#: src/view/com/home/HomeHeaderLayout.web.tsx:63
+#: src/view/screens/Feeds.tsx:356
+msgid "Opens screen to edit Saved Feeds"
+msgstr "Avaa näkymän tallennettujen syötteiden muokkaamiseen"
+
+#: src/view/screens/Settings/index.tsx:597
+msgid "Opens screen with all saved feeds"
+msgstr "Avaa näkymän kaikkiin tallennettuihin syötteisiin"
+
+#: src/view/screens/Settings/index.tsx:696
+msgid "Opens the app password settings"
+msgstr "Avaa sovelluksen salasanojen asetukset"
+
+#: src/view/screens/Settings/index.tsx:676
+#~ msgid "Opens the app password settings page"
+#~ msgstr "Avaa sovellussalasanojen asetukset"
+
+#: src/view/screens/Settings/index.tsx:554
+msgid "Opens the Following feed preferences"
+msgstr "Avaa Seuratut-syötteen asetukset"
+
+#: src/view/screens/Settings/index.tsx:535
+#~ msgid "Opens the home feed preferences"
+#~ msgstr "Avaa aloitussivun asetukset"
+
+#: src/view/com/modals/LinkWarning.tsx:93
+msgid "Opens the linked website"
+msgstr "Avaa linkitetyn verkkosivun"
+
+#: src/view/screens/Settings/index.tsx:829
+#: src/view/screens/Settings/index.tsx:839
+msgid "Opens the storybook page"
+msgstr "Avaa storybook-sivun"
+
+#: src/view/screens/Settings/index.tsx:817
+msgid "Opens the system log page"
+msgstr "Avaa järjestelmän lokisivun"
+
+#: src/view/screens/Settings/index.tsx:575
+msgid "Opens the threads preferences"
+msgstr "Avaa keskusteluasetukset"
+
+#: src/view/com/util/forms/DropdownButton.tsx:280
+msgid "Option {0} of {numItems}"
+msgstr "Asetus {0}/{numItems}"
+
+#: src/components/ReportDialog/SubmitView.tsx:162
+msgid "Optionally provide additional information below:"
+msgstr "Voit tarvittaessa antaa lisätietoja alla:"
+
+#: src/view/com/modals/Threadgate.tsx:89
+msgid "Or combine these options:"
+msgstr "Tai yhdistä nämä asetukset:"
+
+#: src/lib/moderation/useReportOptions.ts:25
+msgid "Other"
+msgstr "Joku toinen"
+
+#: src/components/AccountList.tsx:73
+msgid "Other account"
+msgstr "Toinen tili"
+
+#: src/view/com/modals/ServerInput.tsx:88
+#~ msgid "Other service"
+#~ msgstr ""
+
+#: src/view/com/composer/select-language/SelectLangBtn.tsx:91
+msgid "Other..."
+msgstr "Muu..."
+
+#: src/components/Lists.tsx:184
+#: src/view/screens/NotFound.tsx:45
+msgid "Page not found"
+msgstr "Sivua ei löytynyt"
+
+#: src/view/screens/NotFound.tsx:42
+msgid "Page Not Found"
+msgstr "Sivua ei löytynyt"
+
+#: src/screens/Login/LoginForm.tsx:178
+#: src/screens/Signup/StepInfo/index.tsx:101
+#: src/view/com/modals/DeleteAccount.tsx:194
+#: src/view/com/modals/DeleteAccount.tsx:201
+msgid "Password"
+msgstr "Salasana"
+
+#: src/view/com/modals/ChangePassword.tsx:142
+msgid "Password Changed"
+msgstr "Salasana vaihdettu"
+
+#: src/screens/Login/index.tsx:157
+msgid "Password updated"
+msgstr "Salasana päivitetty"
+
+#: src/screens/Login/PasswordUpdatedForm.tsx:30
+msgid "Password updated!"
+msgstr "Salasana päivitetty!"
+
+#: src/Navigation.tsx:164
+msgid "People followed by @{0}"
+msgstr "Henkilöt, joita @{0} seuraa"
+
+#: src/Navigation.tsx:157
+msgid "People following @{0}"
+msgstr "Henkilöt, jotka seuraavat käyttäjää @{0}"
+
+#: src/view/com/lightbox/Lightbox.tsx:66
+msgid "Permission to access camera roll is required."
+msgstr "Käyttöoikeus valokuviin tarvitaan."
+
+#: src/view/com/lightbox/Lightbox.tsx:72
+msgid "Permission to access camera roll was denied. Please enable it in your system settings."
+msgstr "Lupa valokuviin evättiin. Anna lupa järjestelmäasetuksissa."
+
+#: src/screens/Onboarding/index.tsx:31
+msgid "Pets"
+msgstr "Lemmikit"
+
+#: src/view/com/auth/create/Step2.tsx:183
+#~ msgid "Phone number"
+#~ msgstr "Puhelinnumero"
+
+#: src/view/com/modals/SelfLabel.tsx:121
+msgid "Pictures meant for adults."
+msgstr "Aikuisille tarkoitetut kuvat."
+
+#: src/view/screens/ProfileFeed.tsx:292
+#: src/view/screens/ProfileList.tsx:563
+msgid "Pin to home"
+msgstr "Kiinnitä etusivulle"
+
+#: src/view/screens/ProfileFeed.tsx:295
+msgid "Pin to Home"
+msgstr "Kiinnitä etusivulle"
+
+#: src/view/screens/SavedFeeds.tsx:88
+msgid "Pinned Feeds"
+msgstr "Kiinnitetyt syötteet"
+
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:123
+msgid "Play {0}"
+msgstr "Toista {0}"
+
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:57
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:58
+msgid "Play Video"
+msgstr "Toista video"
+
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:122
+msgid "Plays the GIF"
+msgstr "Toistaa GIFin"
+
+#: src/screens/Signup/state.ts:241
+msgid "Please choose your handle."
+msgstr "Valitse käyttäjätunnuksesi."
+
+#: src/screens/Signup/state.ts:234
+msgid "Please choose your password."
+msgstr "Valitse salasanasi."
+
+#: src/screens/Signup/state.ts:251
+msgid "Please complete the verification captcha."
+msgstr "Täydennä varmennus-captcha, ole hyvä."
+
+#: src/view/com/modals/ChangeEmail.tsx:67
+msgid "Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed."
+msgstr "Vahvista sähköpostiosoitteesi ennen sen vaihtamista. Tämä on väliaikainen vaatimus, kunnes sähköpostin muokkaamisen liittyvät asetukset ovat lisätty ja se poistetaan piakkoin."
+
+#: src/view/com/modals/AddAppPasswords.tsx:91
+msgid "Please enter a name for your app password. All spaces is not allowed."
+msgstr "Anna nimi sovellussalasanalle. Kaikki välilyönnit eivät ole sallittuja."
+
+#: src/view/com/auth/create/Step2.tsx:206
+#~ msgid "Please enter a phone number that can receive SMS text messages."
+#~ msgstr "Anna puhelinnumero, joka voi vastaanottaa tekstiviestejä."
+
+#: src/view/com/modals/AddAppPasswords.tsx:146
+msgid "Please enter a unique name for this App Password or use our randomly generated one."
+msgstr "Anna uniikki nimi tälle sovellussalasanalle tai käytä satunnaisesti luotua."
+
+#: src/components/dialogs/MutedWords.tsx:67
+msgid "Please enter a valid word, tag, or phrase to mute"
+msgstr "Ole hyvä ja syötä oikea sana, aihetunniste tai lause hiljennettäväksi."
+
+#: src/view/com/auth/create/state.ts:170
+#~ msgid "Please enter the code you received by SMS."
+#~ msgstr "Anna tekstiviestitse saamasi koodi."
+
+#: src/view/com/auth/create/Step2.tsx:282
+#~ msgid "Please enter the verification code sent to {phoneNumberFormatted}."
+#~ msgstr "Anna numeroon {phoneNumberFormatted} vastaanottamasi vahvistuskoodi."
+
+#: src/screens/Signup/state.ts:220
+msgid "Please enter your email."
+msgstr "Anna sähköpostiosoitteesi."
+
+#: src/view/com/modals/DeleteAccount.tsx:190
+msgid "Please enter your password as well:"
+msgstr "Anna myös salasanasi:"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:221
+msgid "Please explain why you think this label was incorrectly applied by {0}"
+msgstr ""
+
+#: src/view/com/modals/AppealLabel.tsx:72
+#: src/view/com/modals/AppealLabel.tsx:75
+#~ msgid "Please tell us why you think this content warning was incorrectly applied!"
+#~ msgstr "Kerro meille, miksi luulet, että tämä sisältövaroitus on sovellettu virheellisesti!"
+
+#: src/view/com/modals/AppealLabel.tsx:72
+#: src/view/com/modals/AppealLabel.tsx:75
+#~ msgid "Please tell us why you think this decision was incorrect."
+#~ msgstr "Kerro meille, miksi uskot tämän päätöksen olleen virheellinen."
+
+#: src/view/com/modals/VerifyEmail.tsx:101
+msgid "Please Verify Your Email"
+msgstr "Vahvista sähköpostiosoitteesi"
+
+#: src/view/com/composer/Composer.tsx:222
+msgid "Please wait for your link card to finish loading"
+msgstr "Odota, että linkkikortti latautuu kokonaan"
+
+#: src/screens/Onboarding/index.tsx:37
+msgid "Politics"
+msgstr "Politiikka"
+
+#: src/view/com/modals/SelfLabel.tsx:111
+msgid "Porn"
+msgstr "Porno"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#~ msgid "Pornography"
+#~ msgstr "Pornografia"
+
+#: src/view/com/composer/Composer.tsx:367
+#: src/view/com/composer/Composer.tsx:375
+msgctxt "action"
+msgid "Post"
+msgstr "Lähetä"
+
+#: src/view/com/post-thread/PostThread.tsx:292
+msgctxt "description"
+msgid "Post"
+msgstr "Viesti"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:175
+msgid "Post by {0}"
+msgstr "Lähettäjä {0}"
+
+#: src/Navigation.tsx:176
+#: src/Navigation.tsx:183
+#: src/Navigation.tsx:190
+msgid "Post by @{0}"
+msgstr "Lähettäjä @{0}"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:105
+msgid "Post deleted"
+msgstr "Viesti poistettu"
+
+#: src/view/com/post-thread/PostThread.tsx:157
+msgid "Post hidden"
+msgstr "Viesti piilotettu"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:97
+#: src/lib/moderation/useModerationCauseDescription.ts:99
+msgid "Post Hidden by Muted Word"
+msgstr "Viesti piilotettu hiljennetyn sanan takia"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:100
+#: src/lib/moderation/useModerationCauseDescription.ts:108
+msgid "Post Hidden by You"
+msgstr "Sinun hiljentämä viesti"
+
+#: src/view/com/composer/select-language/SelectLangBtn.tsx:87
+msgid "Post language"
+msgstr "Lähetyskieli"
+
+#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:75
+msgid "Post Languages"
+msgstr "Lähetyskielet"
+
+#: src/view/com/post-thread/PostThread.tsx:152
+#: src/view/com/post-thread/PostThread.tsx:164
+msgid "Post not found"
+msgstr "Viestiä ei löydy"
+
+#: src/components/TagMenu/index.tsx:253
+msgid "posts"
+msgstr "viestit"
+
+#: src/view/screens/Profile.tsx:190
+msgid "Posts"
+msgstr "Viestit"
+
+#: src/components/dialogs/MutedWords.tsx:89
+msgid "Posts can be muted based on their text, their tags, or both."
+msgstr "Viestejä voidaan hiljentää sanojen, aihetunnisteiden tai molempien perusteella."
+
+#: src/view/com/posts/FeedErrorMessage.tsx:64
+msgid "Posts hidden"
+msgstr "Piilotetut viestit"
+
+#: src/view/com/modals/LinkWarning.tsx:60
+msgid "Potentially Misleading Link"
+msgstr "Mahdollisesti harhaanjohtava linkki"
+
+#: src/components/forms/HostingProvider.tsx:45
+msgid "Press to change hosting provider"
+msgstr ""
+
+#: src/components/Error.tsx:74
+#: src/components/Lists.tsx:80
+#: src/screens/Signup/index.tsx:186
+msgid "Press to retry"
+msgstr "Paina uudelleen jatkaaksesi"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:150
+msgid "Previous image"
+msgstr "Edellinen kuva"
+
+#: src/view/screens/LanguageSettings.tsx:187
+msgid "Primary Language"
+msgstr "Ensisijainen kieli"
+
+#: src/view/screens/PreferencesThreads.tsx:97
+msgid "Prioritize Your Follows"
+msgstr "Aseta seurattavat tärkeysjärjestykseen"
+
+#: src/view/screens/Settings/index.tsx:652
+#: src/view/shell/desktop/RightNav.tsx:72
+msgid "Privacy"
+msgstr "Yksityisyys"
+
+#: src/Navigation.tsx:231
+#: src/screens/Signup/StepInfo/Policies.tsx:56
+#: src/view/screens/PrivacyPolicy.tsx:29
+#: src/view/screens/Settings/index.tsx:923
+#: src/view/shell/Drawer.tsx:265
+msgid "Privacy Policy"
+msgstr "Yksityisyydensuojakäytäntö"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:156
+msgid "Processing..."
+msgstr "Käsitellään..."
+
+#: src/view/screens/DebugMod.tsx:888
+#: src/view/screens/Profile.tsx:342
+msgid "profile"
+msgstr "profiili"
+
+#: src/view/shell/bottom-bar/BottomBar.tsx:260
+#: src/view/shell/desktop/LeftNav.tsx:419
+#: src/view/shell/Drawer.tsx:70
+#: src/view/shell/Drawer.tsx:549
+#: src/view/shell/Drawer.tsx:550
+msgid "Profile"
+msgstr "Profiili"
+
+#: src/view/com/modals/EditProfile.tsx:129
+msgid "Profile updated"
+msgstr "Profiili päivitetty"
+
+#: src/view/screens/Settings/index.tsx:981
+msgid "Protect your account by verifying your email."
+msgstr "Suojaa käyttäjätilisi vahvistamalla sähköpostiosoitteesi."
+
+#: src/screens/Onboarding/StepFinished.tsx:105
+msgid "Public"
+msgstr "Julkinen"
+
+#: src/view/screens/ModerationModlists.tsx:61
+msgid "Public, shareable lists of users to mute or block in bulk."
+msgstr "Julkinen, jaettava käyttäjäluettelo hiljennettyjen tai estettyjen käyttäjien massamäärityksiä varten."
+
+#: src/view/screens/Lists.tsx:61
+msgid "Public, shareable lists which can drive feeds."
+msgstr "Julkinen, jaettava lista, joka voi ohjata syötteitä."
+
+#: src/view/com/composer/Composer.tsx:352
+msgid "Publish post"
+msgstr "Julkaise viesti"
+
+#: src/view/com/composer/Composer.tsx:352
+msgid "Publish reply"
+msgstr "Julkaise vastaus"
+
+#: src/view/com/modals/Repost.tsx:66
+msgctxt "action"
+msgid "Quote post"
+msgstr "Lainaa viestiä"
+
+#: src/view/com/util/post-ctrls/RepostButton.web.tsx:58
+msgid "Quote post"
+msgstr "Lainaa viestiä"
+
+#: src/view/com/modals/Repost.tsx:71
+msgctxt "action"
+msgid "Quote Post"
+msgstr "Lainaa viestiä"
+
+#: src/view/screens/PreferencesThreads.tsx:86
+msgid "Random (aka \"Poster's Roulette\")"
+msgstr "Satunnainen (tunnetaan myös nimellä \"Lähettäjän ruletti\")"
+
+#: src/view/com/modals/EditImage.tsx:237
+msgid "Ratios"
+msgstr "Suhdeluvut"
+
+#: src/view/screens/Search/Search.tsx:777
+msgid "Recent Searches"
+msgstr "Viimeaikaiset haut"
+
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116
+msgid "Recommended Feeds"
+msgstr "Suositellut syötteet"
+
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:180
+msgid "Recommended Users"
+msgstr "Suositellut käyttäjät"
+
+#: src/components/dialogs/MutedWords.tsx:286
+#: src/view/com/feeds/FeedSourceCard.tsx:283
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
+#: src/view/com/modals/SelfLabel.tsx:83
+#: src/view/com/modals/UserAddRemoveLists.tsx:219
+#: src/view/com/posts/FeedErrorMessage.tsx:204
+msgid "Remove"
+msgstr "Poista"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:108
+#~ msgid "Remove {0} from my feeds?"
+#~ msgstr "Poistetaanko {0} syötteistäni?"
+
+#: src/view/com/util/AccountDropdownBtn.tsx:22
+msgid "Remove account"
+msgstr "Poista käyttäjätili"
+
+#: src/view/com/util/UserAvatar.tsx:358
+msgid "Remove Avatar"
+msgstr "Poista avatar"
+
+#: src/view/com/util/UserBanner.tsx:148
+msgid "Remove Banner"
+msgstr "Poista banneri"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:160
+msgid "Remove feed"
+msgstr "Poista syöte"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:201
+msgid "Remove feed?"
+msgstr "Poista syöte?"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:173
+#: src/view/com/feeds/FeedSourceCard.tsx:233
+#: src/view/screens/ProfileFeed.tsx:335
+#: src/view/screens/ProfileFeed.tsx:341
+msgid "Remove from my feeds"
+msgstr "Poista syötteistäni"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:278
+msgid "Remove from my feeds?"
+msgstr "Poista syötteistäni?"
+
+#: src/view/com/composer/photos/Gallery.tsx:167
+msgid "Remove image"
+msgstr "Poista kuva"
+
+#: src/view/com/composer/ExternalEmbed.tsx:70
+msgid "Remove image preview"
+msgstr "Poista kuvan esikatselu"
+
+#: src/components/dialogs/MutedWords.tsx:329
+msgid "Remove mute word from your list"
+msgstr "Poista hiljennetty sana listaltasi"
+
+#: src/view/com/modals/Repost.tsx:48
+msgid "Remove repost"
+msgstr "Poista uudelleenjako"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:175
+#~ msgid "Remove this feed from my feeds?"
+#~ msgstr "Poista tämä syöte omista syötteistäni?"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:202
+msgid "Remove this feed from your saved feeds"
+msgstr "Poista tämä syöte seurannasta"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:132
+#~ msgid "Remove this feed from your saved feeds?"
+#~ msgstr "Poistetaanko tämä syöte tallennetuista syötteistäsi?"
+
+#: src/view/com/modals/ListAddRemoveUsers.tsx:199
+#: src/view/com/modals/UserAddRemoveLists.tsx:152
+msgid "Removed from list"
+msgstr "Poistettu listalta"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:121
+msgid "Removed from my feeds"
+msgstr "Poistettu syötteistäni"
+
+#: src/view/screens/ProfileFeed.tsx:209
+msgid "Removed from your feeds"
+msgstr "Poistettu syötteistäsi"
+
+#: src/view/com/composer/ExternalEmbed.tsx:71
+msgid "Removes default thumbnail from {0}"
+msgstr "Poistaa {0} oletuskuvakkeen"
+
+#: src/view/screens/Profile.tsx:191
+msgid "Replies"
+msgstr "Vastaukset"
+
+#: src/view/com/threadgate/WhoCanReply.tsx:98
+msgid "Replies to this thread are disabled"
+msgstr "Tähän keskusteluun vastaaminen on estetty"
+
+#: src/view/com/composer/Composer.tsx:365
+msgctxt "action"
+msgid "Reply"
+msgstr "Vastaa"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:144
+msgid "Reply Filters"
+msgstr "Vastaussuodattimet"
+
+#: src/view/com/post/Post.tsx:166
+#: src/view/com/posts/FeedItem.tsx:280
+msgctxt "description"
+msgid "Reply to <0/>"
+msgstr "Vastaa käyttäjälle <0/>"
+
+#: src/view/com/modals/report/Modal.tsx:166
+#~ msgid "Report {collectionName}"
+#~ msgstr "Ilmianna {collectionName}"
+
+#: src/view/com/profile/ProfileMenu.tsx:319
+#: src/view/com/profile/ProfileMenu.tsx:322
+msgid "Report Account"
+msgstr "Ilmianna käyttäjätili"
+
+#: src/components/ReportDialog/index.tsx:49
+msgid "Report dialog"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:352
+#: src/view/screens/ProfileFeed.tsx:354
+msgid "Report feed"
+msgstr "Ilmianna syöte"
+
+#: src/view/screens/ProfileList.tsx:429
+msgid "Report List"
+msgstr "Ilmianna luettelo"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:292
+#: src/view/com/util/forms/PostDropdownBtn.tsx:294
+msgid "Report post"
+msgstr "Ilmianna viesti"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:42
+msgid "Report this content"
+msgstr "Ilmianna tämä sisältö"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:55
+msgid "Report this feed"
+msgstr "Ilmianna tämä syöte"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:52
+msgid "Report this list"
+msgstr "Ilmianna tämä lista"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:49
+msgid "Report this post"
+msgstr "Ilmianna tämä viesti"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:46
+msgid "Report this user"
+msgstr "Ilmianna tämä käyttäjä"
+
+#: src/view/com/modals/Repost.tsx:44
+#: src/view/com/modals/Repost.tsx:49
+#: src/view/com/modals/Repost.tsx:54
+#: src/view/com/util/post-ctrls/RepostButton.tsx:61
+msgctxt "action"
+msgid "Repost"
+msgstr "Uudelleenjaa"
+
+#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
+msgid "Repost"
+msgstr "Uudelleenjaa"
+
+#: src/view/com/util/post-ctrls/RepostButton.web.tsx:94
+#: src/view/com/util/post-ctrls/RepostButton.web.tsx:105
+msgid "Repost or quote post"
+msgstr "Uudelleenjaa tai lainaa viestiä"
+
+#: src/view/screens/PostRepostedBy.tsx:27
+msgid "Reposted By"
+msgstr "Uudelleenjakanut"
+
+#: src/view/com/posts/FeedItem.tsx:197
+msgid "Reposted by {0}"
+msgstr "Uudelleenjakanut {0}"
+
+#: src/view/com/posts/FeedItem.tsx:214
+msgid "Reposted by <0/>"
+msgstr "Uudelleenjakanut <0/>"
+
+#: src/view/com/notifications/FeedItem.tsx:166
+msgid "reposted your post"
+msgstr "uudelleenjakoi viestisi"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:187
+msgid "Reposts of this post"
+msgstr "Tämän viestin uudelleenjulkaisut"
+
+#: src/view/com/modals/ChangeEmail.tsx:181
+#: src/view/com/modals/ChangeEmail.tsx:183
+msgid "Request Change"
+msgstr "Pyydä muutosta"
+
+#: src/view/com/auth/create/Step2.tsx:219
+#~ msgid "Request code"
+#~ msgstr "Pyydä koodia"
+
+#: src/view/com/modals/ChangePassword.tsx:241
+#: src/view/com/modals/ChangePassword.tsx:243
+msgid "Request Code"
+msgstr "Pyydä koodia"
+
+#: src/view/screens/Settings/index.tsx:475
+msgid "Require alt text before posting"
+msgstr "Edellytä ALT-tekstiä ennen viestin julkaisua"
+
+#: src/screens/Signup/StepInfo/index.tsx:69
+msgid "Required for this provider"
+msgstr "Vaaditaan tälle instanssille"
+
+#: src/view/com/modals/ChangePassword.tsx:185
+msgid "Reset code"
+msgstr "Nollauskoodi"
+
+#: src/view/com/modals/ChangePassword.tsx:192
+msgid "Reset Code"
+msgstr "Nollauskoodi"
+
+#: src/view/screens/Settings/index.tsx:824
+#~ msgid "Reset onboarding"
+#~ msgstr "Nollaa käyttöönotto"
+
+#: src/view/screens/Settings/index.tsx:858
+#: src/view/screens/Settings/index.tsx:861
+msgid "Reset onboarding state"
+msgstr "Nollaa käyttöönoton tila"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:86
+msgid "Reset password"
+msgstr "Nollaa salasana"
+
+#: src/view/screens/Settings/index.tsx:814
+#~ msgid "Reset preferences"
+#~ msgstr "Nollaa asetukset"
+
+#: src/view/screens/Settings/index.tsx:848
+#: src/view/screens/Settings/index.tsx:851
+msgid "Reset preferences state"
+msgstr "Nollaa asetusten tila"
+
+#: src/view/screens/Settings/index.tsx:859
+msgid "Resets the onboarding state"
+msgstr "Nollaa käyttöönoton tilan"
+
+#: src/view/screens/Settings/index.tsx:849
+msgid "Resets the preferences state"
+msgstr "Nollaa asetusten tilan"
+
+#: src/screens/Login/LoginForm.tsx:235
+msgid "Retries login"
+msgstr "Yrittää uudelleen kirjautumista"
+
+#: src/view/com/util/error/ErrorMessage.tsx:57
+#: src/view/com/util/error/ErrorScreen.tsx:74
+msgid "Retries the last action, which errored out"
+msgstr "Yrittää uudelleen viimeisintä toimintoa, joka epäonnistui"
+
+#: src/components/Error.tsx:79
+#: src/components/Lists.tsx:91
+#: src/screens/Login/LoginForm.tsx:234
+#: src/screens/Login/LoginForm.tsx:241
+#: src/screens/Onboarding/StepInterests/index.tsx:225
+#: src/screens/Onboarding/StepInterests/index.tsx:228
+#: src/screens/Signup/index.tsx:193
+#: src/view/com/util/error/ErrorMessage.tsx:55
+#: src/view/com/util/error/ErrorScreen.tsx:72
+msgid "Retry"
+msgstr "Yritä uudelleen"
+
+#: src/view/com/auth/create/Step2.tsx:247
+#~ msgid "Retry."
+#~ msgstr "Yritä uudelleen."
+
+#: src/components/Error.tsx:86
+#: src/view/screens/ProfileList.tsx:917
+msgid "Return to previous page"
+msgstr "Palaa edelliselle sivulle"
+
+#: src/view/screens/NotFound.tsx:59
+msgid "Returns to home page"
+msgstr "Palaa etusivulle"
+
+#: src/view/screens/NotFound.tsx:58
+#: src/view/screens/ProfileFeed.tsx:113
+msgid "Returns to previous page"
+msgstr "Palaa edelliselle sivulle"
+
+#: src/view/shell/desktop/RightNav.tsx:55
+#~ msgid "SANDBOX. Posts and accounts are not permanent."
+#~ msgstr "HIEKKALAATIKKO. Viestit ja tilit eivät ole pysyviä."
+
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/view/com/modals/ChangeHandle.tsx:174
+#: src/view/com/modals/CreateOrEditList.tsx:338
+#: src/view/com/modals/EditProfile.tsx:225
+msgid "Save"
+msgstr "Tallenna"
+
+#: src/view/com/lightbox/Lightbox.tsx:132
+#: src/view/com/modals/CreateOrEditList.tsx:346
+msgctxt "action"
+msgid "Save"
+msgstr "Tallenna"
+
+#: src/view/com/modals/AltImage.tsx:131
+msgid "Save alt text"
+msgstr "Tallenna vaihtoehtoinen ALT-teksti"
+
+#: src/components/dialogs/BirthDateSettings.tsx:119
+msgid "Save birthday"
+msgstr "Tallenna syntymäpäivä"
+
+#: src/view/com/modals/EditProfile.tsx:233
+msgid "Save Changes"
+msgstr "Tallenna muutokset"
+
+#: src/view/com/modals/ChangeHandle.tsx:171
+msgid "Save handle change"
+msgstr "Tallenna käyttäjätunnuksen muutos"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:145
+msgid "Save image crop"
+msgstr "Tallenna kuvan rajaus"
+
+#: src/view/screens/ProfileFeed.tsx:336
+#: src/view/screens/ProfileFeed.tsx:342
+msgid "Save to my feeds"
+msgstr "Tallenna syötteisiini"
+
+#: src/view/screens/SavedFeeds.tsx:122
+msgid "Saved Feeds"
+msgstr "Tallennetut syötteet"
+
+#: src/view/com/lightbox/Lightbox.tsx:81
+msgid "Saved to your camera roll."
+msgstr "Tallennettu kameraasi"
+
+#: src/view/screens/ProfileFeed.tsx:213
+msgid "Saved to your feeds"
+msgstr "Tallennettu syötteisiisi"
+
+#: src/view/com/modals/EditProfile.tsx:226
+msgid "Saves any changes to your profile"
+msgstr "Tallentaa kaikki muutokset profiiliisi"
+
+#: src/view/com/modals/ChangeHandle.tsx:172
+msgid "Saves handle change to {handle}"
+msgstr "Tallentaa käyttäjätunnuksen muutoksen muotoon {handle}"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:146
+msgid "Saves image crop settings"
+msgstr "Tallentaa kuvan rajausasetukset"
+
+#: src/screens/Onboarding/index.tsx:36
+msgid "Science"
+msgstr "Tiede"
+
+#: src/view/screens/ProfileList.tsx:873
+msgid "Scroll to top"
+msgstr "Vieritä alkuun"
+
+#: src/Navigation.tsx:459
+#: src/view/com/auth/LoggedOut.tsx:123
+#: src/view/com/modals/ListAddRemoveUsers.tsx:75
+#: src/view/com/util/forms/SearchInput.tsx:67
+#: src/view/com/util/forms/SearchInput.tsx:79
+#: src/view/screens/Search/Search.tsx:421
+#: src/view/screens/Search/Search.tsx:670
+#: src/view/screens/Search/Search.tsx:688
+#: src/view/shell/bottom-bar/BottomBar.tsx:169
+#: src/view/shell/desktop/LeftNav.tsx:328
+#: src/view/shell/desktop/Search.tsx:215
+#: src/view/shell/desktop/Search.tsx:224
+#: src/view/shell/Drawer.tsx:365
+#: src/view/shell/Drawer.tsx:366
+msgid "Search"
+msgstr "Haku"
+
+#: src/view/screens/Search/Search.tsx:737
+#: src/view/shell/desktop/Search.tsx:256
+msgid "Search for \"{query}\""
+msgstr "Haku hakusanalla \"{query}\""
+
+#: src/components/TagMenu/index.tsx:145
+msgid "Search for all posts by @{authorHandle} with tag {displayTag}"
+msgstr "Hae kaikki @{authorHandle}:n julkaisut, joissa on aihetunniste {displayTag}."
+
+#: src/components/TagMenu/index.tsx:145
+#~ msgid "Search for all posts by @{authorHandle} with tag {tag}"
+#~ msgstr "Etsi kaikki viestit käyttäjältä @{authorHandle} aihetunnisteella {tag}"
+
+#: src/components/TagMenu/index.tsx:94
+msgid "Search for all posts with tag {displayTag}"
+msgstr "Etsi kaikki viestit aihetunnisteella {displayTag}."
+
+#: src/components/TagMenu/index.tsx:90
+#~ msgid "Search for all posts with tag {tag}"
+#~ msgstr "Etsi kaikki viestit aihetunnisteella {tag}"
+
+#: src/view/com/auth/LoggedOut.tsx:105
+#: src/view/com/auth/LoggedOut.tsx:106
+#: src/view/com/modals/ListAddRemoveUsers.tsx:70
+msgid "Search for users"
+msgstr "Hae käyttäjiä"
+
+#: src/view/com/modals/ChangeEmail.tsx:110
+msgid "Security Step Required"
+msgstr "Turvatarkistus vaaditaan"
+
+#: src/components/TagMenu/index.web.tsx:66
+msgid "See {truncatedTag} posts"
+msgstr "Näytä {truncatedTag}-viestit"
+
+#: src/components/TagMenu/index.web.tsx:83
+msgid "See {truncatedTag} posts by user"
+msgstr "Näytä käyttäjän {truncatedTag} viestit"
+
+#: src/components/TagMenu/index.tsx:128
+msgid "See <0>{displayTag}0> posts"
+msgstr "Näytä <0>{displayTag}0> viestit"
+
+#: src/components/TagMenu/index.tsx:187
+msgid "See <0>{displayTag}0> posts by this user"
+msgstr "Näytä tämän käyttäjän <0>{displayTag}0> viestit"
+
+#: src/components/TagMenu/index.tsx:128
+#~ msgid "See <0>{tag}0> posts"
+#~ msgstr "Näytä <0>{tag}0>-viestit"
+
+#: src/components/TagMenu/index.tsx:189
+#~ msgid "See <0>{tag}0> posts by this user"
+#~ msgstr "Näytä tämän käyttäjän <0>{tag}0>-viestit"
+
+#: src/view/screens/SavedFeeds.tsx:163
+msgid "See this guide"
+msgstr "Katso tämä opas"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:40
+msgid "See what's next"
+msgstr "Katso, mitä seuraavaksi tapahtuu"
+
+#: src/view/com/util/Selector.tsx:106
+msgid "Select {item}"
+msgstr "Valitse {item}"
+
+#: src/screens/Login/ChooseAccountForm.tsx:61
+msgid "Select account"
+msgstr ""
+
+#: src/view/com/modals/ServerInput.tsx:75
+#~ msgid "Select Bluesky Social"
+#~ msgstr "Valitse Bluesky Social"
+
+#: src/screens/Login/index.tsx:120
+msgid "Select from an existing account"
+msgstr "Valitse olemassa olevalta tililtä"
+
+#: src/view/screens/LanguageSettings.tsx:299
+msgid "Select languages"
+msgstr "Valitse kielet"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:30
+msgid "Select moderator"
+msgstr "Valitse moderaattori"
+
+#: src/view/com/util/Selector.tsx:107
+msgid "Select option {i} of {numItems}"
+msgstr "Valitse vaihtoehto {i} / {numItems}"
+
+#: src/view/com/auth/create/Step1.tsx:96
+#: src/view/com/auth/login/LoginForm.tsx:153
+#~ msgid "Select service"
+#~ msgstr "Valitse palvelu"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:52
+msgid "Select some accounts below to follow"
+msgstr "Valitse alla olevista tileistä jotain seurattavaksi"
+
+#: src/components/ReportDialog/SubmitView.tsx:135
+msgid "Select the moderation service(s) to report to"
+msgstr ""
+
+#: src/view/com/auth/server-input/index.tsx:82
+msgid "Select the service that hosts your data."
+msgstr "Valitse palvelu, joka hostaa tietojasi."
+
+#: src/screens/Onboarding/StepModeration/index.tsx:49
+#~ msgid "Select the types of content that you want to see (or not see), and we'll handle the rest."
+#~ msgstr ""
+
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:100
+msgid "Select topical feeds to follow from the list below"
+msgstr "Valitse ajankohtaisia syötteitä alla olevasta listasta"
+
+#: src/screens/Onboarding/StepModeration/index.tsx:63
+msgid "Select what you want to see (or not see), and we’ll handle the rest."
+msgstr "Valitse, mitä haluat nähdä (tai olla näkemättä) ja me huolehdimme lopusta."
+
+#: src/view/screens/LanguageSettings.tsx:281
+msgid "Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown."
+msgstr "Valitse, mitä kieliä haluat tilattujen syötteidesi sisältävän. Jos mitään ei ole valittu, kaikki kielet näytetään."
+
+#: src/view/screens/LanguageSettings.tsx:98
+#~ msgid "Select your app language for the default text to display in the app"
+#~ msgstr "Valitse sovelluksen oletuskieli, joka näytetään sovelluksessa"
+
+#: src/view/screens/LanguageSettings.tsx:98
+msgid "Select your app language for the default text to display in the app."
+msgstr "Valitse sovelluksen käyttöliittymän kieli."
+
+#: src/screens/Signup/StepInfo/index.tsx:133
+msgid "Select your date of birth"
+msgstr ""
+
+#: src/screens/Onboarding/StepInterests/index.tsx:200
+msgid "Select your interests from the options below"
+msgstr "Valitse kiinnostuksen kohteesi alla olevista vaihtoehdoista"
+
+#: src/view/com/auth/create/Step2.tsx:155
+#~ msgid "Select your phone's country"
+#~ msgstr "Valitse puhelinnumerosi maa"
+
+#: src/view/screens/LanguageSettings.tsx:190
+msgid "Select your preferred language for translations in your feed."
+msgstr "Valitse käännösten kieli syötteessäsi."
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:117
+msgid "Select your primary algorithmic feeds"
+msgstr "Valitse ensisijaiset algoritmisyötteet"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:133
+msgid "Select your secondary algorithmic feeds"
+msgstr "Valitse toissijaiset algoritmisyötteet"
+
+#: src/view/com/modals/VerifyEmail.tsx:202
+#: src/view/com/modals/VerifyEmail.tsx:204
+msgid "Send Confirmation Email"
+msgstr "Lähetä vahvistussähköposti"
+
+#: src/view/com/modals/DeleteAccount.tsx:130
+msgid "Send email"
+msgstr "Lähetä sähköposti"
+
+#: src/view/com/modals/DeleteAccount.tsx:143
+msgctxt "action"
+msgid "Send Email"
+msgstr "Lähetä sähköposti"
+
+#: src/view/shell/Drawer.tsx:298
+#: src/view/shell/Drawer.tsx:319
+msgid "Send feedback"
+msgstr "Lähetä palautetta"
+
+#: src/components/ReportDialog/SubmitView.tsx:214
+#: src/components/ReportDialog/SubmitView.tsx:218
+msgid "Send report"
+msgstr "Lähetä raportti"
+
+#: src/view/com/modals/report/SendReportButton.tsx:45
+#~ msgid "Send Report"
+#~ msgstr "Lähetä raportti"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:44
+msgid "Send report to {0}"
+msgstr ""
+
+#: src/view/com/modals/DeleteAccount.tsx:132
+msgid "Sends email with confirmation code for account deletion"
+msgstr "Lähettää sähköpostin tilin poistamiseen tarvittavan vahvistuskoodin"
+
+#: src/view/com/auth/server-input/index.tsx:114
+msgid "Server address"
+msgstr "Palvelimen osoite"
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:311
+#~ msgid "Set {value} for {labelGroup} content moderation policy"
+#~ msgstr "Aseta {value} {labelGroup} sisällön moderointisäännöksi"
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:160
+#: src/view/com/modals/ContentFilteringSettings.tsx:179
+#~ msgctxt "action"
+#~ msgid "Set Age"
+#~ msgstr "Aseta ikä"
+
+#: src/screens/Moderation/index.tsx:304
+msgid "Set birthdate"
+msgstr "Aseta syntymäaika"
+
+#: src/view/screens/Settings/index.tsx:488
+#~ msgid "Set color theme to dark"
+#~ msgstr "Aseta väriteema tummaksi"
+
+#: src/view/screens/Settings/index.tsx:481
+#~ msgid "Set color theme to light"
+#~ msgstr "Aseta väriteema vaaleaksi"
+
+#: src/view/screens/Settings/index.tsx:475
+#~ msgid "Set color theme to system setting"
+#~ msgstr "Aseta väriteema järjestelmäasetuksiin"
+
+#: src/view/screens/Settings/index.tsx:514
+#~ msgid "Set dark theme to the dark theme"
+#~ msgstr "Aseta tumma teema tummaksi"
+
+#: src/view/screens/Settings/index.tsx:507
+#~ msgid "Set dark theme to the dim theme"
+#~ msgstr "Aseta tumma teema hämäräksi"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:102
+msgid "Set new password"
+msgstr "Aseta uusi salasana"
+
+#: src/view/com/auth/create/Step1.tsx:202
+#~ msgid "Set password"
+#~ msgstr "Aseta salasana"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:225
+msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible."
+msgstr "Aseta tämä asetus \"Ei\"-tilaan piilottaaksesi kaikki lainaukset syötteestäsi. Uudelleenjulkaisut näkyvät silti."
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:122
+msgid "Set this setting to \"No\" to hide all replies from your feed."
+msgstr "Aseta tämä asetus \"Ei\"-tilaan piilottaaksesi kaikki vastaukset syötteestäsi."
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:191
+msgid "Set this setting to \"No\" to hide all reposts from your feed."
+msgstr "Aseta tämä asetus \"Ei\"-tilaan piilottaaksesi kaikki uudelleenjulkaisut syötteestäsi."
+
+#: src/view/screens/PreferencesThreads.tsx:122
+msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature."
+msgstr "Aseta tämä asetus \"Kyllä\" tilaan näyttääksesi vastaukset ketjumaisessa näkymässä. Tämä on kokeellinen ominaisuus."
+
+#: src/view/screens/PreferencesHomeFeed.tsx:261
+#~ msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
+#~ msgstr "Aseta tämä asetus \"Kyllä\"-tilaan nähdäksesi esimerkkejä tallennetuista syötteistäsi seuraamissasi syötteessäsi. Tämä on kokeellinen ominaisuus."
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:261
+msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your Following feed. This is an experimental feature."
+msgstr "Aseta tämä asetus \"Kyllä\"-tilaan nähdäksesi esimerkkejä tallennetuista syötteistäsi seuraamissasi syötteessäsi. Tämä on kokeellinen ominaisuus."
+
+#: src/screens/Onboarding/Layout.tsx:48
+msgid "Set up your account"
+msgstr "Luo käyttäjätili"
+
+#: src/view/com/modals/ChangeHandle.tsx:267
+msgid "Sets Bluesky username"
+msgstr "Asettaa Bluesky-käyttäjätunnuksen"
+
+#: src/view/screens/Settings/index.tsx:507
+msgid "Sets color theme to dark"
+msgstr "Muuttaa väriteeman tummaksi"
+
+#: src/view/screens/Settings/index.tsx:500
+msgid "Sets color theme to light"
+msgstr "Muuttaa väriteeman vaaleaksi"
+
+#: src/view/screens/Settings/index.tsx:494
+msgid "Sets color theme to system setting"
+msgstr "Muuttaa väriteeman käyttöjärjestelmän mukaiseksi"
+
+#: src/view/screens/Settings/index.tsx:533
+msgid "Sets dark theme to the dark theme"
+msgstr "Muuttaa tumman väriteeman tummaksi"
+
+#: src/view/screens/Settings/index.tsx:526
+msgid "Sets dark theme to the dim theme"
+msgstr "Asettaa tumman teeman himmeäksi teemaksi"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:113
+msgid "Sets email for password reset"
+msgstr "Asettaa sähköpostin salasanan palautusta varten"
+
+#: src/view/com/auth/login/ForgotPasswordForm.tsx:122
+#~ msgid "Sets hosting provider for password reset"
+#~ msgstr "Asettaa palveluntarjoajan salasanan palautusta varten"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:124
+msgid "Sets image aspect ratio to square"
+msgstr "Asettaa kuvan kuvasuhteen neliöksi"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:114
+msgid "Sets image aspect ratio to tall"
+msgstr "Asettaa kuvan kuvasuhteen korkeaksi"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:104
+msgid "Sets image aspect ratio to wide"
+msgstr "Asettaa kuvan kuvasuhteen leveäksi"
+
+#: src/view/com/auth/create/Step1.tsx:97
+#: src/view/com/auth/login/LoginForm.tsx:154
+#~ msgid "Sets server for the Bluesky client"
+#~ msgstr "Asettaa palvelimen Bluesky-ohjelmalle"
+
+#: src/Navigation.tsx:139
+#: src/view/screens/Settings/index.tsx:313
+#: src/view/shell/desktop/LeftNav.tsx:437
+#: src/view/shell/Drawer.tsx:570
+#: src/view/shell/Drawer.tsx:571
+msgid "Settings"
+msgstr "Asetukset"
+
+#: src/view/com/modals/SelfLabel.tsx:125
+msgid "Sexual activity or erotic nudity."
+msgstr "Erotiikka tai muu aikuisviihde."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:38
+msgid "Sexually Suggestive"
+msgstr "Seksuaalisesti vihjaileva"
+
+#: src/view/com/lightbox/Lightbox.tsx:141
+msgctxt "action"
+msgid "Share"
+msgstr "Jaa"
+
+#: src/view/com/profile/ProfileMenu.tsx:215
+#: src/view/com/profile/ProfileMenu.tsx:224
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:235
+#: src/view/screens/ProfileList.tsx:388
+msgid "Share"
+msgstr "Jaa"
+
+#: src/view/com/profile/ProfileMenu.tsx:373
+#: src/view/com/util/forms/PostDropdownBtn.tsx:347
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:251
+msgid "Share anyway"
+msgstr "Jaa kuitenkin"
+
+#: src/view/screens/ProfileFeed.tsx:362
+#: src/view/screens/ProfileFeed.tsx:364
+msgid "Share feed"
+msgstr "Jaa syöte"
+
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
+msgid "Share Link"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:92
+msgid "Shares the linked website"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:136
+#: src/components/moderation/PostHider.tsx:107
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:54
+#: src/view/screens/Settings/index.tsx:363
+msgid "Show"
+msgstr "Näytä"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:68
+msgid "Show all replies"
+msgstr "Näytä kaikki vastaukset"
+
+#: src/components/moderation/ScreenHider.tsx:169
+#: src/components/moderation/ScreenHider.tsx:172
+msgid "Show anyway"
+msgstr "Näytä silti"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:27
+#: src/lib/moderation/useLabelBehaviorDescription.ts:63
+msgid "Show badge"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:61
+msgid "Show badge and filter from feeds"
+msgstr ""
+
+#: src/view/com/modals/EmbedConsent.tsx:87
+#~ msgid "Show embeds from {0}"
+#~ msgstr "Näytä upotukset taholta {0}"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:200
+msgid "Show follows similar to {0}"
+msgstr "Näytä seurannat samankaltaisilta käyttäjiltä kuin {0}"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:507
+#: src/view/com/post/Post.tsx:201
+#: src/view/com/posts/FeedItem.tsx:355
+msgid "Show More"
+msgstr "Näytä lisää"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:258
+msgid "Show Posts from My Feeds"
+msgstr "Näytä viestit omista syötteistäni"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:222
+msgid "Show Quote Posts"
+msgstr "Näytä lainatut viestit"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:119
+msgid "Show quote-posts in Following feed"
+msgstr "Näytä lainatut viestit seurattavien syötteessä"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:135
+msgid "Show quotes in Following"
+msgstr "Näytä lainaukset seurattavissa"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:95
+msgid "Show re-posts in Following feed"
+msgstr "Näytä uudelleenjulkaistut viestit seurattavissa"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:119
+msgid "Show Replies"
+msgstr "Näytä vastaukset"
+
+#: src/view/screens/PreferencesThreads.tsx:100
+msgid "Show replies by people you follow before all other replies."
+msgstr "Näytä seurattujen henkilöiden vastaukset ennen muita vastauksia."
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:87
+msgid "Show replies in Following"
+msgstr "Näytä vastaukset seurattavissa"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:71
+msgid "Show replies in Following feed"
+msgstr "Näytä vastaukset seurattavissa"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:70
+msgid "Show replies with at least {value} {0}"
+msgstr "Näytä vastaukset, joissa on vähintään {value} {0}"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:188
+msgid "Show Reposts"
+msgstr "Näytä uudelleenjulkaisut"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:111
+msgid "Show reposts in Following"
+msgstr "Näytä uudelleenjulkaisut seurattavissa"
+
+#: src/components/moderation/ContentHider.tsx:68
+#: src/components/moderation/PostHider.tsx:64
+msgid "Show the content"
+msgstr "Näytä sisältö"
+
+#: src/view/com/notifications/FeedItem.tsx:351
+msgid "Show users"
+msgstr "Näytä käyttäjät"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:58
+msgid "Show warning"
+msgstr "Näytä varoitus"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:56
+msgid "Show warning and filter from feeds"
+msgstr "Näytä varoitus ja suodata syötteistä"
+
+#: src/view/com/profile/ProfileHeader.tsx:462
+#~ msgid "Shows a list of users similar to this user."
+#~ msgstr "Näyttää luettelon käyttäjistä, jotka ovat samankaltaisia kuin tämä käyttäjä."
+
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:130
+msgid "Shows posts from {0} in your feed"
+msgstr "Näyttää viestit käyttäjältä {0} syötteessäsi"
+
+#: src/screens/Login/index.tsx:100
+#: src/screens/Login/index.tsx:119
+#: src/screens/Login/LoginForm.tsx:131
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:73
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:83
+#: src/view/com/auth/SplashScreen.tsx:81
+#: src/view/com/auth/SplashScreen.tsx:90
+#: src/view/com/auth/SplashScreen.web.tsx:110
+#: src/view/com/auth/SplashScreen.web.tsx:119
+#: src/view/shell/bottom-bar/BottomBar.tsx:300
+#: src/view/shell/bottom-bar/BottomBar.tsx:301
+#: src/view/shell/bottom-bar/BottomBar.tsx:303
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:178
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:179
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:181
+#: src/view/shell/NavSignupCard.tsx:58
+#: src/view/shell/NavSignupCard.tsx:59
+#: src/view/shell/NavSignupCard.tsx:61
+msgid "Sign in"
+msgstr "Kirjaudu sisään"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:82
+#: src/view/com/auth/SplashScreen.tsx:86
+#: src/view/com/auth/SplashScreen.web.tsx:91
+#~ msgid "Sign In"
+#~ msgstr "Kirjaudu sisään"
+
+#: src/components/AccountList.tsx:109
+msgid "Sign in as {0}"
+msgstr "Kirjaudu sisään nimellä {0}"
+
+#: src/screens/Login/ChooseAccountForm.tsx:64
+msgid "Sign in as..."
+msgstr "Kirjaudu sisään nimellä..."
+
+#: src/view/com/auth/login/LoginForm.tsx:140
+#~ msgid "Sign into"
+#~ msgstr "Kirjaudu sisään"
+
+#: src/view/screens/Settings/index.tsx:107
+#: src/view/screens/Settings/index.tsx:110
+msgid "Sign out"
+msgstr "Kirjaudu ulos"
+
+#: src/view/shell/bottom-bar/BottomBar.tsx:290
+#: src/view/shell/bottom-bar/BottomBar.tsx:291
+#: src/view/shell/bottom-bar/BottomBar.tsx:293
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:168
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:169
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:171
+#: src/view/shell/NavSignupCard.tsx:49
+#: src/view/shell/NavSignupCard.tsx:50
+#: src/view/shell/NavSignupCard.tsx:52
+msgid "Sign up"
+msgstr "Rekisteröidy"
+
+#: src/view/shell/NavSignupCard.tsx:42
+msgid "Sign up or sign in to join the conversation"
+msgstr "Rekisteröidy tai kirjaudu sisään liittyäksesi keskusteluun"
+
+#: src/components/moderation/ScreenHider.tsx:97
+#: src/lib/moderation/useGlobalLabelStrings.ts:28
+msgid "Sign-in Required"
+msgstr "Sisäänkirjautuminen vaaditaan"
+
+#: src/view/screens/Settings/index.tsx:374
+msgid "Signed in as"
+msgstr "Kirjautunut sisään nimellä"
+
+#: src/screens/Login/ChooseAccountForm.tsx:48
+msgid "Signed in as @{0}"
+msgstr "Kirjautunut sisään käyttäjätunnuksella @{0}"
+
+#: src/view/com/modals/SwitchAccount.tsx:70
+#~ msgid "Signs {0} out of Bluesky"
+#~ msgstr "{0} kirjautuu ulos Blueskysta"
+
+#: src/screens/Onboarding/StepInterests/index.tsx:239
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:203
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:35
+msgid "Skip"
+msgstr "Ohita"
+
+#: src/screens/Onboarding/StepInterests/index.tsx:236
+msgid "Skip this flow"
+msgstr "Ohita tämä vaihe"
+
+#: src/view/com/auth/create/Step2.tsx:82
+#~ msgid "SMS verification"
+#~ msgstr "SMS-varmennus"
+
+#: src/screens/Onboarding/index.tsx:40
+msgid "Software Dev"
+msgstr "Ohjelmistokehitys"
+
+#: src/view/com/modals/ProfilePreview.tsx:62
+#~ msgid "Something went wrong and we're not sure what."
+#~ msgstr "Jotain meni pieleen, emmekä ole varmoja mitä."
+
+#: src/components/ReportDialog/index.tsx:59
+#: src/screens/Moderation/index.tsx:114
+#: src/screens/Profile/Sections/Labels.tsx:76
+msgid "Something went wrong, please try again."
+msgstr "Jotain meni pieleen, yritä uudelleen"
+
+#: src/view/com/modals/Waitlist.tsx:51
+#~ msgid "Something went wrong. Check your email and try again."
+#~ msgstr "Jotain meni pieleen. Tarkista sähköpostisi ja yritä uudelleen."
+
+#: src/App.native.tsx:66
+msgid "Sorry! Your session expired. Please log in again."
+msgstr "Pahoittelut! Istuntosi on vanhentunut. Kirjaudu sisään uudelleen."
+
+#: src/view/screens/PreferencesThreads.tsx:69
+msgid "Sort Replies"
+msgstr "Lajittele vastaukset"
+
+#: src/view/screens/PreferencesThreads.tsx:72
+msgid "Sort replies to the same post by:"
+msgstr "Lajittele saman viestin vastaukset seuraavasti:"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:146
+msgid "Source:"
+msgstr "Lähde:"
+
+#: src/lib/moderation/useReportOptions.ts:65
+msgid "Spam"
+msgstr "Roskapostia"
+
+#: src/lib/moderation/useReportOptions.ts:53
+msgid "Spam; excessive mentions or replies"
+msgstr ""
+
+#: src/screens/Onboarding/index.tsx:30
+msgid "Sports"
+msgstr "Urheilu"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:123
+msgid "Square"
+msgstr "Neliö"
+
+#: src/view/com/modals/ServerInput.tsx:62
+#~ msgid "Staging"
+#~ msgstr ""
+
+#: src/view/screens/Settings/index.tsx:903
+msgid "Status page"
+msgstr "Tilasivu"
+
+#: src/screens/Signup/index.tsx:142
+msgid "Step"
+msgstr ""
+
+#: src/view/com/auth/create/StepHeader.tsx:22
+#~ msgid "Step {0} of {numSteps}"
+#~ msgstr "Vaihe {0}/{numSteps}"
+
+#: src/view/screens/Settings/index.tsx:292
+msgid "Storage cleared, you need to restart the app now."
+msgstr "Tallennustila tyhjennetty, sinun on käynnistettävä sovellus uudelleen."
+
+#: src/Navigation.tsx:211
+#: src/view/screens/Settings/index.tsx:831
+msgid "Storybook"
+msgstr "Storybook"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:255
+#: src/components/moderation/LabelsOnMeDialog.tsx:256
+msgid "Submit"
+msgstr "Lähetä"
+
+#: src/view/screens/ProfileList.tsx:590
+msgid "Subscribe"
+msgstr "Tilaa"
+
+#: src/screens/Profile/Sections/Labels.tsx:180
+msgid "Subscribe to @{0} to use these labels:"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:221
+msgid "Subscribe to Labeler"
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:172
+#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:307
+msgid "Subscribe to the {0} feed"
+msgstr "Tilaa {0}-syöte"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:184
+msgid "Subscribe to this labeler"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:586
+msgid "Subscribe to this list"
+msgstr "Tilaa tämä lista"
+
+#: src/view/screens/Search/Search.tsx:376
+msgid "Suggested Follows"
+msgstr "Mahdollisia seurattavia"
+
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:65
+msgid "Suggested for you"
+msgstr "Suositeltua sinulle"
+
+#: src/view/com/modals/SelfLabel.tsx:95
+msgid "Suggestive"
+msgstr "Viittaava"
+
+#: src/Navigation.tsx:226
+#: src/view/screens/Support.tsx:30
+#: src/view/screens/Support.tsx:33
+msgid "Support"
+msgstr "Tuki"
+
+#: src/view/com/modals/ProfilePreview.tsx:110
+#~ msgid "Swipe up to see more"
+#~ msgstr "Pyyhkäise ylöspäin nähdäksesi lisää"
+
+#: src/components/dialogs/SwitchAccount.tsx:46
+#: src/components/dialogs/SwitchAccount.tsx:49
+msgid "Switch Account"
+msgstr "Vaihda käyttäjätiliä"
+
+#: src/view/screens/Settings/index.tsx:139
+msgid "Switch to {0}"
+msgstr "Vaihda käyttäjään {0}"
+
+#: src/view/screens/Settings/index.tsx:140
+msgid "Switches the account you are logged in to"
+msgstr "Vaihtaa sisäänkirjautuneen käyttäjän tilin"
+
+#: src/view/screens/Settings/index.tsx:491
+msgid "System"
+msgstr "Järjestelmä"
+
+#: src/view/screens/Settings/index.tsx:819
+msgid "System log"
+msgstr "Järjestelmäloki"
+
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "tag"
+msgstr "aihetunniste"
+
+#: src/components/TagMenu/index.tsx:78
+msgid "Tag menu: {displayTag}"
+msgstr "Aihetunnistevalikko: {displayTag}"
+
+#: src/components/TagMenu/index.tsx:74
+#~ msgid "Tag menu: {tag}"
+#~ msgstr "Aihetunnistevalikko: {tag}"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:113
+msgid "Tall"
+msgstr "Pitkä"
+
+#: src/view/com/util/images/AutoSizedImage.tsx:70
+msgid "Tap to view fully"
+msgstr "Napauta nähdäksesi kokonaan"
+
+#: src/screens/Onboarding/index.tsx:39
+msgid "Tech"
+msgstr "Teknologia"
+
+#: src/view/shell/desktop/RightNav.tsx:81
+msgid "Terms"
+msgstr "Ehdot"
+
+#: src/Navigation.tsx:236
+#: src/screens/Signup/StepInfo/Policies.tsx:49
+#: src/view/screens/Settings/index.tsx:917
+#: src/view/screens/TermsOfService.tsx:29
+#: src/view/shell/Drawer.tsx:259
+msgid "Terms of Service"
+msgstr "Käyttöehdot"
+
+#: src/lib/moderation/useReportOptions.ts:58
+#: src/lib/moderation/useReportOptions.ts:79
+#: src/lib/moderation/useReportOptions.ts:87
+msgid "Terms used violate community standards"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "text"
+msgstr "teksti"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:219
+msgid "Text input field"
+msgstr "Tekstikenttä"
+
+#: src/components/ReportDialog/SubmitView.tsx:78
+msgid "Thank you. Your report has been sent."
+msgstr "Kiitos. Raporttisi on lähetetty."
+
+#: src/view/com/modals/ChangeHandle.tsx:465
+msgid "That contains the following:"
+msgstr "Se sisältää seuraavaa:"
+
+#: src/screens/Signup/index.tsx:84
+msgid "That handle is already taken."
+msgstr "Tuo käyttätunnus on jo käytössä."
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:283
+#: src/view/com/profile/ProfileMenu.tsx:349
+msgid "The account will be able to interact with you after unblocking."
+msgstr "Käyttäjä voi olla vuorovaikutuksessa kanssasi, kun poistat eston."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:127
+msgid "the author"
+msgstr "kirjoittaja"
+
+#: src/view/screens/CommunityGuidelines.tsx:36
+msgid "The Community Guidelines have been moved to <0/>"
+msgstr "Yhteisöohjeet on siirretty kohtaan <0/>"
+
+#: src/view/screens/CopyrightPolicy.tsx:33
+msgid "The Copyright Policy has been moved to <0/>"
+msgstr "Tekijänoikeuskäytäntö on siirretty kohtaan <0/>"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:48
+msgid "The following labels were applied to your account."
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:49
+msgid "The following labels were applied to your content."
+msgstr ""
+
+#: src/screens/Onboarding/Layout.tsx:58
+msgid "The following steps will help customize your Bluesky experience."
+msgstr "Seuraavat vaiheet auttavat mukauttamaan Bluesky-kokemustasi."
+
+#: src/view/com/post-thread/PostThread.tsx:153
+#: src/view/com/post-thread/PostThread.tsx:165
+msgid "The post may have been deleted."
+msgstr "Viesti saattaa olla poistettu."
+
+#: src/view/screens/PrivacyPolicy.tsx:33
+msgid "The Privacy Policy has been moved to <0/>"
+msgstr "Tietosuojakäytäntö on siirretty kohtaan <0/>"
+
+#: src/view/screens/Support.tsx:36
+msgid "The support form has been moved. If you need help, please <0/> or visit {HELP_DESK_URL} to get in touch with us."
+msgstr "Tukilomake on siirretty. Jos tarvitset apua, käy osoitteessa <0/> tai vieraile {HELP_DESK_URL} ottaaksesi meihin yhteyttä."
+
+#: src/view/screens/TermsOfService.tsx:33
+msgid "The Terms of Service have been moved to"
+msgstr "Käyttöehdot on siirretty kohtaan"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:141
+msgid "There are many feeds to try:"
+msgstr "On monia syötteitä kokeiltavaksi:"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:112
+#: src/view/screens/ProfileFeed.tsx:544
+msgid "There was an an issue contacting the server, please check your internet connection and try again."
+msgstr "Emme saaneet yhteyttä palvelimeen, tarkista internetyhteytesi ja yritä uudelleen."
+
+#: src/view/com/posts/FeedErrorMessage.tsx:138
+msgid "There was an an issue removing this feed. Please check your internet connection and try again."
+msgstr "Syötteen poistossa on ongelmia. Tarkista internetyhteytesi ja yritä uudelleen."
+
+#: src/view/screens/ProfileFeed.tsx:218
+msgid "There was an an issue updating your feeds, please check your internet connection and try again."
+msgstr "Syötteiden päivittämisessä on ongelmia, tarkista internetyhteytesi ja yritä uudelleen."
+
+#: src/view/screens/ProfileFeed.tsx:245
+#: src/view/screens/ProfileList.tsx:275
+#: src/view/screens/SavedFeeds.tsx:209
+#: src/view/screens/SavedFeeds.tsx:231
+#: src/view/screens/SavedFeeds.tsx:252
+msgid "There was an issue contacting the server"
+msgstr "Yhteydenotto palvelimeen epäonnistui"
+
+#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:57
+#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:66
+#: src/view/com/feeds/FeedSourceCard.tsx:110
+#: src/view/com/feeds/FeedSourceCard.tsx:123
+msgid "There was an issue contacting your server"
+msgstr "Yhteydenotto palvelimeen epäonnistui"
+
+#: src/view/com/notifications/Feed.tsx:117
+msgid "There was an issue fetching notifications. Tap here to try again."
+msgstr "Ongelma ilmoitusten hakemisessa. Napauta tästä yrittääksesi uudelleen."
+
+#: src/view/com/posts/Feed.tsx:287
+msgid "There was an issue fetching posts. Tap here to try again."
+msgstr "Ongelma viestien hakemisessa. Napauta tästä yrittääksesi uudelleen."
+
+#: src/view/com/lists/ListMembers.tsx:172
+msgid "There was an issue fetching the list. Tap here to try again."
+msgstr "Ongelma listan hakemisessa. Napauta tästä yrittääksesi uudelleen."
+
+#: src/view/com/feeds/ProfileFeedgens.tsx:148
+#: src/view/com/lists/ProfileLists.tsx:155
+msgid "There was an issue fetching your lists. Tap here to try again."
+msgstr "Ongelma listojesi hakemisessa. Napauta tästä yrittääksesi uudelleen."
+
+#: src/components/ReportDialog/SubmitView.tsx:83
+msgid "There was an issue sending your report. Please check your internet connection."
+msgstr "Raportin lähettämisessä ilmeni ongelma. Tarkista internet-yhteytesi."
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:65
+msgid "There was an issue syncing your preferences with the server"
+msgstr "Ongelma asetuksiesi synkronoinnissa palvelimelle"
+
+#: src/view/screens/AppPasswords.tsx:68
+msgid "There was an issue with fetching your app passwords"
+msgstr "Sovellussalasanojen hakemisessa tapahtui virhe"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:105
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:127
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:99
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:111
+#: src/view/com/profile/ProfileMenu.tsx:106
+#: src/view/com/profile/ProfileMenu.tsx:117
+#: src/view/com/profile/ProfileMenu.tsx:132
+#: src/view/com/profile/ProfileMenu.tsx:143
+#: src/view/com/profile/ProfileMenu.tsx:157
+#: src/view/com/profile/ProfileMenu.tsx:170
+msgid "There was an issue! {0}"
+msgstr "Ilmeni ongelma! {0}"
+
+#: src/view/screens/ProfileList.tsx:288
+#: src/view/screens/ProfileList.tsx:302
+#: src/view/screens/ProfileList.tsx:316
+#: src/view/screens/ProfileList.tsx:330
+msgid "There was an issue. Please check your internet connection and try again."
+msgstr "Ilmeni joku ongelma. Tarkista internet-yhteys ja yritä uudelleen."
+
+#: src/view/com/util/ErrorBoundary.tsx:51
+msgid "There was an unexpected issue in the application. Please let us know if this happened to you!"
+msgstr "Sovelluksessa ilmeni odottamaton ongelma. Kerro meille, jos tämä tapahtui sinulle!"
+
+#: src/screens/Deactivated.tsx:106
+msgid "There's been a rush of new users to Bluesky! We'll activate your account as soon as we can."
+msgstr "Blueskyyn on tullut paljon uusia käyttäjiä! Aktivoimme tilisi niin pian kuin mahdollista."
+
+#: src/view/com/auth/create/Step2.tsx:55
+#~ msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
+#~ msgstr "Tässä numerossa on jotain vikaa. Valitse maasi ja syötä koko puhelinnumerosi!"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:146
+msgid "These are popular accounts you might like:"
+msgstr "Nämä ovat suosittuja tilejä, joista saatat pitää:"
+
+#: src/components/moderation/ScreenHider.tsx:116
+msgid "This {screenDescription} has been flagged:"
+msgstr "Tämä {screenDescription} on liputettu:"
+
+#: src/components/moderation/ScreenHider.tsx:111
+msgid "This account has requested that users sign in to view their profile."
+msgstr "Tämä käyttäjätili on pyytänyt, että käyttät kirjautuvat sisään nähdäkseen profiilinsa."
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:204
+msgid "This appeal will be sent to <0>{0}0>."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:19
+msgid "This content has been hidden by the moderators."
+msgstr "Moderaattorit ovat piilottaneet tämän sisällön."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:24
+msgid "This content has received a general warning from moderators."
+msgstr "Tämä sisältö on saanut yleisen varoituksen moderaattoreilta."
+
+#: src/components/dialogs/EmbedConsent.tsx:64
+msgid "This content is hosted by {0}. Do you want to enable external media?"
+msgstr "Tämä sisältö on hostattu palvelussa {0}. Haluatko sallia ulkoisen median?"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:77
+#: src/lib/moderation/useModerationCauseDescription.ts:77
+msgid "This content is not available because one of the users involved has blocked the other."
+msgstr "Tämä sisältö ei ole saatavilla, koska toinen käyttäjistä on estänyt toisen."
+
+#: src/view/com/posts/FeedErrorMessage.tsx:108
+msgid "This content is not viewable without a Bluesky account."
+msgstr "Tätä sisältöä ei voi katsoa ilman Bluesky-tiliä."
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:75
+#~ msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
+#~ msgstr "Tämä ominaisuus on betavaiheessa. Voit lukea lisää pakettivarastojen vientitoiminnosta <0>tässä blogikirjoituksessa.0>"
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:75
+msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost0>."
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:114
+msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later."
+msgstr "Tämä syöte saa tällä hetkellä paljon liikennettä ja on tilapäisesti pois käytöstä. Yritä uudelleen myöhemmin."
+
+#: src/screens/Profile/Sections/Feed.tsx:50
+#: src/view/screens/ProfileFeed.tsx:477
+#: src/view/screens/ProfileList.tsx:675
+msgid "This feed is empty!"
+msgstr "Tämä syöte on tyhjä!"
+
+#: src/view/com/posts/CustomFeedEmptyState.tsx:37
+msgid "This feed is empty! You may need to follow more users or tune your language settings."
+msgstr "Tämä syöte on tyhjä! Sinun on ehkä seurattava useampia käyttäjiä tai säädettävä kieliasetuksiasi."
+
+#: src/components/dialogs/BirthDateSettings.tsx:41
+msgid "This information is not shared with other users."
+msgstr "Tätä tietoa ei jaeta muiden käyttäjien kanssa."
+
+#: src/view/com/modals/VerifyEmail.tsx:119
+msgid "This is important in case you ever need to change your email or reset your password."
+msgstr "Tämä on tärkeää, jos sinun tarvitsee vaihtaa sähköpostiosoitteesi tai palauttaa salasanasi."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:124
+msgid "This label was applied by {0}."
+msgstr ""
+
+#: src/screens/Profile/Sections/Labels.tsx:167
+msgid "This labeler hasn't declared what labels it publishes, and may not be active."
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:72
+msgid "This link is taking you to the following website:"
+msgstr "Tämä linkki vie sinut tälle verkkosivustolle:"
+
+#: src/view/screens/ProfileList.tsx:853
+msgid "This list is empty!"
+msgstr "Tämä lista on tyhjä!"
+
+#: src/screens/Profile/ErrorState.tsx:40
+msgid "This moderation service is unavailable. See below for more details. If this issue persists, contact us."
+msgstr ""
+
+#: src/view/com/modals/AddAppPasswords.tsx:107
+msgid "This name is already in use"
+msgstr "Tämä nimi on jo käytössä"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:125
+msgid "This post has been deleted."
+msgstr "Tämä viesti on poistettu."
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:344
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:248
+msgid "This post is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr "Tämä julkaisu on näkyvissä vain kirjautuneille käyttäjille. Sitä ei näytetä kirjautumattomille henkilöille."
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:326
+msgid "This post will be hidden from feeds."
+msgstr "Tämä julkaisu piilotetaan syötteistä."
+
+#: src/view/com/profile/ProfileMenu.tsx:370
+msgid "This profile is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr "Tämä profiili on näkyvissä vain kirjautuneille käyttäjille. Sitä ei näytetä kirjautumattomille henkilöille."
+
+#: src/screens/Signup/StepInfo/Policies.tsx:37
+msgid "This service has not provided terms of service or a privacy policy."
+msgstr "Tämä palvelu ei ole toimittanut käyttöehtoja tai tietosuojakäytäntöä."
+
+#: src/view/com/modals/ChangeHandle.tsx:445
+msgid "This should create a domain record at:"
+msgstr ""
+
+#: src/view/com/profile/ProfileFollowers.tsx:87
+msgid "This user doesn't have any followers."
+msgstr "Tällä käyttäjällä ei ole yhtään seuraajaa"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:72
+#: src/lib/moderation/useModerationCauseDescription.ts:68
+msgid "This user has blocked you. You cannot view their content."
+msgstr "Tämä käyttäjä on estänyt sinut. Et voi nähdä hänen sisältöä."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:30
+msgid "This user has requested that their content only be shown to signed-in users."
+msgstr "Tämä käyttäjä on pyytänyt, että hänen sisältö näkyy vain kirjautuneille"
+
+#: src/view/com/modals/ModerationDetails.tsx:42
+#~ msgid "This user is included in the <0/> list which you have blocked."
+#~ msgstr "Tämä käyttäjä on <0/>-listassa, jonka olet estänyt."
+
+#: src/view/com/modals/ModerationDetails.tsx:74
+#~ msgid "This user is included in the <0/> list which you have muted."
+#~ msgstr "Tämä käyttäjä on <0/>-listassa, jonka olet hiljentänyt."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:55
+msgid "This user is included in the <0>{0}0> list which you have blocked."
+msgstr "Tämä käyttäjä on <0>{0}0>-listassa, jonka olet estänyt."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:84
+msgid "This user is included in the <0>{0}0> list which you have muted."
+msgstr "Tämä käyttäjä on <0>{0}0>-listassa, jonka olet hiljentänyt."
+
+#: src/view/com/modals/ModerationDetails.tsx:74
+#~ msgid "This user is included the <0/> list which you have muted."
+#~ msgstr ""
+
+#: src/view/com/profile/ProfileFollows.tsx:87
+msgid "This user isn't following anyone."
+msgstr "Tämä käyttäjä ei seuraa ketään."
+
+#: src/view/com/modals/SelfLabel.tsx:137
+msgid "This warning is only available for posts with media attached."
+msgstr "Tämä varoitus on saatavilla vain viesteille, joihin on liitetty mediatiedosto."
+
+#: src/components/dialogs/MutedWords.tsx:283
+msgid "This will delete {0} from your muted words. You can always add it back later."
+msgstr "Tämä poistaa {0}:n hiljennetyistä sanoistasi. Voit lisätä sen takaisin myöhemmin."
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
+#~ msgid "This will hide this post from your feeds."
+#~ msgstr "Tämä piilottaa tämän viestin syötteistäsi."
+
+#: src/view/screens/Settings/index.tsx:574
+msgid "Thread preferences"
+msgstr "Keskusteluketjun asetukset"
+
+#: src/view/screens/PreferencesThreads.tsx:53
+#: src/view/screens/Settings/index.tsx:584
+msgid "Thread Preferences"
+msgstr "Keskusteluketjun asetukset"
+
+#: src/view/screens/PreferencesThreads.tsx:119
+msgid "Threaded Mode"
+msgstr "Ketjumainen näkymä"
+
+#: src/Navigation.tsx:269
+msgid "Threads Preferences"
+msgstr "Keskusteluketjujen asetukset"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:33
+msgid "To whom would you like to send this report?"
+msgstr "Kenelle haluaisit lähettää tämän raportin?"
+
+#: src/components/dialogs/MutedWords.tsx:112
+msgid "Toggle between muted word options."
+msgstr "Vaihda hiljennysvaihtoehtojen välillä."
+
+#: src/view/com/util/forms/DropdownButton.tsx:246
+msgid "Toggle dropdown"
+msgstr "Vaihda pudotusvalikko"
+
+#: src/screens/Moderation/index.tsx:332
+msgid "Toggle to enable or disable adult content"
+msgstr "Vaihda ottaaksesi käyttöön tai poistaaksesi käytöstä aikuisille tarkoitettu sisältö."
+
+#: src/view/com/modals/EditImage.tsx:272
+msgid "Transformations"
+msgstr "Muutokset"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:644
+#: src/view/com/post-thread/PostThreadItem.tsx:646
+#: src/view/com/util/forms/PostDropdownBtn.tsx:212
+#: src/view/com/util/forms/PostDropdownBtn.tsx:214
+msgid "Translate"
+msgstr "Käännä"
+
+#: src/view/com/util/error/ErrorScreen.tsx:82
+msgctxt "action"
+msgid "Try again"
+msgstr "Yritä uudelleen"
+
+#: src/view/com/modals/ChangeHandle.tsx:428
+msgid "Type:"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:478
+msgid "Un-block list"
+msgstr "Poista listan esto"
+
+#: src/view/screens/ProfileList.tsx:461
+msgid "Un-mute list"
+msgstr "Poista listan hiljennys"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:74
+#: src/screens/Login/index.tsx:78
+#: src/screens/Login/LoginForm.tsx:119
+#: src/screens/Login/SetNewPasswordForm.tsx:77
+#: src/screens/Signup/index.tsx:63
+#: src/view/com/modals/ChangePassword.tsx:70
+msgid "Unable to contact your service. Please check your Internet connection."
+msgstr "Yhteys palveluusi ei onnistu. Tarkista internet-yhteytesi."
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:181
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+#: src/view/screens/ProfileList.tsx:572
+msgid "Unblock"
+msgstr "Poista esto"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:186
+msgctxt "action"
+msgid "Unblock"
+msgstr "Poista esto"
+
+#: src/view/com/profile/ProfileMenu.tsx:299
+#: src/view/com/profile/ProfileMenu.tsx:305
+msgid "Unblock Account"
+msgstr "Poista käyttäjätilin esto"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:281
+#: src/view/com/profile/ProfileMenu.tsx:343
+msgid "Unblock Account?"
+msgstr "Poista esto?"
+
+#: src/view/com/modals/Repost.tsx:43
+#: src/view/com/modals/Repost.tsx:56
+#: src/view/com/util/post-ctrls/RepostButton.tsx:60
+#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
+msgid "Undo repost"
+msgstr "Kumoa uudelleenjako"
+
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
+msgid "Unfollow"
+msgstr "Älä seuraa"
+
+#: src/view/com/profile/FollowButton.tsx:60
+msgctxt "action"
+msgid "Unfollow"
+msgstr "Lopeta seuraaminen"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:220
+msgid "Unfollow {0}"
+msgstr "Lopeta seuraaminen {0}"
+
+#: src/view/com/profile/ProfileMenu.tsx:241
+#: src/view/com/profile/ProfileMenu.tsx:251
+msgid "Unfollow Account"
+msgstr "Lopeta käyttäjätilin seuraaminen"
+
+#: src/view/com/auth/create/state.ts:262
+#~ msgid "Unfortunately, you do not meet the requirements to create an account."
+#~ msgstr "Valitettavasti et täytä tilin luomisen vaatimuksia."
+
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
+msgid "Unlike"
+msgstr "En tykkää"
+
+#: src/view/screens/ProfileFeed.tsx:573
+msgid "Unlike this feed"
+msgstr "Poista tykkäys tästä syötteestä"
+
+#: src/components/TagMenu/index.tsx:249
+#: src/view/screens/ProfileList.tsx:579
+msgid "Unmute"
+msgstr "Poista hiljennys"
+
+#: src/components/TagMenu/index.web.tsx:104
+msgid "Unmute {truncatedTag}"
+msgstr "Poista hiljennys {truncatedTag}"
+
+#: src/view/com/profile/ProfileMenu.tsx:278
+#: src/view/com/profile/ProfileMenu.tsx:284
+msgid "Unmute Account"
+msgstr "Poista käyttäjätilin hiljennys"
+
+#: src/components/TagMenu/index.tsx:208
+msgid "Unmute all {displayTag} posts"
+msgstr "Poista hiljennys kaikista {displayTag}-julkaisuista"
+
+#: src/components/TagMenu/index.tsx:210
+#~ msgid "Unmute all {tag} posts"
+#~ msgstr "Poista hiljennys kaikista {tag}-viesteistä"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:256
+msgid "Unmute thread"
+msgstr "Poista keskusteluketjun hiljennys"
+
+#: src/view/screens/ProfileFeed.tsx:295
+#: src/view/screens/ProfileList.tsx:563
+msgid "Unpin"
+msgstr "Poista kiinnitys"
+
+#: src/view/screens/ProfileFeed.tsx:292
+msgid "Unpin from home"
+msgstr "Poista kiinnitys etusivulta"
+
+#: src/view/screens/ProfileList.tsx:444
+msgid "Unpin moderation list"
+msgstr "Poista moderointilistan kiinnitys"
+
+#: src/view/screens/ProfileFeed.tsx:346
+#~ msgid "Unsave"
+#~ msgstr "Poista tallennus"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:219
+msgid "Unsubscribe"
+msgstr "Peruuta tilaus"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:183
+msgid "Unsubscribe from this labeler"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:70
+msgid "Unwanted Sexual Content"
+msgstr "Ei-toivottu seksuaalinen sisältö"
+
+#: src/view/com/modals/UserAddRemoveLists.tsx:70
+msgid "Update {displayName} in Lists"
+msgstr "Päivitä {displayName} listoissa"
+
+#: src/lib/hooks/useOTAUpdate.ts:15
+#~ msgid "Update Available"
+#~ msgstr "Päivitys saatavilla"
+
+#: src/view/com/modals/ChangeHandle.tsx:508
+msgid "Update to {handle}"
+msgstr "Päivitä {handle}\""
+
+#: src/screens/Login/SetNewPasswordForm.tsx:186
+msgid "Updating..."
+msgstr "Päivitetään..."
+
+#: src/view/com/modals/ChangeHandle.tsx:454
+msgid "Upload a text file to:"
+msgstr "Lataa tekstitiedosto kohteeseen:"
+
+#: src/view/com/util/UserAvatar.tsx:326
+#: src/view/com/util/UserAvatar.tsx:329
+#: src/view/com/util/UserBanner.tsx:116
+#: src/view/com/util/UserBanner.tsx:119
+msgid "Upload from Camera"
+msgstr "Lataa kamerasta"
+
+#: src/view/com/util/UserAvatar.tsx:343
+#: src/view/com/util/UserBanner.tsx:133
+msgid "Upload from Files"
+msgstr "Lataa tiedostoista"
+
+#: src/view/com/util/UserAvatar.tsx:337
+#: src/view/com/util/UserAvatar.tsx:341
+#: src/view/com/util/UserBanner.tsx:127
+#: src/view/com/util/UserBanner.tsx:131
+msgid "Upload from Library"
+msgstr "Lataa kirjastosta"
+
+#: src/view/com/modals/ChangeHandle.tsx:408
+msgid "Use a file on your server"
+msgstr "Käytä palvelimellasi olevaa tiedostoa"
+
+#: src/view/screens/AppPasswords.tsx:197
+msgid "Use app passwords to login to other Bluesky clients without giving full access to your account or password."
+msgstr "Käytä sovellussalasanoja kirjautuaksesi muihin Bluesky-sovelluksiin antamatta niille täyttä hallintaa tilillesi tai salasanallesi."
+
+#: src/view/com/modals/ChangeHandle.tsx:517
+msgid "Use bsky.social as hosting provider"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:516
+msgid "Use default provider"
+msgstr "Käytä oletustoimittajaa"
+
+#: src/view/com/modals/InAppBrowserConsent.tsx:56
+#: src/view/com/modals/InAppBrowserConsent.tsx:58
+msgid "Use in-app browser"
+msgstr "Käytä sovelluksen sisäistä selainta"
+
+#: src/view/com/modals/InAppBrowserConsent.tsx:66
+#: src/view/com/modals/InAppBrowserConsent.tsx:68
+msgid "Use my default browser"
+msgstr "Käytä oletusselaintani"
+
+#: src/view/com/modals/ChangeHandle.tsx:400
+msgid "Use the DNS panel"
+msgstr ""
+
+#: src/view/com/modals/AddAppPasswords.tsx:156
+msgid "Use this to sign into the other app along with your handle."
+msgstr "Käytä tätä kirjautuaksesi toiseen sovellukseen käyttäjätunnuksellasi."
+
+#: src/view/com/modals/ServerInput.tsx:105
+#~ msgid "Use your domain as your Bluesky client service provider"
+#~ msgstr ""
+
+#: src/view/com/modals/InviteCodes.tsx:201
+msgid "Used by:"
+msgstr "Käyttänyt:"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:64
+#: src/lib/moderation/useModerationCauseDescription.ts:56
+msgid "User Blocked"
+msgstr "Käyttäjä estetty"
+
+#: src/lib/moderation/useModerationCauseDescription.ts:48
+msgid "User Blocked by \"{0}\""
+msgstr "\"{0}\" on estänyt käyttäjän."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:53
+msgid "User Blocked by List"
+msgstr "Käyttäjä on estetty listalla"
+
+#: src/lib/moderation/useModerationCauseDescription.ts:66
+msgid "User Blocking You"
+msgstr "Käyttäjä on estänyt sinut"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:70
+msgid "User Blocks You"
+msgstr "Käyttäjä on estänyt sinut"
+
+#: src/view/com/auth/create/Step2.tsx:79
+#~ msgid "User handle"
+#~ msgstr "Käyttäjätunnus"
+
+#: src/view/com/lists/ListCard.tsx:85
+#: src/view/com/modals/UserAddRemoveLists.tsx:198
+msgid "User list by {0}"
+msgstr "Käyttäjälistan on tehnyt {0}"
+
+#: src/view/screens/ProfileList.tsx:777
+msgid "User list by <0/>"
+msgstr "Käyttäjälistan on tehnyt <0/>"
+
+#: src/view/com/lists/ListCard.tsx:83
+#: src/view/com/modals/UserAddRemoveLists.tsx:196
+#: src/view/screens/ProfileList.tsx:775
+msgid "User list by you"
+msgstr "Käyttäjälistasi"
+
+#: src/view/com/modals/CreateOrEditList.tsx:197
+msgid "User list created"
+msgstr "Käyttäjälista luotu"
+
+#: src/view/com/modals/CreateOrEditList.tsx:183
+msgid "User list updated"
+msgstr "Käyttäjälista päivitetty"
+
+#: src/view/screens/Lists.tsx:58
+msgid "User Lists"
+msgstr "Käyttäjälistat"
+
+#: src/screens/Login/LoginForm.tsx:151
+msgid "Username or email address"
+msgstr "Käyttäjätunnus tai sähköpostiosoite"
+
+#: src/view/screens/ProfileList.tsx:811
+msgid "Users"
+msgstr "Käyttäjät"
+
+#: src/view/com/threadgate/WhoCanReply.tsx:143
+msgid "users followed by <0/>"
+msgstr "käyttäjät, joita <0/> seuraa"
+
+#: src/view/com/modals/Threadgate.tsx:106
+msgid "Users in \"{0}\""
+msgstr "Käyttäjät listassa \"{0}\""
+
+#: src/components/LikesDialog.tsx:85
+msgid "Users that have liked this content or profile"
+msgstr "Käyttäjät, jotka ovat pitäneet tästä sisällöstä tai profiilista"
+
+#: src/view/com/modals/ChangeHandle.tsx:436
+msgid "Value:"
+msgstr ""
+
+#: src/view/com/auth/create/Step2.tsx:243
+#~ msgid "Verification code"
+#~ msgstr "Varmistuskoodi"
+
+#: src/view/com/modals/ChangeHandle.tsx:509
+msgid "Verify {0}"
+msgstr "Vahvista {0}"
+
+#: src/view/screens/Settings/index.tsx:942
+msgid "Verify email"
+msgstr "Varmista sähköposti"
+
+#: src/view/screens/Settings/index.tsx:967
+msgid "Verify my email"
+msgstr "Vahvista sähköpostini"
+
+#: src/view/screens/Settings/index.tsx:976
+msgid "Verify My Email"
+msgstr "Vahvista sähköpostini"
+
+#: src/view/com/modals/ChangeEmail.tsx:205
+#: src/view/com/modals/ChangeEmail.tsx:207
+msgid "Verify New Email"
+msgstr "Vahvista uusi sähköposti"
+
+#: src/view/com/modals/VerifyEmail.tsx:103
+msgid "Verify Your Email"
+msgstr "Vahvista sähköpostisi"
+
+#: src/view/screens/Settings/index.tsx:893
+msgid "Version {0}"
+msgstr ""
+
+#: src/screens/Onboarding/index.tsx:42
+msgid "Video Games"
+msgstr "Videopelit"
+
+#: src/screens/Profile/Header/Shell.tsx:107
+msgid "View {0}'s avatar"
+msgstr "Katso {0}:n avatar"
+
+#: src/view/screens/Log.tsx:52
+msgid "View debug entry"
+msgstr "Katso vianmääritystietue"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:131
+msgid "View details"
+msgstr "Näytä tiedot"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:126
+msgid "View details for reporting a copyright violation"
+msgstr "Näytä tiedot tekijänoikeusrikkomuksen ilmoittamisesta"
+
+#: src/view/com/posts/FeedSlice.tsx:99
+msgid "View full thread"
+msgstr "Katso koko keskusteluketju"
+
+#: src/components/moderation/LabelsOnMe.tsx:51
+msgid "View information about these labels"
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:166
+msgid "View profile"
+msgstr "Katso profiilia"
+
+#: src/view/com/profile/ProfileSubpageHeader.tsx:128
+msgid "View the avatar"
+msgstr "Katso avatar"
+
+#: src/components/LabelingServiceCard/index.tsx:140
+msgid "View the labeling service provided by @{0}"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:585
+msgid "View users who like this feed"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
+msgid "Visit Site"
+msgstr "Vieraile sivustolla"
+
+#: src/components/moderation/LabelPreference.tsx:135
+#: src/lib/moderation/useLabelBehaviorDescription.ts:17
+#: src/lib/moderation/useLabelBehaviorDescription.ts:22
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:53
+msgid "Warn"
+msgstr "Varoita"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:48
+msgid "Warn content"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:46
+msgid "Warn content and filter from feeds"
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:134
+#~ msgid "We also think you'll like \"For You\" by Skygaze:"
+#~ msgstr "Uskomme myös, että pitäisit Skygazen \"For You\" -syötteestä:"
+
+#: src/screens/Hashtag.tsx:133
+msgid "We couldn't find any results for that hashtag."
+msgstr "Emme löytäneet tuloksia tuolla aihetunnisteella."
+
+#: src/screens/Deactivated.tsx:133
+msgid "We estimate {estimatedTime} until your account is ready."
+msgstr "Arvioimme, että tilisi valmistumiseen on {estimatedTime} aikaa."
+
+#: src/screens/Onboarding/StepFinished.tsx:97
+msgid "We hope you have a wonderful time. Remember, Bluesky is:"
+msgstr "Toivomme sinulle ihania hetkiä. Muista, että Bluesky on:"
+
+#: src/view/com/posts/DiscoverFallbackHeader.tsx:29
+msgid "We ran out of posts from your follows. Here's the latest from <0/>."
+msgstr "Emme enää löytäneet viestejä seurattavilta. Tässä on uusin tekijältä <0/>."
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:118
+#~ msgid "We recommend \"For You\" by Skygaze:"
+#~ msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:203
+msgid "We recommend avoiding common words that appear in many posts, since it can result in no posts being shown."
+msgstr "Suosittelemme välttämään yleisiä sanoja, jotka esiintyvät monissa viesteissä. Se voi johtaa siihen, ettei mitään viestejä näytetä."
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:125
+msgid "We recommend our \"Discover\" feed:"
+msgstr "Suosittelemme \"Tutustu\"-syötettämme:"
+
+#: src/components/dialogs/BirthDateSettings.tsx:52
+msgid "We were unable to load your birth date preferences. Please try again."
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:385
+msgid "We were unable to load your configured labelers at this time."
+msgstr ""
+
+#: src/screens/Onboarding/StepInterests/index.tsx:137
+msgid "We weren't able to connect. Please try again to continue setting up your account. If it continues to fail, you can skip this flow."
+msgstr "Yhteyden muodostaminen ei onnistunut. Yritä uudelleen jatkaaksesi tilisi määritystä. Jos ongelma jatkuu, voit ohittaa tämän vaiheen."
+
+#: src/screens/Deactivated.tsx:137
+msgid "We will let you know when your account is ready."
+msgstr "Ilmoitamme sinulle, kun käyttäjätilisi on valmis."
+
+#: src/view/com/modals/AppealLabel.tsx:48
+#~ msgid "We'll look into your appeal promptly."
+#~ msgstr "Käsittelemme vetoomuksesi pikaisesti."
+
+#: src/screens/Onboarding/StepInterests/index.tsx:142
+msgid "We'll use this to help customize your experience."
+msgstr "Käytämme tätä mukauttaaksemme kokemustasi."
+
+#: src/screens/Signup/index.tsx:130
+msgid "We're so excited to have you join us!"
+msgstr "Olemme innoissamme, että liityt joukkoomme!"
+
+#: src/view/screens/ProfileList.tsx:89
+msgid "We're sorry, but we were unable to resolve this list. If this persists, please contact the list creator, @{handleOrDid}."
+msgstr "Pahoittelemme, emme saaneet avattua tätä listaa. Jos ongelma jatkuu, ota yhteyttä listan tekijään: @{handleOrDid}."
+
+#: src/components/dialogs/MutedWords.tsx:229
+msgid "We're sorry, but we weren't able to load your muted words at this time. Please try again."
+msgstr "Pahoittelemme, emme pystyneet lataamaan hiljennettyjä sanojasi tällä hetkellä. Yritä uudelleen."
+
+#: src/view/screens/Search/Search.tsx:256
+msgid "We're sorry, but your search could not be completed. Please try again in a few minutes."
+msgstr "Pahoittelemme, hakuasi ei voitu suorittaa loppuun. Yritä uudelleen muutaman minuutin kuluttua."
+
+#: src/components/Lists.tsx:188
+#: src/view/screens/NotFound.tsx:48
+msgid "We're sorry! We can't find the page you were looking for."
+msgstr "Pahoittelut! Emme löydä etsimääsi sivua."
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:321
+msgid "We're sorry! You can only subscribe to ten labelers, and you've reached your limit of ten."
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:48
+msgid "Welcome to <0>Bluesky0>"
+msgstr "Tervetuloa <0>Bluesky0>:iin"
+
+#: src/screens/Onboarding/StepInterests/index.tsx:134
+msgid "What are your interests?"
+msgstr "Mitkä ovat kiinnostuksenkohteesi?"
+
+#: src/view/com/modals/report/Modal.tsx:169
+#~ msgid "What is the issue with this {collectionName}?"
+#~ msgstr "Mikä on ongelma tämän {collectionName} kanssa?"
+
+#: src/view/com/auth/SplashScreen.tsx:58
+#: src/view/com/auth/SplashScreen.web.tsx:84
+#: src/view/com/composer/Composer.tsx:296
+msgid "What's up?"
+msgstr "Mitä kuuluu?"
+
+#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:78
+msgid "Which languages are used in this post?"
+msgstr "Mitä kieliä tässä viestissä käytetään?"
+
+#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:77
+msgid "Which languages would you like to see in your algorithmic feeds?"
+msgstr "Mitä kieliä haluaisit nähdä algoritmisissä syötteissä?"
+
+#: src/view/com/composer/threadgate/ThreadgateBtn.tsx:47
+#: src/view/com/modals/Threadgate.tsx:66
+msgid "Who can reply"
+msgstr "Kuka voi vastata"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:43
+msgid "Why should this content be reviewed?"
+msgstr "Miksi tämä sisältö tulisi arvioida?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:56
+msgid "Why should this feed be reviewed?"
+msgstr "Miksi tämä syöte tulisi arvioida?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:53
+msgid "Why should this list be reviewed?"
+msgstr "Miksi tämä lista tulisi arvioida?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:50
+msgid "Why should this post be reviewed?"
+msgstr "Miksi tämä viesti tulisi arvioida?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:47
+msgid "Why should this user be reviewed?"
+msgstr "Miksi tämä käyttäjä tulisi arvioida?"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:103
+msgid "Wide"
+msgstr "Leveä"
+
+#: src/view/com/composer/Composer.tsx:436
+msgid "Write post"
+msgstr "Kirjoita viesti"
+
+#: src/view/com/composer/Composer.tsx:295
+#: src/view/com/composer/Prompt.tsx:37
+msgid "Write your reply"
+msgstr "Kirjoita vastauksesi"
+
+#: src/screens/Onboarding/index.tsx:28
+msgid "Writers"
+msgstr "Kirjoittajat"
+
+#: src/view/com/auth/create/Step2.tsx:263
+#~ msgid "XXXXXX"
+#~ msgstr "XXXXXX"
+
+#: src/view/com/composer/select-language/SuggestedLanguage.tsx:77
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:201
+#: src/view/screens/PreferencesFollowingFeed.tsx:236
+#: src/view/screens/PreferencesFollowingFeed.tsx:271
+#: src/view/screens/PreferencesThreads.tsx:106
+#: src/view/screens/PreferencesThreads.tsx:129
+msgid "Yes"
+msgstr "Kyllä"
+
+#: src/screens/Onboarding/StepModeration/index.tsx:46
+#~ msgid "You are in control"
+#~ msgstr ""
+
+#: src/screens/Deactivated.tsx:130
+msgid "You are in line."
+msgstr "Olet jonossa."
+
+#: src/view/com/profile/ProfileFollows.tsx:86
+msgid "You are not following anyone."
+msgstr ""
+
+#: src/view/com/posts/FollowingEmptyState.tsx:67
+#: src/view/com/posts/FollowingEndOfFeed.tsx:68
+msgid "You can also discover new Custom Feeds to follow."
+msgstr "Voit myös selata uusia mukautettuja syötteitä seurattavaksi."
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:123
+#~ msgid "You can also try our \"Discover\" algorithm:"
+#~ msgstr ""
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:143
+msgid "You can change these settings later."
+msgstr "Voit muuttaa näitä asetuksia myöhemmin."
+
+#: src/screens/Login/index.tsx:158
+#: src/screens/Login/PasswordUpdatedForm.tsx:33
+msgid "You can now sign in with your new password."
+msgstr "Voit nyt kirjautua sisään uudella salasanallasi."
+
+#: src/view/com/profile/ProfileFollowers.tsx:86
+msgid "You do not have any followers."
+msgstr "Sinulla ei ole kyhtään seuraajaa."
+
+#: src/view/com/modals/InviteCodes.tsx:67
+msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer."
+msgstr "Sinulla ei ole vielä kutsukoodia! Lähetämme sinulle sellaisen, kun olet ollut Bluesky-palvelussa hieman pidempään."
+
+#: src/view/screens/SavedFeeds.tsx:102
+msgid "You don't have any pinned feeds."
+msgstr "Sinulla ei ole kiinnitettyjä syötteitä."
+
+#: src/view/screens/Feeds.tsx:452
+msgid "You don't have any saved feeds!"
+msgstr "Sinulla ei ole tallennettuja syötteitä!"
+
+#: src/view/screens/SavedFeeds.tsx:135
+msgid "You don't have any saved feeds."
+msgstr "Sinulla ei ole tallennettuja syötteitä."
+
+#: src/view/com/post-thread/PostThread.tsx:159
+msgid "You have blocked the author or you have been blocked by the author."
+msgstr "Olet estänyt tekijän tai sinut on estetty tekijän toimesta."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:66
+#: src/lib/moderation/useModerationCauseDescription.ts:50
+#: src/lib/moderation/useModerationCauseDescription.ts:58
+msgid "You have blocked this user. You cannot view their content."
+msgstr "Olet estänyt tämän käyttäjän. Et voi nähdä hänen sisältöä."
+
+#: src/screens/Login/SetNewPasswordForm.tsx:54
+#: src/screens/Login/SetNewPasswordForm.tsx:91
+#: src/view/com/modals/ChangePassword.tsx:87
+#: src/view/com/modals/ChangePassword.tsx:121
+msgid "You have entered an invalid code. It should look like XXXXX-XXXXX."
+msgstr "Olet syöttänyt virheellisen koodin. Sen tulisi näyttää muodoltaan XXXXX-XXXXX."
+
+#: src/lib/moderation/useModerationCauseDescription.ts:109
+msgid "You have hidden this post"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:101
+msgid "You have hidden this post."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:94
+#: src/lib/moderation/useModerationCauseDescription.ts:92
+msgid "You have muted this account."
+msgstr ""
+
+#: src/lib/moderation/useModerationCauseDescription.ts:86
+msgid "You have muted this user"
+msgstr ""
+
+#: src/view/com/modals/ModerationDetails.tsx:87
+#~ msgid "You have muted this user."
+#~ msgstr "Olet hiljentänyt tämän käyttäjän."
+
+#: src/view/com/feeds/ProfileFeedgens.tsx:136
+msgid "You have no feeds."
+msgstr "Sinulla ei ole syötteitä."
+
+#: src/view/com/lists/MyLists.tsx:89
+#: src/view/com/lists/ProfileLists.tsx:140
+msgid "You have no lists."
+msgstr "Sinulla ei ole listoja."
+
+#: src/view/screens/ModerationBlockedAccounts.tsx:132
+msgid "You have not blocked any accounts yet. To block an account, go to their profile and select \"Block account\" from the menu on their account."
+msgstr ""
+
+#: src/view/screens/ModerationBlockedAccounts.tsx:132
+#~ msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
+#~ msgstr "Et ole vielä estänyt yhtään käyttäjää. Estääksesi käyttäjän, siirry heidän profiiliinsa ja valitse \"Estä käyttäjä\"-vaihtoehto heidän tilinsä valikosta."
+
+#: src/view/screens/AppPasswords.tsx:89
+msgid "You have not created any app passwords yet. You can create one by pressing the button below."
+msgstr "Et ole vielä luonut yhtään sovelluksen salasanaa. Voit luoda sellaisen painamalla alla olevaa painiketta."
+
+#: src/view/screens/ModerationMutedAccounts.tsx:131
+msgid "You have not muted any accounts yet. To mute an account, go to their profile and select \"Mute account\" from the menu on their account."
+msgstr ""
+
+#: src/view/screens/ModerationMutedAccounts.tsx:131
+#~ msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
+#~ msgstr "Et ole vielä hiljentänyt yhtään käyttäjää. Hiljentääksesi käyttäjän, siirry heidän profiiliinsa ja valitse \"Hiljennä käyttäjä\"-vaihtoehto heidän tilinsä valikosta."
+
+#: src/components/dialogs/MutedWords.tsx:249
+msgid "You haven't muted any words or tags yet"
+msgstr "Et ole vielä hiljentänyt yhtään sanaa tai aihetunnistetta"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:68
+msgid "You may appeal these labels if you feel they were placed in error."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/Policies.tsx:79
+msgid "You must be 13 years of age or older to sign up."
+msgstr ""
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:175
+#~ msgid "You must be 18 or older to enable adult content."
+#~ msgstr "Sinun on oltava vähintään 18-vuotias katsoaksesi aikuissisältöä."
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:110
+msgid "You must be 18 years or older to enable adult content"
+msgstr "Sinun on oltava vähintään 18-vuotias katsoaksesi aikuissisältöä"
+
+#: src/components/ReportDialog/SubmitView.tsx:205
+msgid "You must select at least one labeler for a report"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:144
+msgid "You will no longer receive notifications for this thread"
+msgstr "Et enää saa ilmoituksia tästä keskustelusta"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:147
+msgid "You will now receive notifications for this thread"
+msgstr "Saat nyt ilmoituksia tästä keskustelusta"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:104
+msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password."
+msgstr "Saat sähköpostin \"nollauskoodin\". Syötä koodi tähän ja syötä sitten uusi salasanasi."
+
+#: src/screens/Onboarding/StepModeration/index.tsx:60
+msgid "You're in control"
+msgstr "Sinulla on ohjat"
+
+#: src/screens/Deactivated.tsx:87
+#: src/screens/Deactivated.tsx:88
+#: src/screens/Deactivated.tsx:103
+msgid "You're in line"
+msgstr "Olet jonossa"
+
+#: src/screens/Onboarding/StepFinished.tsx:94
+msgid "You're ready to go!"
+msgstr "Olet valmis aloittamaan!"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:98
+#: src/lib/moderation/useModerationCauseDescription.ts:101
+msgid "You've chosen to hide a word or tag within this post."
+msgstr ""
+
+#: src/view/com/posts/FollowingEndOfFeed.tsx:48
+msgid "You've reached the end of your feed! Find some more accounts to follow."
+msgstr "Olet saavuttanut syötteesi lopun! Etsi lisää käyttäjiä seurattavaksi."
+
+#: src/screens/Signup/index.tsx:150
+msgid "Your account"
+msgstr "Käyttäjätilisi"
+
+#: src/view/com/modals/DeleteAccount.tsx:68
+msgid "Your account has been deleted"
+msgstr "Käyttäjätilisi on poistettu"
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:47
+msgid "Your account repository, containing all public data records, can be downloaded as a \"CAR\" file. This file does not include media embeds, such as images, or your private data, which must be fetched separately."
+msgstr "Käyttäjätilisi arkisto, joka sisältää kaikki julkiset tietueet, voidaan ladata \"CAR\"-tiedostona. Tämä tiedosto ei sisällä upotettuja mediaelementtejä, kuten kuvia, tai yksityisiä tietojasi, jotka on haettava erikseen."
+
+#: src/screens/Signup/StepInfo/index.tsx:121
+msgid "Your birth date"
+msgstr "Syntymäaikasi"
+
+#: src/view/com/modals/InAppBrowserConsent.tsx:47
+msgid "Your choice will be saved, but can be changed later in settings."
+msgstr "Valintasi tallennetaan, mutta sitä voit muuttaa myöhemmin asetuksissa."
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:62
+msgid "Your default feed is \"Following\""
+msgstr "Oletussyötteesi on \"Following\""
+
+#: src/screens/Login/ForgotPasswordForm.tsx:57
+#: src/screens/Signup/state.ts:227
+#: src/view/com/modals/ChangePassword.tsx:54
+msgid "Your email appears to be invalid."
+msgstr "Sähköpostiosoitteesi näyttää olevan virheellinen."
+
+#: src/view/com/modals/Waitlist.tsx:109
+#~ msgid "Your email has been saved! We'll be in touch soon."
+#~ msgstr "Sähköpostiosoitteesi on tallennettu! Olemme pian yhteydessä."
+
+#: src/view/com/modals/ChangeEmail.tsx:125
+msgid "Your email has been updated but not verified. As a next step, please verify your new email."
+msgstr "Sähköpostiosoitteesi on päivitetty, mutta sitä ei ole vielä vahvistettu. Seuraavana vaiheena vahvista uusi sähköpostiosoitteesi."
+
+#: src/view/com/modals/VerifyEmail.tsx:114
+msgid "Your email has not yet been verified. This is an important security step which we recommend."
+msgstr "Sähköpostiosoitettasi ei ole vielä vahvistettu. Tämä on tärkeä turvatoimi, jonka suosittelemme suorittamaan."
+
+#: src/view/com/posts/FollowingEmptyState.tsx:47
+msgid "Your following feed is empty! Follow more users to see what's happening."
+msgstr "Seuraamiesi syöte on tyhjä! Seuraa lisää käyttäjiä nähdäksesi, mitä tapahtuu."
+
+#: src/screens/Signup/StepHandle.tsx:72
+msgid "Your full handle will be"
+msgstr "Käyttäjätunnuksesi tulee olemaan"
+
+#: src/view/com/modals/ChangeHandle.tsx:271
+msgid "Your full handle will be <0>@{0}0>"
+msgstr "Käyttäjätunnuksesi tulee olemaan <0>@{0}0>"
+
+#: src/view/screens/Settings.tsx:430
+#: src/view/shell/desktop/RightNav.tsx:137
+#: src/view/shell/Drawer.tsx:660
+#~ msgid "Your invite codes are hidden when logged in using an App Password"
+#~ msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:220
+msgid "Your muted words"
+msgstr "Hiljentämäsi sanat"
+
+#: src/view/com/modals/ChangePassword.tsx:157
+msgid "Your password has been changed successfully!"
+msgstr "Salasanasi on vaihdettu onnistuneesti!"
+
+#: src/view/com/composer/Composer.tsx:284
+msgid "Your post has been published"
+msgstr "Viestisi on julkaistu"
+
+#: src/screens/Onboarding/StepFinished.tsx:109
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:59
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:61
+msgid "Your posts, likes, and blocks are public. Mutes are private."
+msgstr "Julkaisusi, tykkäyksesi ja estosi ovat julkisia. Hiljennykset ovat yksityisiä."
+
+#: src/view/screens/Settings/index.tsx:125
+msgid "Your profile"
+msgstr "Profiilisi"
+
+#: src/view/com/composer/Composer.tsx:283
+msgid "Your reply has been published"
+msgstr "Vastauksesi on julkaistu"
+
+#: src/screens/Signup/index.tsx:152
+msgid "Your user handle"
+msgstr "Käyttäjätunnuksesi"
diff --git a/src/locale/locales/fr/messages.po b/src/locale/locales/fr/messages.po
index 932cf681d1..898ee589cc 100644
--- a/src/locale/locales/fr/messages.po
+++ b/src/locale/locales/fr/messages.po
@@ -8,42 +8,20 @@ msgstr ""
"Language: fr\n"
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: \n"
-"Last-Translator: Stanislas Signoud (@signez.fr)\n"
-"Language-Team: \n"
+"PO-Revision-Date: 2024-03-12 09:00+0000\n"
+"Last-Translator: surfdude29\n"
+"Language-Team: Stanislas Signoud (@signez.fr), surfdude29\n"
"Plural-Forms: \n"
#: src/view/com/modals/VerifyEmail.tsx:142
msgid "(no email)"
msgstr "(pas d’e-mail)"
-#: src/view/shell/desktop/RightNav.tsx:168
-#~ msgid "{0, plural, one {# invite code available} other {# invite codes available}}"
-#~ msgstr "{0, plural, one {# code d’invitation disponible} other {# codes d’invitations disponibles}}"
-
-#: src/view/com/profile/ProfileHeader.tsx:592
+#: src/screens/Profile/Header/Metrics.tsx:44
msgid "{following} following"
msgstr "{following} abonnements"
-#: src/view/shell/desktop/RightNav.tsx:151
-#~ msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}"
-#~ msgstr "{invitesAvailable, plural, one {Code d’invitation : # disponible} other {Codes d’invitation : # disponibles}}"
-
-#: src/view/screens/Settings.tsx:435
-#: src/view/shell/Drawer.tsx:664
-#~ msgid "{invitesAvailable} invite code available"
-#~ msgstr "{invitesAvailable} code d’invitation disponible"
-
-#: src/view/screens/Settings.tsx:437
-#: src/view/shell/Drawer.tsx:666
-#~ msgid "{invitesAvailable} invite codes available"
-#~ msgstr "{invitesAvailable} codes d’invitation disponibles"
-
-#: src/view/screens/Search/Search.tsx:87
-#~ msgid "{message}"
-#~ msgstr "{message}"
-
-#: src/view/shell/Drawer.tsx:440
+#: src/view/shell/Drawer.tsx:443
msgid "{numUnreadNotifications} unread"
msgstr "{numUnreadNotifications} non lus"
@@ -51,13 +29,17 @@ msgstr "{numUnreadNotifications} non lus"
msgid "<0/> members"
msgstr "<0/> membres"
-#: src/view/com/profile/ProfileHeader.tsx:594
+#: src/view/shell/Drawer.tsx:97
+msgid "<0>{0}0> following"
+msgstr ""
+
+#: src/screens/Profile/Header/Metrics.tsx:45
msgid "<0>{following} 0><1>following1>"
msgstr "<0>{following} 0><1>abonnements1>"
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:30
msgid "<0>Choose your0><1>Recommended1><2>Feeds2>"
-msgstr "<0>Choisissez vos0><1>fils d’actualité1><2>recommandés2>"
+msgstr "<0>Choisissez vos0><1>fils d’actu1><2>recommandés2>"
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:37
msgid "<0>Follow some0><1>Recommended1><2>Users2>"
@@ -67,51 +49,60 @@ msgstr "<0>Suivre certains0><1>comptes1><2>recommandés2>"
msgid "<0>Welcome to0><1>Bluesky1>"
msgstr "<0>Bienvenue sur0><1>Bluesky1>"
-#: src/view/com/profile/ProfileHeader.tsx:557
+#: src/screens/Profile/Header/Handle.tsx:42
msgid "⚠Invalid Handle"
msgstr "⚠Pseudo invalide"
#: src/view/com/util/moderation/LabelInfo.tsx:45
-msgid "A content warning has been applied to this {0}."
-msgstr "Un avertissement sur le contenu a été appliqué sur ce {0}."
+#~ msgid "A content warning has been applied to this {0}."
+#~ msgstr "Un avertissement sur le contenu a été appliqué sur ce {0}."
#: src/lib/hooks/useOTAUpdate.ts:16
-msgid "A new version of the app is available. Please update to continue using the app."
-msgstr "Une nouvelle version de l’application est disponible. Veuillez faire la mise à jour pour continuer à utiliser l’application."
+#~ msgid "A new version of the app is available. Please update to continue using the app."
+#~ msgstr "Une nouvelle version de l’application est disponible. Veuillez faire la mise à jour pour continuer à utiliser l’application."
-#: src/view/com/util/ViewHeader.tsx:83
-#: src/view/screens/Search/Search.tsx:624
+#: src/view/com/util/ViewHeader.tsx:89
+#: src/view/screens/Search/Search.tsx:649
msgid "Access navigation links and settings"
msgstr "Accède aux liens de navigation et aux paramètres"
-#: src/view/com/pager/FeedsTabBarMobile.tsx:89
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:52
msgid "Access profile and other navigation links"
msgstr "Accède au profil et aux autres liens de navigation"
-#: src/view/com/modals/EditImage.tsx:299
-#: src/view/screens/Settings/index.tsx:451
+#: src/view/com/modals/EditImage.tsx:300
+#: src/view/screens/Settings/index.tsx:470
msgid "Accessibility"
msgstr "Accessibilité"
-#: src/view/com/auth/login/LoginForm.tsx:166
-#: src/view/screens/Settings/index.tsx:308
-#: src/view/screens/Settings/index.tsx:721
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "account"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:144
+#: src/view/screens/Settings/index.tsx:327
+#: src/view/screens/Settings/index.tsx:743
msgid "Account"
msgstr "Compte"
-#: src/view/com/profile/ProfileHeader.tsx:245
+#: src/view/com/profile/ProfileMenu.tsx:139
msgid "Account blocked"
msgstr "Compte bloqué"
-#: src/view/com/profile/ProfileHeader.tsx:212
+#: src/view/com/profile/ProfileMenu.tsx:153
+msgid "Account followed"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:113
msgid "Account muted"
msgstr "Compte masqué"
-#: src/view/com/modals/ModerationDetails.tsx:86
+#: src/components/moderation/ModerationDetailsDialog.tsx:93
+#: src/lib/moderation/useModerationCauseDescription.ts:91
msgid "Account Muted"
msgstr "Compte masqué"
-#: src/view/com/modals/ModerationDetails.tsx:72
+#: src/components/moderation/ModerationDetailsDialog.tsx:82
msgid "Account Muted by List"
msgstr "Compte masqué par liste"
@@ -123,18 +114,24 @@ msgstr "Options de compte"
msgid "Account removed from quick access"
msgstr "Compte supprimé de l’accès rapide"
-#: src/view/com/profile/ProfileHeader.tsx:267
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:137
+#: src/view/com/profile/ProfileMenu.tsx:128
msgid "Account unblocked"
msgstr "Compte débloqué"
-#: src/view/com/profile/ProfileHeader.tsx:225
+#: src/view/com/profile/ProfileMenu.tsx:166
+msgid "Account unfollowed"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:102
msgid "Account unmuted"
msgstr "Compte démasqué"
+#: src/components/dialogs/MutedWords.tsx:164
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:150
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/screens/ProfileList.tsx:812
+#: src/view/screens/ProfileList.tsx:827
msgid "Add"
msgstr "Ajouter"
@@ -142,54 +139,63 @@ msgstr "Ajouter"
msgid "Add a content warning"
msgstr "Ajouter un avertissement sur le contenu"
-#: src/view/screens/ProfileList.tsx:802
+#: src/view/screens/ProfileList.tsx:817
msgid "Add a user to this list"
msgstr "Ajouter un compte à cette liste"
-#: src/view/screens/Settings/index.tsx:383
-#: src/view/screens/Settings/index.tsx:392
+#: src/components/dialogs/SwitchAccount.tsx:55
+#: src/view/screens/Settings/index.tsx:402
+#: src/view/screens/Settings/index.tsx:411
msgid "Add account"
msgstr "Ajouter un compte"
#: src/view/com/composer/photos/Gallery.tsx:119
#: src/view/com/composer/photos/Gallery.tsx:180
-#: src/view/com/modals/AltImage.tsx:116
+#: src/view/com/modals/AltImage.tsx:117
msgid "Add alt text"
msgstr "Ajouter un texte alt"
-#: src/view/screens/AppPasswords.tsx:102
-#: src/view/screens/AppPasswords.tsx:143
-#: src/view/screens/AppPasswords.tsx:156
+#: src/view/screens/AppPasswords.tsx:104
+#: src/view/screens/AppPasswords.tsx:145
+#: src/view/screens/AppPasswords.tsx:158
msgid "Add App Password"
msgstr "Ajouter un mot de passe d’application"
#: src/view/com/modals/report/InputIssueDetails.tsx:41
#: src/view/com/modals/report/Modal.tsx:191
-msgid "Add details"
-msgstr "Ajouter des détails"
+#~ msgid "Add details"
+#~ msgstr "Ajouter des détails"
#: src/view/com/modals/report/Modal.tsx:194
-msgid "Add details to report"
-msgstr "Ajouter des détails au rapport"
+#~ msgid "Add details to report"
+#~ msgstr "Ajouter des détails au rapport"
-#: src/view/com/composer/Composer.tsx:446
+#: src/view/com/composer/Composer.tsx:467
msgid "Add link card"
msgstr "Ajouter une carte de lien"
-#: src/view/com/composer/Composer.tsx:451
+#: src/view/com/composer/Composer.tsx:472
msgid "Add link card:"
-msgstr "Ajouter une carte de lien :"
+msgstr "Ajouter une carte de lien :"
+
+#: src/components/dialogs/MutedWords.tsx:157
+msgid "Add mute word for configured settings"
+msgstr "Ajouter un mot masqué pour les paramètres configurés"
+
+#: src/components/dialogs/MutedWords.tsx:86
+msgid "Add muted words and tags"
+msgstr "Ajouter des mots et des mots-clés masqués"
-#: src/view/com/modals/ChangeHandle.tsx:417
+#: src/view/com/modals/ChangeHandle.tsx:416
msgid "Add the following DNS record to your domain:"
-msgstr "Ajoutez l’enregistrement DNS suivant à votre domaine :"
+msgstr "Ajoutez l’enregistrement DNS suivant à votre domaine :"
-#: src/view/com/profile/ProfileHeader.tsx:309
+#: src/view/com/profile/ProfileMenu.tsx:263
+#: src/view/com/profile/ProfileMenu.tsx:266
msgid "Add to Lists"
msgstr "Ajouter aux listes"
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/feeds/FeedSourceCard.tsx:234
msgid "Add to my feeds"
msgstr "Ajouter à mes fils d’actu"
@@ -202,36 +208,43 @@ msgstr "Ajouté"
msgid "Added to list"
msgstr "Ajouté à la liste"
-#: src/view/com/feeds/FeedSourceCard.tsx:125
+#: src/view/com/feeds/FeedSourceCard.tsx:108
msgid "Added to my feeds"
msgstr "Ajouté à mes fils d’actu"
-#: src/view/screens/PreferencesHomeFeed.tsx:173
+#: src/view/screens/PreferencesFollowingFeed.tsx:173
msgid "Adjust the number of likes a reply must have to be shown in your feed."
-msgstr "Définissez le nombre de likes qu’une réponse doit avoir pour être affichée dans votre fil d’actualité."
+msgstr "Définissez le nombre de likes qu’une réponse doit avoir pour être affichée dans votre fil d’actu."
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:117
#: src/view/com/modals/SelfLabel.tsx:75
msgid "Adult Content"
msgstr "Contenu pour adultes"
#: src/view/com/modals/ContentFilteringSettings.tsx:141
-msgid "Adult content can only be enabled via the Web at <0/>."
-msgstr "Le contenu pour adultes ne peut être activé que via le Web à <0/>."
+#~ msgid "Adult content can only be enabled via the Web at <0/>."
+#~ msgstr "Le contenu pour adultes ne peut être activé que via le Web à <0/>."
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
-#~ msgid "Adult content can only be enabled via the Web at <0>bsky.app0>."
-#~ msgstr ""
+#: src/components/moderation/LabelPreference.tsx:242
+msgid "Adult content is disabled."
+msgstr ""
-#: src/view/screens/Settings/index.tsx:664
+#: src/screens/Moderation/index.tsx:375
+#: src/view/screens/Settings/index.tsx:684
msgid "Advanced"
msgstr "Avancé"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:221
-#: src/view/com/modals/ChangePassword.tsx:168
+#: src/view/screens/Feeds.tsx:666
+msgid "All the feeds you've saved, right in one place."
+msgstr "Tous les fils d’actu que vous avez enregistrés, au même endroit."
+
+#: src/screens/Login/ForgotPasswordForm.tsx:178
+#: src/view/com/modals/ChangePassword.tsx:170
msgid "Already have a code?"
-msgstr ""
+msgstr "Avez-vous déjà un code ?"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:98
+#: src/screens/Login/ChooseAccountForm.tsx:39
msgid "Already signed in as @{0}"
msgstr "Déjà connecté·e en tant que @{0}"
@@ -239,7 +252,7 @@ msgstr "Déjà connecté·e en tant que @{0}"
msgid "ALT"
msgstr "ALT"
-#: src/view/com/modals/EditImage.tsx:315
+#: src/view/com/modals/EditImage.tsx:316
msgid "Alt text"
msgstr "Texte Alt"
@@ -255,170 +268,209 @@ msgstr "Un e-mail a été envoyé à {0}. Il comprend un code de confirmation qu
msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below."
msgstr "Un courriel a été envoyé à votre ancienne adresse, {0}. Il comprend un code de confirmation que vous pouvez saisir ici."
-#: src/view/com/profile/FollowButton.tsx:30
-#: src/view/com/profile/FollowButton.tsx:40
+#: src/lib/moderation/useReportOptions.ts:26
+msgid "An issue not included in these options"
+msgstr ""
+
+#: src/view/com/profile/FollowButton.tsx:35
+#: src/view/com/profile/FollowButton.tsx:45
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:188
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:198
msgid "An issue occurred, please try again."
msgstr "Un problème est survenu, veuillez réessayer."
-#: src/view/com/notifications/FeedItem.tsx:236
+#: src/view/com/notifications/FeedItem.tsx:240
#: src/view/com/threadgate/WhoCanReply.tsx:178
msgid "and"
msgstr "et"
#: src/screens/Onboarding/index.tsx:32
msgid "Animals"
+msgstr "Animaux"
+
+#: src/lib/moderation/useReportOptions.ts:31
+msgid "Anti-Social Behavior"
msgstr ""
#: src/view/screens/LanguageSettings.tsx:95
msgid "App Language"
msgstr "Langue de l’application"
-#: src/view/screens/AppPasswords.tsx:228
+#: src/view/screens/AppPasswords.tsx:223
msgid "App password deleted"
msgstr "Mot de passe d’application supprimé"
-#: src/view/com/modals/AddAppPasswords.tsx:134
+#: src/view/com/modals/AddAppPasswords.tsx:135
msgid "App Password names can only contain letters, numbers, spaces, dashes, and underscores."
msgstr "Les noms de mots de passe d’application ne peuvent contenir que des lettres, des chiffres, des espaces, des tirets et des tirets bas."
-#: src/view/com/modals/AddAppPasswords.tsx:99
+#: src/view/com/modals/AddAppPasswords.tsx:100
msgid "App Password names must be at least 4 characters long."
msgstr "Les noms de mots de passe d’application doivent comporter au moins 4 caractères."
-#: src/view/screens/Settings/index.tsx:675
+#: src/view/screens/Settings/index.tsx:695
msgid "App password settings"
msgstr "Paramètres de mot de passe d’application"
-#: src/view/screens/Settings.tsx:650
-#~ msgid "App passwords"
-#~ msgstr "Mots de passe d’application"
-
-#: src/Navigation.tsx:237
-#: src/view/screens/AppPasswords.tsx:187
-#: src/view/screens/Settings/index.tsx:684
+#: src/Navigation.tsx:251
+#: src/view/screens/AppPasswords.tsx:189
+#: src/view/screens/Settings/index.tsx:704
msgid "App Passwords"
msgstr "Mots de passe d’application"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:250
-msgid "Appeal content warning"
-msgstr "Faire appel de l’avertissement sur le contenu"
+#: src/components/moderation/LabelsOnMeDialog.tsx:133
+#: src/components/moderation/LabelsOnMeDialog.tsx:136
+msgid "Appeal"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:201
+msgid "Appeal \"{0}\" label"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:337
+#: src/view/com/util/forms/PostDropdownBtn.tsx:346
+#~ msgid "Appeal content warning"
+#~ msgstr "Faire appel de l’avertissement sur le contenu"
#: src/view/com/modals/AppealLabel.tsx:65
-msgid "Appeal Content Warning"
-msgstr "Appel de l’avertissement sur le contenu"
+#~ msgid "Appeal Content Warning"
+#~ msgstr "Faire appel de l’avertissement sur le contenu"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:192
+msgid "Appeal submitted."
+msgstr ""
#: src/view/com/util/moderation/LabelInfo.tsx:52
-msgid "Appeal this decision"
-msgstr "Faire appel de cette décision"
+#~ msgid "Appeal this decision"
+#~ msgstr "Faire appel de cette décision"
#: src/view/com/util/moderation/LabelInfo.tsx:56
-msgid "Appeal this decision."
-msgstr "Faire appel de cette décision."
+#~ msgid "Appeal this decision."
+#~ msgstr "Faire appel de cette décision."
-#: src/view/screens/Settings/index.tsx:466
+#: src/view/screens/Settings/index.tsx:485
msgid "Appearance"
msgstr "Affichage"
-#: src/view/screens/AppPasswords.tsx:224
+#: src/view/screens/AppPasswords.tsx:265
msgid "Are you sure you want to delete the app password \"{name}\"?"
-msgstr "Êtes-vous sûr de vouloir supprimer le mot de passe de l’application « {name} » ?"
+msgstr "Êtes-vous sûr de vouloir supprimer le mot de passe de l’application « {name} » ?"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:280
+msgid "Are you sure you want to remove {0} from your feeds?"
+msgstr ""
-#: src/view/com/composer/Composer.tsx:143
+#: src/view/com/composer/Composer.tsx:509
msgid "Are you sure you'd like to discard this draft?"
-msgstr "Êtes-vous sûr de vouloir rejeter ce brouillon ?"
+msgstr "Êtes-vous sûr de vouloir rejeter ce brouillon ?"
-#: src/view/screens/ProfileList.tsx:364
+#: src/components/dialogs/MutedWords.tsx:281
msgid "Are you sure?"
-msgstr "Vous confirmez ?"
+msgstr "Vous confirmez ?"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:233
-msgid "Are you sure? This cannot be undone."
-msgstr "Vous confirmez ? Cela ne pourra pas être annulé."
+#: src/view/com/util/forms/PostDropdownBtn.tsx:322
+#~ msgid "Are you sure? This cannot be undone."
+#~ msgstr "Vous confirmez ? Cela ne pourra pas être annulé."
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:60
msgid "Are you writing in <0>{0}0>?"
-msgstr ""
+msgstr "Écrivez-vous en <0>{0}0> ?"
#: src/screens/Onboarding/index.tsx:26
msgid "Art"
-msgstr ""
+msgstr "Art"
#: src/view/com/modals/SelfLabel.tsx:123
msgid "Artistic or non-erotic nudity."
msgstr "Nudité artistique ou non érotique."
-#: src/view/com/auth/create/CreateAccount.tsx:147
-#: src/view/com/auth/login/ChooseAccountForm.tsx:151
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:174
-#: src/view/com/auth/login/LoginForm.tsx:259
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:179
-#: src/view/com/modals/report/InputIssueDetails.tsx:46
-#: src/view/com/post-thread/PostThread.tsx:408
-#: src/view/com/post-thread/PostThread.tsx:458
-#: src/view/com/post-thread/PostThread.tsx:466
-#: src/view/com/profile/ProfileHeader.tsx:648
-#: src/view/com/util/ViewHeader.tsx:81
+#: src/screens/Signup/StepHandle.tsx:118
+msgid "At least 3 characters"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:246
+#: src/components/moderation/LabelsOnMeDialog.tsx:247
+#: src/screens/Login/ChooseAccountForm.tsx:73
+#: src/screens/Login/ChooseAccountForm.tsx:78
+#: src/screens/Login/ForgotPasswordForm.tsx:129
+#: src/screens/Login/ForgotPasswordForm.tsx:135
+#: src/screens/Login/LoginForm.tsx:221
+#: src/screens/Login/LoginForm.tsx:227
+#: src/screens/Login/SetNewPasswordForm.tsx:160
+#: src/screens/Login/SetNewPasswordForm.tsx:166
+#: src/screens/Profile/Header/Shell.tsx:96
+#: src/screens/Signup/index.tsx:179
+#: src/view/com/util/ViewHeader.tsx:87
msgid "Back"
msgstr "Arrière"
-#: src/view/com/post-thread/PostThread.tsx:416
-msgctxt "action"
-msgid "Back"
-msgstr "Retour"
+#: src/view/com/post-thread/PostThread.tsx:480
+#~ msgctxt "action"
+#~ msgid "Back"
+#~ msgstr "Retour"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:136
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:144
msgid "Based on your interest in {interestsText}"
-msgstr ""
+msgstr "En fonction de votre intérêt pour {interestsText}"
-#: src/view/screens/Settings/index.tsx:523
+#: src/view/screens/Settings/index.tsx:542
msgid "Basics"
msgstr "Principes de base"
-#: src/view/com/auth/create/Step1.tsx:246
-#: src/view/com/modals/BirthDateSettings.tsx:73
+#: src/components/dialogs/BirthDateSettings.tsx:107
msgid "Birthday"
msgstr "Date de naissance"
-#: src/view/screens/Settings/index.tsx:340
+#: src/view/screens/Settings/index.tsx:359
msgid "Birthday:"
-msgstr "Date de naissance :"
+msgstr "Date de naissance :"
-#: src/view/com/profile/ProfileHeader.tsx:238
-#: src/view/com/profile/ProfileHeader.tsx:345
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+msgid "Block"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:300
+#: src/view/com/profile/ProfileMenu.tsx:307
msgid "Block Account"
msgstr "Bloquer ce compte"
-#: src/view/screens/ProfileList.tsx:555
+#: src/view/com/profile/ProfileMenu.tsx:344
+msgid "Block Account?"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:530
msgid "Block accounts"
msgstr "Bloquer ces comptes"
-#: src/view/screens/ProfileList.tsx:505
+#: src/view/screens/ProfileList.tsx:478
+#: src/view/screens/ProfileList.tsx:634
msgid "Block list"
msgstr "Liste de blocage"
-#: src/view/screens/ProfileList.tsx:315
+#: src/view/screens/ProfileList.tsx:629
msgid "Block these accounts?"
-msgstr "Bloquer ces comptes ?"
+msgstr "Bloquer ces comptes ?"
-#: src/view/screens/ProfileList.tsx:319
-msgid "Block this List"
-msgstr "Bloquer cette liste"
+#: src/view/screens/ProfileList.tsx:320
+#~ msgid "Block this List"
+#~ msgstr "Bloquer cette liste"
-#: src/view/com/lists/ListCard.tsx:109
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:60
+#: src/view/com/lists/ListCard.tsx:110
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:55
msgid "Blocked"
msgstr "Bloqué"
-#: src/view/screens/Moderation.tsx:123
+#: src/screens/Moderation/index.tsx:267
msgid "Blocked accounts"
msgstr "Comptes bloqués"
-#: src/Navigation.tsx:130
+#: src/Navigation.tsx:134
#: src/view/screens/ModerationBlockedAccounts.tsx:107
msgid "Blocked Accounts"
msgstr "Comptes bloqués"
-#: src/view/com/profile/ProfileHeader.tsx:240
+#: src/view/com/profile/ProfileMenu.tsx:356
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
msgstr "Les comptes bloqués ne peuvent pas répondre à vos discussions, vous mentionner ou interagir avec vous."
@@ -426,71 +478,77 @@ msgstr "Les comptes bloqués ne peuvent pas répondre à vos discussions, vous m
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours."
msgstr "Les comptes bloqués ne peuvent pas répondre à vos discussions, vous mentionner ou interagir avec vous. Vous ne verrez pas leur contenu et ils ne pourront pas voir le vôtre."
-#: src/view/com/post-thread/PostThread.tsx:267
+#: src/view/com/post-thread/PostThread.tsx:313
msgid "Blocked post."
msgstr "Post bloqué."
-#: src/view/screens/ProfileList.tsx:317
+#: src/screens/Profile/Sections/Labels.tsx:152
+msgid "Blocking does not prevent this labeler from placing labels on your account."
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:631
msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
msgstr "Le blocage est public. Les comptes bloqués ne peuvent pas répondre à vos discussions, vous mentionner ou interagir avec vous."
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:93
+#: src/view/com/profile/ProfileMenu.tsx:353
+msgid "Blocking will not prevent labels from being applied on your account, but it will stop this account from replying in your threads or interacting with you."
+msgstr ""
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:98
+#: src/view/com/auth/SplashScreen.web.tsx:169
msgid "Blog"
msgstr "Blog"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:31
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:32
#: src/view/com/auth/server-input/index.tsx:89
-#: src/view/com/auth/server-input/index.tsx:90
+#: src/view/com/auth/server-input/index.tsx:91
msgid "Bluesky"
msgstr "Bluesky"
-#: src/view/com/auth/server-input/index.tsx:150
+#: src/view/com/auth/server-input/index.tsx:154
msgid "Bluesky is an open network where you can choose your hosting provider. Custom hosting is now available in beta for developers."
-msgstr ""
+msgstr "Bluesky est un réseau ouvert où vous pouvez choisir votre hébergeur. L’auto-hébergement est désormais disponible en version bêta pour les développeurs."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:80
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:80
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:82
msgid "Bluesky is flexible."
msgstr "Bluesky est adaptable."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:69
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:69
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:71
msgid "Bluesky is open."
msgstr "Bluesky est ouvert."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:56
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:56
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:58
msgid "Bluesky is public."
msgstr "Bluesky est public."
-#: src/view/com/modals/Waitlist.tsx:70
-msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
-msgstr "Bluesky distribue des invitations pour construire une communauté plus saine. Si personne ne peut vous donner une invitation, vous pouvez vous inscrire sur notre liste d’attente et nous vous en enverrons une bientôt."
-
-#: src/view/screens/Moderation.tsx:226
+#: src/screens/Moderation/index.tsx:533
msgid "Bluesky will not show your profile and posts to logged-out users. Other apps may not honor this request. This does not make your account private."
-msgstr "Bluesky n’affichera pas votre profil et vos messages à des personnes non connectées. Il est possible que d’autres applications n’honorent pas cette demande. Cela ne privatise pas votre compte."
+msgstr "Bluesky n’affichera pas votre profil et vos posts à des personnes non connectées. Il est possible que d’autres applications n’honorent pas cette demande. Cela ne privatise pas votre compte."
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:53
+msgid "Blur images"
+msgstr ""
-#: src/view/com/modals/ServerInput.tsx:78
-#~ msgid "Bluesky.Social"
-#~ msgstr "Bluesky.Social"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:51
+msgid "Blur images and filter from feeds"
+msgstr ""
#: src/screens/Onboarding/index.tsx:33
msgid "Books"
-msgstr ""
+msgstr "Livres"
-#: src/view/screens/Settings/index.tsx:859
-msgid "Build version {0} {1}"
-msgstr "Version Build {0} {1}"
+#: src/view/screens/Settings/index.tsx:893
+#~ msgid "Build version {0} {1}"
+#~ msgstr "Version Build {0} {1}"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:87
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:92
+#: src/view/com/auth/SplashScreen.web.tsx:166
msgid "Business"
msgstr "Affaires"
-#: src/view/com/modals/ServerInput.tsx:115
-#~ msgid "Button disabled. Input custom domain to proceed."
-#~ msgstr "Bouton désactivé. Saisissez un domaine personnalisé pour continuer."
-
#: src/view/com/profile/ProfileSubpageHeader.tsx:157
msgid "by —"
msgstr "par —"
@@ -499,95 +557,109 @@ msgstr "par —"
msgid "by {0}"
msgstr "par {0}"
+#: src/components/LabelingServiceCard/index.tsx:57
+msgid "By {0}"
+msgstr ""
+
#: src/view/com/profile/ProfileSubpageHeader.tsx:161
msgid "by <0/>"
msgstr "par <0/>"
+#: src/screens/Signup/StepInfo/Policies.tsx:74
+msgid "By creating an account you agree to the {els}."
+msgstr ""
+
#: src/view/com/profile/ProfileSubpageHeader.tsx:159
msgid "by you"
msgstr "par vous"
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:60
-#: src/view/com/util/UserAvatar.tsx:224
-#: src/view/com/util/UserBanner.tsx:40
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:77
msgid "Camera"
msgstr "Caméra"
-#: src/view/com/modals/AddAppPasswords.tsx:216
+#: src/view/com/modals/AddAppPasswords.tsx:217
msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long."
msgstr "Ne peut contenir que des lettres, des chiffres, des espaces, des tirets et des tirets bas. La longueur doit être d’au moins 4 caractères, mais pas plus de 32."
-#: src/components/Prompt.tsx:91
-#: src/view/com/composer/Composer.tsx:300
-#: src/view/com/composer/Composer.tsx:305
+#: src/components/Menu/index.tsx:213
+#: src/components/Prompt.tsx:113
+#: src/components/Prompt.tsx:115
+#: src/components/TagMenu/index.tsx:268
+#: src/view/com/composer/Composer.tsx:317
+#: src/view/com/composer/Composer.tsx:322
#: src/view/com/modals/ChangeEmail.tsx:218
#: src/view/com/modals/ChangeEmail.tsx:220
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
-#: src/view/com/modals/CreateOrEditList.tsx:355
-#: src/view/com/modals/EditImage.tsx:323
-#: src/view/com/modals/EditProfile.tsx:249
+#: src/view/com/modals/ChangeHandle.tsx:154
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
+#: src/view/com/modals/CreateOrEditList.tsx:356
+#: src/view/com/modals/crop-image/CropImage.web.tsx:138
+#: src/view/com/modals/EditImage.tsx:324
+#: src/view/com/modals/EditProfile.tsx:250
#: src/view/com/modals/InAppBrowserConsent.tsx:78
-#: src/view/com/modals/LinkWarning.tsx:87
-#: src/view/com/modals/Repost.tsx:87
+#: src/view/com/modals/InAppBrowserConsent.tsx:80
+#: src/view/com/modals/LinkWarning.tsx:105
+#: src/view/com/modals/LinkWarning.tsx:107
+#: src/view/com/modals/Repost.tsx:88
#: src/view/com/modals/VerifyEmail.tsx:247
#: src/view/com/modals/VerifyEmail.tsx:253
-#: src/view/com/modals/Waitlist.tsx:142
-#: src/view/screens/Search/Search.tsx:693
-#: src/view/shell/desktop/Search.tsx:238
+#: src/view/screens/Search/Search.tsx:718
+#: src/view/shell/desktop/Search.tsx:239
msgid "Cancel"
msgstr "Annuler"
-#: src/view/com/modals/Confirm.tsx:88
-#: src/view/com/modals/Confirm.tsx:91
-#: src/view/com/modals/CreateOrEditList.tsx:360
-#: src/view/com/modals/DeleteAccount.tsx:156
-#: src/view/com/modals/DeleteAccount.tsx:234
+#: src/view/com/modals/CreateOrEditList.tsx:361
+#: src/view/com/modals/DeleteAccount.tsx:155
+#: src/view/com/modals/DeleteAccount.tsx:233
msgctxt "action"
msgid "Cancel"
msgstr "Annuler"
-#: src/view/com/modals/DeleteAccount.tsx:152
-#: src/view/com/modals/DeleteAccount.tsx:230
+#: src/view/com/modals/DeleteAccount.tsx:151
+#: src/view/com/modals/DeleteAccount.tsx:229
msgid "Cancel account deletion"
msgstr "Annuler la suppression de compte"
-#: src/view/com/modals/ChangeHandle.tsx:149
+#: src/view/com/modals/ChangeHandle.tsx:150
msgid "Cancel change handle"
msgstr "Annuler le changement de pseudo"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:134
+#: src/view/com/modals/crop-image/CropImage.web.tsx:135
msgid "Cancel image crop"
msgstr "Annuler le recadrage de l’image"
-#: src/view/com/modals/EditProfile.tsx:244
+#: src/view/com/modals/EditProfile.tsx:245
msgid "Cancel profile editing"
msgstr "Annuler la modification du profil"
-#: src/view/com/modals/Repost.tsx:78
+#: src/view/com/modals/Repost.tsx:79
msgid "Cancel quote post"
msgstr "Annuler la citation"
#: src/view/com/modals/ListAddRemoveUsers.tsx:87
-#: src/view/shell/desktop/Search.tsx:234
+#: src/view/shell/desktop/Search.tsx:235
msgid "Cancel search"
msgstr "Annuler la recherche"
-#: src/view/com/modals/Waitlist.tsx:136
-msgid "Cancel waitlist signup"
-msgstr "Annuler l’inscription sur la liste d’attente"
+#: src/view/com/modals/LinkWarning.tsx:106
+msgid "Cancels opening the linked website"
+msgstr ""
+
+#: src/view/com/modals/VerifyEmail.tsx:152
+msgid "Change"
+msgstr ""
-#: src/view/screens/Settings/index.tsx:334
+#: src/view/screens/Settings/index.tsx:353
msgctxt "action"
msgid "Change"
msgstr "Modifier"
-#: src/view/screens/Settings/index.tsx:696
+#: src/view/screens/Settings/index.tsx:716
msgid "Change handle"
msgstr "Modifier le pseudo"
-#: src/view/com/modals/ChangeHandle.tsx:161
-#: src/view/screens/Settings/index.tsx:705
+#: src/view/com/modals/ChangeHandle.tsx:162
+#: src/view/screens/Settings/index.tsx:727
msgid "Change Handle"
msgstr "Modifier le pseudo"
@@ -595,21 +667,22 @@ msgstr "Modifier le pseudo"
msgid "Change my email"
msgstr "Modifier mon e-mail"
-#: src/view/screens/Settings/index.tsx:732
+#: src/view/screens/Settings/index.tsx:754
msgid "Change password"
-msgstr ""
+msgstr "Modifier le mot de passe"
-#: src/view/screens/Settings/index.tsx:741
+#: src/view/com/modals/ChangePassword.tsx:141
+#: src/view/screens/Settings/index.tsx:765
msgid "Change Password"
-msgstr ""
+msgstr "Modifier le mot de passe"
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:73
msgid "Change post language to {0}"
-msgstr ""
+msgstr "Modifier la langue de post en {0}"
#: src/view/screens/Settings/index.tsx:733
-msgid "Change your Bluesky password"
-msgstr ""
+#~ msgid "Change your Bluesky password"
+#~ msgstr "Changer votre mot de passe pour Bluesky"
#: src/view/com/modals/ChangeEmail.tsx:109
msgid "Change Your Email"
@@ -618,233 +691,280 @@ msgstr "Modifier votre e-mail"
#: src/screens/Deactivated.tsx:72
#: src/screens/Deactivated.tsx:76
msgid "Check my status"
-msgstr ""
+msgstr "Vérifier mon statut"
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:121
msgid "Check out some recommended feeds. Tap + to add them to your list of pinned feeds."
-msgstr "Consultez quelques fils d’actu recommandés. Appuyez sur + pour les ajouter à votre liste de fils d’actualité."
+msgstr "Consultez quelques fils d’actu recommandés. Appuyez sur + pour les ajouter à votre liste de fils d’actu."
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:185
msgid "Check out some recommended users. Follow them to see similar users."
msgstr "Consultez quelques comptes recommandés. Suivez-les pour voir des personnes similaires."
-#: src/view/com/modals/DeleteAccount.tsx:169
+#: src/view/com/modals/DeleteAccount.tsx:168
msgid "Check your inbox for an email with the confirmation code to enter below:"
-msgstr "Consultez votre boîte de réception, vous avez du recevoir un e-mail contenant un code de confirmation à saisir ci-dessous :"
+msgstr "Consultez votre boîte de réception, vous avez du recevoir un e-mail contenant un code de confirmation à saisir ci-dessous :"
#: src/view/com/modals/Threadgate.tsx:72
msgid "Choose \"Everybody\" or \"Nobody\""
-msgstr "Choisir « Tout le monde » ou « Personne »"
+msgstr "Choisir « Tout le monde » ou « Personne »"
#: src/view/screens/Settings/index.tsx:697
-msgid "Choose a new Bluesky username or create"
-msgstr "Choisir un nouveau pseudo Bluesky ou en créer un"
+#~ msgid "Choose a new Bluesky username or create"
+#~ msgstr "Choisir un nouveau pseudo Bluesky ou en créer un"
#: src/view/com/auth/server-input/index.tsx:79
msgid "Choose Service"
msgstr "Choisir un service"
-#: src/screens/Onboarding/StepFinished.tsx:135
+#: src/screens/Onboarding/StepFinished.tsx:139
msgid "Choose the algorithms that power your custom feeds."
-msgstr ""
+msgstr "Choisissez les algorithmes qui alimentent vos fils d’actu personnalisés."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:83
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:83
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:85
msgid "Choose the algorithms that power your experience with custom feeds."
-msgstr "Choisissez les algorithmes qui alimentent votre expérience avec des fils d’actualité personnalisés."
+msgstr "Choisissez les algorithmes qui alimentent votre expérience avec des fils d’actu personnalisés."
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:103
-#~ msgid "Choose your algorithmic feeds"
-#~ msgstr ""
-
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:103
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:104
msgid "Choose your main feeds"
-msgstr ""
+msgstr "Choisissez vos principaux fils d’actu"
-#: src/view/com/auth/create/Step1.tsx:215
+#: src/screens/Signup/StepInfo/index.tsx:112
msgid "Choose your password"
msgstr "Choisissez votre mot de passe"
-#: src/view/screens/Settings/index.tsx:834
-#: src/view/screens/Settings/index.tsx:835
+#: src/view/screens/Settings/index.tsx:868
msgid "Clear all legacy storage data"
msgstr "Effacer toutes les données de stockage existantes"
-#: src/view/screens/Settings/index.tsx:837
+#: src/view/screens/Settings/index.tsx:871
msgid "Clear all legacy storage data (restart after this)"
msgstr "Effacer toutes les données de stockage existantes (redémarrer ensuite)"
-#: src/view/screens/Settings/index.tsx:846
-#: src/view/screens/Settings/index.tsx:847
+#: src/view/screens/Settings/index.tsx:880
msgid "Clear all storage data"
msgstr "Effacer toutes les données de stockage"
-#: src/view/screens/Settings/index.tsx:849
+#: src/view/screens/Settings/index.tsx:883
msgid "Clear all storage data (restart after this)"
msgstr "Effacer toutes les données de stockage (redémarrer ensuite)"
#: src/view/com/util/forms/SearchInput.tsx:88
-#: src/view/screens/Search/Search.tsx:674
+#: src/view/screens/Search/Search.tsx:699
msgid "Clear search query"
msgstr "Effacer la recherche"
+#: src/view/screens/Settings/index.tsx:869
+msgid "Clears all legacy storage data"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:881
+msgid "Clears all storage data"
+msgstr ""
+
#: src/view/screens/Support.tsx:40
msgid "click here"
msgstr "cliquez ici"
+#: src/components/TagMenu/index.web.tsx:138
+msgid "Click here to open tag menu for {tag}"
+msgstr "Cliquez ici pour ouvrir le menu de mot-clé pour {tag}"
+
+#: src/components/RichText.tsx:192
+msgid "Click here to open tag menu for #{tag}"
+msgstr "Cliquez ici pour ouvrir le menu de mot-clé pour #{tag}"
+
#: src/screens/Onboarding/index.tsx:35
msgid "Climate"
-msgstr ""
+msgstr "Climat"
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
msgid "Close"
-msgstr ""
+msgstr "Fermer"
-#: src/components/Dialog/index.web.tsx:78
+#: src/components/Dialog/index.web.tsx:106
+#: src/components/Dialog/index.web.tsx:218
msgid "Close active dialog"
-msgstr ""
+msgstr "Fermer le dialogue actif"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:38
+#: src/screens/Login/PasswordUpdatedForm.tsx:38
msgid "Close alert"
msgstr "Fermer l’alerte"
-#: src/view/com/util/BottomSheetCustomBackdrop.tsx:33
+#: src/view/com/util/BottomSheetCustomBackdrop.tsx:36
msgid "Close bottom drawer"
msgstr "Fermer le tiroir du bas"
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:26
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:36
msgid "Close image"
msgstr "Fermer l’image"
-#: src/view/com/lightbox/Lightbox.web.tsx:119
+#: src/view/com/lightbox/Lightbox.web.tsx:129
msgid "Close image viewer"
msgstr "Fermer la visionneuse d’images"
-#: src/view/shell/index.web.tsx:49
+#: src/view/shell/index.web.tsx:55
msgid "Close navigation footer"
msgstr "Fermer le pied de page de navigation"
-#: src/view/shell/index.web.tsx:50
+#: src/components/Menu/index.tsx:207
+#: src/components/TagMenu/index.tsx:262
+msgid "Close this dialog"
+msgstr "Fermer ce dialogue"
+
+#: src/view/shell/index.web.tsx:56
msgid "Closes bottom navigation bar"
msgstr "Ferme la barre de navigation du bas"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:39
+#: src/screens/Login/PasswordUpdatedForm.tsx:39
msgid "Closes password update alert"
msgstr "Ferme la notification de mise à jour du mot de passe"
-#: src/view/com/composer/Composer.tsx:302
+#: src/view/com/composer/Composer.tsx:319
msgid "Closes post composer and discards post draft"
msgstr "Ferme la fenêtre de rédaction et supprime le brouillon"
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:27
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:37
msgid "Closes viewer for header image"
msgstr "Ferme la visionneuse pour l’image d’en-tête"
-#: src/view/com/notifications/FeedItem.tsx:317
+#: src/view/com/notifications/FeedItem.tsx:321
msgid "Collapses list of users for a given notification"
msgstr "Réduit la liste des comptes pour une notification donnée"
#: src/screens/Onboarding/index.tsx:41
msgid "Comedy"
-msgstr ""
+msgstr "Comédie"
#: src/screens/Onboarding/index.tsx:27
msgid "Comics"
-msgstr ""
+msgstr "Bandes dessinées"
-#: src/Navigation.tsx:227
+#: src/Navigation.tsx:241
#: src/view/screens/CommunityGuidelines.tsx:32
msgid "Community Guidelines"
msgstr "Directives communautaires"
-#: src/screens/Onboarding/StepFinished.tsx:148
+#: src/screens/Onboarding/StepFinished.tsx:152
msgid "Complete onboarding and start using your account"
-msgstr ""
+msgstr "Terminez le didacticiel et commencez à utiliser votre compte"
-#: src/view/com/composer/Composer.tsx:417
+#: src/screens/Signup/index.tsx:154
+msgid "Complete the challenge"
+msgstr "Compléter le défi"
+
+#: src/view/com/composer/Composer.tsx:438
msgid "Compose posts up to {MAX_GRAPHEME_LENGTH} characters in length"
-msgstr "Permet d’écrire des messages de {MAX_GRAPHEME_LENGTH} caractères maximum"
+msgstr "Permet d’écrire des posts de {MAX_GRAPHEME_LENGTH} caractères maximum"
#: src/view/com/composer/Prompt.tsx:24
msgid "Compose reply"
msgstr "Rédiger une réponse"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:67
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:81
msgid "Configure content filtering setting for category: {0}"
+msgstr "Configurer les paramètres de filtrage de contenu pour la catégorie : {0}"
+
+#: src/components/moderation/LabelPreference.tsx:81
+msgid "Configure content filtering setting for category: {name}"
msgstr ""
-#: src/components/Prompt.tsx:113
-#: src/view/com/modals/AppealLabel.tsx:98
+#: src/components/moderation/LabelPreference.tsx:244
+msgid "Configured in <0>moderation settings0>."
+msgstr ""
+
+#: src/components/Prompt.tsx:153
+#: src/components/Prompt.tsx:156
#: src/view/com/modals/SelfLabel.tsx:154
#: src/view/com/modals/VerifyEmail.tsx:231
#: src/view/com/modals/VerifyEmail.tsx:233
-#: src/view/screens/PreferencesHomeFeed.tsx:308
+#: src/view/screens/PreferencesFollowingFeed.tsx:308
#: src/view/screens/PreferencesThreads.tsx:159
msgid "Confirm"
msgstr "Confirmer"
#: src/view/com/modals/Confirm.tsx:75
#: src/view/com/modals/Confirm.tsx:78
-msgctxt "action"
-msgid "Confirm"
-msgstr "Confirmer"
+#~ msgctxt "action"
+#~ msgid "Confirm"
+#~ msgstr "Confirmer"
#: src/view/com/modals/ChangeEmail.tsx:193
#: src/view/com/modals/ChangeEmail.tsx:195
msgid "Confirm Change"
msgstr "Confirmer le changement"
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:34
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:35
msgid "Confirm content language settings"
msgstr "Confirmer les paramètres de langue"
-#: src/view/com/modals/DeleteAccount.tsx:220
+#: src/view/com/modals/DeleteAccount.tsx:219
msgid "Confirm delete account"
msgstr "Confirmer la suppression du compte"
#: src/view/com/modals/ContentFilteringSettings.tsx:156
-msgid "Confirm your age to enable adult content."
-msgstr "Confirmez votre âge pour activer le contenu pour adultes."
+#~ msgid "Confirm your age to enable adult content."
+#~ msgstr "Confirmez votre âge pour activer le contenu pour adultes."
+
+#: src/screens/Moderation/index.tsx:301
+msgid "Confirm your age:"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:292
+msgid "Confirm your birthdate"
+msgstr ""
#: src/view/com/modals/ChangeEmail.tsx:157
-#: src/view/com/modals/DeleteAccount.tsx:182
+#: src/view/com/modals/DeleteAccount.tsx:175
+#: src/view/com/modals/DeleteAccount.tsx:181
#: src/view/com/modals/VerifyEmail.tsx:165
msgid "Confirmation code"
msgstr "Code de confirmation"
-#: src/view/com/modals/Waitlist.tsx:120
-msgid "Confirms signing up {email} to the waitlist"
-msgstr "Confirme l’inscription de {email} sur la liste d’attente"
-
-#: src/view/com/auth/create/CreateAccount.tsx:182
-#: src/view/com/auth/login/LoginForm.tsx:278
+#: src/screens/Login/LoginForm.tsx:248
msgid "Connecting..."
msgstr "Connexion…"
-#: src/view/com/auth/create/CreateAccount.tsx:202
+#: src/screens/Signup/index.tsx:219
msgid "Contact support"
+msgstr "Contacter le support"
+
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "content"
msgstr ""
-#: src/view/screens/Moderation.tsx:81
-msgid "Content filtering"
-msgstr "Filtrage du contenu"
+#: src/lib/moderation/useGlobalLabelStrings.ts:18
+msgid "Content Blocked"
+msgstr ""
+
+#: src/view/screens/Moderation.tsx:83
+#~ msgid "Content filtering"
+#~ msgstr "Filtrage du contenu"
#: src/view/com/modals/ContentFilteringSettings.tsx:44
-msgid "Content Filtering"
-msgstr "Filtrage du contenu"
+#~ msgid "Content Filtering"
+#~ msgstr "Filtrage du contenu"
+
+#: src/screens/Moderation/index.tsx:285
+msgid "Content filters"
+msgstr ""
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74
#: src/view/screens/LanguageSettings.tsx:278
msgid "Content Languages"
msgstr "Langues du contenu"
-#: src/view/com/modals/ModerationDetails.tsx:65
+#: src/components/moderation/ModerationDetailsDialog.tsx:75
+#: src/lib/moderation/useModerationCauseDescription.ts:75
msgid "Content Not Available"
msgstr "Contenu non disponible"
-#: src/view/com/modals/ModerationDetails.tsx:33
-#: src/view/com/util/moderation/ScreenHider.tsx:78
+#: src/components/moderation/ModerationDetailsDialog.tsx:46
+#: src/components/moderation/ScreenHider.tsx:99
+#: src/lib/moderation/useGlobalLabelStrings.ts:22
+#: src/lib/moderation/useModerationCauseDescription.ts:38
msgid "Content Warning"
msgstr "Avertissement sur le contenu"
@@ -852,157 +972,172 @@ msgstr "Avertissement sur le contenu"
msgid "Content warnings"
msgstr "Avertissements sur le contenu"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:170
-#: src/screens/Onboarding/StepFollowingFeed.tsx:153
-#: src/screens/Onboarding/StepInterests/index.tsx:248
-#: src/screens/Onboarding/StepModeration/index.tsx:118
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:108
+#: src/components/Menu/index.web.tsx:84
+msgid "Context menu backdrop, click to close the menu."
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:161
+#: src/screens/Onboarding/StepFollowingFeed.tsx:154
+#: src/screens/Onboarding/StepInterests/index.tsx:252
+#: src/screens/Onboarding/StepModeration/index.tsx:103
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:118
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:96
msgid "Continue"
msgstr "Continuer"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:150
-#: src/screens/Onboarding/StepInterests/index.tsx:245
-#: src/screens/Onboarding/StepModeration/index.tsx:115
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:105
-msgid "Continue to next step"
+#: src/components/AccountList.tsx:108
+msgid "Continue as {0} (currently signed in)"
msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:167
+#: src/screens/Onboarding/StepFollowingFeed.tsx:151
+#: src/screens/Onboarding/StepInterests/index.tsx:249
+#: src/screens/Onboarding/StepModeration/index.tsx:100
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:115
+#: src/screens/Signup/index.tsx:198
+msgid "Continue to next step"
+msgstr "Passer à l’étape suivante"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:158
msgid "Continue to the next step"
-msgstr ""
+msgstr "Passer à l’étape suivante"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:191
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:199
msgid "Continue to the next step without following any accounts"
-msgstr ""
+msgstr "Passer à l’étape suivante sans suivre aucun compte"
#: src/screens/Onboarding/index.tsx:44
msgid "Cooking"
-msgstr ""
+msgstr "Cuisine"
-#: src/view/com/modals/AddAppPasswords.tsx:195
-#: src/view/com/modals/InviteCodes.tsx:182
+#: src/view/com/modals/AddAppPasswords.tsx:196
+#: src/view/com/modals/InviteCodes.tsx:183
msgid "Copied"
msgstr "Copié"
-#: src/view/screens/Settings/index.tsx:241
+#: src/view/screens/Settings/index.tsx:251
msgid "Copied build version to clipboard"
msgstr "Version de build copiée dans le presse-papier"
-#: src/view/com/modals/AddAppPasswords.tsx:76
-#: src/view/com/modals/InviteCodes.tsx:152
-#: src/view/com/util/forms/PostDropdownBtn.tsx:112
+#: src/view/com/modals/AddAppPasswords.tsx:77
+#: src/view/com/modals/ChangeHandle.tsx:326
+#: src/view/com/modals/InviteCodes.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:158
msgid "Copied to clipboard"
msgstr "Copié dans le presse-papier"
-#: src/view/com/modals/AddAppPasswords.tsx:189
+#: src/view/com/modals/AddAppPasswords.tsx:190
msgid "Copies app password"
msgstr "Copie le mot de passe d’application"
-#: src/view/com/modals/AddAppPasswords.tsx:188
+#: src/view/com/modals/AddAppPasswords.tsx:189
msgid "Copy"
msgstr "Copie"
-#: src/view/screens/ProfileList.tsx:417
+#: src/view/com/modals/ChangeHandle.tsx:480
+msgid "Copy {0}"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:388
msgid "Copy link to list"
msgstr "Copier le lien vers la liste"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
msgid "Copy link to post"
msgstr "Copier le lien vers le post"
-#: src/view/com/profile/ProfileHeader.tsx:294
-msgid "Copy link to profile"
-msgstr "Copier le lien vers le profil"
+#: src/view/com/profile/ProfileHeader.tsx:295
+#~ msgid "Copy link to profile"
+#~ msgstr "Copier le lien vers le profil"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:139
+#: src/view/com/util/forms/PostDropdownBtn.tsx:220
+#: src/view/com/util/forms/PostDropdownBtn.tsx:222
msgid "Copy post text"
msgstr "Copier le texte du post"
-#: src/Navigation.tsx:232
+#: src/Navigation.tsx:246
#: src/view/screens/CopyrightPolicy.tsx:29
msgid "Copyright Policy"
msgstr "Politique sur les droits d’auteur"
-#: src/view/screens/ProfileFeed.tsx:96
+#: src/view/screens/ProfileFeed.tsx:103
msgid "Could not load feed"
msgstr "Impossible de charger le fil d’actu"
-#: src/view/screens/ProfileList.tsx:888
+#: src/view/screens/ProfileList.tsx:907
msgid "Could not load list"
msgstr "Impossible de charger la liste"
-#: src/view/com/auth/create/Step2.tsx:91
-msgid "Country"
-msgstr ""
-
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:62
-#: src/view/com/auth/SplashScreen.tsx:46
-#: src/view/com/auth/SplashScreen.web.tsx:77
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:65
+#: src/view/com/auth/SplashScreen.tsx:75
+#: src/view/com/auth/SplashScreen.web.tsx:104
msgid "Create a new account"
msgstr "Créer un nouveau compte"
-#: src/view/screens/Settings/index.tsx:384
+#: src/view/screens/Settings/index.tsx:403
msgid "Create a new Bluesky account"
msgstr "Créer un compte Bluesky"
-#: src/view/com/auth/create/CreateAccount.tsx:122
+#: src/screens/Signup/index.tsx:129
msgid "Create Account"
msgstr "Créer un compte"
-#: src/view/com/modals/AddAppPasswords.tsx:226
+#: src/view/com/modals/AddAppPasswords.tsx:227
msgid "Create App Password"
msgstr "Créer un mot de passe d’application"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:54
-#: src/view/com/auth/SplashScreen.tsx:43
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:55
+#: src/view/com/auth/SplashScreen.tsx:66
+#: src/view/com/auth/SplashScreen.web.tsx:95
msgid "Create new account"
msgstr "Créer un nouveau compte"
-#: src/view/screens/AppPasswords.tsx:249
+#: src/components/ReportDialog/SelectReportOptionView.tsx:93
+msgid "Create report for {0}"
+msgstr ""
+
+#: src/view/screens/AppPasswords.tsx:246
msgid "Created {0}"
msgstr "{0} créé"
#: src/view/screens/ProfileFeed.tsx:616
-msgid "Created by <0/>"
-msgstr "Créée par <0/>"
+#~ msgid "Created by <0/>"
+#~ msgstr "Créée par <0/>"
#: src/view/screens/ProfileFeed.tsx:614
-msgid "Created by you"
-msgstr "Créée par vous"
+#~ msgid "Created by you"
+#~ msgstr "Créée par vous"
-#: src/view/com/composer/Composer.tsx:448
+#: src/view/com/composer/Composer.tsx:469
msgid "Creates a card with a thumbnail. The card links to {url}"
msgstr "Crée une carte avec une miniature. La carte pointe vers {url}"
#: src/screens/Onboarding/index.tsx:29
msgid "Culture"
-msgstr ""
+msgstr "Culture"
-#: src/view/com/auth/server-input/index.tsx:95
-#: src/view/com/auth/server-input/index.tsx:96
+#: src/view/com/auth/server-input/index.tsx:97
+#: src/view/com/auth/server-input/index.tsx:99
msgid "Custom"
-msgstr ""
+msgstr "Personnalisé"
-#: src/view/com/modals/ChangeHandle.tsx:389
+#: src/view/com/modals/ChangeHandle.tsx:388
msgid "Custom domain"
msgstr "Domaine personnalisé"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:107
+#: src/view/screens/Feeds.tsx:692
msgid "Custom feeds built by the community bring you new experiences and help you find the content you love."
-msgstr ""
+msgstr "Les fils d’actu personnalisés élaborés par la communauté vous font vivre de nouvelles expériences et vous aident à trouver le contenu que vous aimez."
#: src/view/screens/PreferencesExternalEmbeds.tsx:55
msgid "Customize media from external sites."
msgstr "Personnaliser les médias provenant de sites externes."
-#: src/view/screens/Settings.tsx:687
-#~ msgid "Danger Zone"
-#~ msgstr "Zone de danger"
-
-#: src/view/screens/Settings/index.tsx:485
-#: src/view/screens/Settings/index.tsx:511
+#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:530
msgid "Dark"
msgstr "Sombre"
@@ -1010,88 +1145,113 @@ msgstr "Sombre"
msgid "Dark mode"
msgstr "Mode sombre"
-#: src/view/screens/Settings/index.tsx:498
+#: src/view/screens/Settings/index.tsx:517
msgid "Dark Theme"
+msgstr "Thème sombre"
+
+#: src/screens/Signup/StepInfo/index.tsx:132
+msgid "Date of birth"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:841
+msgid "Debug Moderation"
msgstr ""
#: src/view/screens/Debug.tsx:83
msgid "Debug panel"
msgstr "Panneau de débug"
-#: src/view/screens/Settings/index.tsx:772
+#: src/view/com/util/forms/PostDropdownBtn.tsx:319
+#: src/view/screens/AppPasswords.tsx:268
+#: src/view/screens/ProfileList.tsx:613
+msgid "Delete"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:796
msgid "Delete account"
msgstr "Supprimer le compte"
-#: src/view/com/modals/DeleteAccount.tsx:87
+#: src/view/com/modals/DeleteAccount.tsx:86
msgid "Delete Account"
msgstr "Supprimer le compte"
-#: src/view/screens/AppPasswords.tsx:222
-#: src/view/screens/AppPasswords.tsx:242
+#: src/view/screens/AppPasswords.tsx:239
msgid "Delete app password"
msgstr "Supprimer le mot de passe de l’appli"
-#: src/view/screens/ProfileList.tsx:363
-#: src/view/screens/ProfileList.tsx:444
+#: src/view/screens/AppPasswords.tsx:263
+msgid "Delete app password?"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:415
msgid "Delete List"
msgstr "Supprimer la liste"
-#: src/view/com/modals/DeleteAccount.tsx:223
+#: src/view/com/modals/DeleteAccount.tsx:222
msgid "Delete my account"
msgstr "Supprimer mon compte"
-#: src/view/screens/Settings.tsx:706
-#~ msgid "Delete my account…"
-#~ msgstr "Supprimer mon compte…"
-
-#: src/view/screens/Settings/index.tsx:784
+#: src/view/screens/Settings/index.tsx:808
msgid "Delete My Account…"
-msgstr ""
+msgstr "Supprimer mon compte…"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:302
+#: src/view/com/util/forms/PostDropdownBtn.tsx:304
msgid "Delete post"
msgstr "Supprimer le post"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:232
+#: src/view/screens/ProfileList.tsx:608
+msgid "Delete this list?"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:314
msgid "Delete this post?"
-msgstr "Supprimer ce post ?"
+msgstr "Supprimer ce post ?"
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:69
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:64
msgid "Deleted"
msgstr "Supprimé"
-#: src/view/com/post-thread/PostThread.tsx:259
+#: src/view/com/post-thread/PostThread.tsx:305
msgid "Deleted post."
msgstr "Post supprimé."
-#: src/view/com/modals/CreateOrEditList.tsx:300
-#: src/view/com/modals/CreateOrEditList.tsx:321
-#: src/view/com/modals/EditProfile.tsx:198
-#: src/view/com/modals/EditProfile.tsx:210
+#: src/view/com/modals/CreateOrEditList.tsx:301
+#: src/view/com/modals/CreateOrEditList.tsx:322
+#: src/view/com/modals/EditProfile.tsx:199
+#: src/view/com/modals/EditProfile.tsx:211
msgid "Description"
msgstr "Description"
-#: src/view/screens/Settings.tsx:760
-#~ msgid "Developer Tools"
-#~ msgstr "Outils de dév"
-
-#: src/view/com/composer/Composer.tsx:211
+#: src/view/com/composer/Composer.tsx:218
msgid "Did you want to say anything?"
-msgstr "Vous vouliez dire quelque chose ?"
+msgstr "Vous vouliez dire quelque chose ?"
-#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:523
msgid "Dim"
+msgstr "Atténué"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:32
+#: src/lib/moderation/useLabelBehaviorDescription.ts:42
+#: src/lib/moderation/useLabelBehaviorDescription.ts:68
+#: src/screens/Moderation/index.tsx:341
+msgid "Disabled"
msgstr ""
-#: src/view/com/composer/Composer.tsx:144
+#: src/view/com/composer/Composer.tsx:511
msgid "Discard"
msgstr "Ignorer"
-#: src/view/com/composer/Composer.tsx:138
-msgid "Discard draft"
-msgstr "Ignorer le brouillon"
+#: src/view/com/composer/Composer.tsx:145
+#~ msgid "Discard draft"
+#~ msgstr "Ignorer le brouillon"
+
+#: src/view/com/composer/Composer.tsx:508
+msgid "Discard draft?"
+msgstr ""
-#: src/view/screens/Moderation.tsx:207
+#: src/screens/Moderation/index.tsx:518
+#: src/screens/Moderation/index.tsx:522
msgid "Discourage apps from showing my account to logged-out users"
msgstr "Empêcher les applis de montrer mon compte aux personnes non connectées"
@@ -1100,28 +1260,58 @@ msgstr "Empêcher les applis de montrer mon compte aux personnes non connectées
msgid "Discover new custom feeds"
msgstr "Découvrir des fils d’actu personnalisés"
-#: src/view/screens/Feeds.tsx:473
-msgid "Discover new feeds"
+#: src/view/screens/Feeds.tsx:689
+msgid "Discover New Feeds"
msgstr "Découvrir de nouveaux fils d’actu"
-#: src/view/com/modals/EditProfile.tsx:192
+#: src/view/com/modals/EditProfile.tsx:193
msgid "Display name"
msgstr "Afficher le nom"
-#: src/view/com/modals/EditProfile.tsx:180
+#: src/view/com/modals/EditProfile.tsx:181
msgid "Display Name"
msgstr "Afficher le nom"
-#: src/view/com/modals/ChangeHandle.tsx:487
-msgid "Domain verified!"
-msgstr "Domaine vérifié !"
+#: src/view/com/modals/ChangeHandle.tsx:397
+msgid "DNS Panel"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:39
+msgid "Does not include nudity."
+msgstr ""
+
+#: src/screens/Signup/StepHandle.tsx:104
+msgid "Doesn't begin or end with a hyphen"
+msgstr ""
-#: src/view/com/auth/create/Step1.tsx:166
-msgid "Don't have an invite code?"
-msgstr "Pas de code d’invitation ?"
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "Domain Value"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:488
+msgid "Domain verified!"
+msgstr "Domaine vérifié !"
+
+#: src/components/dialogs/BirthDateSettings.tsx:119
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/components/forms/DateField/index.tsx:74
+#: src/components/forms/DateField/index.tsx:80
+#: src/view/com/auth/server-input/index.tsx:169
+#: src/view/com/auth/server-input/index.tsx:170
+#: src/view/com/modals/AddAppPasswords.tsx:227
+#: src/view/com/modals/AltImage.tsx:140
+#: src/view/com/modals/crop-image/CropImage.web.tsx:153
+#: src/view/com/modals/InviteCodes.tsx:81
+#: src/view/com/modals/InviteCodes.tsx:124
+#: src/view/com/modals/ListAddRemoveUsers.tsx:142
+#: src/view/screens/PreferencesFollowingFeed.tsx:311
+#: src/view/screens/Settings/ExportCarDialog.tsx:94
+#: src/view/screens/Settings/ExportCarDialog.tsx:96
+msgid "Done"
+msgstr "Terminé"
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86
-#: src/view/com/modals/EditImage.tsx:333
+#: src/view/com/modals/EditImage.tsx:334
#: src/view/com/modals/ListAddRemoveUsers.tsx:144
#: src/view/com/modals/SelfLabel.tsx:157
#: src/view/com/modals/Threadgate.tsx:129
@@ -1133,72 +1323,68 @@ msgctxt "action"
msgid "Done"
msgstr "Terminer"
-#: src/view/com/auth/server-input/index.tsx:165
-#: src/view/com/auth/server-input/index.tsx:166
-#: src/view/com/modals/AddAppPasswords.tsx:226
-#: src/view/com/modals/AltImage.tsx:139
-#: src/view/com/modals/ContentFilteringSettings.tsx:88
-#: src/view/com/modals/ContentFilteringSettings.tsx:96
-#: src/view/com/modals/crop-image/CropImage.web.tsx:152
-#: src/view/com/modals/InviteCodes.tsx:80
-#: src/view/com/modals/InviteCodes.tsx:123
-#: src/view/com/modals/ListAddRemoveUsers.tsx:142
-#: src/view/screens/PreferencesHomeFeed.tsx:311
-#: src/view/screens/Settings/ExportCarDialog.tsx:93
-#: src/view/screens/Settings/ExportCarDialog.tsx:94
-msgid "Done"
-msgstr "Terminé"
-
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:42
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:43
msgid "Done{extraText}"
msgstr "Terminé{extraText}"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:45
-msgid "Double tap to sign in"
-msgstr "Tapotez deux fois pour vous connecter"
+#: src/view/com/auth/login/ChooseAccountForm.tsx:46
+#~ msgid "Double tap to sign in"
+#~ msgstr "Tapotez deux fois pour vous connecter"
#: src/view/screens/Settings/index.tsx:755
-msgid "Download Bluesky account data (repository)"
-msgstr ""
+#~ msgid "Download Bluesky account data (repository)"
+#~ msgstr "Télécharger les données du compte Bluesky (dépôt)"
#: src/view/screens/Settings/ExportCarDialog.tsx:59
#: src/view/screens/Settings/ExportCarDialog.tsx:63
msgid "Download CAR file"
-msgstr ""
+msgstr "Télécharger le fichier CAR"
-#: src/view/com/composer/text-input/TextInput.web.tsx:247
+#: src/view/com/composer/text-input/TextInput.web.tsx:249
msgid "Drop to add images"
-msgstr ""
+msgstr "Déposer pour ajouter des images"
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:111
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:120
msgid "Due to Apple policies, adult content can only be enabled on the web after completing sign up."
+msgstr "En raison des politiques d’Apple, le contenu pour adultes ne peut être activé que via le Web une fois l’inscription terminée."
+
+#: src/view/com/modals/ChangeHandle.tsx:258
+msgid "e.g. alice"
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:185
+#: src/view/com/modals/EditProfile.tsx:186
msgid "e.g. Alice Roberts"
msgstr "ex. Alice Dupont"
-#: src/view/com/modals/EditProfile.tsx:203
+#: src/view/com/modals/ChangeHandle.tsx:380
+msgid "e.g. alice.com"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:204
msgid "e.g. Artist, dog-lover, and avid reader."
msgstr "ex. Artiste, amoureuse des chiens et lectrice passionnée."
-#: src/view/com/modals/CreateOrEditList.tsx:283
+#: src/lib/moderation/useGlobalLabelStrings.ts:43
+msgid "E.g. artistic nudes."
+msgstr ""
+
+#: src/view/com/modals/CreateOrEditList.tsx:284
msgid "e.g. Great Posters"
msgstr "ex. Les meilleurs comptes"
-#: src/view/com/modals/CreateOrEditList.tsx:284
+#: src/view/com/modals/CreateOrEditList.tsx:285
msgid "e.g. Spammers"
msgstr "ex. Spammeurs"
-#: src/view/com/modals/CreateOrEditList.tsx:312
+#: src/view/com/modals/CreateOrEditList.tsx:313
msgid "e.g. The posters who never miss."
msgstr "ex. Ces comptes qui ne ratent jamais leur coup."
-#: src/view/com/modals/CreateOrEditList.tsx:313
+#: src/view/com/modals/CreateOrEditList.tsx:314
msgid "e.g. Users that repeatedly reply with ads."
msgstr "ex. Les comptes qui répondent toujours avec des pubs."
-#: src/view/com/modals/InviteCodes.tsx:96
+#: src/view/com/modals/InviteCodes.tsx:97
msgid "Each code works once. You'll receive more invite codes periodically."
msgstr "Chaque code ne fonctionne qu’une seule fois. Vous recevrez régulièrement d’autres codes d’invitation."
@@ -1207,68 +1393,71 @@ msgctxt "action"
msgid "Edit"
msgstr "Modifier"
+#: src/view/com/util/UserAvatar.tsx:299
+#: src/view/com/util/UserBanner.tsx:85
+msgid "Edit avatar"
+msgstr ""
+
#: src/view/com/composer/photos/Gallery.tsx:144
-#: src/view/com/modals/EditImage.tsx:207
+#: src/view/com/modals/EditImage.tsx:208
msgid "Edit image"
msgstr "Modifier l’image"
-#: src/view/screens/ProfileList.tsx:432
+#: src/view/screens/ProfileList.tsx:403
msgid "Edit list details"
msgstr "Modifier les infos de la liste"
-#: src/view/com/modals/CreateOrEditList.tsx:250
+#: src/view/com/modals/CreateOrEditList.tsx:251
msgid "Edit Moderation List"
msgstr "Modifier la liste de modération"
-#: src/Navigation.tsx:242
+#: src/Navigation.tsx:256
#: src/view/screens/Feeds.tsx:434
#: src/view/screens/SavedFeeds.tsx:84
msgid "Edit My Feeds"
msgstr "Modifier mes fils d’actu"
-#: src/view/com/modals/EditProfile.tsx:152
+#: src/view/com/modals/EditProfile.tsx:153
msgid "Edit my profile"
msgstr "Modifier mon profil"
-#: src/view/com/profile/ProfileHeader.tsx:417
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:171
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:168
msgid "Edit profile"
msgstr "Modifier le profil"
-#: src/view/com/profile/ProfileHeader.tsx:422
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:174
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:171
msgid "Edit Profile"
msgstr "Modifier le profil"
-#: src/view/screens/Feeds.tsx:356
+#: src/view/com/home/HomeHeaderLayout.web.tsx:62
+#: src/view/screens/Feeds.tsx:355
msgid "Edit Saved Feeds"
msgstr "Modifier les fils d’actu enregistrés"
-#: src/view/com/modals/CreateOrEditList.tsx:245
+#: src/view/com/modals/CreateOrEditList.tsx:246
msgid "Edit User List"
msgstr "Modifier la liste de comptes"
-#: src/view/com/modals/EditProfile.tsx:193
+#: src/view/com/modals/EditProfile.tsx:194
msgid "Edit your display name"
msgstr "Modifier votre nom d’affichage"
-#: src/view/com/modals/EditProfile.tsx:211
+#: src/view/com/modals/EditProfile.tsx:212
msgid "Edit your profile description"
msgstr "Modifier votre description de profil"
#: src/screens/Onboarding/index.tsx:34
msgid "Education"
-msgstr ""
+msgstr "Éducation"
-#: src/view/com/auth/create/Step1.tsx:195
-#: src/view/com/auth/create/Step2.tsx:194
-#: src/view/com/auth/create/Step2.tsx:269
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:156
+#: src/screens/Signup/StepInfo/index.tsx:80
#: src/view/com/modals/ChangeEmail.tsx:141
-#: src/view/com/modals/Waitlist.tsx:88
msgid "Email"
msgstr "E-mail"
-#: src/view/com/auth/create/Step1.tsx:186
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:147
+#: src/screens/Login/ForgotPasswordForm.tsx:99
msgid "Email address"
msgstr "Adresse e-mail"
@@ -1285,69 +1474,91 @@ msgstr "E-mail mis à jour"
msgid "Email verified"
msgstr "Adresse e-mail vérifiée"
-#: src/view/screens/Settings/index.tsx:312
+#: src/view/screens/Settings/index.tsx:331
msgid "Email:"
-msgstr "E-mail :"
+msgstr "E-mail :"
-#: src/view/com/modals/EmbedConsent.tsx:113
+#: src/components/dialogs/EmbedConsent.tsx:101
msgid "Enable {0} only"
msgstr "Activer {0} uniquement"
-#: src/view/com/modals/ContentFilteringSettings.tsx:167
+#: src/screens/Moderation/index.tsx:329
+msgid "Enable adult content"
+msgstr ""
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:94
msgid "Enable Adult Content"
msgstr "Activer le contenu pour adultes"
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:76
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:77
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:79
msgid "Enable adult content in your feeds"
+msgstr "Activer le contenu pour adultes dans vos fils d’actu"
+
+#: src/components/dialogs/EmbedConsent.tsx:82
+#: src/components/dialogs/EmbedConsent.tsx:89
+msgid "Enable external media"
msgstr ""
#: src/view/com/modals/EmbedConsent.tsx:97
-msgid "Enable External Media"
-msgstr "Activer les médias externes"
+#~ msgid "Enable External Media"
+#~ msgstr "Activer les médias externes"
#: src/view/screens/PreferencesExternalEmbeds.tsx:75
msgid "Enable media players for"
msgstr "Activer les lecteurs médias pour"
-#: src/view/screens/PreferencesHomeFeed.tsx:147
+#: src/view/screens/PreferencesFollowingFeed.tsx:147
msgid "Enable this setting to only see replies between people you follow."
msgstr "Activez ce paramètre pour ne voir que les réponses des personnes que vous suivez."
-#: src/view/screens/Profile.tsx:455
+#: src/components/dialogs/EmbedConsent.tsx:94
+msgid "Enable this source only"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:339
+msgid "Enabled"
+msgstr ""
+
+#: src/screens/Profile/Sections/Feed.tsx:84
msgid "End of feed"
msgstr "Fin du fil d’actu"
-#: src/view/com/modals/AddAppPasswords.tsx:166
+#: src/view/com/modals/AddAppPasswords.tsx:167
msgid "Enter a name for this App Password"
msgstr "Entrer un nom pour ce mot de passe d’application"
+#: src/screens/Login/SetNewPasswordForm.tsx:139
+msgid "Enter a password"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:99
+#: src/components/dialogs/MutedWords.tsx:100
+msgid "Enter a word or tag"
+msgstr "Saisir un mot ou un mot-clé"
+
#: src/view/com/modals/VerifyEmail.tsx:105
msgid "Enter Confirmation Code"
msgstr "Entrer un code de confirmation"
-#: src/view/com/modals/ChangePassword.tsx:151
+#: src/view/com/modals/ChangePassword.tsx:153
msgid "Enter the code you received to change your password."
-msgstr ""
+msgstr "Saisissez le code que vous avez reçu pour modifier votre mot de passe."
-#: src/view/com/modals/ChangeHandle.tsx:371
+#: src/view/com/modals/ChangeHandle.tsx:370
msgid "Enter the domain you want to use"
msgstr "Entrez le domaine que vous voulez utiliser"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:107
+#: src/screens/Login/ForgotPasswordForm.tsx:119
msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password."
-msgstr "Saisissez l’e-mail que vous avez utilisé pour créer votre compte. Nous vous enverrons un « code de réinitialisation » afin changer votre mot de passe."
+msgstr "Saisissez l’e-mail que vous avez utilisé pour créer votre compte. Nous vous enverrons un « code de réinitialisation » afin changer votre mot de passe."
-#: src/view/com/auth/create/Step1.tsx:247
-#: src/view/com/modals/BirthDateSettings.tsx:74
+#: src/components/dialogs/BirthDateSettings.tsx:108
msgid "Enter your birth date"
msgstr "Saisissez votre date de naissance"
-#: src/view/com/modals/Waitlist.tsx:78
-msgid "Enter your email"
-msgstr "Entrez votre e-mail"
-
-#: src/view/com/auth/create/Step1.tsx:191
+#: src/screens/Login/ForgotPasswordForm.tsx:105
+#: src/screens/Signup/StepInfo/index.tsx:91
msgid "Enter your email address"
msgstr "Entrez votre e-mail"
@@ -1359,40 +1570,48 @@ msgstr "Entrez votre nouvel e-mail ci-dessus"
msgid "Enter your new email address below."
msgstr "Entrez votre nouvelle e-mail ci-dessous."
-#: src/view/com/auth/create/Step2.tsx:188
-msgid "Enter your phone number"
-msgstr ""
-
-#: src/view/com/auth/login/Login.tsx:99
+#: src/screens/Login/index.tsx:101
msgid "Enter your username and password"
msgstr "Entrez votre pseudo et votre mot de passe"
-#: src/view/screens/Search/Search.tsx:109
+#: src/screens/Signup/StepCaptcha/index.tsx:49
+msgid "Error receiving captcha response."
+msgstr "Erreur de réception de la réponse captcha."
+
+#: src/view/screens/Search/Search.tsx:111
msgid "Error:"
-msgstr "Erreur :"
+msgstr "Erreur :"
#: src/view/com/modals/Threadgate.tsx:76
msgid "Everybody"
msgstr "Tout le monde"
-#: src/view/com/modals/ChangeHandle.tsx:150
+#: src/lib/moderation/useReportOptions.ts:66
+msgid "Excessive mentions or replies"
+msgstr ""
+
+#: src/view/com/modals/DeleteAccount.tsx:230
+msgid "Exits account deletion process"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:151
msgid "Exits handle change process"
msgstr "Sort du processus de changement de pseudo"
-#: src/view/com/lightbox/Lightbox.web.tsx:120
+#: src/view/com/modals/crop-image/CropImage.web.tsx:136
+msgid "Exits image cropping process"
+msgstr ""
+
+#: src/view/com/lightbox/Lightbox.web.tsx:130
msgid "Exits image view"
msgstr "Sort de la vue de l’image"
#: src/view/com/modals/ListAddRemoveUsers.tsx:88
-#: src/view/shell/desktop/Search.tsx:235
+#: src/view/shell/desktop/Search.tsx:236
msgid "Exits inputting search query"
msgstr "Sort de la saisie de la recherche"
-#: src/view/com/modals/Waitlist.tsx:138
-msgid "Exits signing up for waitlist with {email}"
-msgstr "Sort de l’inscription sur la liste d’attente avec {email}"
-
-#: src/view/com/lightbox/Lightbox.web.tsx:163
+#: src/view/com/lightbox/Lightbox.web.tsx:183
msgid "Expand alt text"
msgstr "Développer le texte alt"
@@ -1401,44 +1620,53 @@ msgstr "Développer le texte alt"
msgid "Expand or collapse the full post you are replying to"
msgstr "Développe ou réduit le post complet auquel vous répondez"
-#: src/view/screens/Settings/index.tsx:753
-msgid "Export my data"
+#: src/lib/moderation/useGlobalLabelStrings.ts:47
+msgid "Explicit or potentially disturbing media."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:35
+msgid "Explicit sexual images."
msgstr ""
+#: src/view/screens/Settings/index.tsx:777
+msgid "Export my data"
+msgstr "Exporter mes données"
+
#: src/view/screens/Settings/ExportCarDialog.tsx:44
-#: src/view/screens/Settings/index.tsx:764
+#: src/view/screens/Settings/index.tsx:788
msgid "Export My Data"
-msgstr ""
+msgstr "Exporter mes données"
-#: src/view/com/modals/EmbedConsent.tsx:64
+#: src/components/dialogs/EmbedConsent.tsx:55
+#: src/components/dialogs/EmbedConsent.tsx:59
msgid "External Media"
msgstr "Média externe"
-#: src/view/com/modals/EmbedConsent.tsx:75
+#: src/components/dialogs/EmbedConsent.tsx:71
#: src/view/screens/PreferencesExternalEmbeds.tsx:66
msgid "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."
msgstr "Les médias externes peuvent permettre à des sites web de collecter des informations sur vous et votre appareil. Aucune information n’est envoyée ou demandée tant que vous n’appuyez pas sur le bouton de lecture."
-#: src/Navigation.tsx:258
+#: src/Navigation.tsx:275
#: src/view/screens/PreferencesExternalEmbeds.tsx:52
-#: src/view/screens/Settings/index.tsx:657
+#: src/view/screens/Settings/index.tsx:677
msgid "External Media Preferences"
msgstr "Préférences sur les médias externes"
-#: src/view/screens/Settings/index.tsx:648
+#: src/view/screens/Settings/index.tsx:668
msgid "External media settings"
msgstr "Préférences sur les médias externes"
-#: src/view/com/modals/AddAppPasswords.tsx:115
-#: src/view/com/modals/AddAppPasswords.tsx:119
+#: src/view/com/modals/AddAppPasswords.tsx:116
+#: src/view/com/modals/AddAppPasswords.tsx:120
msgid "Failed to create app password."
msgstr "Échec de la création du mot de passe d’application."
-#: src/view/com/modals/CreateOrEditList.tsx:206
+#: src/view/com/modals/CreateOrEditList.tsx:207
msgid "Failed to create the list. Check your internet connection and try again."
msgstr "Échec de la création de la liste. Vérifiez votre connexion Internet et réessayez."
-#: src/view/com/util/forms/PostDropdownBtn.tsx:88
+#: src/view/com/util/forms/PostDropdownBtn.tsx:125
msgid "Failed to delete post, please try again"
msgstr "Échec de la suppression du post, veuillez réessayer"
@@ -1447,44 +1675,37 @@ msgstr "Échec de la suppression du post, veuillez réessayer"
msgid "Failed to load recommended feeds"
msgstr "Échec du chargement des fils d’actu recommandés"
-#: src/Navigation.tsx:192
+#: src/view/com/lightbox/Lightbox.tsx:83
+msgid "Failed to save image: {0}"
+msgstr ""
+
+#: src/Navigation.tsx:196
msgid "Feed"
msgstr "Fil d’actu"
-#: src/view/com/feeds/FeedSourceCard.tsx:229
+#: src/view/com/feeds/FeedSourceCard.tsx:218
msgid "Feed by {0}"
msgstr "Fil d’actu par {0}"
-#: src/view/screens/Feeds.tsx:631
+#: src/view/screens/Feeds.tsx:605
msgid "Feed offline"
msgstr "Fil d’actu hors ligne"
-#: src/view/com/feeds/FeedPage.tsx:143
-msgid "Feed Preferences"
-msgstr "Préférences en matière de fil d’actu"
-
-#: src/view/shell/desktop/RightNav.tsx:69
-#: src/view/shell/Drawer.tsx:311
+#: src/view/shell/desktop/RightNav.tsx:61
+#: src/view/shell/Drawer.tsx:314
msgid "Feedback"
msgstr "Feedback"
-#: src/Navigation.tsx:442
-#: src/view/screens/Feeds.tsx:548
-#: src/view/screens/Profile.tsx:184
-#: src/view/shell/bottom-bar/BottomBar.tsx:181
-#: src/view/shell/desktop/LeftNav.tsx:342
-#: src/view/shell/Drawer.tsx:476
-#: src/view/shell/Drawer.tsx:477
+#: src/Navigation.tsx:464
+#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:524
+#: src/view/screens/Profile.tsx:194
+#: src/view/shell/bottom-bar/BottomBar.tsx:191
+#: src/view/shell/desktop/LeftNav.tsx:346
+#: src/view/shell/Drawer.tsx:479
+#: src/view/shell/Drawer.tsx:480
msgid "Feeds"
-msgstr "Fil d’actu"
-
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
-#~ msgid "Feeds are created by users and can give you entirely new experiences."
-#~ msgstr ""
-
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
-#~ msgid "Feeds are created by users and organizations. They offer you varied experiences and suggest content you may like using algorithms."
-#~ msgstr ""
+msgstr "Fils d’actu"
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:57
msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting."
@@ -1494,35 +1715,43 @@ msgstr "Les fils d’actu sont créés par d’autres personnes pour rassembler
msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information."
msgstr "Les fils d’actu sont des algorithmes personnalisés qui se construisent avec un peu d’expertise en programmation. <0/> pour plus d’informations."
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:70
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:80
msgid "Feeds can be topical as well!"
+msgstr "Les fils d’actu peuvent également être thématiques !"
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "File Contents"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:151
-msgid "Finalizing"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:66
+msgid "Filter from feeds"
msgstr ""
+#: src/screens/Onboarding/StepFinished.tsx:155
+msgid "Finalizing"
+msgstr "Finalisation"
+
#: src/view/com/posts/CustomFeedEmptyState.tsx:47
#: src/view/com/posts/FollowingEmptyState.tsx:57
#: src/view/com/posts/FollowingEndOfFeed.tsx:58
msgid "Find accounts to follow"
msgstr "Trouver des comptes à suivre"
-#: src/view/screens/Search/Search.tsx:439
+#: src/view/screens/Search/Search.tsx:442
msgid "Find users on Bluesky"
msgstr "Trouver des comptes sur Bluesky"
-#: src/view/screens/Search/Search.tsx:437
+#: src/view/screens/Search/Search.tsx:440
msgid "Find users with the search tool on the right"
msgstr "Trouvez des comptes à l’aide de l’outil de recherche, à droite"
-#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:155
msgid "Finding similar accounts..."
msgstr "Recherche de comptes similaires…"
-#: src/view/screens/PreferencesHomeFeed.tsx:111
-msgid "Fine-tune the content you see on your home screen."
-msgstr "Affine le contenu affiché sur votre écran d’accueil."
+#: src/view/screens/PreferencesFollowingFeed.tsx:111
+msgid "Fine-tune the content you see on your Following feed."
+msgstr "Affine le contenu affiché sur votre fil d’actu « Following »."
#: src/view/screens/PreferencesThreads.tsx:60
msgid "Fine-tune the discussion threads."
@@ -1530,51 +1759,62 @@ msgstr "Affine les fils de discussion."
#: src/screens/Onboarding/index.tsx:38
msgid "Fitness"
-msgstr ""
+msgstr "Fitness"
-#: src/screens/Onboarding/StepFinished.tsx:131
+#: src/screens/Onboarding/StepFinished.tsx:135
msgid "Flexible"
-msgstr ""
+msgstr "Flexible"
-#: src/view/com/modals/EditImage.tsx:115
+#: src/view/com/modals/EditImage.tsx:116
msgid "Flip horizontal"
msgstr "Miroir horizontal"
-#: src/view/com/modals/EditImage.tsx:120
-#: src/view/com/modals/EditImage.tsx:287
+#: src/view/com/modals/EditImage.tsx:121
+#: src/view/com/modals/EditImage.tsx:288
msgid "Flip vertically"
msgstr "Miroir vertical"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:181
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:512
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:189
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:236
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:146
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
msgid "Follow"
msgstr "Suivre"
-#: src/view/com/profile/FollowButton.tsx:64
+#: src/view/com/profile/FollowButton.tsx:69
msgctxt "action"
msgid "Follow"
msgstr "Suivre"
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:58
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:122
-#: src/view/com/profile/ProfileHeader.tsx:503
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:221
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:128
msgid "Follow {0}"
msgstr "Suivre {0}"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:179
+#: src/view/com/profile/ProfileMenu.tsx:242
+#: src/view/com/profile/ProfileMenu.tsx:253
+msgid "Follow Account"
+msgstr ""
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:187
msgid "Follow All"
+msgstr "Suivre tous"
+
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:144
+msgid "Follow Back"
msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:174
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:182
msgid "Follow selected accounts and continue to the next step"
-msgstr ""
+msgstr "Suivre les comptes sélectionnés et passer à l’étape suivante"
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:64
msgid "Follow some users to get started. We can recommend you more users based on who you find interesting."
msgstr "Suivez quelques comptes pour commencer. Nous pouvons vous recommander d’autres comptes en fonction des personnes qui vous intéressent."
-#: src/view/com/profile/ProfileCard.tsx:194
+#: src/view/com/profile/ProfileCard.tsx:216
msgid "Followed by {0}"
msgstr "Suivi par {0}"
@@ -1582,30 +1822,44 @@ msgstr "Suivi par {0}"
msgid "Followed users"
msgstr "Comptes suivis"
-#: src/view/screens/PreferencesHomeFeed.tsx:154
+#: src/view/screens/PreferencesFollowingFeed.tsx:154
msgid "Followed users only"
msgstr "Comptes suivis uniquement"
-#: src/view/com/notifications/FeedItem.tsx:166
+#: src/view/com/notifications/FeedItem.tsx:170
msgid "followed you"
msgstr "vous suit"
+#: src/view/com/profile/ProfileFollowers.tsx:104
#: src/view/screens/ProfileFollowers.tsx:25
msgid "Followers"
msgstr "Abonné·e·s"
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:494
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:234
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:149
+#: src/view/com/profile/ProfileFollows.tsx:104
#: src/view/screens/ProfileFollows.tsx:25
msgid "Following"
msgstr "Suivi"
-#: src/view/com/profile/ProfileHeader.tsx:148
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:93
msgid "Following {0}"
msgstr "Suit {0}"
-#: src/view/com/profile/ProfileHeader.tsx:545
-msgid "Follows you"
+#: src/view/screens/Settings/index.tsx:553
+msgid "Following feed preferences"
+msgstr ""
+
+#: src/Navigation.tsx:262
+#: src/view/com/home/HomeHeaderLayout.web.tsx:50
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:84
+#: src/view/screens/PreferencesFollowingFeed.tsx:104
+#: src/view/screens/Settings/index.tsx:562
+msgid "Following Feed Preferences"
+msgstr "Préférences en matière de fil d’actu « Following »"
+
+#: src/screens/Profile/Header/Handle.tsx:24
+msgid "Follows you"
msgstr "Vous suit"
#: src/view/com/profile/ProfileCard.tsx:141
@@ -1614,30 +1868,47 @@ msgstr "Vous suit"
#: src/screens/Onboarding/index.tsx:43
msgid "Food"
-msgstr ""
+msgstr "Nourriture"
-#: src/view/com/modals/DeleteAccount.tsx:111
+#: src/view/com/modals/DeleteAccount.tsx:110
msgid "For security reasons, we'll need to send a confirmation code to your email address."
msgstr "Pour des raisons de sécurité, nous devrons envoyer un code de confirmation à votre e-mail."
-#: src/view/com/modals/AddAppPasswords.tsx:209
+#: src/view/com/modals/AddAppPasswords.tsx:210
msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one."
msgstr "Pour des raisons de sécurité, vous ne pourrez plus afficher ceci. Si vous perdez ce mot de passe, vous devrez en générer un autre."
-#: src/view/com/auth/login/LoginForm.tsx:241
-msgid "Forgot"
-msgstr "Oublié"
+#: src/view/com/auth/login/LoginForm.tsx:244
+#~ msgid "Forgot"
+#~ msgstr "Oublié"
-#: src/view/com/auth/login/LoginForm.tsx:238
-msgid "Forgot password"
-msgstr "Mot de passe oublié"
+#: src/view/com/auth/login/LoginForm.tsx:241
+#~ msgid "Forgot password"
+#~ msgstr "Mot de passe oublié"
-#: src/view/com/auth/login/Login.tsx:127
-#: src/view/com/auth/login/Login.tsx:143
+#: src/screens/Login/index.tsx:129
+#: src/screens/Login/index.tsx:144
msgid "Forgot Password"
msgstr "Mot de passe oublié"
-#: src/view/com/posts/FeedItem.tsx:189
+#: src/screens/Login/LoginForm.tsx:201
+msgid "Forgot password?"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:212
+msgid "Forgot?"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:52
+msgid "Frequently Posts Unwanted Content"
+msgstr ""
+
+#: src/screens/Hashtag.tsx:109
+#: src/screens/Hashtag.tsx:149
+msgid "From @{sanitizedAuthor}"
+msgstr "De @{sanitizedAuthor}"
+
+#: src/view/com/posts/FeedItem.tsx:179
msgctxt "from-feed"
msgid "From <0/>"
msgstr "Tiré de <0/>"
@@ -1651,100 +1922,140 @@ msgstr "Galerie"
msgid "Get Started"
msgstr "C’est parti"
-#: src/view/com/auth/LoggedOut.tsx:81
+#: src/lib/moderation/useReportOptions.ts:37
+msgid "Glaring violations of law or terms of service"
+msgstr ""
+
+#: src/components/moderation/ScreenHider.tsx:151
+#: src/components/moderation/ScreenHider.tsx:160
#: src/view/com/auth/LoggedOut.tsx:82
-#: src/view/com/util/moderation/ScreenHider.tsx:123
-#: src/view/shell/desktop/LeftNav.tsx:104
+#: src/view/com/auth/LoggedOut.tsx:83
+#: src/view/screens/NotFound.tsx:55
+#: src/view/screens/ProfileFeed.tsx:112
+#: src/view/screens/ProfileList.tsx:916
+#: src/view/shell/desktop/LeftNav.tsx:108
msgid "Go back"
msgstr "Retour"
-#: src/view/screens/ProfileFeed.tsx:105
-#: src/view/screens/ProfileFeed.tsx:110
-#: src/view/screens/ProfileList.tsx:897
-#: src/view/screens/ProfileList.tsx:902
+#: src/components/Error.tsx:91
+#: src/screens/Profile/ErrorState.tsx:62
+#: src/screens/Profile/ErrorState.tsx:66
+#: src/view/screens/NotFound.tsx:54
+#: src/view/screens/ProfileFeed.tsx:117
+#: src/view/screens/ProfileList.tsx:921
msgid "Go Back"
msgstr "Retour"
-#: src/screens/Onboarding/Layout.tsx:104
-#: src/screens/Onboarding/Layout.tsx:193
+#: src/components/ReportDialog/SelectReportOptionView.tsx:73
+#: src/components/ReportDialog/SubmitView.tsx:104
+#: src/screens/Onboarding/Layout.tsx:102
+#: src/screens/Onboarding/Layout.tsx:191
+#: src/screens/Signup/index.tsx:173
msgid "Go back to previous step"
+msgstr "Retour à l’étape précédente"
+
+#: src/view/screens/NotFound.tsx:55
+msgid "Go home"
msgstr ""
-#: src/view/screens/Search/Search.tsx:724
-#: src/view/shell/desktop/Search.tsx:262
-msgid "Go to @{queryMaybeHandle}"
+#: src/view/screens/NotFound.tsx:54
+msgid "Go Home"
msgstr ""
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:189
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:218
-#: src/view/com/auth/login/LoginForm.tsx:288
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:195
-#: src/view/com/modals/ChangePassword.tsx:165
+#: src/view/screens/Search/Search.tsx:749
+#: src/view/shell/desktop/Search.tsx:263
+msgid "Go to @{queryMaybeHandle}"
+msgstr "Aller à @{queryMaybeHandle}"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:172
+#: src/view/com/modals/ChangePassword.tsx:167
msgid "Go to next"
msgstr "Aller à la suite"
-#: src/view/com/modals/ChangeHandle.tsx:265
+#: src/lib/moderation/useGlobalLabelStrings.ts:46
+msgid "Graphic Media"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:266
msgid "Handle"
msgstr "Pseudo"
-#: src/view/com/auth/create/CreateAccount.tsx:197
-msgid "Having trouble?"
+#: src/lib/moderation/useReportOptions.ts:32
+msgid "Harassment, trolling, or intolerance"
msgstr ""
-#: src/view/shell/desktop/RightNav.tsx:98
-#: src/view/shell/Drawer.tsx:321
+#: src/Navigation.tsx:282
+msgid "Hashtag"
+msgstr "Mot-clé"
+
+#: src/components/RichText.tsx:191
+msgid "Hashtag: #{tag}"
+msgstr "Mot-clé : #{tag}"
+
+#: src/screens/Signup/index.tsx:217
+msgid "Having trouble?"
+msgstr "Un souci ?"
+
+#: src/view/shell/desktop/RightNav.tsx:90
+#: src/view/shell/Drawer.tsx:324
msgid "Help"
msgstr "Aide"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:132
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:140
msgid "Here are some accounts for you to follow"
-msgstr ""
+msgstr "Voici quelques comptes à suivre"
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:79
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:89
msgid "Here are some popular topical feeds. You can choose to follow as many as you like."
-msgstr ""
+msgstr "Voici quelques fils d’actu thématiques populaires. Vous pouvez choisir d’en suivre autant que vous le souhaitez."
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:74
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:84
msgid "Here are some topical feeds based on your interests: {interestsText}. You can choose to follow as many as you like."
-msgstr ""
+msgstr "Voici quelques fils d’actu thématiques basés sur vos centres d’intérêt : {interestsText}. Vous pouvez choisir d’en suivre autant que vous le souhaitez."
-#: src/view/com/modals/AddAppPasswords.tsx:153
+#: src/view/com/modals/AddAppPasswords.tsx:154
msgid "Here is your app password."
msgstr "Voici le mot de passe de votre appli."
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:41
-#: src/view/com/modals/ContentFilteringSettings.tsx:251
-#: src/view/com/util/moderation/ContentHider.tsx:105
-#: src/view/com/util/moderation/PostHider.tsx:108
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:134
+#: src/components/moderation/PostHider.tsx:107
+#: src/lib/moderation/useLabelBehaviorDescription.ts:15
+#: src/lib/moderation/useLabelBehaviorDescription.ts:20
+#: src/lib/moderation/useLabelBehaviorDescription.ts:25
+#: src/lib/moderation/useLabelBehaviorDescription.ts:30
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:52
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:76
+#: src/view/com/util/forms/PostDropdownBtn.tsx:328
msgid "Hide"
msgstr "Cacher"
-#: src/view/com/modals/ContentFilteringSettings.tsx:224
-#: src/view/com/notifications/FeedItem.tsx:325
+#: src/view/com/notifications/FeedItem.tsx:329
msgctxt "action"
msgid "Hide"
msgstr "Cacher"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:187
+#: src/view/com/util/forms/PostDropdownBtn.tsx:276
+#: src/view/com/util/forms/PostDropdownBtn.tsx:278
msgid "Hide post"
msgstr "Cacher ce post"
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:67
+#: src/components/moderation/PostHider.tsx:64
msgid "Hide the content"
msgstr "Cacher ce contenu"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:191
+#: src/view/com/util/forms/PostDropdownBtn.tsx:325
msgid "Hide this post?"
-msgstr "Cacher ce post ?"
+msgstr "Cacher ce post ?"
-#: src/view/com/notifications/FeedItem.tsx:315
+#: src/view/com/notifications/FeedItem.tsx:319
msgid "Hide user list"
msgstr "Cacher la liste des comptes"
-#: src/view/com/profile/ProfileHeader.tsx:486
-msgid "Hides posts from {0} in your feed"
-msgstr "Masque les posts de {0} dans votre fil d’actu"
+#: src/view/com/profile/ProfileHeader.tsx:487
+#~ msgid "Hides posts from {0} in your feed"
+#~ msgstr "Masque les posts de {0} dans votre fil d’actu"
#: src/view/com/posts/FeedErrorMessage.tsx:111
msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue."
@@ -1766,29 +2077,36 @@ msgstr "Mmm… le serveur de fils d’actu ne répond pas. Veuillez informer la
msgid "Hmm, we're having trouble finding this feed. It may have been deleted."
msgstr "Hmm, nous n’arrivons pas à trouver ce fil d’actu. Il a peut-être été supprimé."
-#: src/Navigation.tsx:432
-#: src/view/shell/bottom-bar/BottomBar.tsx:137
-#: src/view/shell/desktop/LeftNav.tsx:306
-#: src/view/shell/Drawer.tsx:398
-#: src/view/shell/Drawer.tsx:399
+#: src/screens/Moderation/index.tsx:59
+msgid "Hmmmm, it seems we're having trouble loading this data. See below for more details. If this issue persists, please contact us."
+msgstr ""
+
+#: src/screens/Profile/ErrorState.tsx:31
+msgid "Hmmmm, we couldn't load that moderation service."
+msgstr ""
+
+#: src/Navigation.tsx:454
+#: src/view/shell/bottom-bar/BottomBar.tsx:147
+#: src/view/shell/desktop/LeftNav.tsx:310
+#: src/view/shell/Drawer.tsx:401
+#: src/view/shell/Drawer.tsx:402
msgid "Home"
msgstr "Accueil"
-#: src/Navigation.tsx:247
-#: src/view/com/pager/FeedsTabBarMobile.tsx:123
-#: src/view/screens/PreferencesHomeFeed.tsx:104
-#: src/view/screens/Settings/index.tsx:543
-msgid "Home Feed Preferences"
-msgstr "Préférences de fils d’actu de l’accueil"
+#: src/view/com/modals/ChangeHandle.tsx:420
+msgid "Host:"
+msgstr ""
-#: src/view/com/auth/create/Step1.tsx:78
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:120
+#: src/screens/Login/ForgotPasswordForm.tsx:89
+#: src/screens/Login/LoginForm.tsx:134
+#: src/screens/Signup/StepInfo/index.tsx:40
+#: src/view/com/modals/ChangeHandle.tsx:281
msgid "Hosting provider"
msgstr "Hébergeur"
#: src/view/com/modals/InAppBrowserConsent.tsx:44
msgid "How should we open this link?"
-msgstr ""
+msgstr "Comment ouvrir ce lien ?"
#: src/view/com/modals/VerifyEmail.tsx:214
msgid "I have a code"
@@ -1798,11 +2116,11 @@ msgstr "J’ai un code"
msgid "I have a confirmation code"
msgstr "J’ai un code de confirmation"
-#: src/view/com/modals/ChangeHandle.tsx:283
+#: src/view/com/modals/ChangeHandle.tsx:284
msgid "I have my own domain"
msgstr "J’ai mon propre domaine"
-#: src/view/com/lightbox/Lightbox.web.tsx:165
+#: src/view/com/lightbox/Lightbox.web.tsx:185
msgid "If alt text is long, toggles alt text expanded state"
msgstr "Si le texte alternatif est trop long, change son mode d’affichage"
@@ -1810,253 +2128,289 @@ msgstr "Si le texte alternatif est trop long, change son mode d’affichage"
msgid "If none are selected, suitable for all ages."
msgstr "Si rien n’est sélectionné, il n’y a pas de restriction d’âge."
-#: src/view/com/modals/ChangePassword.tsx:146
+#: src/screens/Signup/StepInfo/Policies.tsx:83
+msgid "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."
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:610
+msgid "If you delete this list, you won't be able to recover it."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:316
+msgid "If you remove this post, you won't be able to recover it."
+msgstr ""
+
+#: src/view/com/modals/ChangePassword.tsx:148
msgid "If you want to change your password, we will send you a code to verify that this is your account."
+msgstr "Si vous souhaitez modifier votre mot de passe, nous vous enverrons un code pour vérifier qu’il s’agit bien de votre compte."
+
+#: src/lib/moderation/useReportOptions.ts:36
+msgid "Illegal and Urgent"
msgstr ""
#: src/view/com/util/images/Gallery.tsx:38
msgid "Image"
msgstr "Image"
-#: src/view/com/modals/AltImage.tsx:120
+#: src/view/com/modals/AltImage.tsx:121
msgid "Image alt text"
msgstr "Texte alt de l’image"
#: src/view/com/util/UserAvatar.tsx:311
#: src/view/com/util/UserBanner.tsx:118
-msgid "Image options"
-msgstr "Options d’images"
+#~ msgid "Image options"
+#~ msgstr "Options d’images"
+
+#: src/lib/moderation/useReportOptions.ts:47
+msgid "Impersonation or false claims about identity or affiliation"
+msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:138
+#: src/screens/Login/SetNewPasswordForm.tsx:127
msgid "Input code sent to your email for password reset"
msgstr "Entrez le code envoyé à votre e-mail pour réinitialiser le mot de passe"
-#: src/view/com/modals/DeleteAccount.tsx:184
+#: src/view/com/modals/DeleteAccount.tsx:183
msgid "Input confirmation code for account deletion"
msgstr "Entrez le code de confirmation pour supprimer le compte"
-#: src/view/com/auth/create/Step1.tsx:196
-msgid "Input email for Bluesky account"
-msgstr ""
+#: src/view/com/auth/create/Step1.tsx:177
+#~ msgid "Input email for Bluesky account"
+#~ msgstr "Saisir l’email pour le compte Bluesky"
-#: src/view/com/auth/create/Step1.tsx:154
-msgid "Input invite code to proceed"
-msgstr "Entrez le code d’invitation pour continuer"
+#: src/view/com/auth/create/Step1.tsx:151
+#~ msgid "Input invite code to proceed"
+#~ msgstr "Entrez le code d’invitation pour continuer"
-#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/AddAppPasswords.tsx:181
msgid "Input name for app password"
msgstr "Entrez le nom du mot de passe de l’appli"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:162
+#: src/screens/Login/SetNewPasswordForm.tsx:151
msgid "Input new password"
msgstr "Entrez le nouveau mot de passe"
-#: src/view/com/modals/DeleteAccount.tsx:203
+#: src/view/com/modals/DeleteAccount.tsx:202
msgid "Input password for account deletion"
msgstr "Entrez le mot de passe pour la suppression du compte"
-#: src/view/com/auth/create/Step2.tsx:196
-msgid "Input phone number for SMS verification"
-msgstr ""
-
-#: src/view/com/auth/login/LoginForm.tsx:230
+#: src/screens/Login/LoginForm.tsx:195
msgid "Input the password tied to {identifier}"
msgstr "Entrez le mot de passe associé à {identifier}"
-#: src/view/com/auth/login/LoginForm.tsx:197
+#: src/screens/Login/LoginForm.tsx:168
msgid "Input the username or email address you used at signup"
msgstr "Entrez le pseudo ou l’adresse e-mail que vous avez utilisé lors de l’inscription"
-#: src/view/com/auth/create/Step2.tsx:271
-msgid "Input the verification code we have texted to you"
-msgstr ""
-
-#: src/view/com/modals/Waitlist.tsx:90
-msgid "Input your email to get on the Bluesky waitlist"
-msgstr "Entrez votre e-mail pour vous inscrire sur la liste d’attente de Bluesky"
-
-#: src/view/com/auth/login/LoginForm.tsx:229
+#: src/screens/Login/LoginForm.tsx:194
msgid "Input your password"
msgstr "Entrez votre mot de passe"
-#: src/view/com/auth/create/Step3.tsx:42
+#: src/view/com/modals/ChangeHandle.tsx:389
+msgid "Input your preferred hosting provider"
+msgstr ""
+
+#: src/screens/Signup/StepHandle.tsx:62
msgid "Input your user handle"
msgstr "Entrez votre pseudo"
-#: src/view/com/post-thread/PostThreadItem.tsx:225
+#: src/view/com/post-thread/PostThreadItem.tsx:221
msgid "Invalid or unsupported post record"
msgstr "Enregistrement de post invalide ou non pris en charge"
-#: src/view/com/auth/login/LoginForm.tsx:113
+#: src/screens/Login/LoginForm.tsx:114
msgid "Invalid username or password"
msgstr "Pseudo ou mot de passe incorrect"
-#: src/view/screens/Settings.tsx:411
-#~ msgid "Invite"
-#~ msgstr "Inviter"
-
-#: src/view/com/modals/InviteCodes.tsx:93
+#: src/view/com/modals/InviteCodes.tsx:94
msgid "Invite a Friend"
msgstr "Inviter un ami"
-#: src/view/com/auth/create/Step1.tsx:144
-#: src/view/com/auth/create/Step1.tsx:153
+#: src/screens/Signup/StepInfo/index.tsx:58
msgid "Invite code"
msgstr "Code d’invitation"
-#: src/view/com/auth/create/state.ts:199
+#: src/screens/Signup/state.ts:278
msgid "Invite code not accepted. Check that you input it correctly and try again."
msgstr "Code d’invitation refusé. Vérifiez que vous l’avez saisi correctement et réessayez."
-#: src/view/com/modals/InviteCodes.tsx:170
+#: src/view/com/modals/InviteCodes.tsx:171
msgid "Invite codes: {0} available"
-msgstr "Code d’invitation : {0} disponible"
-
-#: src/view/shell/Drawer.tsx:645
-#~ msgid "Invite codes: {invitesAvailable} available"
-#~ msgstr "Invitations : {invitesAvailable} codes dispo"
+msgstr "Code d’invitation : {0} disponible"
-#: src/view/com/modals/InviteCodes.tsx:169
+#: src/view/com/modals/InviteCodes.tsx:170
msgid "Invite codes: 1 available"
-msgstr "Invitations : 1 code dispo"
+msgstr "Invitations : 1 code dispo"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:64
+#: src/screens/Onboarding/StepFollowingFeed.tsx:65
msgid "It shows posts from the people you follow as they happen."
-msgstr ""
+msgstr "Il affiche les posts des personnes que vous suivez au fur et à mesure qu’ils sont publiés."
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:99
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:104
+#: src/view/com/auth/SplashScreen.web.tsx:172
msgid "Jobs"
msgstr "Emplois"
-#: src/view/com/modals/Waitlist.tsx:67
-msgid "Join the waitlist"
-msgstr "S’inscrire sur la liste d’attente"
+#: src/screens/Onboarding/index.tsx:24
+msgid "Journalism"
+msgstr "Journalisme"
+
+#: src/components/moderation/LabelsOnMe.tsx:59
+msgid "label has been placed on this {labelTarget}"
+msgstr ""
-#: src/view/com/auth/create/Step1.tsx:170
-#: src/view/com/auth/create/Step1.tsx:174
-msgid "Join the waitlist."
-msgstr "S’inscrire sur la liste d’attente."
+#: src/components/moderation/ContentHider.tsx:144
+msgid "Labeled by {0}."
+msgstr ""
-#: src/view/com/modals/Waitlist.tsx:128
-msgid "Join Waitlist"
-msgstr "S’inscrire sur la liste d’attente"
+#: src/components/moderation/ContentHider.tsx:142
+msgid "Labeled by the author."
+msgstr ""
-#: src/screens/Onboarding/index.tsx:24
-msgid "Journalism"
+#: src/view/screens/Profile.tsx:188
+msgid "Labels"
+msgstr ""
+
+#: src/screens/Profile/Sections/Labels.tsx:142
+msgid "Labels are annotations on users and content. They can be used to hide, warn, and categorize the network."
+msgstr ""
+
+#: src/components/moderation/LabelsOnMe.tsx:61
+msgid "labels have been placed on this {labelTarget}"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:62
+msgid "Labels on your account"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:64
+msgid "Labels on your content"
msgstr ""
#: src/view/com/composer/select-language/SelectLangBtn.tsx:104
msgid "Language selection"
msgstr "Sélection de la langue"
-#: src/view/screens/Settings/index.tsx:594
+#: src/view/screens/Settings/index.tsx:614
msgid "Language settings"
msgstr "Préférences de langue"
-#: src/Navigation.tsx:140
+#: src/Navigation.tsx:144
#: src/view/screens/LanguageSettings.tsx:89
msgid "Language Settings"
msgstr "Paramètres linguistiques"
-#: src/view/screens/Settings/index.tsx:603
+#: src/view/screens/Settings/index.tsx:623
msgid "Languages"
msgstr "Langues"
#: src/view/com/auth/create/StepHeader.tsx:20
-msgid "Last step!"
-msgstr "Dernière étape !"
+#~ msgid "Last step!"
+#~ msgstr "Dernière étape !"
#: src/view/com/util/moderation/ContentHider.tsx:103
-msgid "Learn more"
-msgstr "En savoir plus"
+#~ msgid "Learn more"
+#~ msgstr "En savoir plus"
-#: src/view/com/util/moderation/PostAlerts.tsx:47
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:65
-#: src/view/com/util/moderation/ScreenHider.tsx:104
+#: src/components/moderation/ScreenHider.tsx:136
msgid "Learn More"
msgstr "En savoir plus"
-#: src/view/com/util/moderation/ContentHider.tsx:85
-#: src/view/com/util/moderation/PostAlerts.tsx:40
-#: src/view/com/util/moderation/PostHider.tsx:78
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:49
-#: src/view/com/util/moderation/ScreenHider.tsx:101
+#: src/components/moderation/ContentHider.tsx:65
+#: src/components/moderation/ContentHider.tsx:128
+msgid "Learn more about the moderation applied to this content."
+msgstr ""
+
+#: src/components/moderation/PostHider.tsx:85
+#: src/components/moderation/ScreenHider.tsx:125
msgid "Learn more about this warning"
msgstr "En savoir plus sur cet avertissement"
-#: src/view/screens/Moderation.tsx:243
+#: src/screens/Moderation/index.tsx:549
msgid "Learn more about what is public on Bluesky."
msgstr "En savoir plus sur ce qui est public sur Bluesky."
+#: src/components/moderation/ContentHider.tsx:152
+msgid "Learn more."
+msgstr ""
+
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82
msgid "Leave them all unchecked to see any language."
msgstr "Si vous ne cochez rien, toutes les langues s’afficheront."
-#: src/view/com/modals/LinkWarning.tsx:51
+#: src/view/com/modals/LinkWarning.tsx:65
msgid "Leaving Bluesky"
msgstr "Quitter Bluesky"
#: src/screens/Deactivated.tsx:128
msgid "left to go."
-msgstr ""
+msgstr "devant vous dans la file."
-#: src/view/screens/Settings/index.tsx:278
+#: src/view/screens/Settings/index.tsx:296
msgid "Legacy storage cleared, you need to restart the app now."
msgstr "Stockage ancien effacé, vous devez redémarrer l’application maintenant."
-#: src/view/com/auth/login/Login.tsx:128
-#: src/view/com/auth/login/Login.tsx:144
+#: src/screens/Login/index.tsx:130
+#: src/screens/Login/index.tsx:145
msgid "Let's get your password reset!"
-msgstr "Réinitialisez votre mot de passe !"
+msgstr "Réinitialisez votre mot de passe !"
-#: src/screens/Onboarding/StepFinished.tsx:151
+#: src/screens/Onboarding/StepFinished.tsx:155
msgid "Let's go!"
-msgstr ""
+msgstr "Allons-y !"
#: src/view/com/util/UserAvatar.tsx:248
#: src/view/com/util/UserBanner.tsx:62
-msgid "Library"
-msgstr "Bibliothèque"
+#~ msgid "Library"
+#~ msgstr "Bibliothèque"
-#: src/view/screens/Settings/index.tsx:479
+#: src/view/screens/Settings/index.tsx:498
msgid "Light"
msgstr "Clair"
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Like"
msgstr "Liker"
-#: src/view/screens/ProfileFeed.tsx:591
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:258
+#: src/view/screens/ProfileFeed.tsx:573
msgid "Like this feed"
msgstr "Liker ce fil d’actu"
-#: src/Navigation.tsx:197
+#: src/components/LikesDialog.tsx:87
+#: src/Navigation.tsx:201
+#: src/Navigation.tsx:206
msgid "Liked by"
msgstr "Liké par"
+#: src/screens/Profile/ProfileLabelerLikedBy.tsx:29
#: src/view/screens/PostLikedBy.tsx:27
#: src/view/screens/ProfileFeedLikedBy.tsx:27
msgid "Liked By"
-msgstr ""
+msgstr "Liké par"
-#: src/view/com/feeds/FeedSourceCard.tsx:277
+#: src/view/com/feeds/FeedSourceCard.tsx:268
msgid "Liked by {0} {1}"
msgstr "Liké par {0} {1}"
-#: src/view/screens/ProfileFeed.tsx:606
+#: src/components/LabelingServiceCard/index.tsx:72
+msgid "Liked by {count} {0}"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:278
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:292
+#: src/view/screens/ProfileFeed.tsx:588
msgid "Liked by {likeCount} {0}"
msgstr "Liké par {likeCount} {0}"
-#: src/view/com/notifications/FeedItem.tsx:170
+#: src/view/com/notifications/FeedItem.tsx:174
msgid "liked your custom feed"
msgstr "liké votre fil d’actu personnalisé"
-#: src/view/com/notifications/FeedItem.tsx:155
+#: src/view/com/notifications/FeedItem.tsx:159
msgid "liked your post"
msgstr "liké votre post"
-#: src/view/screens/Profile.tsx:183
+#: src/view/screens/Profile.tsx:193
msgid "Likes"
msgstr "Likes"
@@ -2064,75 +2418,72 @@ msgstr "Likes"
msgid "Likes on this post"
msgstr "Likes sur ce post"
-#: src/Navigation.tsx:166
+#: src/Navigation.tsx:170
msgid "List"
msgstr "Liste"
-#: src/view/com/modals/CreateOrEditList.tsx:261
+#: src/view/com/modals/CreateOrEditList.tsx:262
msgid "List Avatar"
msgstr "Liste des avatars"
-#: src/view/screens/ProfileList.tsx:323
+#: src/view/screens/ProfileList.tsx:311
msgid "List blocked"
msgstr "Liste bloquée"
-#: src/view/com/feeds/FeedSourceCard.tsx:231
+#: src/view/com/feeds/FeedSourceCard.tsx:220
msgid "List by {0}"
msgstr "Liste par {0}"
-#: src/view/screens/ProfileList.tsx:377
+#: src/view/screens/ProfileList.tsx:355
msgid "List deleted"
msgstr "Liste supprimée"
-#: src/view/screens/ProfileList.tsx:282
+#: src/view/screens/ProfileList.tsx:283
msgid "List muted"
msgstr "Liste masquée"
-#: src/view/com/modals/CreateOrEditList.tsx:275
+#: src/view/com/modals/CreateOrEditList.tsx:276
msgid "List Name"
msgstr "Nom de liste"
-#: src/view/screens/ProfileList.tsx:342
+#: src/view/screens/ProfileList.tsx:325
msgid "List unblocked"
msgstr "Liste débloquée"
-#: src/view/screens/ProfileList.tsx:301
+#: src/view/screens/ProfileList.tsx:297
msgid "List unmuted"
msgstr "Liste démasquée"
-#: src/Navigation.tsx:110
-#: src/view/screens/Profile.tsx:185
-#: src/view/shell/desktop/LeftNav.tsx:379
-#: src/view/shell/Drawer.tsx:492
-#: src/view/shell/Drawer.tsx:493
+#: src/Navigation.tsx:114
+#: src/view/screens/Profile.tsx:189
+#: src/view/screens/Profile.tsx:195
+#: src/view/shell/desktop/LeftNav.tsx:383
+#: src/view/shell/Drawer.tsx:495
+#: src/view/shell/Drawer.tsx:496
msgid "Lists"
msgstr "Listes"
-#: src/view/com/post-thread/PostThread.tsx:276
-#: src/view/com/post-thread/PostThread.tsx:284
-msgid "Load more posts"
-msgstr "Charger plus d’articles"
+#: src/view/com/post-thread/PostThread.tsx:333
+#: src/view/com/post-thread/PostThread.tsx:341
+#~ msgid "Load more posts"
+#~ msgstr "Charger plus de posts"
#: src/view/screens/Notifications.tsx:159
msgid "Load new notifications"
msgstr "Charger les nouvelles notifications"
-#: src/view/com/feeds/FeedPage.tsx:190
-#: src/view/screens/Profile.tsx:440
-#: src/view/screens/ProfileFeed.tsx:494
-#: src/view/screens/ProfileList.tsx:680
+#: src/screens/Profile/Sections/Feed.tsx:70
+#: src/view/com/feeds/FeedPage.tsx:138
+#: src/view/screens/ProfileFeed.tsx:496
+#: src/view/screens/ProfileList.tsx:695
msgid "Load new posts"
-msgstr "Charger les nouveaux messages"
+msgstr "Charger les nouveaux posts"
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:99
msgid "Loading..."
msgstr "Chargement…"
-#: src/view/com/modals/ServerInput.tsx:50
-#~ msgid "Local dev server"
-#~ msgstr "Serveur de dév local"
-
-#: src/Navigation.tsx:207
+#: src/Navigation.tsx:221
msgid "Log"
msgstr "Journaux"
@@ -2141,21 +2492,37 @@ msgstr "Journaux"
#: src/screens/Deactivated.tsx:178
#: src/screens/Deactivated.tsx:181
msgid "Log out"
-msgstr ""
+msgstr "Déconnexion"
-#: src/view/screens/Moderation.tsx:136
+#: src/screens/Moderation/index.tsx:442
msgid "Logged-out visibility"
msgstr "Visibilité déconnectée"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:133
+#: src/components/AccountList.tsx:54
msgid "Login to account that is not listed"
msgstr "Se connecter à un compte qui n’est pas listé"
-#: src/view/com/modals/LinkWarning.tsx:65
+#: src/screens/Login/SetNewPasswordForm.tsx:116
+msgid "Looks like XXXXX-XXXXX"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:79
msgid "Make sure this is where you intend to go!"
-msgstr "Assurez-vous que c’est bien là que vous avez l’intention d’aller !"
+msgstr "Assurez-vous que c’est bien là que vous avez l’intention d’aller !"
-#: src/view/screens/Profile.tsx:182
+#: src/components/dialogs/MutedWords.tsx:82
+msgid "Manage your muted words and tags"
+msgstr "Gérer les mots et les mots-clés masqués"
+
+#: src/view/com/auth/create/Step2.tsx:118
+#~ msgid "May not be longer than 253 characters"
+#~ msgstr "Ne doit pas dépasser 253 caractères"
+
+#: src/view/com/auth/create/Step2.tsx:109
+#~ msgid "May only contain letters and numbers"
+#~ msgstr "Ne peut contenir que des lettres et des chiffres"
+
+#: src/view/screens/Profile.tsx:192
msgid "Media"
msgstr "Média"
@@ -2167,132 +2534,196 @@ msgstr "comptes mentionnés"
msgid "Mentioned users"
msgstr "Comptes mentionnés"
-#: src/view/com/util/ViewHeader.tsx:81
-#: src/view/screens/Search/Search.tsx:623
+#: src/view/com/util/ViewHeader.tsx:87
+#: src/view/screens/Search/Search.tsx:648
msgid "Menu"
msgstr "Menu"
-#: src/view/com/posts/FeedErrorMessage.tsx:197
+#: src/view/com/posts/FeedErrorMessage.tsx:192
msgid "Message from server: {0}"
-msgstr "Message du serveur : {0}"
-
-#: src/Navigation.tsx:115
-#: src/view/screens/Moderation.tsx:64
-#: src/view/screens/Settings/index.tsx:625
-#: src/view/shell/desktop/LeftNav.tsx:397
-#: src/view/shell/Drawer.tsx:511
-#: src/view/shell/Drawer.tsx:512
+msgstr "Message du serveur : {0}"
+
+#: src/lib/moderation/useReportOptions.ts:45
+msgid "Misleading Account"
+msgstr ""
+
+#: src/Navigation.tsx:119
+#: src/screens/Moderation/index.tsx:104
+#: src/view/screens/Settings/index.tsx:645
+#: src/view/shell/desktop/LeftNav.tsx:401
+#: src/view/shell/Drawer.tsx:514
+#: src/view/shell/Drawer.tsx:515
msgid "Moderation"
msgstr "Modération"
-#: src/view/com/lists/ListCard.tsx:92
+#: src/components/moderation/ModerationDetailsDialog.tsx:112
+msgid "Moderation details"
+msgstr ""
+
+#: src/view/com/lists/ListCard.tsx:93
#: src/view/com/modals/UserAddRemoveLists.tsx:206
msgid "Moderation list by {0}"
msgstr "Liste de modération par {0}"
-#: src/view/screens/ProfileList.tsx:774
+#: src/view/screens/ProfileList.tsx:789
msgid "Moderation list by <0/>"
msgstr "Liste de modération par <0/>"
-#: src/view/com/lists/ListCard.tsx:90
+#: src/view/com/lists/ListCard.tsx:91
#: src/view/com/modals/UserAddRemoveLists.tsx:204
-#: src/view/screens/ProfileList.tsx:772
+#: src/view/screens/ProfileList.tsx:787
msgid "Moderation list by you"
msgstr "Liste de modération par vous"
-#: src/view/com/modals/CreateOrEditList.tsx:197
+#: src/view/com/modals/CreateOrEditList.tsx:198
msgid "Moderation list created"
msgstr "Liste de modération créée"
-#: src/view/com/modals/CreateOrEditList.tsx:183
+#: src/view/com/modals/CreateOrEditList.tsx:184
msgid "Moderation list updated"
msgstr "Liste de modération mise à jour"
-#: src/view/screens/Moderation.tsx:95
+#: src/screens/Moderation/index.tsx:243
msgid "Moderation lists"
msgstr "Listes de modération"
-#: src/Navigation.tsx:120
+#: src/Navigation.tsx:124
#: src/view/screens/ModerationModlists.tsx:58
msgid "Moderation Lists"
msgstr "Listes de modération"
-#: src/view/screens/Settings/index.tsx:619
+#: src/view/screens/Settings/index.tsx:639
msgid "Moderation settings"
msgstr "Paramètres de modération"
-#: src/view/com/modals/ModerationDetails.tsx:35
+#: src/Navigation.tsx:216
+msgid "Moderation states"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:215
+msgid "Moderation tools"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:48
+#: src/lib/moderation/useModerationCauseDescription.ts:40
msgid "Moderator has chosen to set a general warning on the content."
msgstr "La modération a choisi d’ajouter un avertissement général sur le contenu."
-#: src/view/shell/desktop/Feeds.tsx:63
+#: src/view/com/post-thread/PostThreadItem.tsx:541
+msgid "More"
+msgstr ""
+
+#: src/view/shell/desktop/Feeds.tsx:65
msgid "More feeds"
msgstr "Plus de fils d’actu"
-#: src/view/com/profile/ProfileHeader.tsx:522
-#: src/view/screens/ProfileFeed.tsx:362
-#: src/view/screens/ProfileList.tsx:616
+#: src/view/screens/ProfileList.tsx:599
msgid "More options"
msgstr "Plus d’options"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:270
-msgid "More post options"
-msgstr "Plus d’options de post"
-
#: src/view/screens/PreferencesThreads.tsx:82
msgid "Most-liked replies first"
msgstr "Réponses les plus likées en premier"
-#: src/view/com/profile/ProfileHeader.tsx:326
+#: src/view/com/auth/create/Step2.tsx:122
+#~ msgid "Must be at least 3 characters"
+#~ msgstr "Doit comporter au moins 3 caractères"
+
+#: src/components/TagMenu/index.tsx:249
+msgid "Mute"
+msgstr "Masquer"
+
+#: src/components/TagMenu/index.web.tsx:105
+msgid "Mute {truncatedTag}"
+msgstr "Masquer {truncatedTag}"
+
+#: src/view/com/profile/ProfileMenu.tsx:279
+#: src/view/com/profile/ProfileMenu.tsx:286
msgid "Mute Account"
msgstr "Masquer le compte"
-#: src/view/screens/ProfileList.tsx:543
+#: src/view/screens/ProfileList.tsx:518
msgid "Mute accounts"
msgstr "Masquer les comptes"
-#: src/view/screens/ProfileList.tsx:490
+#: src/components/TagMenu/index.tsx:209
+msgid "Mute all {displayTag} posts"
+msgstr "Masquer tous les posts {displayTag}"
+
+#: src/components/dialogs/MutedWords.tsx:148
+msgid "Mute in tags only"
+msgstr "Masquer dans les mots-clés uniquement"
+
+#: src/components/dialogs/MutedWords.tsx:133
+msgid "Mute in text & tags"
+msgstr "Masquer dans le texte et les mots-clés"
+
+#: src/view/screens/ProfileList.tsx:461
+#: src/view/screens/ProfileList.tsx:624
msgid "Mute list"
msgstr "Masquer la liste"
-#: src/view/screens/ProfileList.tsx:274
+#: src/view/screens/ProfileList.tsx:619
msgid "Mute these accounts?"
-msgstr "Masquer ces comptes ?"
+msgstr "Masquer ces comptes ?"
-#: src/view/screens/ProfileList.tsx:278
-msgid "Mute this List"
-msgstr "Masquer cette liste"
+#: src/view/screens/ProfileList.tsx:279
+#~ msgid "Mute this List"
+#~ msgstr "Masquer cette liste"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/components/dialogs/MutedWords.tsx:126
+msgid "Mute this word in post text and tags"
+msgstr "Masquer ce mot dans le texte du post et les mots-clés"
+
+#: src/components/dialogs/MutedWords.tsx:141
+msgid "Mute this word in tags only"
+msgstr "Masquer ce mot dans les mots-clés uniquement"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:257
msgid "Mute thread"
msgstr "Masquer ce fil de discussion"
-#: src/view/com/lists/ListCard.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:267
+#: src/view/com/util/forms/PostDropdownBtn.tsx:269
+msgid "Mute words & tags"
+msgstr "Masquer les mots et les mots-clés"
+
+#: src/view/com/lists/ListCard.tsx:102
msgid "Muted"
-msgstr ""
+msgstr "Masqué"
-#: src/view/screens/Moderation.tsx:109
+#: src/screens/Moderation/index.tsx:255
msgid "Muted accounts"
msgstr "Comptes masqués"
-#: src/Navigation.tsx:125
+#: src/Navigation.tsx:129
#: src/view/screens/ModerationMutedAccounts.tsx:107
msgid "Muted Accounts"
msgstr "Comptes masqués"
#: src/view/screens/ModerationMutedAccounts.tsx:115
msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private."
-msgstr "Les comptes masqués voient leurs posts supprimés de votre fil d’actualité et de vos notifications. Cette option est totalement privée."
+msgstr "Les comptes masqués voient leurs posts supprimés de votre fil d’actu et de vos notifications. Cette option est totalement privée."
-#: src/view/screens/ProfileList.tsx:276
+#: src/lib/moderation/useModerationCauseDescription.ts:85
+msgid "Muted by \"{0}\""
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:231
+msgid "Muted words & tags"
+msgstr "Les mots et les mots-clés masqués"
+
+#: src/view/screens/ProfileList.tsx:621
msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them."
msgstr "Ce que vous masquez reste privé. Les comptes masqués peuvent interagir avec vous, mais vous ne verrez pas leurs posts et ne recevrez pas de notifications de leur part."
-#: src/view/com/modals/BirthDateSettings.tsx:56
+#: src/components/dialogs/BirthDateSettings.tsx:35
+#: src/components/dialogs/BirthDateSettings.tsx:38
msgid "My Birthday"
msgstr "Ma date de naissance"
-#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:663
msgid "My Feeds"
msgstr "Mes fils d’actu"
@@ -2300,32 +2731,40 @@ msgstr "Mes fils d’actu"
msgid "My Profile"
msgstr "Mon profil"
-#: src/view/screens/Settings/index.tsx:582
+#: src/view/screens/Settings/index.tsx:596
+msgid "My saved feeds"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:602
msgid "My Saved Feeds"
msgstr "Mes fils d’actu enregistrés"
#: src/view/com/auth/server-input/index.tsx:118
-msgid "my-server.com"
-msgstr ""
+#~ msgid "my-server.com"
+#~ msgstr "mon-serveur.fr"
-#: src/view/com/modals/AddAppPasswords.tsx:179
-#: src/view/com/modals/CreateOrEditList.tsx:290
+#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/CreateOrEditList.tsx:291
msgid "Name"
msgstr "Nom"
-#: src/view/com/modals/CreateOrEditList.tsx:145
+#: src/view/com/modals/CreateOrEditList.tsx:146
msgid "Name is required"
msgstr "Le nom est requis"
+#: src/lib/moderation/useReportOptions.ts:57
+#: src/lib/moderation/useReportOptions.ts:78
+#: src/lib/moderation/useReportOptions.ts:86
+msgid "Name or Description Violates Community Standards"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:25
msgid "Nature"
-msgstr ""
+msgstr "Nature"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:190
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:219
-#: src/view/com/auth/login/LoginForm.tsx:289
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:196
-#: src/view/com/modals/ChangePassword.tsx:166
+#: src/screens/Login/ForgotPasswordForm.tsx:173
+#: src/screens/Login/LoginForm.tsx:254
+#: src/view/com/modals/ChangePassword.tsx:168
msgid "Navigates to the next screen"
msgstr "Navigue vers le prochain écran"
@@ -2333,18 +2772,30 @@ msgstr "Navigue vers le prochain écran"
msgid "Navigates to your profile"
msgstr "Navigue vers votre profil"
+#: src/components/ReportDialog/SelectReportOptionView.tsx:122
+msgid "Need to report a copyright violation?"
+msgstr ""
+
#: src/view/com/modals/EmbedConsent.tsx:107
#: src/view/com/modals/EmbedConsent.tsx:123
-msgid "Never load embeds from {0}"
-msgstr "Ne jamais charger les contenus intégrés de {0}"
+#~ msgid "Never load embeds from {0}"
+#~ msgstr "Ne jamais charger les contenus intégrés de {0}"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:72
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:72
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:74
msgid "Never lose access to your followers and data."
msgstr "Ne perdez jamais l’accès à vos followers et à vos données."
-#: src/screens/Onboarding/StepFinished.tsx:119
+#: src/screens/Onboarding/StepFinished.tsx:123
msgid "Never lose access to your followers or data."
+msgstr "Ne perdez jamais l’accès à vos followers ou à vos données."
+
+#: src/components/dialogs/MutedWords.tsx:293
+#~ msgid "Nevermind"
+#~ msgstr "Peu importe"
+
+#: src/view/com/modals/ChangeHandle.tsx:519
+msgid "Nevermind, create a handle for me"
msgstr ""
#: src/view/screens/Lists.tsx:76
@@ -2356,39 +2807,39 @@ msgstr "Nouveau"
msgid "New"
msgstr "Nouveau"
-#: src/view/com/modals/CreateOrEditList.tsx:252
+#: src/view/com/modals/CreateOrEditList.tsx:253
msgid "New Moderation List"
msgstr "Nouvelle liste de modération"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:150
+#: src/view/com/modals/ChangePassword.tsx:212
msgid "New password"
msgstr "Nouveau mot de passe"
-#: src/view/com/modals/ChangePassword.tsx:215
+#: src/view/com/modals/ChangePassword.tsx:217
msgid "New Password"
-msgstr ""
+msgstr "Nouveau mot de passe"
-#: src/view/com/feeds/FeedPage.tsx:201
+#: src/view/com/feeds/FeedPage.tsx:149
msgctxt "action"
msgid "New post"
msgstr "Nouveau post"
-#: src/view/screens/Feeds.tsx:581
+#: src/view/screens/Feeds.tsx:555
#: src/view/screens/Notifications.tsx:168
-#: src/view/screens/Profile.tsx:382
-#: src/view/screens/ProfileFeed.tsx:432
-#: src/view/screens/ProfileList.tsx:195
-#: src/view/screens/ProfileList.tsx:223
-#: src/view/shell/desktop/LeftNav.tsx:248
+#: src/view/screens/Profile.tsx:452
+#: src/view/screens/ProfileFeed.tsx:434
+#: src/view/screens/ProfileList.tsx:199
+#: src/view/screens/ProfileList.tsx:227
+#: src/view/shell/desktop/LeftNav.tsx:252
msgid "New post"
msgstr "Nouveau post"
-#: src/view/shell/desktop/LeftNav.tsx:258
+#: src/view/shell/desktop/LeftNav.tsx:262
msgctxt "action"
msgid "New Post"
msgstr "Nouveau post"
-#: src/view/com/modals/CreateOrEditList.tsx:247
+#: src/view/com/modals/CreateOrEditList.tsx:248
msgid "New User List"
msgstr "Nouvelle liste de comptes"
@@ -2398,17 +2849,18 @@ msgstr "Réponses les plus récentes en premier"
#: src/screens/Onboarding/index.tsx:23
msgid "News"
-msgstr ""
-
-#: src/view/com/auth/create/CreateAccount.tsx:161
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:182
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:192
-#: src/view/com/auth/login/LoginForm.tsx:291
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:187
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:198
+msgstr "Actualités"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:143
+#: src/screens/Login/ForgotPasswordForm.tsx:150
+#: src/screens/Login/LoginForm.tsx:253
+#: src/screens/Login/LoginForm.tsx:260
+#: src/screens/Login/SetNewPasswordForm.tsx:174
+#: src/screens/Login/SetNewPasswordForm.tsx:180
+#: src/screens/Signup/index.tsx:205
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79
-#: src/view/com/modals/ChangePassword.tsx:251
#: src/view/com/modals/ChangePassword.tsx:253
+#: src/view/com/modals/ChangePassword.tsx:255
msgid "Next"
msgstr "Suivant"
@@ -2417,48 +2869,61 @@ msgctxt "action"
msgid "Next"
msgstr "Suivant"
-#: src/view/com/lightbox/Lightbox.web.tsx:149
+#: src/view/com/lightbox/Lightbox.web.tsx:169
msgid "Next image"
msgstr "Image suivante"
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:200
-#: src/view/screens/PreferencesHomeFeed.tsx:235
-#: src/view/screens/PreferencesHomeFeed.tsx:272
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:200
+#: src/view/screens/PreferencesFollowingFeed.tsx:235
+#: src/view/screens/PreferencesFollowingFeed.tsx:272
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "No"
msgstr "Non"
-#: src/view/screens/ProfileFeed.tsx:584
-#: src/view/screens/ProfileList.tsx:754
+#: src/view/screens/ProfileFeed.tsx:562
+#: src/view/screens/ProfileList.tsx:769
msgid "No description"
msgstr "Aucune description"
-#: src/view/com/profile/ProfileHeader.tsx:169
+#: src/view/com/modals/ChangeHandle.tsx:405
+msgid "No DNS Panel"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:118
msgid "No longer following {0}"
msgstr "Ne suit plus {0}"
+#: src/screens/Signup/StepHandle.tsx:114
+msgid "No longer than 253 characters"
+msgstr ""
+
#: src/view/com/notifications/Feed.tsx:109
msgid "No notifications yet!"
-msgstr "Pas encore de notifications !"
+msgstr "Pas encore de notifications !"
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:97
-#: src/view/com/composer/text-input/web/Autocomplete.tsx:191
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:101
+#: src/view/com/composer/text-input/web/Autocomplete.tsx:195
msgid "No result"
msgstr "Aucun résultat"
-#: src/view/screens/Feeds.tsx:524
+#: src/components/Lists.tsx:183
+msgid "No results found"
+msgstr "Aucun résultat trouvé"
+
+#: src/view/screens/Feeds.tsx:495
msgid "No results found for \"{query}\""
-msgstr "Aucun résultat trouvé pour « {query} »"
+msgstr "Aucun résultat trouvé pour « {query} »"
#: src/view/com/modals/ListAddRemoveUsers.tsx:127
-#: src/view/screens/Search/Search.tsx:280
-#: src/view/screens/Search/Search.tsx:308
+#: src/view/screens/Search/Search.tsx:283
+#: src/view/screens/Search/Search.tsx:311
msgid "No results found for {query}"
msgstr "Aucun résultat trouvé pour {query}"
-#: src/view/com/modals/EmbedConsent.tsx:129
+#: src/components/dialogs/EmbedConsent.tsx:105
+#: src/components/dialogs/EmbedConsent.tsx:112
msgid "No thanks"
msgstr "Non merci"
@@ -2466,12 +2931,21 @@ msgstr "Non merci"
msgid "Nobody"
msgstr "Personne"
+#: src/components/LikedByList.tsx:79
+#: src/components/LikesDialog.tsx:99
+msgid "Nobody has liked this yet. Maybe you should be the first!"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:42
+msgid "Non-sexual Nudity"
+msgstr ""
+
#: src/view/com/modals/SelfLabel.tsx:135
msgid "Not Applicable."
msgstr "Sans objet."
-#: src/Navigation.tsx:105
-#: src/view/screens/Profile.tsx:106
+#: src/Navigation.tsx:109
+#: src/view/screens/Profile.tsx:99
msgid "Not Found"
msgstr "Introuvable"
@@ -2480,17 +2954,23 @@ msgstr "Introuvable"
msgid "Not right now"
msgstr "Pas maintenant"
-#: src/view/screens/Moderation.tsx:233
+#: src/view/com/profile/ProfileMenu.tsx:368
+#: src/view/com/util/forms/PostDropdownBtn.tsx:342
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:246
+msgid "Note about sharing"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:540
msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites."
-msgstr "Remarque : Bluesky est un réseau ouvert et public. Ce paramètre limite uniquement la visibilité de votre contenu sur l’application et le site Web de Bluesky, et d’autres applications peuvent ne pas respecter ce paramètre. Votre contenu peut toujours être montré aux personnes non connectées par d’autres applications et sites Web."
+msgstr "Remarque : Bluesky est un réseau ouvert et public. Ce paramètre limite uniquement la visibilité de votre contenu sur l’application et le site Web de Bluesky, et d’autres applications peuvent ne pas respecter ce paramètre. Votre contenu peut toujours être montré aux personnes non connectées par d’autres applications et sites Web."
-#: src/Navigation.tsx:447
+#: src/Navigation.tsx:469
#: src/view/screens/Notifications.tsx:124
#: src/view/screens/Notifications.tsx:148
-#: src/view/shell/bottom-bar/BottomBar.tsx:205
-#: src/view/shell/desktop/LeftNav.tsx:361
-#: src/view/shell/Drawer.tsx:435
-#: src/view/shell/Drawer.tsx:436
+#: src/view/shell/bottom-bar/BottomBar.tsx:215
+#: src/view/shell/desktop/LeftNav.tsx:365
+#: src/view/shell/Drawer.tsx:438
+#: src/view/shell/Drawer.tsx:439
msgid "Notifications"
msgstr "Notifications"
@@ -2498,15 +2978,36 @@ msgstr "Notifications"
msgid "Nudity"
msgstr "Nudité"
-#: src/view/com/util/ErrorBoundary.tsx:35
+#: src/lib/moderation/useReportOptions.ts:71
+msgid "Nudity or adult content not labeled as such"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:71
+#~ msgid "Nudity or pornography not labeled as such"
+#~ msgstr ""
+
+#: src/screens/Signup/index.tsx:142
+msgid "of"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:11
+msgid "Off"
+msgstr ""
+
+#: src/view/com/util/ErrorBoundary.tsx:49
msgid "Oh no!"
-msgstr "Oh non !"
+msgstr "Oh non !"
-#: src/screens/Onboarding/StepInterests/index.tsx:128
+#: src/screens/Onboarding/StepInterests/index.tsx:132
msgid "Oh no! Something went wrong."
+msgstr "Oh non ! Il y a eu un problème."
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:126
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:327
+msgid "OK"
msgstr ""
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:41
+#: src/screens/Login/PasswordUpdatedForm.tsx:44
msgid "Okay"
msgstr "D’accord"
@@ -2514,11 +3015,11 @@ msgstr "D’accord"
msgid "Oldest replies first"
msgstr "Plus anciennes réponses en premier"
-#: src/view/screens/Settings/index.tsx:234
+#: src/view/screens/Settings/index.tsx:244
msgid "Onboarding reset"
msgstr "Réinitialiser le didacticiel"
-#: src/view/com/composer/Composer.tsx:375
+#: src/view/com/composer/Composer.tsx:392
msgid "One or more images is missing alt text."
msgstr "Une ou plusieurs images n’ont pas de texte alt."
@@ -2526,32 +3027,66 @@ msgstr "Une ou plusieurs images n’ont pas de texte alt."
msgid "Only {0} can reply."
msgstr "Seul {0} peut répondre."
-#: src/view/screens/AppPasswords.tsx:65
-#: src/view/screens/Profile.tsx:106
+#: src/screens/Signup/StepHandle.tsx:97
+msgid "Only contains letters, numbers, and hyphens"
+msgstr ""
+
+#: src/components/Lists.tsx:75
+msgid "Oops, something went wrong!"
+msgstr "Oups, quelque chose n’a pas marché !"
+
+#: src/components/Lists.tsx:170
+#: src/view/screens/AppPasswords.tsx:67
+#: src/view/screens/Profile.tsx:99
msgid "Oops!"
-msgstr "Oups !"
+msgstr "Oups !"
-#: src/screens/Onboarding/StepFinished.tsx:115
+#: src/screens/Onboarding/StepFinished.tsx:119
msgid "Open"
-msgstr ""
+msgstr "Ouvrir"
-#: src/view/com/composer/Composer.tsx:470
-#: src/view/com/composer/Composer.tsx:471
+#: src/view/screens/Moderation.tsx:75
+#~ msgid "Open content filtering settings"
+#~ msgstr "Ouvrir les paramètres de filtrage de contenu"
+
+#: src/view/com/composer/Composer.tsx:491
+#: src/view/com/composer/Composer.tsx:492
msgid "Open emoji picker"
msgstr "Ouvrir le sélecteur d’emoji"
-#: src/view/screens/Settings/index.tsx:712
+#: src/view/screens/ProfileFeed.tsx:300
+msgid "Open feed options menu"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:734
msgid "Open links with in-app browser"
+msgstr "Ouvrir des liens avec le navigateur interne à l’appli"
+
+#: src/screens/Moderation/index.tsx:227
+msgid "Open muted words and tags settings"
msgstr ""
-#: src/view/com/pager/FeedsTabBarMobile.tsx:87
+#: src/view/screens/Moderation.tsx:92
+#~ msgid "Open muted words settings"
+#~ msgstr "Ouvrir les paramètres des mots masqués"
+
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:50
msgid "Open navigation"
msgstr "Navigation ouverte"
-#: src/view/screens/Settings/index.tsx:804
+#: src/view/com/util/forms/PostDropdownBtn.tsx:183
+msgid "Open post options menu"
+msgstr "Ouvrir le menu d’options du post"
+
+#: src/view/screens/Settings/index.tsx:828
+#: src/view/screens/Settings/index.tsx:838
msgid "Open storybook page"
msgstr "Ouvrir la page Storybook"
+#: src/view/screens/Settings/index.tsx:816
+msgid "Open system log"
+msgstr ""
+
#: src/view/com/util/forms/DropdownButton.tsx:154
msgid "Opens {numItems} options"
msgstr "Ouvre {numItems} options"
@@ -2560,11 +3095,11 @@ msgstr "Ouvre {numItems} options"
msgid "Opens additional details for a debug entry"
msgstr "Ouvre des détails supplémentaires pour une entrée de débug"
-#: src/view/com/notifications/FeedItem.tsx:348
+#: src/view/com/notifications/FeedItem.tsx:353
msgid "Opens an expanded list of users in this notification"
msgstr "Ouvre une liste étendue des comptes dans cette notification"
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:61
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:78
msgid "Opens camera on device"
msgstr "Ouvre l’appareil photo de l’appareil"
@@ -2572,7 +3107,7 @@ msgstr "Ouvre l’appareil photo de l’appareil"
msgid "Opens composer"
msgstr "Ouvre le rédacteur"
-#: src/view/screens/Settings/index.tsx:595
+#: src/view/screens/Settings/index.tsx:615
msgid "Opens configurable language settings"
msgstr "Ouvre les paramètres linguistiques configurables"
@@ -2580,71 +3115,113 @@ msgstr "Ouvre les paramètres linguistiques configurables"
msgid "Opens device photo gallery"
msgstr "Ouvre la galerie de photos de l’appareil"
-#: src/view/com/profile/ProfileHeader.tsx:419
-msgid "Opens editor for profile display name, avatar, background image, and description"
-msgstr "Ouvre l’éditeur pour le nom d’affichage du profil, l’avatar, l’image d’arrière-plan et la description"
+#: src/view/com/profile/ProfileHeader.tsx:420
+#~ msgid "Opens editor for profile display name, avatar, background image, and description"
+#~ msgstr "Ouvre l’éditeur pour le nom d’affichage du profil, l’avatar, l’image d’arrière-plan et la description"
-#: src/view/screens/Settings/index.tsx:649
+#: src/view/screens/Settings/index.tsx:669
msgid "Opens external embeds settings"
msgstr "Ouvre les paramètres d’intégration externe"
-#: src/view/com/profile/ProfileHeader.tsx:574
-msgid "Opens followers list"
-msgstr "Ouvre la liste des comptes abonnés"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:57
+#: src/view/com/auth/SplashScreen.tsx:68
+#: src/view/com/auth/SplashScreen.web.tsx:97
+msgid "Opens flow to create a new Bluesky account"
+msgstr ""
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:75
+#: src/view/com/auth/SplashScreen.tsx:83
+#: src/view/com/auth/SplashScreen.web.tsx:112
+msgid "Opens flow to sign into your existing Bluesky account"
+msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:593
-msgid "Opens following list"
-msgstr "Ouvre la liste des abonnements"
+#: src/view/com/profile/ProfileHeader.tsx:575
+#~ msgid "Opens followers list"
+#~ msgstr "Ouvre la liste des comptes abonnés"
-#: src/view/screens/Settings.tsx:412
-#~ msgid "Opens invite code list"
-#~ msgstr "Ouvre la liste des codes d’invitation"
+#: src/view/com/profile/ProfileHeader.tsx:594
+#~ msgid "Opens following list"
+#~ msgstr "Ouvre la liste des abonnements"
-#: src/view/com/modals/InviteCodes.tsx:172
+#: src/view/com/modals/InviteCodes.tsx:173
msgid "Opens list of invite codes"
msgstr "Ouvre la liste des codes d’invitation"
+#: src/view/screens/Settings/index.tsx:798
+msgid "Opens modal for account deletion confirmation. Requires email code"
+msgstr ""
+
#: src/view/screens/Settings/index.tsx:774
-msgid "Opens modal for account deletion confirmation. Requires email code."
-msgstr "Ouvre la fenêtre modale pour confirmer la suppression du compte. Requiert un code e-mail."
+#~ msgid "Opens modal for account deletion confirmation. Requires email code."
+#~ msgstr "Ouvre la fenêtre modale pour confirmer la suppression du compte. Requiert un code e-mail."
-#: src/view/com/modals/ChangeHandle.tsx:281
+#: src/view/screens/Settings/index.tsx:756
+msgid "Opens modal for changing your Bluesky password"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:718
+msgid "Opens modal for choosing a new Bluesky handle"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:779
+msgid "Opens modal for downloading your Bluesky account data (repository)"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:968
+msgid "Opens modal for email verification"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:282
msgid "Opens modal for using custom domain"
msgstr "Ouvre une fenêtre modale pour utiliser un domaine personnalisé"
-#: src/view/screens/Settings/index.tsx:620
+#: src/view/screens/Settings/index.tsx:640
msgid "Opens moderation settings"
msgstr "Ouvre les paramètres de modération"
-#: src/view/com/auth/login/LoginForm.tsx:239
+#: src/screens/Login/LoginForm.tsx:202
msgid "Opens password reset form"
msgstr "Ouvre le formulaire de réinitialisation du mot de passe"
-#: src/view/screens/Feeds.tsx:357
+#: src/view/com/home/HomeHeaderLayout.web.tsx:63
+#: src/view/screens/Feeds.tsx:356
msgid "Opens screen to edit Saved Feeds"
msgstr "Ouvre l’écran pour modifier les fils d’actu enregistrés"
-#: src/view/screens/Settings/index.tsx:576
+#: src/view/screens/Settings/index.tsx:597
msgid "Opens screen with all saved feeds"
msgstr "Ouvre l’écran avec tous les fils d’actu enregistrés"
+#: src/view/screens/Settings/index.tsx:696
+msgid "Opens the app password settings"
+msgstr ""
+
#: src/view/screens/Settings/index.tsx:676
-msgid "Opens the app password settings page"
-msgstr "Ouvre la page de configuration du mot de passe"
+#~ msgid "Opens the app password settings page"
+#~ msgstr "Ouvre la page de configuration du mot de passe"
+
+#: src/view/screens/Settings/index.tsx:554
+msgid "Opens the Following feed preferences"
+msgstr ""
#: src/view/screens/Settings/index.tsx:535
-msgid "Opens the home feed preferences"
-msgstr "Ouvre les préférences du fil d’accueil"
+#~ msgid "Opens the home feed preferences"
+#~ msgstr "Ouvre les préférences du fil d’accueil"
+
+#: src/view/com/modals/LinkWarning.tsx:93
+msgid "Opens the linked website"
+msgstr ""
-#: src/view/screens/Settings/index.tsx:805
+#: src/view/screens/Settings/index.tsx:829
+#: src/view/screens/Settings/index.tsx:839
msgid "Opens the storybook page"
msgstr "Ouvre la page de l’historique"
-#: src/view/screens/Settings/index.tsx:793
+#: src/view/screens/Settings/index.tsx:817
msgid "Opens the system log page"
msgstr "Ouvre la page du journal système"
-#: src/view/screens/Settings/index.tsx:556
+#: src/view/screens/Settings/index.tsx:575
msgid "Opens the threads preferences"
msgstr "Ouvre les préférences relatives aux fils de discussion"
@@ -2652,51 +3229,59 @@ msgstr "Ouvre les préférences relatives aux fils de discussion"
msgid "Option {0} of {numItems}"
msgstr "Option {0} sur {numItems}"
+#: src/components/ReportDialog/SubmitView.tsx:162
+msgid "Optionally provide additional information below:"
+msgstr ""
+
#: src/view/com/modals/Threadgate.tsx:89
msgid "Or combine these options:"
-msgstr "Ou une combinaison de ces options :"
+msgstr "Ou une combinaison de ces options :"
+
+#: src/lib/moderation/useReportOptions.ts:25
+msgid "Other"
+msgstr ""
-#: src/view/com/auth/login/ChooseAccountForm.tsx:138
+#: src/components/AccountList.tsx:73
msgid "Other account"
msgstr "Autre compte"
-#: src/view/com/modals/ServerInput.tsx:88
-#~ msgid "Other service"
-#~ msgstr "Autre service"
-
#: src/view/com/composer/select-language/SelectLangBtn.tsx:91
msgid "Other..."
msgstr "Autre…"
+#: src/components/Lists.tsx:184
#: src/view/screens/NotFound.tsx:45
msgid "Page not found"
msgstr "Page introuvable"
#: src/view/screens/NotFound.tsx:42
msgid "Page Not Found"
-msgstr ""
+msgstr "Page introuvable"
-#: src/view/com/auth/create/Step1.tsx:210
-#: src/view/com/auth/create/Step1.tsx:220
-#: src/view/com/auth/login/LoginForm.tsx:226
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:161
-#: src/view/com/modals/DeleteAccount.tsx:202
+#: src/screens/Login/LoginForm.tsx:178
+#: src/screens/Signup/StepInfo/index.tsx:101
+#: src/view/com/modals/DeleteAccount.tsx:194
+#: src/view/com/modals/DeleteAccount.tsx:201
msgid "Password"
msgstr "Mot de passe"
-#: src/view/com/auth/login/Login.tsx:157
+#: src/view/com/modals/ChangePassword.tsx:142
+msgid "Password Changed"
+msgstr ""
+
+#: src/screens/Login/index.tsx:157
msgid "Password updated"
msgstr "Mise à jour du mot de passe"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:28
+#: src/screens/Login/PasswordUpdatedForm.tsx:30
msgid "Password updated!"
-msgstr "Mot de passe mis à jour !"
+msgstr "Mot de passe mis à jour !"
-#: src/Navigation.tsx:160
+#: src/Navigation.tsx:164
msgid "People followed by @{0}"
msgstr "Personnes suivies par @{0}"
-#: src/Navigation.tsx:153
+#: src/Navigation.tsx:157
msgid "People following @{0}"
msgstr "Personnes qui suivent @{0}"
@@ -2710,128 +3295,142 @@ msgstr "Permission d’accès à la pellicule refusée. Veuillez l’activer dan
#: src/screens/Onboarding/index.tsx:31
msgid "Pets"
-msgstr ""
-
-#: src/view/com/auth/create/Step2.tsx:183
-msgid "Phone number"
-msgstr ""
+msgstr "Animaux domestiques"
#: src/view/com/modals/SelfLabel.tsx:121
msgid "Pictures meant for adults."
msgstr "Images destinées aux adultes."
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:292
+#: src/view/screens/ProfileList.tsx:563
msgid "Pin to home"
msgstr "Ajouter à l’accueil"
+#: src/view/screens/ProfileFeed.tsx:295
+msgid "Pin to Home"
+msgstr ""
+
#: src/view/screens/SavedFeeds.tsx:88
msgid "Pinned Feeds"
msgstr "Fils épinglés"
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:111
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:123
msgid "Play {0}"
msgstr "Lire {0}"
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:54
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:55
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:57
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:58
msgid "Play Video"
msgstr "Lire la vidéo"
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:110
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:122
msgid "Plays the GIF"
msgstr "Lit le GIF"
-#: src/view/com/auth/create/state.ts:177
+#: src/screens/Signup/state.ts:241
msgid "Please choose your handle."
msgstr "Veuillez choisir votre pseudo."
-#: src/view/com/auth/create/state.ts:160
+#: src/screens/Signup/state.ts:234
msgid "Please choose your password."
msgstr "Veuillez choisir votre mot de passe."
+#: src/screens/Signup/state.ts:251
+msgid "Please complete the verification captcha."
+msgstr "Veuillez compléter le captcha de vérification."
+
#: src/view/com/modals/ChangeEmail.tsx:67
msgid "Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed."
msgstr "Veuillez confirmer votre e-mail avant de le modifier. Ceci est temporairement requis pendant que des outils de mise à jour d’e-mail sont ajoutés, cette étape ne sera bientôt plus nécessaire."
-#: src/view/com/modals/AddAppPasswords.tsx:90
+#: src/view/com/modals/AddAppPasswords.tsx:91
msgid "Please enter a name for your app password. All spaces is not allowed."
msgstr "Veuillez entrer un nom pour votre mot de passe d’application. Les espaces ne sont pas autorisés."
-#: src/view/com/auth/create/Step2.tsx:206
-msgid "Please enter a phone number that can receive SMS text messages."
-msgstr ""
-
-#: src/view/com/modals/AddAppPasswords.tsx:145
+#: src/view/com/modals/AddAppPasswords.tsx:146
msgid "Please enter a unique name for this App Password or use our randomly generated one."
msgstr "Veuillez saisir un nom unique pour le mot de passe de l’application ou utiliser celui que nous avons généré de manière aléatoire."
-#: src/view/com/auth/create/state.ts:170
-msgid "Please enter the code you received by SMS."
-msgstr ""
-
-#: src/view/com/auth/create/Step2.tsx:282
-msgid "Please enter the verification code sent to {phoneNumberFormatted}."
-msgstr ""
+#: src/components/dialogs/MutedWords.tsx:67
+msgid "Please enter a valid word, tag, or phrase to mute"
+msgstr "Veuillez entrer un mot, un mot-clé ou une phrase valide à masquer"
-#: src/view/com/auth/create/state.ts:146
+#: src/screens/Signup/state.ts:220
msgid "Please enter your email."
msgstr "Veuillez entrer votre e-mail."
-#: src/view/com/modals/DeleteAccount.tsx:191
+#: src/view/com/modals/DeleteAccount.tsx:190
msgid "Please enter your password as well:"
-msgstr "Veuillez également entrer votre mot de passe :"
+msgstr "Veuillez également entrer votre mot de passe :"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:221
+msgid "Please explain why you think this label was incorrectly applied by {0}"
+msgstr ""
#: src/view/com/modals/AppealLabel.tsx:72
#: src/view/com/modals/AppealLabel.tsx:75
-msgid "Please tell us why you think this content warning was incorrectly applied!"
-msgstr "Dites-nous donc pourquoi vous pensez que cet avertissement de contenu a été appliqué à tort !"
+#~ msgid "Please tell us why you think this content warning was incorrectly applied!"
+#~ msgstr "Dites-nous donc pourquoi vous pensez que cet avertissement de contenu a été appliqué à tort !"
#: src/view/com/modals/VerifyEmail.tsx:101
msgid "Please Verify Your Email"
msgstr "Veuillez vérifier votre e-mail"
-#: src/view/com/composer/Composer.tsx:215
+#: src/view/com/composer/Composer.tsx:222
msgid "Please wait for your link card to finish loading"
msgstr "Veuillez patienter le temps que votre carte de lien soit chargée"
#: src/screens/Onboarding/index.tsx:37
msgid "Politics"
-msgstr ""
+msgstr "Politique"
#: src/view/com/modals/SelfLabel.tsx:111
msgid "Porn"
msgstr "Porno"
-#: src/view/com/composer/Composer.tsx:350
-#: src/view/com/composer/Composer.tsx:358
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#~ msgid "Pornography"
+#~ msgstr ""
+
+#: src/view/com/composer/Composer.tsx:367
+#: src/view/com/composer/Composer.tsx:375
msgctxt "action"
msgid "Post"
msgstr "Poster"
-#: src/view/com/post-thread/PostThread.tsx:246
+#: src/view/com/post-thread/PostThread.tsx:292
msgctxt "description"
msgid "Post"
msgstr "Post"
-#: src/view/com/post-thread/PostThreadItem.tsx:174
+#: src/view/com/post-thread/PostThreadItem.tsx:175
msgid "Post by {0}"
msgstr "Post de {0}"
-#: src/Navigation.tsx:172
-#: src/Navigation.tsx:179
-#: src/Navigation.tsx:186
+#: src/Navigation.tsx:176
+#: src/Navigation.tsx:183
+#: src/Navigation.tsx:190
msgid "Post by @{0}"
msgstr "Post de @{0}"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:84
+#: src/view/com/util/forms/PostDropdownBtn.tsx:105
msgid "Post deleted"
msgstr "Post supprimé"
-#: src/view/com/post-thread/PostThread.tsx:398
+#: src/view/com/post-thread/PostThread.tsx:157
msgid "Post hidden"
msgstr "Post caché"
+#: src/components/moderation/ModerationDetailsDialog.tsx:97
+#: src/lib/moderation/useModerationCauseDescription.ts:99
+msgid "Post Hidden by Muted Word"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:100
+#: src/lib/moderation/useModerationCauseDescription.ts:108
+msgid "Post Hidden by You"
+msgstr ""
+
#: src/view/com/composer/select-language/SelectLangBtn.tsx:87
msgid "Post language"
msgstr "Langue du post"
@@ -2840,23 +3439,42 @@ msgstr "Langue du post"
msgid "Post Languages"
msgstr "Langues du post"
-#: src/view/com/post-thread/PostThread.tsx:450
+#: src/view/com/post-thread/PostThread.tsx:152
+#: src/view/com/post-thread/PostThread.tsx:164
msgid "Post not found"
msgstr "Post introuvable"
-#: src/view/screens/Profile.tsx:180
+#: src/components/TagMenu/index.tsx:253
+msgid "posts"
+msgstr "posts"
+
+#: src/view/screens/Profile.tsx:190
msgid "Posts"
msgstr "Posts"
+#: src/components/dialogs/MutedWords.tsx:89
+msgid "Posts can be muted based on their text, their tags, or both."
+msgstr "Les posts peuvent être masqués en fonction de leur texte, de leurs mots-clés ou des deux."
+
#: src/view/com/posts/FeedErrorMessage.tsx:64
msgid "Posts hidden"
msgstr "Posts cachés"
-#: src/view/com/modals/LinkWarning.tsx:46
+#: src/view/com/modals/LinkWarning.tsx:60
msgid "Potentially Misleading Link"
msgstr "Lien potentiellement trompeur"
-#: src/view/com/lightbox/Lightbox.web.tsx:135
+#: src/components/forms/HostingProvider.tsx:45
+msgid "Press to change hosting provider"
+msgstr ""
+
+#: src/components/Error.tsx:74
+#: src/components/Lists.tsx:80
+#: src/screens/Signup/index.tsx:186
+msgid "Press to retry"
+msgstr ""
+
+#: src/view/com/lightbox/Lightbox.web.tsx:150
msgid "Previous image"
msgstr "Image précédente"
@@ -2868,41 +3486,47 @@ msgstr "Langue principale"
msgid "Prioritize Your Follows"
msgstr "Définissez des priorités de vos suivis"
-#: src/view/screens/Settings/index.tsx:632
-#: src/view/shell/desktop/RightNav.tsx:80
+#: src/view/screens/Settings/index.tsx:652
+#: src/view/shell/desktop/RightNav.tsx:72
msgid "Privacy"
msgstr "Vie privée"
-#: src/Navigation.tsx:217
+#: src/Navigation.tsx:231
+#: src/screens/Signup/StepInfo/Policies.tsx:56
#: src/view/screens/PrivacyPolicy.tsx:29
-#: src/view/screens/Settings/index.tsx:891
-#: src/view/shell/Drawer.tsx:262
+#: src/view/screens/Settings/index.tsx:923
+#: src/view/shell/Drawer.tsx:265
msgid "Privacy Policy"
msgstr "Charte de confidentialité"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:198
+#: src/screens/Login/ForgotPasswordForm.tsx:156
msgid "Processing..."
msgstr "Traitement…"
-#: src/view/shell/bottom-bar/BottomBar.tsx:247
-#: src/view/shell/desktop/LeftNav.tsx:415
+#: src/view/screens/DebugMod.tsx:888
+#: src/view/screens/Profile.tsx:342
+msgid "profile"
+msgstr ""
+
+#: src/view/shell/bottom-bar/BottomBar.tsx:260
+#: src/view/shell/desktop/LeftNav.tsx:419
#: src/view/shell/Drawer.tsx:70
-#: src/view/shell/Drawer.tsx:546
-#: src/view/shell/Drawer.tsx:547
+#: src/view/shell/Drawer.tsx:549
+#: src/view/shell/Drawer.tsx:550
msgid "Profile"
msgstr "Profil"
-#: src/view/com/modals/EditProfile.tsx:128
+#: src/view/com/modals/EditProfile.tsx:129
msgid "Profile updated"
msgstr "Profil mis à jour"
-#: src/view/screens/Settings/index.tsx:949
+#: src/view/screens/Settings/index.tsx:981
msgid "Protect your account by verifying your email."
msgstr "Protégez votre compte en vérifiant votre e-mail."
-#: src/screens/Onboarding/StepFinished.tsx:101
+#: src/screens/Onboarding/StepFinished.tsx:105
msgid "Public"
-msgstr ""
+msgstr "Public"
#: src/view/screens/ModerationModlists.tsx:61
msgid "Public, shareable lists of users to mute or block in bulk."
@@ -2912,15 +3536,15 @@ msgstr "Listes publiques et partageables de comptes à masquer ou à bloquer."
msgid "Public, shareable lists which can drive feeds."
msgstr "Les listes publiques et partageables qui peuvent alimenter les fils d’actu."
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish post"
msgstr "Publier le post"
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish reply"
msgstr "Publier la réponse"
-#: src/view/com/modals/Repost.tsx:65
+#: src/view/com/modals/Repost.tsx:66
msgctxt "action"
msgid "Quote post"
msgstr "Citer le post"
@@ -2929,7 +3553,7 @@ msgstr "Citer le post"
msgid "Quote post"
msgstr "Citer le post"
-#: src/view/com/modals/Repost.tsx:70
+#: src/view/com/modals/Repost.tsx:71
msgctxt "action"
msgid "Quote Post"
msgstr "Citer le post"
@@ -2938,10 +3562,14 @@ msgstr "Citer le post"
msgid "Random (aka \"Poster's Roulette\")"
msgstr "Aléatoire"
-#: src/view/com/modals/EditImage.tsx:236
+#: src/view/com/modals/EditImage.tsx:237
msgid "Ratios"
msgstr "Ratios"
+#: src/view/screens/Search/Search.tsx:777
+msgid "Recent Searches"
+msgstr ""
+
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116
msgid "Recommended Feeds"
msgstr "Fils d’actu recommandés"
@@ -2950,35 +3578,50 @@ msgstr "Fils d’actu recommandés"
msgid "Recommended Users"
msgstr "Comptes recommandés"
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/components/dialogs/MutedWords.tsx:286
+#: src/view/com/feeds/FeedSourceCard.tsx:283
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/SelfLabel.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/com/util/UserAvatar.tsx:285
-#: src/view/com/util/UserBanner.tsx:91
+#: src/view/com/posts/FeedErrorMessage.tsx:204
msgid "Remove"
msgstr "Supprimer"
-#: src/view/com/feeds/FeedSourceCard.tsx:106
-msgid "Remove {0} from my feeds?"
-msgstr "Supprimer {0} de mes fils d’actu ?"
+#: src/view/com/feeds/FeedSourceCard.tsx:108
+#~ msgid "Remove {0} from my feeds?"
+#~ msgstr "Supprimer {0} de mes fils d’actu ?"
#: src/view/com/util/AccountDropdownBtn.tsx:22
msgid "Remove account"
msgstr "Supprimer compte"
-#: src/view/com/posts/FeedErrorMessage.tsx:131
-#: src/view/com/posts/FeedErrorMessage.tsx:166
-msgid "Remove feed"
-msgstr "Supprimer fil d’actu"
+#: src/view/com/util/UserAvatar.tsx:358
+msgid "Remove Avatar"
+msgstr ""
-#: src/view/com/feeds/FeedSourceCard.tsx:105
-#: src/view/com/feeds/FeedSourceCard.tsx:167
-#: src/view/com/feeds/FeedSourceCard.tsx:172
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/util/UserBanner.tsx:148
+msgid "Remove Banner"
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:160
+msgid "Remove feed"
+msgstr "Supprimer fil d’actu"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:201
+msgid "Remove feed?"
+msgstr ""
+
+#: src/view/com/feeds/FeedSourceCard.tsx:173
+#: src/view/com/feeds/FeedSourceCard.tsx:233
+#: src/view/screens/ProfileFeed.tsx:335
+#: src/view/screens/ProfileFeed.tsx:341
msgid "Remove from my feeds"
msgstr "Supprimer de mes fils d’actu"
+#: src/view/com/feeds/FeedSourceCard.tsx:278
+msgid "Remove from my feeds?"
+msgstr ""
+
#: src/view/com/composer/photos/Gallery.tsx:167
msgid "Remove image"
msgstr "Supprimer l’image"
@@ -2987,33 +3630,44 @@ msgstr "Supprimer l’image"
msgid "Remove image preview"
msgstr "Supprimer l’aperçu d’image"
-#: src/view/com/modals/Repost.tsx:47
+#: src/components/dialogs/MutedWords.tsx:329
+msgid "Remove mute word from your list"
+msgstr "Supprimer le mot masqué de votre liste"
+
+#: src/view/com/modals/Repost.tsx:48
msgid "Remove repost"
msgstr "Supprimer le repost"
-#: src/view/com/feeds/FeedSourceCard.tsx:173
-msgid "Remove this feed from my feeds?"
-msgstr "Supprimer ce fil d’actu ?"
+#: src/view/com/feeds/FeedSourceCard.tsx:175
+#~ msgid "Remove this feed from my feeds?"
+#~ msgstr "Supprimer ce fil d’actu ?"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:202
+msgid "Remove this feed from your saved feeds"
+msgstr ""
#: src/view/com/posts/FeedErrorMessage.tsx:132
-msgid "Remove this feed from your saved feeds?"
-msgstr "Supprimer ce fil d’actu de vos fils d’actu enregistrés ?"
+#~ msgid "Remove this feed from your saved feeds?"
+#~ msgstr "Supprimer ce fil d’actu de vos fils d’actu enregistrés ?"
#: src/view/com/modals/ListAddRemoveUsers.tsx:199
#: src/view/com/modals/UserAddRemoveLists.tsx:152
msgid "Removed from list"
msgstr "Supprimé de la liste"
-#: src/view/com/feeds/FeedSourceCard.tsx:111
-#: src/view/com/feeds/FeedSourceCard.tsx:178
+#: src/view/com/feeds/FeedSourceCard.tsx:121
msgid "Removed from my feeds"
msgstr "Supprimé de mes fils d’actu"
+#: src/view/screens/ProfileFeed.tsx:209
+msgid "Removed from your feeds"
+msgstr ""
+
#: src/view/com/composer/ExternalEmbed.tsx:71
msgid "Removes default thumbnail from {0}"
msgstr "Supprime la miniature par défaut de {0}"
-#: src/view/screens/Profile.tsx:181
+#: src/view/screens/Profile.tsx:191
msgid "Replies"
msgstr "Réponses"
@@ -3021,45 +3675,71 @@ msgstr "Réponses"
msgid "Replies to this thread are disabled"
msgstr "Les réponses à ce fil de discussion sont désactivées"
-#: src/view/com/composer/Composer.tsx:348
+#: src/view/com/composer/Composer.tsx:365
msgctxt "action"
msgid "Reply"
msgstr "Répondre"
-#: src/view/screens/PreferencesHomeFeed.tsx:144
+#: src/view/screens/PreferencesFollowingFeed.tsx:144
msgid "Reply Filters"
msgstr "Filtres de réponse"
#: src/view/com/post/Post.tsx:166
-#: src/view/com/posts/FeedItem.tsx:287
+#: src/view/com/posts/FeedItem.tsx:280
msgctxt "description"
msgid "Reply to <0/>"
msgstr "Réponse à <0/>"
#: src/view/com/modals/report/Modal.tsx:166
-msgid "Report {collectionName}"
-msgstr "Signaler {collectionName}"
+#~ msgid "Report {collectionName}"
+#~ msgstr "Signaler {collectionName}"
-#: src/view/com/profile/ProfileHeader.tsx:360
+#: src/view/com/profile/ProfileMenu.tsx:319
+#: src/view/com/profile/ProfileMenu.tsx:322
msgid "Report Account"
msgstr "Signaler le compte"
-#: src/view/screens/ProfileFeed.tsx:292
+#: src/components/ReportDialog/index.tsx:49
+msgid "Report dialog"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:352
+#: src/view/screens/ProfileFeed.tsx:354
msgid "Report feed"
msgstr "Signaler le fil d’actu"
-#: src/view/screens/ProfileList.tsx:458
+#: src/view/screens/ProfileList.tsx:429
msgid "Report List"
msgstr "Signaler la liste"
-#: src/view/com/modals/report/SendReportButton.tsx:37
-#: src/view/com/util/forms/PostDropdownBtn.tsx:210
+#: src/view/com/util/forms/PostDropdownBtn.tsx:292
+#: src/view/com/util/forms/PostDropdownBtn.tsx:294
msgid "Report post"
msgstr "Signaler le post"
-#: src/view/com/modals/Repost.tsx:43
-#: src/view/com/modals/Repost.tsx:48
-#: src/view/com/modals/Repost.tsx:53
+#: src/components/ReportDialog/SelectReportOptionView.tsx:42
+msgid "Report this content"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:55
+msgid "Report this feed"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:52
+msgid "Report this list"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:49
+msgid "Report this post"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:46
+msgid "Report this user"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:44
+#: src/view/com/modals/Repost.tsx:49
+#: src/view/com/modals/Repost.tsx:54
#: src/view/com/util/post-ctrls/RepostButton.tsx:61
msgctxt "action"
msgid "Repost"
@@ -3078,15 +3758,15 @@ msgstr "Republier ou citer"
msgid "Reposted By"
msgstr "Republié par"
-#: src/view/com/posts/FeedItem.tsx:207
+#: src/view/com/posts/FeedItem.tsx:197
msgid "Reposted by {0}"
msgstr "Republié par {0}"
-#: src/view/com/posts/FeedItem.tsx:224
+#: src/view/com/posts/FeedItem.tsx:214
msgid "Reposted by <0/>"
msgstr "Republié par <0/>"
-#: src/view/com/notifications/FeedItem.tsx:162
+#: src/view/com/notifications/FeedItem.tsx:166
msgid "reposted your post"
msgstr "a republié votre post"
@@ -3099,61 +3779,58 @@ msgstr "Reposts de ce post"
msgid "Request Change"
msgstr "Demande de modification"
-#: src/view/com/auth/create/Step2.tsx:219
-msgid "Request code"
-msgstr ""
-
-#: src/view/com/modals/ChangePassword.tsx:239
#: src/view/com/modals/ChangePassword.tsx:241
+#: src/view/com/modals/ChangePassword.tsx:243
msgid "Request Code"
-msgstr ""
+msgstr "Demander un code"
-#: src/view/screens/Settings/index.tsx:456
+#: src/view/screens/Settings/index.tsx:475
msgid "Require alt text before posting"
msgstr "Nécessiter un texte alt avant de publier"
-#: src/view/com/auth/create/Step1.tsx:149
+#: src/screens/Signup/StepInfo/index.tsx:69
msgid "Required for this provider"
msgstr "Obligatoire pour cet hébergeur"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:124
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:136
+#: src/view/com/modals/ChangePassword.tsx:185
msgid "Reset code"
msgstr "Réinitialiser le code"
-#: src/view/com/modals/ChangePassword.tsx:190
+#: src/view/com/modals/ChangePassword.tsx:192
msgid "Reset Code"
-msgstr ""
+msgstr "Code de réinitialisation"
#: src/view/screens/Settings/index.tsx:824
-msgid "Reset onboarding"
-msgstr "Réinitialiser le didacticiel"
+#~ msgid "Reset onboarding"
+#~ msgstr "Réinitialiser le didacticiel"
-#: src/view/screens/Settings/index.tsx:827
+#: src/view/screens/Settings/index.tsx:858
+#: src/view/screens/Settings/index.tsx:861
msgid "Reset onboarding state"
msgstr "Réinitialisation du didacticiel"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:104
+#: src/screens/Login/ForgotPasswordForm.tsx:86
msgid "Reset password"
msgstr "Réinitialiser mot de passe"
#: src/view/screens/Settings/index.tsx:814
-msgid "Reset preferences"
-msgstr "Réinitialiser les préférences"
+#~ msgid "Reset preferences"
+#~ msgstr "Réinitialiser les préférences"
-#: src/view/screens/Settings/index.tsx:817
+#: src/view/screens/Settings/index.tsx:848
+#: src/view/screens/Settings/index.tsx:851
msgid "Reset preferences state"
msgstr "Réinitialiser l’état des préférences"
-#: src/view/screens/Settings/index.tsx:825
+#: src/view/screens/Settings/index.tsx:859
msgid "Resets the onboarding state"
msgstr "Réinitialise l’état d’accueil"
-#: src/view/screens/Settings/index.tsx:815
+#: src/view/screens/Settings/index.tsx:849
msgid "Resets the preferences state"
msgstr "Réinitialise l’état des préférences"
-#: src/view/com/auth/login/LoginForm.tsx:269
+#: src/screens/Login/LoginForm.tsx:235
msgid "Retries login"
msgstr "Réessaye la connection"
@@ -3162,105 +3839,134 @@ msgstr "Réessaye la connection"
msgid "Retries the last action, which errored out"
msgstr "Réessaye la dernière action, qui a échoué"
-#: src/screens/Onboarding/StepInterests/index.tsx:221
-#: src/screens/Onboarding/StepInterests/index.tsx:224
-#: src/view/com/auth/create/CreateAccount.tsx:170
-#: src/view/com/auth/create/CreateAccount.tsx:175
-#: src/view/com/auth/create/Step2.tsx:255
-#: src/view/com/auth/login/LoginForm.tsx:268
-#: src/view/com/auth/login/LoginForm.tsx:271
+#: src/components/Error.tsx:79
+#: src/components/Lists.tsx:91
+#: src/screens/Login/LoginForm.tsx:234
+#: src/screens/Login/LoginForm.tsx:241
+#: src/screens/Onboarding/StepInterests/index.tsx:225
+#: src/screens/Onboarding/StepInterests/index.tsx:228
+#: src/screens/Signup/index.tsx:193
#: src/view/com/util/error/ErrorMessage.tsx:55
#: src/view/com/util/error/ErrorScreen.tsx:72
msgid "Retry"
msgstr "Réessayer"
-#: src/view/com/auth/create/Step2.tsx:247
-msgid "Retry."
-msgstr ""
-
-#: src/view/screens/ProfileList.tsx:898
+#: src/components/Error.tsx:86
+#: src/view/screens/ProfileList.tsx:917
msgid "Return to previous page"
msgstr "Retourne à la page précédente"
-#: src/view/shell/desktop/RightNav.tsx:55
-msgid "SANDBOX. Posts and accounts are not permanent."
-msgstr "SANDBOX. Les posts et les comptes ne sont pas permanents."
+#: src/view/screens/NotFound.tsx:59
+msgid "Returns to home page"
+msgstr ""
-#: src/view/com/lightbox/Lightbox.tsx:132
-#: src/view/com/modals/CreateOrEditList.tsx:345
-msgctxt "action"
+#: src/view/screens/NotFound.tsx:58
+#: src/view/screens/ProfileFeed.tsx:113
+msgid "Returns to previous page"
+msgstr ""
+
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/view/com/modals/ChangeHandle.tsx:174
+#: src/view/com/modals/CreateOrEditList.tsx:338
+#: src/view/com/modals/EditProfile.tsx:225
msgid "Save"
msgstr "Enregistrer"
-#: src/view/com/modals/BirthDateSettings.tsx:94
-#: src/view/com/modals/BirthDateSettings.tsx:97
-#: src/view/com/modals/ChangeHandle.tsx:173
-#: src/view/com/modals/CreateOrEditList.tsx:337
-#: src/view/com/modals/EditProfile.tsx:224
-#: src/view/screens/ProfileFeed.tsx:345
+#: src/view/com/lightbox/Lightbox.tsx:132
+#: src/view/com/modals/CreateOrEditList.tsx:346
+msgctxt "action"
msgid "Save"
msgstr "Enregistrer"
-#: src/view/com/modals/AltImage.tsx:130
+#: src/view/com/modals/AltImage.tsx:131
msgid "Save alt text"
msgstr "Enregistrer le texte alt"
-#: src/view/com/modals/EditProfile.tsx:232
+#: src/components/dialogs/BirthDateSettings.tsx:119
+msgid "Save birthday"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:233
msgid "Save Changes"
msgstr "Enregistrer les modifications"
-#: src/view/com/modals/ChangeHandle.tsx:170
+#: src/view/com/modals/ChangeHandle.tsx:171
msgid "Save handle change"
msgstr "Enregistrer le changement de pseudo"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:144
+#: src/view/com/modals/crop-image/CropImage.web.tsx:145
msgid "Save image crop"
msgstr "Enregistrer le recadrage de l’image"
+#: src/view/screens/ProfileFeed.tsx:336
+#: src/view/screens/ProfileFeed.tsx:342
+msgid "Save to my feeds"
+msgstr ""
+
#: src/view/screens/SavedFeeds.tsx:122
msgid "Saved Feeds"
msgstr "Fils d’actu enregistrés"
-#: src/view/com/modals/EditProfile.tsx:225
+#: src/view/com/lightbox/Lightbox.tsx:81
+msgid "Saved to your camera roll."
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:213
+msgid "Saved to your feeds"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:226
msgid "Saves any changes to your profile"
msgstr "Enregistre toutes les modifications apportées à votre profil"
-#: src/view/com/modals/ChangeHandle.tsx:171
+#: src/view/com/modals/ChangeHandle.tsx:172
msgid "Saves handle change to {handle}"
msgstr "Enregistre le changement de pseudo en {handle}"
+#: src/view/com/modals/crop-image/CropImage.web.tsx:146
+msgid "Saves image crop settings"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:36
msgid "Science"
-msgstr ""
+msgstr "Science"
-#: src/view/screens/ProfileList.tsx:854
+#: src/view/screens/ProfileList.tsx:873
msgid "Scroll to top"
msgstr "Remonter en haut"
-#: src/Navigation.tsx:437
-#: src/view/com/auth/LoggedOut.tsx:122
+#: src/Navigation.tsx:459
+#: src/view/com/auth/LoggedOut.tsx:123
#: src/view/com/modals/ListAddRemoveUsers.tsx:75
#: src/view/com/util/forms/SearchInput.tsx:67
#: src/view/com/util/forms/SearchInput.tsx:79
-#: src/view/screens/Search/Search.tsx:418
-#: src/view/screens/Search/Search.tsx:645
-#: src/view/screens/Search/Search.tsx:663
-#: src/view/shell/bottom-bar/BottomBar.tsx:159
-#: src/view/shell/desktop/LeftNav.tsx:324
-#: src/view/shell/desktop/Search.tsx:214
-#: src/view/shell/desktop/Search.tsx:223
-#: src/view/shell/Drawer.tsx:362
-#: src/view/shell/Drawer.tsx:363
+#: src/view/screens/Search/Search.tsx:421
+#: src/view/screens/Search/Search.tsx:670
+#: src/view/screens/Search/Search.tsx:688
+#: src/view/shell/bottom-bar/BottomBar.tsx:169
+#: src/view/shell/desktop/LeftNav.tsx:328
+#: src/view/shell/desktop/Search.tsx:215
+#: src/view/shell/desktop/Search.tsx:224
+#: src/view/shell/Drawer.tsx:365
+#: src/view/shell/Drawer.tsx:366
msgid "Search"
msgstr "Recherche"
-#: src/view/screens/Search/Search.tsx:712
-#: src/view/shell/desktop/Search.tsx:255
+#: src/view/screens/Search/Search.tsx:737
+#: src/view/shell/desktop/Search.tsx:256
msgid "Search for \"{query}\""
-msgstr ""
+msgstr "Recherche de « {query} »"
+
+#: src/components/TagMenu/index.tsx:145
+msgid "Search for all posts by @{authorHandle} with tag {displayTag}"
+msgstr "Rechercher tous les posts de @{authorHandle} avec le mot-clé {displayTag}"
+
+#: src/components/TagMenu/index.tsx:94
+msgid "Search for all posts with tag {displayTag}"
+msgstr "Rechercher tous les posts avec le mot-clé {displayTag}"
-#: src/view/com/auth/LoggedOut.tsx:104
#: src/view/com/auth/LoggedOut.tsx:105
+#: src/view/com/auth/LoggedOut.tsx:106
#: src/view/com/modals/ListAddRemoveUsers.tsx:70
msgid "Search for users"
msgstr "Rechercher des comptes"
@@ -3269,11 +3975,27 @@ msgstr "Rechercher des comptes"
msgid "Security Step Required"
msgstr "Étape de sécurité requise"
+#: src/components/TagMenu/index.web.tsx:66
+msgid "See {truncatedTag} posts"
+msgstr "Voir les posts {truncatedTag}"
+
+#: src/components/TagMenu/index.web.tsx:83
+msgid "See {truncatedTag} posts by user"
+msgstr "Voir les posts {truncatedTag} de ce compte"
+
+#: src/components/TagMenu/index.tsx:128
+msgid "See <0>{displayTag}0> posts"
+msgstr "Voir les posts <0>{displayTag}0>"
+
+#: src/components/TagMenu/index.tsx:187
+msgid "See <0>{displayTag}0> posts by this user"
+msgstr "Voir les posts <0>{displayTag}0> de ce compte"
+
#: src/view/screens/SavedFeeds.tsx:163
msgid "See this guide"
msgstr "Voir ce guide"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:39
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:40
msgid "See what's next"
msgstr "Voir la suite"
@@ -3281,186 +4003,243 @@ msgstr "Voir la suite"
msgid "Select {item}"
msgstr "Sélectionner {item}"
-#: src/view/com/modals/ServerInput.tsx:75
-#~ msgid "Select Bluesky Social"
-#~ msgstr "Sélectionner Bluesky Social"
+#: src/screens/Login/ChooseAccountForm.tsx:61
+msgid "Select account"
+msgstr ""
-#: src/view/com/auth/login/Login.tsx:117
+#: src/screens/Login/index.tsx:120
msgid "Select from an existing account"
msgstr "Sélectionner un compte existant"
+#: src/view/screens/LanguageSettings.tsx:299
+msgid "Select languages"
+msgstr ""
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:30
+msgid "Select moderator"
+msgstr ""
+
#: src/view/com/util/Selector.tsx:107
msgid "Select option {i} of {numItems}"
msgstr "Sélectionne l’option {i} sur {numItems}"
-#: src/view/com/auth/create/Step1.tsx:99
-#: src/view/com/auth/login/LoginForm.tsx:150
-msgid "Select service"
-msgstr "Sélectionner un service"
+#: src/view/com/auth/create/Step1.tsx:96
+#: src/view/com/auth/login/LoginForm.tsx:153
+#~ msgid "Select service"
+#~ msgstr "Sélectionner un service"
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:52
msgid "Select some accounts below to follow"
+msgstr "Sélectionnez quelques comptes à suivre ci-dessous"
+
+#: src/components/ReportDialog/SubmitView.tsx:135
+msgid "Select the moderation service(s) to report to"
msgstr ""
#: src/view/com/auth/server-input/index.tsx:82
msgid "Select the service that hosts your data."
-msgstr ""
-
-#: src/screens/Onboarding/StepModeration/index.tsx:49
-#~ msgid "Select the types of content that you want to see (or not see), and we'll handle the rest."
-#~ msgstr ""
+msgstr "Sélectionnez le service qui héberge vos données."
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:90
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:100
msgid "Select topical feeds to follow from the list below"
-msgstr ""
+msgstr "Sélectionnez les fils d’actu thématiques à suivre dans la liste ci-dessous"
-#: src/screens/Onboarding/StepModeration/index.tsx:75
+#: src/screens/Onboarding/StepModeration/index.tsx:63
msgid "Select what you want to see (or not see), and we’ll handle the rest."
-msgstr ""
+msgstr "Sélectionnez ce que vous voulez voir (ou ne pas voir), et nous nous occupons du reste."
#: src/view/screens/LanguageSettings.tsx:281
msgid "Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown."
msgstr "Sélectionnez les langues que vous souhaitez voir figurer dans les fils d’actu que vous suivez. Si aucune langue n’est sélectionnée, toutes les langues seront affichées."
#: src/view/screens/LanguageSettings.tsx:98
-msgid "Select your app language for the default text to display in the app"
-msgstr "Sélectionnez la langue de votre application à afficher par défaut"
+#~ msgid "Select your app language for the default text to display in the app"
+#~ msgstr "Sélectionnez la langue de votre application à afficher par défaut"
-#: src/screens/Onboarding/StepInterests/index.tsx:196
-msgid "Select your interests from the options below"
+#: src/view/screens/LanguageSettings.tsx:98
+msgid "Select your app language for the default text to display in the app."
msgstr ""
-#: src/view/com/auth/create/Step2.tsx:155
-msgid "Select your phone's country"
+#: src/screens/Signup/StepInfo/index.tsx:133
+msgid "Select your date of birth"
msgstr ""
+#: src/screens/Onboarding/StepInterests/index.tsx:200
+msgid "Select your interests from the options below"
+msgstr "Sélectionnez vos centres d’intérêt parmi les options ci-dessous"
+
#: src/view/screens/LanguageSettings.tsx:190
msgid "Select your preferred language for translations in your feed."
msgstr "Sélectionnez votre langue préférée pour traduire votre fils d’actu."
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:116
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:117
msgid "Select your primary algorithmic feeds"
-msgstr ""
+msgstr "Sélectionnez vos principaux fils d’actu algorithmiques"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:142
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:133
msgid "Select your secondary algorithmic feeds"
-msgstr ""
+msgstr "Sélectionnez vos fils d’actu algorithmiques secondaires"
#: src/view/com/modals/VerifyEmail.tsx:202
#: src/view/com/modals/VerifyEmail.tsx:204
msgid "Send Confirmation Email"
msgstr "Envoyer un e-mail de confirmation"
-#: src/view/com/modals/DeleteAccount.tsx:131
+#: src/view/com/modals/DeleteAccount.tsx:130
msgid "Send email"
msgstr "Envoyer e-mail"
-#: src/view/com/modals/DeleteAccount.tsx:144
+#: src/view/com/modals/DeleteAccount.tsx:143
msgctxt "action"
msgid "Send Email"
msgstr "Envoyer l’e-mail"
-#: src/view/shell/Drawer.tsx:295
-#: src/view/shell/Drawer.tsx:316
+#: src/view/shell/Drawer.tsx:298
+#: src/view/shell/Drawer.tsx:319
msgid "Send feedback"
msgstr "Envoyer des commentaires"
+#: src/components/ReportDialog/SubmitView.tsx:214
+#: src/components/ReportDialog/SubmitView.tsx:218
+msgid "Send report"
+msgstr ""
+
#: src/view/com/modals/report/SendReportButton.tsx:45
-msgid "Send Report"
-msgstr "Envoyer le rapport"
+#~ msgid "Send Report"
+#~ msgstr "Envoyer le rapport"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:44
+msgid "Send report to {0}"
+msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:133
+#: src/view/com/modals/DeleteAccount.tsx:132
msgid "Sends email with confirmation code for account deletion"
msgstr "Envoie un e-mail avec le code de confirmation pour la suppression du compte"
-#: src/view/com/auth/server-input/index.tsx:110
+#: src/view/com/auth/server-input/index.tsx:114
msgid "Server address"
-msgstr ""
+msgstr "Adresse du serveur"
#: src/view/com/modals/ContentFilteringSettings.tsx:311
-msgid "Set {value} for {labelGroup} content moderation policy"
-msgstr "Choisis {value} pour la politique de modération de contenu {labelGroup}"
+#~ msgid "Set {value} for {labelGroup} content moderation policy"
+#~ msgstr "Choisis {value} pour la politique de modération de contenu {labelGroup}"
#: src/view/com/modals/ContentFilteringSettings.tsx:160
#: src/view/com/modals/ContentFilteringSettings.tsx:179
-msgctxt "action"
-msgid "Set Age"
-msgstr "Enregistrer l’âge"
+#~ msgctxt "action"
+#~ msgid "Set Age"
+#~ msgstr "Enregistrer l’âge"
+
+#: src/screens/Moderation/index.tsx:304
+msgid "Set birthdate"
+msgstr ""
#: src/view/screens/Settings/index.tsx:488
-msgid "Set color theme to dark"
-msgstr "Change le thème de couleur en sombre"
+#~ msgid "Set color theme to dark"
+#~ msgstr "Change le thème de couleur en sombre"
#: src/view/screens/Settings/index.tsx:481
-msgid "Set color theme to light"
-msgstr "Change le thème de couleur en clair"
+#~ msgid "Set color theme to light"
+#~ msgstr "Change le thème de couleur en clair"
#: src/view/screens/Settings/index.tsx:475
-msgid "Set color theme to system setting"
-msgstr "Change le thème de couleur en fonction du paramètre système"
+#~ msgid "Set color theme to system setting"
+#~ msgstr "Change le thème de couleur en fonction du paramètre système"
#: src/view/screens/Settings/index.tsx:514
-msgid "Set dark theme to the dark theme"
-msgstr ""
+#~ msgid "Set dark theme to the dark theme"
+#~ msgstr "Choisir le thème le plus sombre comme thème sombre"
#: src/view/screens/Settings/index.tsx:507
-msgid "Set dark theme to the dim theme"
-msgstr ""
+#~ msgid "Set dark theme to the dim theme"
+#~ msgstr "Choisir le thème atténué comme thème sombre"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:104
+#: src/screens/Login/SetNewPasswordForm.tsx:102
msgid "Set new password"
msgstr "Définir un nouveau mot de passe"
-#: src/view/com/auth/create/Step1.tsx:221
-msgid "Set password"
-msgstr "Définit le mot de passe"
+#: src/view/com/auth/create/Step1.tsx:202
+#~ msgid "Set password"
+#~ msgstr "Définit le mot de passe"
-#: src/view/screens/PreferencesHomeFeed.tsx:225
+#: src/view/screens/PreferencesFollowingFeed.tsx:225
msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible."
-msgstr "Choisissez « Non » pour cacher toutes les citations sur votre fils d’actu. Les reposts seront toujours visibles."
+msgstr "Choisissez « Non » pour cacher toutes les citations sur votre fils d’actu. Les reposts seront toujours visibles."
-#: src/view/screens/PreferencesHomeFeed.tsx:122
+#: src/view/screens/PreferencesFollowingFeed.tsx:122
msgid "Set this setting to \"No\" to hide all replies from your feed."
-msgstr "Choisissez « Non » pour cacher toutes les réponses dans votre fils d’actu."
+msgstr "Choisissez « Non » pour cacher toutes les réponses dans votre fils d’actu."
-#: src/view/screens/PreferencesHomeFeed.tsx:191
+#: src/view/screens/PreferencesFollowingFeed.tsx:191
msgid "Set this setting to \"No\" to hide all reposts from your feed."
-msgstr "Choisissez « Non » pour cacher toutes les reposts de votre fils d’actu."
+msgstr "Choisissez « Non » pour cacher toutes les reposts de votre fils d’actu."
#: src/view/screens/PreferencesThreads.tsx:122
msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature."
-msgstr "Choisissez « Oui » pour afficher les réponses dans un fil de discussion. C’est une fonctionnalité expérimentale."
+msgstr "Choisissez « Oui » pour afficher les réponses dans un fil de discussion. C’est une fonctionnalité expérimentale."
-#: src/view/screens/PreferencesHomeFeed.tsx:261
-msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
-msgstr "Choisissez « Oui » pour afficher des échantillons de vos fils d’actu enregistrés dans votre fils d’actu suivant. C’est une fonctionnalité expérimentale."
+#: src/view/screens/PreferencesFollowingFeed.tsx:261
+msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your Following feed. This is an experimental feature."
+msgstr "Choisissez « Oui » pour afficher des échantillons de vos fils d’actu enregistrés dans votre fil d’actu « Following ». C’est une fonctionnalité expérimentale."
-#: src/screens/Onboarding/Layout.tsx:50
+#: src/screens/Onboarding/Layout.tsx:48
msgid "Set up your account"
-msgstr ""
+msgstr "Créez votre compte"
-#: src/view/com/modals/ChangeHandle.tsx:266
+#: src/view/com/modals/ChangeHandle.tsx:267
msgid "Sets Bluesky username"
msgstr "Définit le pseudo Bluesky"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:157
+#: src/view/screens/Settings/index.tsx:507
+msgid "Sets color theme to dark"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:500
+msgid "Sets color theme to light"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:494
+msgid "Sets color theme to system setting"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:533
+msgid "Sets dark theme to the dark theme"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:526
+msgid "Sets dark theme to the dim theme"
+msgstr ""
+
+#: src/screens/Login/ForgotPasswordForm.tsx:113
msgid "Sets email for password reset"
msgstr "Définit l’e-mail pour la réinitialisation du mot de passe"
#: src/view/com/auth/login/ForgotPasswordForm.tsx:122
-msgid "Sets hosting provider for password reset"
-msgstr "Définit l’hébergeur pour la réinitialisation du mot de passe"
-
-#: src/view/com/auth/create/Step1.tsx:100
-#: src/view/com/auth/login/LoginForm.tsx:151
-msgid "Sets server for the Bluesky client"
-msgstr "Définit le serveur pour le client Bluesky"
-
-#: src/Navigation.tsx:135
-#: src/view/screens/Settings/index.tsx:294
-#: src/view/shell/desktop/LeftNav.tsx:433
-#: src/view/shell/Drawer.tsx:567
-#: src/view/shell/Drawer.tsx:568
+#~ msgid "Sets hosting provider for password reset"
+#~ msgstr "Définit l’hébergeur pour la réinitialisation du mot de passe"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:124
+msgid "Sets image aspect ratio to square"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:114
+msgid "Sets image aspect ratio to tall"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:104
+msgid "Sets image aspect ratio to wide"
+msgstr ""
+
+#: src/view/com/auth/create/Step1.tsx:97
+#: src/view/com/auth/login/LoginForm.tsx:154
+#~ msgid "Sets server for the Bluesky client"
+#~ msgstr "Définit le serveur pour le client Bluesky"
+
+#: src/Navigation.tsx:139
+#: src/view/screens/Settings/index.tsx:313
+#: src/view/shell/desktop/LeftNav.tsx:437
+#: src/view/shell/Drawer.tsx:570
+#: src/view/shell/Drawer.tsx:571
msgid "Settings"
msgstr "Paramètres"
@@ -3468,72 +4247,105 @@ msgstr "Paramètres"
msgid "Sexual activity or erotic nudity."
msgstr "Activité sexuelle ou nudité érotique."
+#: src/lib/moderation/useGlobalLabelStrings.ts:38
+msgid "Sexually Suggestive"
+msgstr ""
+
#: src/view/com/lightbox/Lightbox.tsx:141
msgctxt "action"
msgid "Share"
msgstr "Partager"
-#: src/view/com/profile/ProfileHeader.tsx:294
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
-#: src/view/screens/ProfileList.tsx:417
+#: src/view/com/profile/ProfileMenu.tsx:215
+#: src/view/com/profile/ProfileMenu.tsx:224
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:235
+#: src/view/screens/ProfileList.tsx:388
msgid "Share"
msgstr "Partager"
-#: src/view/screens/ProfileFeed.tsx:304
+#: src/view/com/profile/ProfileMenu.tsx:373
+#: src/view/com/util/forms/PostDropdownBtn.tsx:347
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:251
+msgid "Share anyway"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:362
+#: src/view/screens/ProfileFeed.tsx:364
msgid "Share feed"
msgstr "Partager le fil d’actu"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:43
-#: src/view/com/modals/ContentFilteringSettings.tsx:266
-#: src/view/com/util/moderation/ContentHider.tsx:107
-#: src/view/com/util/moderation/PostHider.tsx:108
-#: src/view/screens/Settings/index.tsx:344
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
+msgid "Share Link"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:92
+msgid "Shares the linked website"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:136
+#: src/components/moderation/PostHider.tsx:107
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:54
+#: src/view/screens/Settings/index.tsx:363
msgid "Show"
msgstr "Afficher"
-#: src/view/screens/PreferencesHomeFeed.tsx:68
+#: src/view/screens/PreferencesFollowingFeed.tsx:68
msgid "Show all replies"
msgstr "Afficher toutes les réponses"
-#: src/view/com/util/moderation/ScreenHider.tsx:132
+#: src/components/moderation/ScreenHider.tsx:169
+#: src/components/moderation/ScreenHider.tsx:172
msgid "Show anyway"
msgstr "Afficher quand même"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:27
+#: src/lib/moderation/useLabelBehaviorDescription.ts:63
+msgid "Show badge"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:61
+msgid "Show badge and filter from feeds"
+msgstr ""
+
#: src/view/com/modals/EmbedConsent.tsx:87
-msgid "Show embeds from {0}"
-msgstr "Afficher les intégrations de {0}"
+#~ msgid "Show embeds from {0}"
+#~ msgstr "Afficher les intégrations de {0}"
-#: src/view/com/profile/ProfileHeader.tsx:458
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:200
msgid "Show follows similar to {0}"
msgstr "Afficher les suivis similaires à {0}"
-#: src/view/com/post-thread/PostThreadItem.tsx:539
-#: src/view/com/post/Post.tsx:197
-#: src/view/com/posts/FeedItem.tsx:363
+#: src/view/com/post-thread/PostThreadItem.tsx:507
+#: src/view/com/post/Post.tsx:201
+#: src/view/com/posts/FeedItem.tsx:355
msgid "Show More"
msgstr "Voir plus"
-#: src/view/screens/PreferencesHomeFeed.tsx:258
+#: src/view/screens/PreferencesFollowingFeed.tsx:258
msgid "Show Posts from My Feeds"
msgstr "Afficher les posts de mes fils d’actu"
-#: src/view/screens/PreferencesHomeFeed.tsx:222
+#: src/view/screens/PreferencesFollowingFeed.tsx:222
msgid "Show Quote Posts"
msgstr "Afficher les citations"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:118
+#: src/screens/Onboarding/StepFollowingFeed.tsx:119
msgid "Show quote-posts in Following feed"
-msgstr ""
+msgstr "Afficher les citations dans le fil d’actu « Following »"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:134
+#: src/screens/Onboarding/StepFollowingFeed.tsx:135
msgid "Show quotes in Following"
-msgstr ""
+msgstr "Afficher les citations dans le fil d’actu « Following »"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:94
+#: src/screens/Onboarding/StepFollowingFeed.tsx:95
msgid "Show re-posts in Following feed"
-msgstr ""
+msgstr "Afficher les reposts dans le fil d’actu « Following »"
-#: src/view/screens/PreferencesHomeFeed.tsx:119
+#: src/view/screens/PreferencesFollowingFeed.tsx:119
msgid "Show Replies"
msgstr "Afficher les réponses"
@@ -3541,87 +4353,98 @@ msgstr "Afficher les réponses"
msgid "Show replies by people you follow before all other replies."
msgstr "Afficher les réponses des personnes que vous suivez avant toutes les autres réponses."
-#: src/screens/Onboarding/StepFollowingFeed.tsx:86
+#: src/screens/Onboarding/StepFollowingFeed.tsx:87
msgid "Show replies in Following"
-msgstr ""
+msgstr "Afficher les réponses dans le fil d’actu « Following »"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:70
+#: src/screens/Onboarding/StepFollowingFeed.tsx:71
msgid "Show replies in Following feed"
-msgstr ""
+msgstr "Afficher les réponses dans le fil d’actu « Following »"
-#: src/view/screens/PreferencesHomeFeed.tsx:70
+#: src/view/screens/PreferencesFollowingFeed.tsx:70
msgid "Show replies with at least {value} {0}"
msgstr "Afficher les réponses avec au moins {value} {0}"
-#: src/view/screens/PreferencesHomeFeed.tsx:188
+#: src/view/screens/PreferencesFollowingFeed.tsx:188
msgid "Show Reposts"
msgstr "Afficher les reposts"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:110
+#: src/screens/Onboarding/StepFollowingFeed.tsx:111
msgid "Show reposts in Following"
-msgstr ""
+msgstr "Afficher les reposts dans le fil d’actu « Following »"
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:68
+#: src/components/moderation/PostHider.tsx:64
msgid "Show the content"
msgstr "Afficher le contenu"
-#: src/view/com/notifications/FeedItem.tsx:346
+#: src/view/com/notifications/FeedItem.tsx:351
msgid "Show users"
msgstr "Afficher les comptes"
-#: src/view/com/profile/ProfileHeader.tsx:461
-msgid "Shows a list of users similar to this user."
-msgstr "Affiche une liste de comptes similaires à ce compte."
+#: src/lib/moderation/useLabelBehaviorDescription.ts:58
+msgid "Show warning"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:56
+msgid "Show warning and filter from feeds"
+msgstr ""
+
+#: src/view/com/profile/ProfileHeader.tsx:462
+#~ msgid "Shows a list of users similar to this user."
+#~ msgstr "Affiche une liste de comptes similaires à ce compte."
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:124
-#: src/view/com/profile/ProfileHeader.tsx:505
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:130
msgid "Shows posts from {0} in your feed"
msgstr "Affiche les posts de {0} dans votre fil d’actu"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:70
-#: src/view/com/auth/login/Login.tsx:98
-#: src/view/com/auth/SplashScreen.tsx:54
-#: src/view/shell/bottom-bar/BottomBar.tsx:285
-#: src/view/shell/bottom-bar/BottomBar.tsx:286
-#: src/view/shell/bottom-bar/BottomBar.tsx:288
+#: src/screens/Login/index.tsx:100
+#: src/screens/Login/index.tsx:119
+#: src/screens/Login/LoginForm.tsx:131
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:73
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:83
+#: src/view/com/auth/SplashScreen.tsx:81
+#: src/view/com/auth/SplashScreen.tsx:90
+#: src/view/com/auth/SplashScreen.web.tsx:110
+#: src/view/com/auth/SplashScreen.web.tsx:119
+#: src/view/shell/bottom-bar/BottomBar.tsx:300
+#: src/view/shell/bottom-bar/BottomBar.tsx:301
+#: src/view/shell/bottom-bar/BottomBar.tsx:303
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:178
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:179
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:181
#: src/view/shell/NavSignupCard.tsx:58
#: src/view/shell/NavSignupCard.tsx:59
+#: src/view/shell/NavSignupCard.tsx:61
msgid "Sign in"
msgstr "Connexion"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:78
-#: src/view/com/auth/SplashScreen.tsx:57
-#: src/view/com/auth/SplashScreen.web.tsx:87
-msgid "Sign In"
-msgstr "Connexion"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:82
+#: src/view/com/auth/SplashScreen.tsx:86
+#: src/view/com/auth/SplashScreen.web.tsx:91
+#~ msgid "Sign In"
+#~ msgstr "Connexion"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:44
+#: src/components/AccountList.tsx:109
msgid "Sign in as {0}"
msgstr "Se connecter en tant que {0}"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:118
-#: src/view/com/auth/login/Login.tsx:116
+#: src/screens/Login/ChooseAccountForm.tsx:64
msgid "Sign in as..."
msgstr "Se connecter en tant que…"
-#: src/view/com/auth/login/LoginForm.tsx:137
-msgid "Sign into"
-msgstr "Se connecter à"
+#: src/view/com/auth/login/LoginForm.tsx:140
+#~ msgid "Sign into"
+#~ msgstr "Se connecter à"
-#: src/view/com/modals/SwitchAccount.tsx:64
-#: src/view/com/modals/SwitchAccount.tsx:69
-#: src/view/screens/Settings/index.tsx:100
-#: src/view/screens/Settings/index.tsx:103
+#: src/view/screens/Settings/index.tsx:107
+#: src/view/screens/Settings/index.tsx:110
msgid "Sign out"
msgstr "Déconnexion"
-#: src/view/shell/bottom-bar/BottomBar.tsx:275
-#: src/view/shell/bottom-bar/BottomBar.tsx:276
-#: src/view/shell/bottom-bar/BottomBar.tsx:278
+#: src/view/shell/bottom-bar/BottomBar.tsx:290
+#: src/view/shell/bottom-bar/BottomBar.tsx:291
+#: src/view/shell/bottom-bar/BottomBar.tsx:293
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:168
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:169
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:171
@@ -3635,51 +4458,50 @@ msgstr "S’inscrire"
msgid "Sign up or sign in to join the conversation"
msgstr "S’inscrire ou se connecter pour participer à la conversation"
-#: src/view/com/util/moderation/ScreenHider.tsx:76
+#: src/components/moderation/ScreenHider.tsx:97
+#: src/lib/moderation/useGlobalLabelStrings.ts:28
msgid "Sign-in Required"
msgstr "Connexion requise"
-#: src/view/screens/Settings/index.tsx:355
+#: src/view/screens/Settings/index.tsx:374
msgid "Signed in as"
msgstr "Connecté en tant que"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:103
+#: src/screens/Login/ChooseAccountForm.tsx:48
msgid "Signed in as @{0}"
msgstr "Connecté en tant que @{0}"
-#: src/view/com/modals/SwitchAccount.tsx:66
-msgid "Signs {0} out of Bluesky"
-msgstr "Déconnecte {0} de Bluesky"
+#: src/view/com/modals/SwitchAccount.tsx:70
+#~ msgid "Signs {0} out of Bluesky"
+#~ msgstr "Déconnecte {0} de Bluesky"
-#: src/screens/Onboarding/StepInterests/index.tsx:235
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:195
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:33
+#: src/screens/Onboarding/StepInterests/index.tsx:239
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:203
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:35
msgid "Skip"
msgstr "Ignorer"
-#: src/screens/Onboarding/StepInterests/index.tsx:232
+#: src/screens/Onboarding/StepInterests/index.tsx:236
msgid "Skip this flow"
-msgstr ""
-
-#: src/view/com/auth/create/Step2.tsx:82
-msgid "SMS verification"
-msgstr ""
+msgstr "Passer cette étape"
#: src/screens/Onboarding/index.tsx:40
msgid "Software Dev"
-msgstr ""
+msgstr "Développement de logiciels"
-#: src/view/com/modals/ProfilePreview.tsx:62
-#~ msgid "Something went wrong and we're not sure what."
-#~ msgstr "Quelque chose n’a pas marché, mais on ne sait pas trop quoi."
+#: src/components/ReportDialog/index.tsx:59
+#: src/screens/Moderation/index.tsx:114
+#: src/screens/Profile/Sections/Labels.tsx:76
+msgid "Something went wrong, please try again."
+msgstr ""
-#: src/view/com/modals/Waitlist.tsx:51
-msgid "Something went wrong. Check your email and try again."
-msgstr "Quelque chose n’a pas marché. Vérifiez vos e-mails et réessayez."
+#: src/components/Lists.tsx:203
+#~ msgid "Something went wrong!"
+#~ msgstr "Quelque chose n’a pas marché !"
-#: src/App.native.tsx:61
+#: src/App.native.tsx:66
msgid "Sorry! Your session expired. Please log in again."
-msgstr "Désolé ! Votre session a expiré. Essayez de vous reconnecter."
+msgstr "Désolé ! Votre session a expiré. Essayez de vous reconnecter."
#: src/view/screens/PreferencesThreads.tsx:69
msgid "Sort Replies"
@@ -3687,59 +4509,84 @@ msgstr "Trier les réponses"
#: src/view/screens/PreferencesThreads.tsx:72
msgid "Sort replies to the same post by:"
-msgstr "Trier les réponses au même post par :"
+msgstr "Trier les réponses au même post par :"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:146
+msgid "Source:"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:65
+msgid "Spam"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:53
+msgid "Spam; excessive mentions or replies"
+msgstr ""
#: src/screens/Onboarding/index.tsx:30
msgid "Sports"
-msgstr ""
+msgstr "Sports"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:122
+#: src/view/com/modals/crop-image/CropImage.web.tsx:123
msgid "Square"
msgstr "Carré"
-#: src/view/com/modals/ServerInput.tsx:62
-#~ msgid "Staging"
-#~ msgstr "Serveur de test"
-
-#: src/view/screens/Settings/index.tsx:871
+#: src/view/screens/Settings/index.tsx:903
msgid "Status page"
msgstr "État du service"
+#: src/screens/Signup/index.tsx:142
+msgid "Step"
+msgstr ""
+
#: src/view/com/auth/create/StepHeader.tsx:22
-msgid "Step {0} of {numSteps}"
-msgstr "Étape {0} sur {numSteps}"
+#~ msgid "Step {0} of {numSteps}"
+#~ msgstr "Étape {0} sur {numSteps}"
-#: src/view/screens/Settings/index.tsx:274
+#: src/view/screens/Settings/index.tsx:292
msgid "Storage cleared, you need to restart the app now."
msgstr "Stockage effacé, vous devez redémarrer l’application maintenant."
-#: src/Navigation.tsx:202
-#: src/view/screens/Settings/index.tsx:807
+#: src/Navigation.tsx:211
+#: src/view/screens/Settings/index.tsx:831
msgid "Storybook"
msgstr "Historique"
-#: src/view/com/modals/AppealLabel.tsx:101
+#: src/components/moderation/LabelsOnMeDialog.tsx:255
+#: src/components/moderation/LabelsOnMeDialog.tsx:256
msgid "Submit"
msgstr "Envoyer"
-#: src/view/screens/ProfileList.tsx:607
+#: src/view/screens/ProfileList.tsx:590
msgid "Subscribe"
msgstr "S’abonner"
-#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:173
+#: src/screens/Profile/Sections/Labels.tsx:180
+msgid "Subscribe to @{0} to use these labels:"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:221
+msgid "Subscribe to Labeler"
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:172
#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:307
msgid "Subscribe to the {0} feed"
+msgstr "S’abonner au fil d’actu {0}"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:184
+msgid "Subscribe to this labeler"
msgstr ""
-#: src/view/screens/ProfileList.tsx:603
+#: src/view/screens/ProfileList.tsx:586
msgid "Subscribe to this list"
msgstr "S’abonner à cette liste"
-#: src/view/screens/Search/Search.tsx:373
+#: src/view/screens/Search/Search.tsx:376
msgid "Suggested Follows"
msgstr "Suivis suggérés"
-#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:64
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:65
msgid "Suggested for you"
msgstr "Suggérés pour vous"
@@ -3747,39 +4594,42 @@ msgstr "Suggérés pour vous"
msgid "Suggestive"
msgstr "Suggestif"
-#: src/Navigation.tsx:212
+#: src/Navigation.tsx:226
#: src/view/screens/Support.tsx:30
#: src/view/screens/Support.tsx:33
msgid "Support"
msgstr "Soutien"
-#: src/view/com/modals/ProfilePreview.tsx:110
-#~ msgid "Swipe up to see more"
-#~ msgstr "Glisser vers le haut pour en voir plus"
-
-#: src/view/com/modals/SwitchAccount.tsx:117
+#: src/components/dialogs/SwitchAccount.tsx:46
+#: src/components/dialogs/SwitchAccount.tsx:49
msgid "Switch Account"
msgstr "Changer de compte"
-#: src/view/com/modals/SwitchAccount.tsx:97
-#: src/view/screens/Settings/index.tsx:130
+#: src/view/screens/Settings/index.tsx:139
msgid "Switch to {0}"
msgstr "Basculer sur {0}"
-#: src/view/com/modals/SwitchAccount.tsx:98
-#: src/view/screens/Settings/index.tsx:131
+#: src/view/screens/Settings/index.tsx:140
msgid "Switches the account you are logged in to"
msgstr "Bascule le compte auquel vous êtes connectés vers"
-#: src/view/screens/Settings/index.tsx:472
+#: src/view/screens/Settings/index.tsx:491
msgid "System"
msgstr "Système"
-#: src/view/screens/Settings/index.tsx:795
+#: src/view/screens/Settings/index.tsx:819
msgid "System log"
msgstr "Journal système"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:112
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "tag"
+msgstr "mot-clé"
+
+#: src/components/TagMenu/index.tsx:78
+msgid "Tag menu: {displayTag}"
+msgstr "Menu de mot-clé : {displayTag}"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:113
msgid "Tall"
msgstr "Grand"
@@ -3789,28 +4639,55 @@ msgstr "Tapper pour voir en entier"
#: src/screens/Onboarding/index.tsx:39
msgid "Tech"
-msgstr ""
+msgstr "Technologie"
-#: src/view/shell/desktop/RightNav.tsx:89
+#: src/view/shell/desktop/RightNav.tsx:81
msgid "Terms"
msgstr "Conditions générales"
-#: src/Navigation.tsx:222
-#: src/view/screens/Settings/index.tsx:885
+#: src/Navigation.tsx:236
+#: src/screens/Signup/StepInfo/Policies.tsx:49
+#: src/view/screens/Settings/index.tsx:917
#: src/view/screens/TermsOfService.tsx:29
-#: src/view/shell/Drawer.tsx:256
+#: src/view/shell/Drawer.tsx:259
msgid "Terms of Service"
msgstr "Conditions d’utilisation"
-#: src/view/com/modals/AppealLabel.tsx:70
-#: src/view/com/modals/report/InputIssueDetails.tsx:51
+#: src/lib/moderation/useReportOptions.ts:58
+#: src/lib/moderation/useReportOptions.ts:79
+#: src/lib/moderation/useReportOptions.ts:87
+msgid "Terms used violate community standards"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "text"
+msgstr "texte"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:219
msgid "Text input field"
msgstr "Champ de saisie de texte"
-#: src/view/com/profile/ProfileHeader.tsx:262
+#: src/components/ReportDialog/SubmitView.tsx:78
+msgid "Thank you. Your report has been sent."
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:465
+msgid "That contains the following:"
+msgstr ""
+
+#: src/screens/Signup/index.tsx:84
+msgid "That handle is already taken."
+msgstr "Ce pseudo est déjà occupé."
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:283
+#: src/view/com/profile/ProfileMenu.tsx:349
msgid "The account will be able to interact with you after unblocking."
msgstr "Ce compte pourra interagir avec vous après le déblocage."
+#: src/components/moderation/ModerationDetailsDialog.tsx:127
+msgid "the author"
+msgstr ""
+
#: src/view/screens/CommunityGuidelines.tsx:36
msgid "The Community Guidelines have been moved to <0/>"
msgstr "Les lignes directrices communautaires ont été déplacées vers <0/>"
@@ -3819,11 +4696,20 @@ msgstr "Les lignes directrices communautaires ont été déplacées vers <0/>"
msgid "The Copyright Policy has been moved to <0/>"
msgstr "Notre politique de droits d’auteur a été déplacée vers <0/>"
-#: src/screens/Onboarding/Layout.tsx:60
-msgid "The following steps will help customize your Bluesky experience."
+#: src/components/moderation/LabelsOnMeDialog.tsx:48
+msgid "The following labels were applied to your account."
msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:453
+#: src/components/moderation/LabelsOnMeDialog.tsx:49
+msgid "The following labels were applied to your content."
+msgstr ""
+
+#: src/screens/Onboarding/Layout.tsx:58
+msgid "The following steps will help customize your Bluesky experience."
+msgstr "Les étapes suivantes vous aideront à personnaliser votre expérience avec Bluesky."
+
+#: src/view/com/post-thread/PostThread.tsx:153
+#: src/view/com/post-thread/PostThread.tsx:165
msgid "The post may have been deleted."
msgstr "Ce post a peut-être été supprimé."
@@ -3839,24 +4725,25 @@ msgstr "Le formulaire d’assistance a été déplacé. Si vous avez besoin d’
msgid "The Terms of Service have been moved to"
msgstr "Nos conditions d’utilisation ont été déplacées vers"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:150
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:141
msgid "There are many feeds to try:"
-msgstr ""
+msgstr "Il existe de nombreux fils d’actu à essayer :"
-#: src/view/screens/ProfileFeed.tsx:549
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:112
+#: src/view/screens/ProfileFeed.tsx:544
msgid "There was an an issue contacting the server, please check your internet connection and try again."
msgstr "Il y a eu un problème de connexion au serveur, veuillez vérifier votre connexion Internet et réessayez."
-#: src/view/com/posts/FeedErrorMessage.tsx:139
+#: src/view/com/posts/FeedErrorMessage.tsx:138
msgid "There was an an issue removing this feed. Please check your internet connection and try again."
msgstr "Il y a eu un problème lors de la suppression du fil, veuillez vérifier votre connexion Internet et réessayez."
-#: src/view/screens/ProfileFeed.tsx:209
+#: src/view/screens/ProfileFeed.tsx:218
msgid "There was an an issue updating your feeds, please check your internet connection and try again."
msgstr "Il y a eu un problème lors de la mise à jour de vos fils d’actu, veuillez vérifier votre connexion Internet et réessayez."
-#: src/view/screens/ProfileFeed.tsx:236
-#: src/view/screens/ProfileList.tsx:266
+#: src/view/screens/ProfileFeed.tsx:245
+#: src/view/screens/ProfileList.tsx:275
#: src/view/screens/SavedFeeds.tsx:209
#: src/view/screens/SavedFeeds.tsx:231
#: src/view/screens/SavedFeeds.tsx:252
@@ -3865,9 +4752,8 @@ msgstr "Il y a eu un problème de connexion au serveur"
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:57
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:66
-#: src/view/com/feeds/FeedSourceCard.tsx:113
-#: src/view/com/feeds/FeedSourceCard.tsx:127
-#: src/view/com/feeds/FeedSourceCard.tsx:181
+#: src/view/com/feeds/FeedSourceCard.tsx:110
+#: src/view/com/feeds/FeedSourceCard.tsx:123
msgid "There was an issue contacting your server"
msgstr "Il y a eu un problème de connexion à votre serveur"
@@ -3875,7 +4761,7 @@ msgstr "Il y a eu un problème de connexion à votre serveur"
msgid "There was an issue fetching notifications. Tap here to try again."
msgstr "Il y a eu un problème lors de la récupération des notifications. Appuyez ici pour réessayer."
-#: src/view/com/posts/Feed.tsx:263
+#: src/view/com/posts/Feed.tsx:287
msgid "There was an issue fetching posts. Tap here to try again."
msgstr "Il y a eu un problème lors de la récupération des posts. Appuyez ici pour réessayer."
@@ -3888,62 +4774,77 @@ msgstr "Il y a eu un problème lors de la récupération de la liste. Appuyez ic
msgid "There was an issue fetching your lists. Tap here to try again."
msgstr "Il y a eu un problème lors de la récupération de vos listes. Appuyez ici pour réessayer."
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:63
-#: src/view/com/modals/ContentFilteringSettings.tsx:126
+#: src/components/ReportDialog/SubmitView.tsx:83
+msgid "There was an issue sending your report. Please check your internet connection."
+msgstr ""
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:65
msgid "There was an issue syncing your preferences with the server"
msgstr "Il y a eu un problème de synchronisation de vos préférences avec le serveur"
-#: src/view/screens/AppPasswords.tsx:66
+#: src/view/screens/AppPasswords.tsx:68
msgid "There was an issue with fetching your app passwords"
msgstr "Il y a eu un problème lors de la récupération de vos mots de passe d’application"
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:93
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:105
-#: src/view/com/profile/ProfileHeader.tsx:156
-#: src/view/com/profile/ProfileHeader.tsx:177
-#: src/view/com/profile/ProfileHeader.tsx:216
-#: src/view/com/profile/ProfileHeader.tsx:229
-#: src/view/com/profile/ProfileHeader.tsx:249
-#: src/view/com/profile/ProfileHeader.tsx:271
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:105
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:127
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:99
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:111
+#: src/view/com/profile/ProfileMenu.tsx:106
+#: src/view/com/profile/ProfileMenu.tsx:117
+#: src/view/com/profile/ProfileMenu.tsx:132
+#: src/view/com/profile/ProfileMenu.tsx:143
+#: src/view/com/profile/ProfileMenu.tsx:157
+#: src/view/com/profile/ProfileMenu.tsx:170
msgid "There was an issue! {0}"
-msgstr "Il y a eu un problème ! {0}"
+msgstr "Il y a eu un problème ! {0}"
-#: src/view/screens/ProfileList.tsx:287
-#: src/view/screens/ProfileList.tsx:306
-#: src/view/screens/ProfileList.tsx:328
-#: src/view/screens/ProfileList.tsx:347
+#: src/view/screens/ProfileList.tsx:288
+#: src/view/screens/ProfileList.tsx:302
+#: src/view/screens/ProfileList.tsx:316
+#: src/view/screens/ProfileList.tsx:330
msgid "There was an issue. Please check your internet connection and try again."
msgstr "Il y a eu un problème. Veuillez vérifier votre connexion Internet et réessayez."
-#: src/view/com/util/ErrorBoundary.tsx:36
+#: src/view/com/util/ErrorBoundary.tsx:51
msgid "There was an unexpected issue in the application. Please let us know if this happened to you!"
-msgstr "Un problème inattendu s’est produit dans l’application. N’hésitez pas à nous faire savoir si cela vous est arrivé !"
+msgstr "Un problème inattendu s’est produit dans l’application. N’hésitez pas à nous faire savoir si cela vous est arrivé !"
#: src/screens/Deactivated.tsx:106
msgid "There's been a rush of new users to Bluesky! We'll activate your account as soon as we can."
-msgstr ""
-
-#: src/view/com/auth/create/Step2.tsx:55
-msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
-msgstr ""
+msgstr "Il y a eu un afflux de nouveaux personnes sur Bluesky ! Nous activerons ton compte dès que possible."
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:138
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:146
msgid "These are popular accounts you might like:"
-msgstr ""
+msgstr "Voici des comptes populaires qui pourraient vous intéresser :"
-#: src/view/com/util/moderation/ScreenHider.tsx:88
+#: src/components/moderation/ScreenHider.tsx:116
msgid "This {screenDescription} has been flagged:"
-msgstr "Ce {screenDescription} a été signalé :"
+msgstr "Ce {screenDescription} a été signalé :"
-#: src/view/com/util/moderation/ScreenHider.tsx:83
+#: src/components/moderation/ScreenHider.tsx:111
msgid "This account has requested that users sign in to view their profile."
msgstr "Ce compte a demandé aux personnes de se connecter pour voir son profil."
-#: src/view/com/modals/EmbedConsent.tsx:68
+#: src/components/moderation/LabelsOnMeDialog.tsx:204
+msgid "This appeal will be sent to <0>{0}0>."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:19
+msgid "This content has been hidden by the moderators."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:24
+msgid "This content has received a general warning from moderators."
+msgstr ""
+
+#: src/components/dialogs/EmbedConsent.tsx:64
msgid "This content is hosted by {0}. Do you want to enable external media?"
-msgstr "Ce contenu est hébergé par {0}. Voulez-vous activer les médias externes ?"
+msgstr "Ce contenu est hébergé par {0}. Voulez-vous activer les médias externes ?"
-#: src/view/com/modals/ModerationDetails.tsx:67
+#: src/components/moderation/ModerationDetailsDialog.tsx:77
+#: src/lib/moderation/useModerationCauseDescription.ts:77
msgid "This content is not available because one of the users involved has blocked the other."
msgstr "Ce contenu n’est pas disponible car l’un des comptes impliqués a bloqué l’autre."
@@ -3952,24 +4853,28 @@ msgid "This content is not viewable without a Bluesky account."
msgstr "Ce contenu n’est pas visible sans un compte Bluesky."
#: src/view/screens/Settings/ExportCarDialog.tsx:75
-msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
+#~ msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
+#~ msgstr "Cette fonctionnalité est en version bêta. Vous pouvez en savoir plus sur les exportations de dépôts dans <0>ce blogpost.0>"
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:75
+msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost0>."
msgstr ""
#: src/view/com/posts/FeedErrorMessage.tsx:114
msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later."
msgstr "Ce fil d’actu reçoit actuellement un trafic important, il est temporairement indisponible. Veuillez réessayer plus tard."
-#: src/view/screens/Profile.tsx:420
-#: src/view/screens/ProfileFeed.tsx:475
-#: src/view/screens/ProfileList.tsx:660
+#: src/screens/Profile/Sections/Feed.tsx:50
+#: src/view/screens/ProfileFeed.tsx:477
+#: src/view/screens/ProfileList.tsx:675
msgid "This feed is empty!"
-msgstr "Ce fil d’actu est vide !"
+msgstr "Ce fil d’actu est vide !"
#: src/view/com/posts/CustomFeedEmptyState.tsx:37
msgid "This feed is empty! You may need to follow more users or tune your language settings."
-msgstr "Ce fil d’actu est vide ! Vous devriez peut-être suivre plus de comptes ou ajuster vos paramètres de langue."
+msgstr "Ce fil d’actu est vide ! Vous devriez peut-être suivre plus de comptes ou ajuster vos paramètres de langue."
-#: src/view/com/modals/BirthDateSettings.tsx:61
+#: src/components/dialogs/BirthDateSettings.tsx:41
msgid "This information is not shared with other users."
msgstr "Ces informations ne sont pas partagées avec d’autres personnes."
@@ -3977,48 +4882,106 @@ msgstr "Ces informations ne sont pas partagées avec d’autres personnes."
msgid "This is important in case you ever need to change your email or reset your password."
msgstr "Ceci est important au cas où vous auriez besoin de changer d’e-mail ou de réinitialiser votre mot de passe."
-#: src/view/com/modals/LinkWarning.tsx:58
+#: src/components/moderation/ModerationDetailsDialog.tsx:124
+msgid "This label was applied by {0}."
+msgstr ""
+
+#: src/screens/Profile/Sections/Labels.tsx:167
+msgid "This labeler hasn't declared what labels it publishes, and may not be active."
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:72
msgid "This link is taking you to the following website:"
-msgstr "Ce lien vous conduit au site Web suivant :"
+msgstr "Ce lien vous conduit au site Web suivant :"
-#: src/view/screens/ProfileList.tsx:834
+#: src/view/screens/ProfileList.tsx:853
msgid "This list is empty!"
-msgstr "Cette liste est vide !"
+msgstr "Cette liste est vide !"
+
+#: src/screens/Profile/ErrorState.tsx:40
+msgid "This moderation service is unavailable. See below for more details. If this issue persists, contact us."
+msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:106
+#: src/view/com/modals/AddAppPasswords.tsx:107
msgid "This name is already in use"
msgstr "Ce nom est déjà utilisé"
-#: src/view/com/post-thread/PostThreadItem.tsx:122
+#: src/view/com/post-thread/PostThreadItem.tsx:125
msgid "This post has been deleted."
msgstr "Ce post a été supprimé."
-#: src/view/com/modals/ModerationDetails.tsx:62
+#: src/view/com/util/forms/PostDropdownBtn.tsx:344
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:248
+msgid "This post is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:326
+msgid "This post will be hidden from feeds."
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:370
+msgid "This profile is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/Policies.tsx:37
+msgid "This service has not provided terms of service or a privacy policy."
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:445
+msgid "This should create a domain record at:"
+msgstr ""
+
+#: src/view/com/profile/ProfileFollowers.tsx:87
+msgid "This user doesn't have any followers."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:72
+#: src/lib/moderation/useModerationCauseDescription.ts:68
msgid "This user has blocked you. You cannot view their content."
msgstr "Ce compte vous a bloqué. Vous ne pouvez pas voir son contenu."
+#: src/lib/moderation/useGlobalLabelStrings.ts:30
+msgid "This user has requested that their content only be shown to signed-in users."
+msgstr ""
+
#: src/view/com/modals/ModerationDetails.tsx:42
-msgid "This user is included in the <0/> list which you have blocked."
-msgstr "Ce compte est inclus dans la liste <0/> que vous avez bloquée."
+#~ msgid "This user is included in the <0/> list which you have blocked."
+#~ msgstr "Ce compte est inclus dans la liste <0/> que vous avez bloquée."
#: src/view/com/modals/ModerationDetails.tsx:74
-msgid "This user is included in the <0/> list which you have muted."
+#~ msgid "This user is included in the <0/> list which you have muted."
+#~ msgstr "Ce compte est inclus dans la liste <0/> que vous avez masquée."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:55
+msgid "This user is included in the <0>{0}0> list which you have blocked."
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:74
-#~ msgid "This user is included the <0/> list which you have muted."
-#~ msgstr "Ce compte est inclus dans la liste <0/> que vous avez masquée."
+#: src/components/moderation/ModerationDetailsDialog.tsx:84
+msgid "This user is included in the <0>{0}0> list which you have muted."
+msgstr ""
+
+#: src/view/com/profile/ProfileFollows.tsx:87
+msgid "This user isn't following anyone."
+msgstr ""
#: src/view/com/modals/SelfLabel.tsx:137
msgid "This warning is only available for posts with media attached."
-msgstr "Cet avertissement n’est disponible que pour les messages contenant des médias."
+msgstr "Cet avertissement n’est disponible que pour les posts contenant des médias."
-#: src/view/com/util/forms/PostDropdownBtn.tsx:192
-msgid "This will hide this post from your feeds."
-msgstr "Cela va masquer ce post de vos fils d’actu."
+#: src/components/dialogs/MutedWords.tsx:283
+msgid "This will delete {0} from your muted words. You can always add it back later."
+msgstr "Cela supprimera {0} de vos mots masqués. Vous pourrez toujours le réintégrer plus tard."
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:282
+#~ msgid "This will hide this post from your feeds."
+#~ msgstr "Cela va masquer ce post de vos fils d’actu."
+
+#: src/view/screens/Settings/index.tsx:574
+msgid "Thread preferences"
+msgstr ""
#: src/view/screens/PreferencesThreads.tsx:53
-#: src/view/screens/Settings/index.tsx:565
+#: src/view/screens/Settings/index.tsx:584
msgid "Thread Preferences"
msgstr "Préférences des fils de discussion"
@@ -4026,21 +4989,34 @@ msgstr "Préférences des fils de discussion"
msgid "Threaded Mode"
msgstr "Mode arborescent"
-#: src/Navigation.tsx:252
+#: src/Navigation.tsx:269
msgid "Threads Preferences"
msgstr "Préférences de fils de discussion"
+#: src/components/ReportDialog/SelectLabelerView.tsx:33
+msgid "To whom would you like to send this report?"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:112
+msgid "Toggle between muted word options."
+msgstr "Basculer entre les options pour les mots masqués."
+
#: src/view/com/util/forms/DropdownButton.tsx:246
msgid "Toggle dropdown"
msgstr "Activer le menu déroulant"
-#: src/view/com/modals/EditImage.tsx:271
+#: src/screens/Moderation/index.tsx:332
+msgid "Toggle to enable or disable adult content"
+msgstr ""
+
+#: src/view/com/modals/EditImage.tsx:272
msgid "Transformations"
msgstr "Transformations"
-#: src/view/com/post-thread/PostThreadItem.tsx:686
-#: src/view/com/post-thread/PostThreadItem.tsx:688
-#: src/view/com/util/forms/PostDropdownBtn.tsx:125
+#: src/view/com/post-thread/PostThreadItem.tsx:644
+#: src/view/com/post-thread/PostThreadItem.tsx:646
+#: src/view/com/util/forms/PostDropdownBtn.tsx:212
+#: src/view/com/util/forms/PostDropdownBtn.tsx:214
msgid "Translate"
msgstr "Traduire"
@@ -4049,169 +5025,261 @@ msgctxt "action"
msgid "Try again"
msgstr "Réessayer"
-#: src/view/screens/ProfileList.tsx:505
+#: src/view/com/modals/ChangeHandle.tsx:428
+msgid "Type:"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:478
msgid "Un-block list"
msgstr "Débloquer la liste"
-#: src/view/screens/ProfileList.tsx:490
+#: src/view/screens/ProfileList.tsx:461
msgid "Un-mute list"
msgstr "Réafficher cette liste"
-#: src/view/com/auth/create/CreateAccount.tsx:66
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:87
-#: src/view/com/auth/login/Login.tsx:76
-#: src/view/com/auth/login/LoginForm.tsx:118
+#: src/screens/Login/ForgotPasswordForm.tsx:74
+#: src/screens/Login/index.tsx:78
+#: src/screens/Login/LoginForm.tsx:119
+#: src/screens/Login/SetNewPasswordForm.tsx:77
+#: src/screens/Signup/index.tsx:63
#: src/view/com/modals/ChangePassword.tsx:70
msgid "Unable to contact your service. Please check your Internet connection."
msgstr "Impossible de contacter votre service. Veuillez vérifier votre connexion Internet."
-#: src/view/com/profile/ProfileHeader.tsx:432
-#: src/view/screens/ProfileList.tsx:589
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:181
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+#: src/view/screens/ProfileList.tsx:572
msgid "Unblock"
msgstr "Débloquer"
-#: src/view/com/profile/ProfileHeader.tsx:435
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:186
msgctxt "action"
msgid "Unblock"
msgstr "Débloquer"
-#: src/view/com/profile/ProfileHeader.tsx:260
-#: src/view/com/profile/ProfileHeader.tsx:344
+#: src/view/com/profile/ProfileMenu.tsx:299
+#: src/view/com/profile/ProfileMenu.tsx:305
msgid "Unblock Account"
msgstr "Débloquer le compte"
-#: src/view/com/modals/Repost.tsx:42
-#: src/view/com/modals/Repost.tsx:55
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:281
+#: src/view/com/profile/ProfileMenu.tsx:343
+msgid "Unblock Account?"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:43
+#: src/view/com/modals/Repost.tsx:56
#: src/view/com/util/post-ctrls/RepostButton.tsx:60
#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
msgid "Undo repost"
msgstr "Annuler le repost"
-#: src/view/com/profile/FollowButton.tsx:55
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
+msgid "Unfollow"
+msgstr ""
+
+#: src/view/com/profile/FollowButton.tsx:60
msgctxt "action"
msgid "Unfollow"
msgstr "Se désabonner"
-#: src/view/com/profile/ProfileHeader.tsx:484
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:220
msgid "Unfollow {0}"
msgstr "Se désabonner de {0}"
-#: src/view/com/auth/create/state.ts:300
-msgid "Unfortunately, you do not meet the requirements to create an account."
-msgstr "Malheureusement, vous ne remplissez pas les conditions requises pour créer un compte."
+#: src/view/com/profile/ProfileMenu.tsx:241
+#: src/view/com/profile/ProfileMenu.tsx:251
+msgid "Unfollow Account"
+msgstr ""
+
+#: src/view/com/auth/create/state.ts:262
+#~ msgid "Unfortunately, you do not meet the requirements to create an account."
+#~ msgstr "Malheureusement, vous ne remplissez pas les conditions requises pour créer un compte."
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Unlike"
msgstr "Déliker"
-#: src/view/screens/ProfileList.tsx:596
+#: src/view/screens/ProfileFeed.tsx:573
+msgid "Unlike this feed"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:249
+#: src/view/screens/ProfileList.tsx:579
msgid "Unmute"
msgstr "Réafficher"
-#: src/view/com/profile/ProfileHeader.tsx:325
+#: src/components/TagMenu/index.web.tsx:104
+msgid "Unmute {truncatedTag}"
+msgstr "Réafficher {truncatedTag}"
+
+#: src/view/com/profile/ProfileMenu.tsx:278
+#: src/view/com/profile/ProfileMenu.tsx:284
msgid "Unmute Account"
msgstr "Réafficher ce compte"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/components/TagMenu/index.tsx:208
+msgid "Unmute all {displayTag} posts"
+msgstr "Réafficher tous les posts {displayTag}"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:256
msgid "Unmute thread"
msgstr "Réafficher ce fil de discussion"
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:295
+#: src/view/screens/ProfileList.tsx:563
msgid "Unpin"
msgstr "Désépingler"
-#: src/view/screens/ProfileList.tsx:473
+#: src/view/screens/ProfileFeed.tsx:292
+msgid "Unpin from home"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:444
msgid "Unpin moderation list"
msgstr "Supprimer la liste de modération"
-#: src/view/screens/ProfileFeed.tsx:345
-msgid "Unsave"
-msgstr "Supprimer"
+#: src/view/screens/ProfileFeed.tsx:346
+#~ msgid "Unsave"
+#~ msgstr "Supprimer"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:219
+msgid "Unsubscribe"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:183
+msgid "Unsubscribe from this labeler"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:70
+msgid "Unwanted Sexual Content"
+msgstr ""
#: src/view/com/modals/UserAddRemoveLists.tsx:70
msgid "Update {displayName} in Lists"
msgstr "Mise à jour de {displayName} dans les listes"
#: src/lib/hooks/useOTAUpdate.ts:15
-msgid "Update Available"
-msgstr "Mise à jour disponible"
+#~ msgid "Update Available"
+#~ msgstr "Mise à jour disponible"
+
+#: src/view/com/modals/ChangeHandle.tsx:508
+msgid "Update to {handle}"
+msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:204
+#: src/screens/Login/SetNewPasswordForm.tsx:186
msgid "Updating..."
msgstr "Mise à jour…"
-#: src/view/com/modals/ChangeHandle.tsx:455
+#: src/view/com/modals/ChangeHandle.tsx:454
msgid "Upload a text file to:"
-msgstr "Envoyer un fichier texte vers :"
+msgstr "Envoyer un fichier texte vers :"
+
+#: src/view/com/util/UserAvatar.tsx:326
+#: src/view/com/util/UserAvatar.tsx:329
+#: src/view/com/util/UserBanner.tsx:116
+#: src/view/com/util/UserBanner.tsx:119
+msgid "Upload from Camera"
+msgstr ""
-#: src/view/screens/AppPasswords.tsx:195
+#: src/view/com/util/UserAvatar.tsx:343
+#: src/view/com/util/UserBanner.tsx:133
+msgid "Upload from Files"
+msgstr ""
+
+#: src/view/com/util/UserAvatar.tsx:337
+#: src/view/com/util/UserAvatar.tsx:341
+#: src/view/com/util/UserBanner.tsx:127
+#: src/view/com/util/UserBanner.tsx:131
+msgid "Upload from Library"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:408
+msgid "Use a file on your server"
+msgstr ""
+
+#: src/view/screens/AppPasswords.tsx:197
msgid "Use app passwords to login to other Bluesky clients without giving full access to your account or password."
msgstr "Utilisez les mots de passe de l’appli pour se connecter à d’autres clients Bluesky sans donner un accès complet à votre compte ou à votre mot de passe."
-#: src/view/com/modals/ChangeHandle.tsx:515
+#: src/view/com/modals/ChangeHandle.tsx:517
+msgid "Use bsky.social as hosting provider"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:516
msgid "Use default provider"
msgstr "Utiliser le fournisseur par défaut"
#: src/view/com/modals/InAppBrowserConsent.tsx:56
#: src/view/com/modals/InAppBrowserConsent.tsx:58
msgid "Use in-app browser"
-msgstr ""
+msgstr "Utiliser le navigateur interne à l’appli"
#: src/view/com/modals/InAppBrowserConsent.tsx:66
#: src/view/com/modals/InAppBrowserConsent.tsx:68
msgid "Use my default browser"
+msgstr "Utiliser mon navigateur par défaut"
+
+#: src/view/com/modals/ChangeHandle.tsx:400
+msgid "Use the DNS panel"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:155
+#: src/view/com/modals/AddAppPasswords.tsx:156
msgid "Use this to sign into the other app along with your handle."
msgstr "Utilisez-le pour vous connecter à l’autre application avec votre identifiant."
-#: src/view/com/modals/ServerInput.tsx:105
-#~ msgid "Use your domain as your Bluesky client service provider"
-#~ msgstr "Utilise votre domaine comme votre fournisseur de client Bluesky"
-
-#: src/view/com/modals/InviteCodes.tsx:200
+#: src/view/com/modals/InviteCodes.tsx:201
msgid "Used by:"
-msgstr "Utilisé par :"
+msgstr "Utilisé par :"
-#: src/view/com/modals/ModerationDetails.tsx:54
+#: src/components/moderation/ModerationDetailsDialog.tsx:64
+#: src/lib/moderation/useModerationCauseDescription.ts:56
msgid "User Blocked"
msgstr "Compte bloqué"
-#: src/view/com/modals/ModerationDetails.tsx:40
+#: src/lib/moderation/useModerationCauseDescription.ts:48
+msgid "User Blocked by \"{0}\""
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:53
msgid "User Blocked by List"
msgstr "Compte bloqué par liste"
-#: src/view/com/modals/ModerationDetails.tsx:60
+#: src/lib/moderation/useModerationCauseDescription.ts:66
+msgid "User Blocking You"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:70
msgid "User Blocks You"
msgstr "Compte qui vous bloque"
-#: src/view/com/auth/create/Step3.tsx:41
-msgid "User handle"
-msgstr "Pseudo"
+#: src/view/com/auth/create/Step2.tsx:79
+#~ msgid "User handle"
+#~ msgstr "Pseudo"
-#: src/view/com/lists/ListCard.tsx:84
+#: src/view/com/lists/ListCard.tsx:85
#: src/view/com/modals/UserAddRemoveLists.tsx:198
msgid "User list by {0}"
msgstr "Liste de compte de {0}"
-#: src/view/screens/ProfileList.tsx:762
+#: src/view/screens/ProfileList.tsx:777
msgid "User list by <0/>"
msgstr "Liste de compte par <0/>"
-#: src/view/com/lists/ListCard.tsx:82
+#: src/view/com/lists/ListCard.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:196
-#: src/view/screens/ProfileList.tsx:760
+#: src/view/screens/ProfileList.tsx:775
msgid "User list by you"
msgstr "Liste de compte par vous"
-#: src/view/com/modals/CreateOrEditList.tsx:196
+#: src/view/com/modals/CreateOrEditList.tsx:197
msgid "User list created"
msgstr "Liste de compte créée"
-#: src/view/com/modals/CreateOrEditList.tsx:182
+#: src/view/com/modals/CreateOrEditList.tsx:183
msgid "User list updated"
msgstr "Liste de compte mise à jour"
@@ -4219,12 +5287,11 @@ msgstr "Liste de compte mise à jour"
msgid "User Lists"
msgstr "Listes de comptes"
-#: src/view/com/auth/login/LoginForm.tsx:177
-#: src/view/com/auth/login/LoginForm.tsx:195
+#: src/screens/Login/LoginForm.tsx:151
msgid "Username or email address"
msgstr "Pseudo ou e-mail"
-#: src/view/screens/ProfileList.tsx:796
+#: src/view/screens/ProfileList.tsx:811
msgid "Users"
msgstr "Comptes"
@@ -4234,21 +5301,29 @@ msgstr "comptes suivis par <0/>"
#: src/view/com/modals/Threadgate.tsx:106
msgid "Users in \"{0}\""
-msgstr "Comptes dans « {0} »"
+msgstr "Comptes dans « {0} »"
+
+#: src/components/LikesDialog.tsx:85
+msgid "Users that have liked this content or profile"
+msgstr ""
-#: src/view/com/auth/create/Step2.tsx:243
-msgid "Verification code"
+#: src/view/com/modals/ChangeHandle.tsx:436
+msgid "Value:"
msgstr ""
-#: src/view/screens/Settings/index.tsx:910
+#: src/view/com/modals/ChangeHandle.tsx:509
+msgid "Verify {0}"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:942
msgid "Verify email"
msgstr "Confirmer l’e-mail"
-#: src/view/screens/Settings/index.tsx:935
+#: src/view/screens/Settings/index.tsx:967
msgid "Verify my email"
msgstr "Confirmer mon e-mail"
-#: src/view/screens/Settings/index.tsx:944
+#: src/view/screens/Settings/index.tsx:976
msgid "Verify My Email"
msgstr "Confirmer mon e-mail"
@@ -4261,11 +5336,15 @@ msgstr "Confirmer le nouvel e-mail"
msgid "Verify Your Email"
msgstr "Vérifiez votre e-mail"
+#: src/view/screens/Settings/index.tsx:893
+msgid "Version {0}"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:42
msgid "Video Games"
-msgstr ""
+msgstr "Jeux vidéo"
-#: src/view/com/profile/ProfileHeader.tsx:661
+#: src/screens/Profile/Header/Shell.tsx:107
msgid "View {0}'s avatar"
msgstr "Voir l’avatar de {0}"
@@ -4273,11 +5352,23 @@ msgstr "Voir l’avatar de {0}"
msgid "View debug entry"
msgstr "Afficher l’entrée de débogage"
-#: src/view/com/posts/FeedSlice.tsx:103
+#: src/components/ReportDialog/SelectReportOptionView.tsx:131
+msgid "View details"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:126
+msgid "View details for reporting a copyright violation"
+msgstr ""
+
+#: src/view/com/posts/FeedSlice.tsx:99
msgid "View full thread"
msgstr "Voir le fil de discussion entier"
-#: src/view/com/posts/FeedErrorMessage.tsx:172
+#: src/components/moderation/LabelsOnMe.tsx:51
+msgid "View information about these labels"
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:166
msgid "View profile"
msgstr "Voir le profil"
@@ -4285,138 +5376,195 @@ msgstr "Voir le profil"
msgid "View the avatar"
msgstr "Afficher l’avatar"
-#: src/view/com/modals/LinkWarning.tsx:75
+#: src/components/LabelingServiceCard/index.tsx:140
+msgid "View the labeling service provided by @{0}"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:585
+msgid "View users who like this feed"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
msgid "Visit Site"
msgstr "Visiter le site"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:42
-#: src/view/com/modals/ContentFilteringSettings.tsx:259
+#: src/components/moderation/LabelPreference.tsx:135
+#: src/lib/moderation/useLabelBehaviorDescription.ts:17
+#: src/lib/moderation/useLabelBehaviorDescription.ts:22
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:53
msgid "Warn"
msgstr "Avertir"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:134
-msgid "We also think you'll like \"For You\" by Skygaze:"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:48
+msgid "Warn content"
msgstr ""
+#: src/lib/moderation/useLabelBehaviorDescription.ts:46
+msgid "Warn content and filter from feeds"
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:134
+#~ msgid "We also think you'll like \"For You\" by Skygaze:"
+#~ msgstr "Nous pensons également que vous aimerez « For You » de Skygaze :"
+
+#: src/screens/Hashtag.tsx:133
+msgid "We couldn't find any results for that hashtag."
+msgstr "Nous n’avons trouvé aucun résultat pour ce mot-clé."
+
#: src/screens/Deactivated.tsx:133
msgid "We estimate {estimatedTime} until your account is ready."
-msgstr ""
+msgstr "Nous estimons que votre compte sera prêt dans {estimatedTime}."
-#: src/screens/Onboarding/StepFinished.tsx:93
+#: src/screens/Onboarding/StepFinished.tsx:97
msgid "We hope you have a wonderful time. Remember, Bluesky is:"
-msgstr ""
+msgstr "Nous espérons que vous passerez un excellent moment. N’oubliez pas que Bluesky est :"
#: src/view/com/posts/DiscoverFallbackHeader.tsx:29
msgid "We ran out of posts from your follows. Here's the latest from <0/>."
-msgstr ""
+msgstr "Nous n’avons plus de posts provenant des comptes que vous suivez. Voici le dernier de <0/>."
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:118
-#~ msgid "We recommend \"For You\" by Skygaze:"
-#~ msgstr ""
+#: src/components/dialogs/MutedWords.tsx:203
+msgid "We recommend avoiding common words that appear in many posts, since it can result in no posts being shown."
+msgstr "Nous vous recommandons d’éviter les mots communs qui apparaissent dans de nombreux posts, car cela peut avoir pour conséquence qu’aucun post ne s’affiche."
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:124
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:125
msgid "We recommend our \"Discover\" feed:"
+msgstr "Nous vous recommandons notre fil d’actu « Discover » :"
+
+#: src/components/dialogs/BirthDateSettings.tsx:52
+msgid "We were unable to load your birth date preferences. Please try again."
msgstr ""
-#: src/screens/Onboarding/StepInterests/index.tsx:133
-msgid "We weren't able to connect. Please try again to continue setting up your account. If it continues to fail, you can skip this flow."
+#: src/screens/Moderation/index.tsx:385
+msgid "We were unable to load your configured labelers at this time."
msgstr ""
+#: src/screens/Onboarding/StepInterests/index.tsx:137
+msgid "We weren't able to connect. Please try again to continue setting up your account. If it continues to fail, you can skip this flow."
+msgstr "Nous n’avons pas pu nous connecter. Veuillez réessayer pour continuer à configurer votre compte. Si l’échec persiste, vous pouvez sauter cette étape."
+
#: src/screens/Deactivated.tsx:137
msgid "We will let you know when your account is ready."
-msgstr ""
+msgstr "Nous vous informerons lorsque votre compte sera prêt."
#: src/view/com/modals/AppealLabel.tsx:48
-msgid "We'll look into your appeal promptly."
-msgstr "Nous examinerons votre appel rapidement."
+#~ msgid "We'll look into your appeal promptly."
+#~ msgstr "Nous examinerons votre appel rapidement."
-#: src/screens/Onboarding/StepInterests/index.tsx:138
+#: src/screens/Onboarding/StepInterests/index.tsx:142
msgid "We'll use this to help customize your experience."
-msgstr ""
+msgstr "Nous utiliserons ces informations pour personnaliser votre expérience."
-#: src/view/com/auth/create/CreateAccount.tsx:123
+#: src/screens/Signup/index.tsx:130
msgid "We're so excited to have you join us!"
-msgstr "Nous sommes ravis de vous accueillir !"
+msgstr "Nous sommes ravis de vous accueillir !"
-#: src/view/screens/ProfileList.tsx:85
+#: src/view/screens/ProfileList.tsx:89
msgid "We're sorry, but we were unable to resolve this list. If this persists, please contact the list creator, @{handleOrDid}."
msgstr "Nous sommes désolés, mais nous n’avons pas pu charger cette liste. Si cela persiste, veuillez contacter l’origine de la liste, @{handleOrDid}."
-#: src/view/screens/Search/Search.tsx:253
+#: src/components/dialogs/MutedWords.tsx:229
+msgid "We're sorry, but we weren't able to load your muted words at this time. Please try again."
+msgstr "Nous sommes désolés, mais nous n’avons pas pu charger vos mots masqués pour le moment. Veuillez réessayer."
+
+#: src/view/screens/Search/Search.tsx:256
msgid "We're sorry, but your search could not be completed. Please try again in a few minutes."
msgstr "Nous sommes désolés, mais votre recherche a été annulée. Veuillez réessayer dans quelques minutes."
+#: src/components/Lists.tsx:188
#: src/view/screens/NotFound.tsx:48
msgid "We're sorry! We can't find the page you were looking for."
-msgstr "Nous sommes désolés ! La page que vous recherchez est introuvable."
+msgstr "Nous sommes désolés ! La page que vous recherchez est introuvable."
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:46
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:321
+msgid "We're sorry! You can only subscribe to ten labelers, and you've reached your limit of ten."
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:48
msgid "Welcome to <0>Bluesky0>"
msgstr "Bienvenue sur <0>Bluesky0>"
-#: src/screens/Onboarding/StepInterests/index.tsx:130
+#: src/screens/Onboarding/StepInterests/index.tsx:134
msgid "What are your interests?"
-msgstr ""
+msgstr "Quels sont vos centres d’intérêt ?"
#: src/view/com/modals/report/Modal.tsx:169
-msgid "What is the issue with this {collectionName}?"
-msgstr "Quel est le problème avec cette {collectionName} ?"
+#~ msgid "What is the issue with this {collectionName}?"
+#~ msgstr "Quel est le problème avec cette {collectionName} ?"
-#: src/view/com/auth/SplashScreen.tsx:34
-#: src/view/com/composer/Composer.tsx:279
+#: src/view/com/auth/SplashScreen.tsx:58
+#: src/view/com/auth/SplashScreen.web.tsx:84
+#: src/view/com/composer/Composer.tsx:296
msgid "What's up?"
-msgstr "Quoi de neuf ?"
+msgstr "Quoi de neuf ?"
#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:78
msgid "Which languages are used in this post?"
-msgstr "Quelles sont les langues utilisées dans ce post ?"
+msgstr "Quelles sont les langues utilisées dans ce post ?"
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:77
msgid "Which languages would you like to see in your algorithmic feeds?"
-msgstr "Quelles langues aimeriez-vous voir apparaître dans vos flux algorithmiques ?"
+msgstr "Quelles langues aimeriez-vous voir apparaître dans vos fils d’actu algorithmiques ?"
#: src/view/com/composer/threadgate/ThreadgateBtn.tsx:47
#: src/view/com/modals/Threadgate.tsx:66
msgid "Who can reply"
-msgstr "Qui peut répondre ?"
+msgstr "Qui peut répondre ?"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:102
+#: src/components/ReportDialog/SelectReportOptionView.tsx:43
+msgid "Why should this content be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:56
+msgid "Why should this feed be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:53
+msgid "Why should this list be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:50
+msgid "Why should this post be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:47
+msgid "Why should this user be reviewed?"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:103
msgid "Wide"
msgstr "Large"
-#: src/view/com/composer/Composer.tsx:415
+#: src/view/com/composer/Composer.tsx:436
msgid "Write post"
msgstr "Rédiger un post"
-#: src/view/com/composer/Composer.tsx:278
-#: src/view/com/composer/Prompt.tsx:33
+#: src/view/com/composer/Composer.tsx:295
+#: src/view/com/composer/Prompt.tsx:37
msgid "Write your reply"
msgstr "Rédigez votre réponse"
#: src/screens/Onboarding/index.tsx:28
msgid "Writers"
-msgstr ""
-
-#: src/view/com/auth/create/Step2.tsx:263
-msgid "XXXXXX"
-msgstr ""
+msgstr "Écrivain·e·s"
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:77
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:201
-#: src/view/screens/PreferencesHomeFeed.tsx:236
-#: src/view/screens/PreferencesHomeFeed.tsx:271
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:201
+#: src/view/screens/PreferencesFollowingFeed.tsx:236
+#: src/view/screens/PreferencesFollowingFeed.tsx:271
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "Yes"
msgstr "Oui"
-#: src/screens/Onboarding/StepModeration/index.tsx:46
-#~ msgid "You are in control"
-#~ msgstr ""
-
#: src/screens/Deactivated.tsx:130
msgid "You are in line."
+msgstr "Vous êtes dans la file d’attente."
+
+#: src/view/com/profile/ProfileFollows.tsx:86
+msgid "You are not following anyone."
msgstr ""
#: src/view/com/posts/FollowingEmptyState.tsx:67
@@ -4424,53 +5572,72 @@ msgstr ""
msgid "You can also discover new Custom Feeds to follow."
msgstr "Vous pouvez aussi découvrir de nouveaux fils d’actu personnalisés à suivre."
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:123
-#~ msgid "You can also try our \"Discover\" algorithm:"
-#~ msgstr ""
-
-#: src/screens/Onboarding/StepFollowingFeed.tsx:142
+#: src/screens/Onboarding/StepFollowingFeed.tsx:143
msgid "You can change these settings later."
-msgstr ""
+msgstr "Vous pouvez modifier ces paramètres ultérieurement."
-#: src/view/com/auth/login/Login.tsx:158
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:31
+#: src/screens/Login/index.tsx:158
+#: src/screens/Login/PasswordUpdatedForm.tsx:33
msgid "You can now sign in with your new password."
msgstr "Vous pouvez maintenant vous connecter avec votre nouveau mot de passe."
-#: src/view/com/modals/InviteCodes.tsx:66
+#: src/view/com/profile/ProfileFollowers.tsx:86
+msgid "You do not have any followers."
+msgstr ""
+
+#: src/view/com/modals/InviteCodes.tsx:67
msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer."
-msgstr "Vous n’avez encore aucun code d’invitation ! Nous vous en enverrons lorsque vous serez sur Bluesky depuis un peu plus longtemps."
+msgstr "Vous n’avez encore aucun code d’invitation ! Nous vous en enverrons lorsque vous serez sur Bluesky depuis un peu plus longtemps."
#: src/view/screens/SavedFeeds.tsx:102
msgid "You don't have any pinned feeds."
msgstr "Vous n’avez encore aucun fil épinglé."
-#: src/view/screens/Feeds.tsx:451
+#: src/view/screens/Feeds.tsx:452
msgid "You don't have any saved feeds!"
-msgstr "Vous n’avez encore aucun fil enregistré !"
+msgstr "Vous n’avez encore aucun fil enregistré !"
#: src/view/screens/SavedFeeds.tsx:135
msgid "You don't have any saved feeds."
msgstr "Vous n’avez encore aucun fil enregistré."
-#: src/view/com/post-thread/PostThread.tsx:401
+#: src/view/com/post-thread/PostThread.tsx:159
msgid "You have blocked the author or you have been blocked by the author."
msgstr "Vous avez bloqué cet auteur ou vous avez été bloqué par celui-ci."
-#: src/view/com/modals/ModerationDetails.tsx:56
+#: src/components/moderation/ModerationDetailsDialog.tsx:66
+#: src/lib/moderation/useModerationCauseDescription.ts:50
+#: src/lib/moderation/useModerationCauseDescription.ts:58
msgid "You have blocked this user. You cannot view their content."
msgstr "Vous avez bloqué ce compte. Vous ne pouvez pas voir son contenu."
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:57
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:92
+#: src/screens/Login/SetNewPasswordForm.tsx:54
+#: src/screens/Login/SetNewPasswordForm.tsx:91
#: src/view/com/modals/ChangePassword.tsx:87
#: src/view/com/modals/ChangePassword.tsx:121
msgid "You have entered an invalid code. It should look like XXXXX-XXXXX."
+msgstr "Vous avez introduit un code non valide. Il devrait ressembler à XXXXX-XXXXX."
+
+#: src/lib/moderation/useModerationCauseDescription.ts:109
+msgid "You have hidden this post"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:101
+msgid "You have hidden this post."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:94
+#: src/lib/moderation/useModerationCauseDescription.ts:92
+msgid "You have muted this account."
+msgstr ""
+
+#: src/lib/moderation/useModerationCauseDescription.ts:86
+msgid "You have muted this user"
msgstr ""
#: src/view/com/modals/ModerationDetails.tsx:87
-msgid "You have muted this user."
-msgstr "Vous avez masqué ce compte."
+#~ msgid "You have muted this user."
+#~ msgstr "Vous avez masqué ce compte."
#: src/view/com/feeds/ProfileFeedgens.tsx:136
msgid "You have no feeds."
@@ -4482,89 +5649,114 @@ msgid "You have no lists."
msgstr "Vous n’avez aucune liste."
#: src/view/screens/ModerationBlockedAccounts.tsx:132
-msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
-msgstr "Vous n’avez pas encore bloqué de comptes. Pour bloquer un compte, accédez à son profil et sélectionnez « Bloquer le compte » dans le menu de son compte."
+msgid "You have not blocked any accounts yet. To block an account, go to their profile and select \"Block account\" from the menu on their account."
+msgstr ""
+
+#: src/view/screens/ModerationBlockedAccounts.tsx:132
+#~ msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
+#~ msgstr "Vous n’avez pas encore bloqué de comptes. Pour bloquer un compte, accédez à son profil et sélectionnez « Bloquer le compte » dans le menu de son compte."
-#: src/view/screens/AppPasswords.tsx:87
+#: src/view/screens/AppPasswords.tsx:89
msgid "You have not created any app passwords yet. You can create one by pressing the button below."
msgstr "Vous n’avez encore créé aucun mot de passe pour l’appli. Vous pouvez en créer un en cliquant sur le bouton suivant."
#: src/view/screens/ModerationMutedAccounts.tsx:131
-msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
-msgstr "Vous n’avez encore masqué aucun compte. Pour désactiver un compte, allez sur son profil et sélectionnez « Masquer le compte » dans le menu de son compte."
+msgid "You have not muted any accounts yet. To mute an account, go to their profile and select \"Mute account\" from the menu on their account."
+msgstr ""
+
+#: src/view/screens/ModerationMutedAccounts.tsx:131
+#~ msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
+#~ msgstr "Vous n’avez encore masqué aucun compte. Pour désactiver un compte, allez sur son profil et sélectionnez « Masquer le compte » dans le menu de son compte."
+
+#: src/components/dialogs/MutedWords.tsx:249
+msgid "You haven't muted any words or tags yet"
+msgstr "Vous n’avez pas encore masqué de mot ou de mot-clé"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:68
+msgid "You may appeal these labels if you feel they were placed in error."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/Policies.tsx:79
+msgid "You must be 13 years of age or older to sign up."
+msgstr ""
#: src/view/com/modals/ContentFilteringSettings.tsx:175
-msgid "You must be 18 or older to enable adult content."
-msgstr "Vous devez avoir 18 ans ou plus pour activer le contenu pour adultes."
+#~ msgid "You must be 18 or older to enable adult content."
+#~ msgstr "Vous devez avoir 18 ans ou plus pour activer le contenu pour adultes."
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:103
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:110
msgid "You must be 18 years or older to enable adult content"
+msgstr "Vous devez avoir 18 ans ou plus pour activer le contenu pour adultes."
+
+#: src/components/ReportDialog/SubmitView.tsx:205
+msgid "You must select at least one labeler for a report"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:98
+#: src/view/com/util/forms/PostDropdownBtn.tsx:144
msgid "You will no longer receive notifications for this thread"
msgstr "Vous ne recevrez plus de notifications pour ce fil de discussion"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:147
msgid "You will now receive notifications for this thread"
msgstr "Vous recevrez désormais des notifications pour ce fil de discussion"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:107
+#: src/screens/Login/SetNewPasswordForm.tsx:104
msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password."
-msgstr "Vous recevrez un e-mail contenant un « code de réinitialisation » Saisissez ce code ici, puis votre nouveau mot de passe."
+msgstr "Vous recevrez un e-mail contenant un « code de réinitialisation ». Saisissez ce code ici, puis votre nouveau mot de passe."
-#: src/screens/Onboarding/StepModeration/index.tsx:72
+#: src/screens/Onboarding/StepModeration/index.tsx:60
msgid "You're in control"
-msgstr ""
+msgstr "Vous avez le contrôle"
#: src/screens/Deactivated.tsx:87
#: src/screens/Deactivated.tsx:88
#: src/screens/Deactivated.tsx:103
msgid "You're in line"
-msgstr ""
+msgstr "Vous êtes dans la file d’attente"
-#: src/screens/Onboarding/StepFinished.tsx:90
+#: src/screens/Onboarding/StepFinished.tsx:94
msgid "You're ready to go!"
+msgstr "Vous êtes prêt à partir !"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:98
+#: src/lib/moderation/useModerationCauseDescription.ts:101
+msgid "You've chosen to hide a word or tag within this post."
msgstr ""
#: src/view/com/posts/FollowingEndOfFeed.tsx:48
msgid "You've reached the end of your feed! Find some more accounts to follow."
-msgstr "Vous avez atteint la fin de votre fil d’actu ! Trouvez d’autres comptes à suivre."
+msgstr "Vous avez atteint la fin de votre fil d’actu ! Trouvez d’autres comptes à suivre."
-#: src/view/com/auth/create/Step1.tsx:74
+#: src/screens/Signup/index.tsx:150
msgid "Your account"
msgstr "Votre compte"
-#: src/view/com/modals/DeleteAccount.tsx:67
+#: src/view/com/modals/DeleteAccount.tsx:68
msgid "Your account has been deleted"
msgstr "Votre compte a été supprimé"
#: src/view/screens/Settings/ExportCarDialog.tsx:47
msgid "Your account repository, containing all public data records, can be downloaded as a \"CAR\" file. This file does not include media embeds, such as images, or your private data, which must be fetched separately."
-msgstr ""
+msgstr "Le dépôt de votre compte, qui contient toutes les données publiques, peut être téléchargé sous la forme d’un fichier « CAR ». Ce fichier n’inclut pas les éléments multimédias, tels que les images, ni vos données privées, qui doivent être récupérées séparément."
-#: src/view/com/auth/create/Step1.tsx:234
+#: src/screens/Signup/StepInfo/index.tsx:121
msgid "Your birth date"
msgstr "Votre date de naissance"
#: src/view/com/modals/InAppBrowserConsent.tsx:47
msgid "Your choice will be saved, but can be changed later in settings."
-msgstr ""
+msgstr "Votre choix sera enregistré, mais vous pourrez le modifier ultérieurement dans les paramètres."
-#: src/screens/Onboarding/StepFollowingFeed.tsx:61
+#: src/screens/Onboarding/StepFollowingFeed.tsx:62
msgid "Your default feed is \"Following\""
-msgstr ""
+msgstr "Votre fil d’actu par défaut est « Following »"
-#: src/view/com/auth/create/state.ts:153
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:70
+#: src/screens/Login/ForgotPasswordForm.tsx:57
+#: src/screens/Signup/state.ts:227
#: src/view/com/modals/ChangePassword.tsx:54
msgid "Your email appears to be invalid."
msgstr "Votre e-mail semble être invalide."
-#: src/view/com/modals/Waitlist.tsx:109
-msgid "Your email has been saved! We'll be in touch soon."
-msgstr "Votre e-mail a été enregistré ! Nous vous contacterons bientôt."
-
#: src/view/com/modals/ChangeEmail.tsx:125
msgid "Your email has been updated but not verified. As a next step, please verify your new email."
msgstr "Votre e-mail a été mis à jour, mais n’a pas été vérifié. L’étape suivante consiste à vérifier votre nouvel e-mail."
@@ -4575,45 +5767,42 @@ msgstr "Votre e-mail n’a pas encore été vérifié. Il s’agit d’une mesur
#: src/view/com/posts/FollowingEmptyState.tsx:47
msgid "Your following feed is empty! Follow more users to see what's happening."
-msgstr "Votre fil d’actu des comptes suivis est vide ! Suivez plus de comptes pour voir ce qui se passe."
+msgstr "Votre fil d’actu des comptes suivis est vide ! Suivez plus de comptes pour voir ce qui se passe."
-#: src/view/com/auth/create/Step3.tsx:45
+#: src/screens/Signup/StepHandle.tsx:72
msgid "Your full handle will be"
msgstr "Votre nom complet sera"
-#: src/view/com/modals/ChangeHandle.tsx:270
+#: src/view/com/modals/ChangeHandle.tsx:271
msgid "Your full handle will be <0>@{0}0>"
msgstr "Votre pseudo complet sera <0>@{0}0>"
-#: src/view/screens/Settings.tsx:430
-#: src/view/shell/desktop/RightNav.tsx:137
-#: src/view/shell/Drawer.tsx:660
-#~ msgid "Your invite codes are hidden when logged in using an App Password"
-#~ msgstr "Vos codes d’invitation sont cachés lorsque vous êtes connecté à l’aide d’un mot de passe d’application."
+#: src/components/dialogs/MutedWords.tsx:220
+msgid "Your muted words"
+msgstr "Vos mots masqués"
-#: src/view/com/modals/ChangePassword.tsx:155
+#: src/view/com/modals/ChangePassword.tsx:157
msgid "Your password has been changed successfully!"
-msgstr ""
+msgstr "Votre mot de passe a été modifié avec succès !"
-#: src/view/com/composer/Composer.tsx:267
+#: src/view/com/composer/Composer.tsx:284
msgid "Your post has been published"
msgstr "Votre post a été publié"
-#: src/screens/Onboarding/StepFinished.tsx:105
+#: src/screens/Onboarding/StepFinished.tsx:109
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:59
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:59
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:61
msgid "Your posts, likes, and blocks are public. Mutes are private."
msgstr "Vos posts, les likes et les blocages sont publics. Les silences (comptes masqués) sont privés."
-#: src/view/com/modals/SwitchAccount.tsx:84
-#: src/view/screens/Settings/index.tsx:118
+#: src/view/screens/Settings/index.tsx:125
msgid "Your profile"
msgstr "Votre profil"
-#: src/view/com/composer/Composer.tsx:266
+#: src/view/com/composer/Composer.tsx:283
msgid "Your reply has been published"
msgstr "Votre réponse a été publiée"
-#: src/view/com/auth/create/Step3.tsx:28
+#: src/screens/Signup/index.tsx:152
msgid "Your user handle"
msgstr "Votre pseudo"
diff --git a/src/locale/locales/ga/messages.po b/src/locale/locales/ga/messages.po
new file mode 100644
index 0000000000..8b79ff6321
--- /dev/null
+++ b/src/locale/locales/ga/messages.po
@@ -0,0 +1,6031 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: bsky\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-11-05 16:01-0800\n"
+"PO-Revision-Date: 2023-11-05 16:01-0800\n"
+"Last-Translator: Kevin Scannell \n"
+"Language-Team: Irish \n"
+"Language: ga\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n < 11 ? 3 : 4\n"
+
+#: src/view/com/modals/VerifyEmail.tsx:142
+msgid "(no email)"
+msgstr "(gan ríomhphost)"
+
+#: src/screens/Profile/Header/Metrics.tsx:44
+msgid "{following} following"
+msgstr "{following} á leanúint"
+
+#: src/view/screens/Settings.tsx:NaN
+#~ msgid "{invitesAvailable} invite code available"
+#~ msgstr "{invitesAvailable} chód cuiridh ar fáil"
+
+#: src/view/screens/Settings.tsx:NaN
+#~ msgid "{invitesAvailable} invite codes available"
+#~ msgstr "{invitesAvailable} cód cuiridh ar fáil"
+
+#: src/view/shell/Drawer.tsx:443
+msgid "{numUnreadNotifications} unread"
+msgstr "{numUnreadNotifications} gan léamh"
+
+#: src/view/com/threadgate/WhoCanReply.tsx:158
+msgid "<0/> members"
+msgstr "<0/> ball"
+
+#: src/view/shell/Drawer.tsx:97
+msgid "<0>{0}0> following"
+msgstr ""
+
+#: src/screens/Profile/Header/Metrics.tsx:45
+msgid "<0>{following} 0><1>following1>"
+msgstr "<0>{following} 0><1>á leanúint1>"
+
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:30
+msgid "<0>Choose your0><1>Recommended1><2>Feeds2>"
+msgstr "<0>Roghnaigh do chuid0><1>Fothaí1><2>Molta2>"
+
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:37
+msgid "<0>Follow some0><1>Recommended1><2>Users2>"
+msgstr "<0>Lean cúpla0><1>Úsáideoirí1><2>Molta2>"
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:21
+msgid "<0>Welcome to0><1>Bluesky1>"
+msgstr "<0>Fáilte go0><1>Bluesky1>"
+
+#: src/screens/Profile/Header/Handle.tsx:42
+msgid "⚠Invalid Handle"
+msgstr "⚠Leasainm Neamhbhailí"
+
+#: src/view/com/util/moderation/LabelInfo.tsx:45
+#~ msgid "A content warning has been applied to this {0}."
+#~ msgstr "Cuireadh rabhadh ábhair leis an {0} seo."
+
+#: src/lib/hooks/useOTAUpdate.ts:16
+#~ msgid "A new version of the app is available. Please update to continue using the app."
+#~ msgstr "Tá leagan nua den aip ar fáil. Uasdátaigh leis an aip a úsáid anois."
+
+#: src/view/com/util/ViewHeader.tsx:89
+#: src/view/screens/Search/Search.tsx:649
+msgid "Access navigation links and settings"
+msgstr "Oscail nascanna agus socruithe"
+
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:52
+msgid "Access profile and other navigation links"
+msgstr "Oscail próifíl agus nascanna eile"
+
+#: src/view/com/modals/EditImage.tsx:300
+#: src/view/screens/Settings/index.tsx:470
+msgid "Accessibility"
+msgstr "Inrochtaineacht"
+
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "account"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:144
+#: src/view/screens/Settings/index.tsx:327
+#: src/view/screens/Settings/index.tsx:743
+msgid "Account"
+msgstr "Cuntas"
+
+#: src/view/com/profile/ProfileMenu.tsx:139
+msgid "Account blocked"
+msgstr "Cuntas blocáilte"
+
+#: src/view/com/profile/ProfileMenu.tsx:153
+msgid "Account followed"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:113
+msgid "Account muted"
+msgstr "Cuireadh an cuntas i bhfolach"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:93
+#: src/lib/moderation/useModerationCauseDescription.ts:91
+msgid "Account Muted"
+msgstr "Cuireadh an cuntas i bhfolach"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:82
+msgid "Account Muted by List"
+msgstr "Cuireadh an cuntas i bhfolach trí liosta"
+
+#: src/view/com/util/AccountDropdownBtn.tsx:41
+msgid "Account options"
+msgstr "Roghanna cuntais"
+
+#: src/view/com/util/AccountDropdownBtn.tsx:25
+msgid "Account removed from quick access"
+msgstr "Baineadh an cuntas ón mearliosta"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:137
+#: src/view/com/profile/ProfileMenu.tsx:128
+msgid "Account unblocked"
+msgstr "Cuntas díbhlocáilte"
+
+#: src/view/com/profile/ProfileMenu.tsx:166
+msgid "Account unfollowed"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:102
+msgid "Account unmuted"
+msgstr "Níl an cuntas i bhfolach a thuilleadh"
+
+#: src/components/dialogs/MutedWords.tsx:164
+#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:150
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
+#: src/view/com/modals/UserAddRemoveLists.tsx:219
+#: src/view/screens/ProfileList.tsx:827
+msgid "Add"
+msgstr "Cuir leis"
+
+#: src/view/com/modals/SelfLabel.tsx:56
+msgid "Add a content warning"
+msgstr "Cuir rabhadh faoin ábhar leis"
+
+#: src/view/screens/ProfileList.tsx:817
+msgid "Add a user to this list"
+msgstr "Cuir cuntas leis an liosta seo"
+
+#: src/components/dialogs/SwitchAccount.tsx:55
+#: src/view/screens/Settings/index.tsx:402
+#: src/view/screens/Settings/index.tsx:411
+msgid "Add account"
+msgstr "Cuir cuntas leis seo"
+
+#: src/view/com/composer/photos/Gallery.tsx:119
+#: src/view/com/composer/photos/Gallery.tsx:180
+#: src/view/com/modals/AltImage.tsx:117
+msgid "Add alt text"
+msgstr "Cuir téacs malartach leis seo"
+
+#: src/view/screens/AppPasswords.tsx:104
+#: src/view/screens/AppPasswords.tsx:145
+#: src/view/screens/AppPasswords.tsx:158
+msgid "Add App Password"
+msgstr "Cuir pasfhocal aipe leis seo"
+
+#: src/view/com/modals/report/InputIssueDetails.tsx:41
+#: src/view/com/modals/report/Modal.tsx:191
+#~ msgid "Add details"
+#~ msgstr "Cuir mionsonraí leis seo"
+
+#: src/view/com/modals/report/Modal.tsx:194
+#~ msgid "Add details to report"
+#~ msgstr "Cuir mionsonraí leis an tuairisc"
+
+#: src/view/com/composer/Composer.tsx:467
+msgid "Add link card"
+msgstr "Cuir cárta leanúna leis seo"
+
+#: src/view/com/composer/Composer.tsx:472
+msgid "Add link card:"
+msgstr "Cuir cárta leanúna leis seo:"
+
+#: src/components/dialogs/MutedWords.tsx:157
+msgid "Add mute word for configured settings"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:86
+msgid "Add muted words and tags"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:416
+msgid "Add the following DNS record to your domain:"
+msgstr "Cuir an taifead DNS seo a leanas le d'fhearann:"
+
+#: src/view/com/profile/ProfileMenu.tsx:263
+#: src/view/com/profile/ProfileMenu.tsx:266
+msgid "Add to Lists"
+msgstr "Cuir le liostaí"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:234
+msgid "Add to my feeds"
+msgstr "Cuir le mo chuid fothaí"
+
+#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:139
+msgid "Added"
+msgstr "Curtha leis"
+
+#: src/view/com/modals/ListAddRemoveUsers.tsx:191
+#: src/view/com/modals/UserAddRemoveLists.tsx:144
+msgid "Added to list"
+msgstr "Curtha leis an liosta"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:108
+msgid "Added to my feeds"
+msgstr "Curtha le mo chuid fothaí"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:173
+msgid "Adjust the number of likes a reply must have to be shown in your feed."
+msgstr "Sonraigh an méid moltaí ar fhreagra atá de dhíth le bheith le feiceáil i d'fhotha."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:117
+#: src/view/com/modals/SelfLabel.tsx:75
+msgid "Adult Content"
+msgstr "Ábhar do dhaoine fásta"
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:141
+#~ msgid "Adult content can only be enabled via the Web at <0/>."
+#~ msgstr "Ní féidir ábhar do dhaoine fásta a chur ar fáil ach tríd an nGréasán ag <0/>."
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
+#~ msgid "Adult content can only be enabled via the Web at <0>bsky.app0>."
+#~ msgstr "Ní féidir ábhar do dhaoine fásta a chur ar fáil ach tríd an nGréasán ag <0>bsky.app0>."
+
+#: src/components/moderation/LabelPreference.tsx:242
+msgid "Adult content is disabled."
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:375
+#: src/view/screens/Settings/index.tsx:684
+msgid "Advanced"
+msgstr "Ardleibhéal"
+
+#: src/view/screens/Feeds.tsx:666
+msgid "All the feeds you've saved, right in one place."
+msgstr "Na fothaí go léir a shábháil tú, in áit amháin."
+
+#: src/screens/Login/ForgotPasswordForm.tsx:178
+#: src/view/com/modals/ChangePassword.tsx:170
+msgid "Already have a code?"
+msgstr "An bhfuil cód agat cheana?"
+
+#: src/screens/Login/ChooseAccountForm.tsx:39
+msgid "Already signed in as @{0}"
+msgstr "Logáilte isteach cheana mar @{0}"
+
+#: src/view/com/composer/photos/Gallery.tsx:130
+msgid "ALT"
+msgstr "ALT"
+
+#: src/view/com/modals/EditImage.tsx:316
+msgid "Alt text"
+msgstr "Téacs malartach"
+
+#: src/view/com/composer/photos/Gallery.tsx:209
+msgid "Alt text describes images for blind and low-vision users, and helps give context to everyone."
+msgstr "Cuireann an téacs malartach síos ar na híomhánna do dhaoine atá dall nó a bhfuil lagú radhairc orthu agus cuireann sé an comhthéacs ar fáil do chuile dhuine."
+
+#: src/view/com/modals/VerifyEmail.tsx:124
+msgid "An email has been sent to {0}. It includes a confirmation code which you can enter below."
+msgstr "Cuireadh teachtaireacht ríomhphoist chuig {0}. Tá cód dearbhaithe faoi iamh. Is féidir leat an cód a chur isteach thíos anseo."
+
+#: src/view/com/modals/ChangeEmail.tsx:119
+msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below."
+msgstr "Cuireadh teachtaireacht ríomhphoist chuig do sheanseoladh. {0}. Tá cód dearbhaithe faoi iamh."
+
+#: src/lib/moderation/useReportOptions.ts:26
+msgid "An issue not included in these options"
+msgstr ""
+
+#: src/view/com/profile/FollowButton.tsx:35
+#: src/view/com/profile/FollowButton.tsx:45
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:188
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:198
+msgid "An issue occurred, please try again."
+msgstr "Tharla fadhb. Déan iarracht eile, le do thoil."
+
+#: src/view/com/notifications/FeedItem.tsx:240
+#: src/view/com/threadgate/WhoCanReply.tsx:178
+msgid "and"
+msgstr "agus"
+
+#: src/screens/Onboarding/index.tsx:32
+msgid "Animals"
+msgstr "Ainmhithe"
+
+#: src/lib/moderation/useReportOptions.ts:31
+msgid "Anti-Social Behavior"
+msgstr ""
+
+#: src/view/screens/LanguageSettings.tsx:95
+msgid "App Language"
+msgstr "Teanga na haipe"
+
+#: src/view/screens/AppPasswords.tsx:223
+msgid "App password deleted"
+msgstr "Pasfhocal na haipe scriosta"
+
+#: src/view/com/modals/AddAppPasswords.tsx:135
+msgid "App Password names can only contain letters, numbers, spaces, dashes, and underscores."
+msgstr "Ní féidir ach litreacha, uimhreacha, spásanna, daiseanna agus fostríocanna a bheith in ainmneacha phasfhocal na haipe."
+
+#: src/view/com/modals/AddAppPasswords.tsx:100
+msgid "App Password names must be at least 4 characters long."
+msgstr "Caithfear 4 charachtar ar a laghad a bheith in ainmneacha phasfhocal na haipe."
+
+#: src/view/screens/Settings/index.tsx:695
+msgid "App password settings"
+msgstr "Socruithe phasfhocal na haipe"
+
+#: src/view/screens/Settings.tsx:650
+#~ msgid "App passwords"
+#~ msgstr "Pasfhocal na haipe"
+
+#: src/Navigation.tsx:251
+#: src/view/screens/AppPasswords.tsx:189
+#: src/view/screens/Settings/index.tsx:704
+msgid "App Passwords"
+msgstr "Pasfhocal na haipe"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:133
+#: src/components/moderation/LabelsOnMeDialog.tsx:136
+msgid "Appeal"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:201
+msgid "Appeal \"{0}\" label"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:250
+#~ msgid "Appeal content warning"
+#~ msgstr "Déan achomharc in aghaidh rabhadh ábhair."
+
+#: src/view/com/modals/AppealLabel.tsx:65
+#~ msgid "Appeal Content Warning"
+#~ msgstr "Achomharc in aghaidh rabhadh ábhair"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:192
+msgid "Appeal submitted."
+msgstr ""
+
+#: src/view/com/util/moderation/LabelInfo.tsx:52
+#~ msgid "Appeal this decision"
+#~ msgstr "Dean achomharc in aghaidh an chinnidh seo"
+
+#: src/view/com/util/moderation/LabelInfo.tsx:56
+#~ msgid "Appeal this decision."
+#~ msgstr "Dean achomharc in aghaidh an chinnidh seo."
+
+#: src/view/screens/Settings/index.tsx:485
+msgid "Appearance"
+msgstr "Cuma"
+
+#: src/view/screens/AppPasswords.tsx:265
+msgid "Are you sure you want to delete the app password \"{name}\"?"
+msgstr "An bhfuil tú cinnte gur mhaith leat pasfhocal na haipe “{name}” a scriosadh?"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:280
+msgid "Are you sure you want to remove {0} from your feeds?"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:509
+msgid "Are you sure you'd like to discard this draft?"
+msgstr "An bhfuil tú cinnte gur mhaith leat an dréacht seo a scriosadh?"
+
+#: src/components/dialogs/MutedWords.tsx:281
+msgid "Are you sure?"
+msgstr "Lánchinnte?"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:233
+#~ msgid "Are you sure? This cannot be undone."
+#~ msgstr "An bhfuil tú cinnte? Ní féidir é seo a chealú."
+
+#: src/view/com/composer/select-language/SuggestedLanguage.tsx:60
+msgid "Are you writing in <0>{0}0>?"
+msgstr "An bhfuil tú ag scríobh sa teanga <0>{0}0>?"
+
+#: src/screens/Onboarding/index.tsx:26
+msgid "Art"
+msgstr "Ealaín"
+
+#: src/view/com/modals/SelfLabel.tsx:123
+msgid "Artistic or non-erotic nudity."
+msgstr "Lomnochtacht ealaíonta nó gan a bheith gáirsiúil."
+
+#: src/screens/Signup/StepHandle.tsx:118
+msgid "At least 3 characters"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:246
+#: src/components/moderation/LabelsOnMeDialog.tsx:247
+#: src/screens/Login/ChooseAccountForm.tsx:73
+#: src/screens/Login/ChooseAccountForm.tsx:78
+#: src/screens/Login/ForgotPasswordForm.tsx:129
+#: src/screens/Login/ForgotPasswordForm.tsx:135
+#: src/screens/Login/LoginForm.tsx:221
+#: src/screens/Login/LoginForm.tsx:227
+#: src/screens/Login/SetNewPasswordForm.tsx:160
+#: src/screens/Login/SetNewPasswordForm.tsx:166
+#: src/screens/Profile/Header/Shell.tsx:96
+#: src/screens/Signup/index.tsx:179
+#: src/view/com/util/ViewHeader.tsx:87
+msgid "Back"
+msgstr "Ar ais"
+
+#: src/view/com/post-thread/PostThread.tsx:479
+#~ msgctxt "action"
+#~ msgid "Back"
+#~ msgstr "Ar ais"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:144
+msgid "Based on your interest in {interestsText}"
+msgstr "Toisc go bhfuil suim agat in {interestsText}"
+
+#: src/view/screens/Settings/index.tsx:542
+msgid "Basics"
+msgstr "Bunrudaí"
+
+#: src/components/dialogs/BirthDateSettings.tsx:107
+msgid "Birthday"
+msgstr "Breithlá"
+
+#: src/view/screens/Settings/index.tsx:359
+msgid "Birthday:"
+msgstr "Breithlá:"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+msgid "Block"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:300
+#: src/view/com/profile/ProfileMenu.tsx:307
+msgid "Block Account"
+msgstr "Blocáil an cuntas seo"
+
+#: src/view/com/profile/ProfileMenu.tsx:344
+msgid "Block Account?"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:530
+msgid "Block accounts"
+msgstr "Blocáil na cuntais seo"
+
+#: src/view/screens/ProfileList.tsx:478
+#: src/view/screens/ProfileList.tsx:634
+msgid "Block list"
+msgstr "Liosta blocála"
+
+#: src/view/screens/ProfileList.tsx:629
+msgid "Block these accounts?"
+msgstr "An bhfuil fonn ort na cuntais seo a bhlocáil?"
+
+#: src/view/screens/ProfileList.tsx:319
+#~ msgid "Block this List"
+#~ msgstr "Blocáil an liosta seo"
+
+#: src/view/com/lists/ListCard.tsx:110
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:55
+msgid "Blocked"
+msgstr "Blocáilte"
+
+#: src/screens/Moderation/index.tsx:267
+msgid "Blocked accounts"
+msgstr "Cuntais bhlocáilte"
+
+#: src/Navigation.tsx:134
+#: src/view/screens/ModerationBlockedAccounts.tsx:107
+msgid "Blocked Accounts"
+msgstr "Cuntais bhlocáilte"
+
+#: src/view/com/profile/ProfileMenu.tsx:356
+msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
+msgstr "Ní féidir leis na cuntais bhlocáilte freagra a thabhairt ar do chomhráite, tagairt a dhéanamh duit, ná aon phlé eile a bheith acu leat."
+
+#: src/view/screens/ModerationBlockedAccounts.tsx:115
+msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours."
+msgstr "Ní féidir leis na cuntais bhlocáilte freagra a thabhairt ar do chomhráite, tagairt a dhéanamh duit, ná aon phlé eile a bheith acu leat. Ní fheicfidh tú a gcuid ábhair agus ní fheicfidh siad do chuid ábhair."
+
+#: src/view/com/post-thread/PostThread.tsx:313
+msgid "Blocked post."
+msgstr "Postáil bhlocáilte."
+
+#: src/screens/Profile/Sections/Labels.tsx:152
+msgid "Blocking does not prevent this labeler from placing labels on your account."
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:631
+msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
+msgstr "Tá an bhlocáil poiblí. Ní féidir leis na cuntais bhlocáilte freagra a thabhairt ar do chomhráite, tagairt a dhéanamh duit, ná aon phlé eile a bheith acu leat."
+
+#: src/view/com/profile/ProfileMenu.tsx:353
+msgid "Blocking will not prevent labels from being applied on your account, but it will stop this account from replying in your threads or interacting with you."
+msgstr ""
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:98
+#: src/view/com/auth/SplashScreen.web.tsx:169
+msgid "Blog"
+msgstr "Blag"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:32
+#: src/view/com/auth/server-input/index.tsx:89
+#: src/view/com/auth/server-input/index.tsx:91
+msgid "Bluesky"
+msgstr "Bluesky"
+
+#: src/view/com/auth/server-input/index.tsx:154
+msgid "Bluesky is an open network where you can choose your hosting provider. Custom hosting is now available in beta for developers."
+msgstr "Is líonra oscailte é Bluesky, lenar féidir leat do sholáthraí óstála féin a roghnú. Tá leagan béite d'óstáil shaincheaptha ar fáil d'fhorbróirí anois."
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:80
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:82
+msgid "Bluesky is flexible."
+msgstr "Tá Bluesky solúbtha."
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:69
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:71
+msgid "Bluesky is open."
+msgstr "Tá Bluesky oscailte."
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:56
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:58
+msgid "Bluesky is public."
+msgstr "Tá Bluesky poiblí."
+
+#: src/view/com/modals/Waitlist.tsx:70
+#~ msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
+#~ msgstr "Baineann Bluesky úsáid as cuirí le pobal níos sláintiúla a thógáil. Mura bhfuil aithne agat ar dhuine a bhfuil cuireadh acu is féidir leat d’ainm a chur ar an liosta feithimh agus cuirfidh muid cuireadh chugat roimh i bhfad."
+
+#: src/screens/Moderation/index.tsx:533
+msgid "Bluesky will not show your profile and posts to logged-out users. Other apps may not honor this request. This does not make your account private."
+msgstr "Ní thaispeánfaidh Bluesky do phróifíl ná do chuid postálacha d’úsáideoirí atá logáilte amach. Is féidir nach gcloífidh aipeanna eile leis an iarratas seo. I bhfocail eile, ní bheidh do chuntas anseo príobháideach."
+
+#: src/view/com/modals/ServerInput.tsx:78
+#~ msgid "Bluesky.Social"
+#~ msgstr "Bluesky.Social"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:53
+msgid "Blur images"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:51
+msgid "Blur images and filter from feeds"
+msgstr ""
+
+#: src/screens/Onboarding/index.tsx:33
+msgid "Books"
+msgstr "Leabhair"
+
+#: src/view/screens/Settings/index.tsx:859
+#~ msgid "Build version {0} {1}"
+#~ msgstr "Leagan {0} {1}"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:92
+#: src/view/com/auth/SplashScreen.web.tsx:166
+msgid "Business"
+msgstr "Gnó"
+
+#: src/view/com/modals/ServerInput.tsx:115
+#~ msgid "Button disabled. Input custom domain to proceed."
+#~ msgstr "Cnaipe as feidhm. Úsáid sainfhearann le leanúint ar aghaidh."
+
+#: src/view/com/profile/ProfileSubpageHeader.tsx:157
+msgid "by —"
+msgstr "le —"
+
+#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:100
+msgid "by {0}"
+msgstr "le {0}"
+
+#: src/components/LabelingServiceCard/index.tsx:57
+msgid "By {0}"
+msgstr ""
+
+#: src/view/com/profile/ProfileSubpageHeader.tsx:161
+msgid "by <0/>"
+msgstr "le <0/>"
+
+#: src/screens/Signup/StepInfo/Policies.tsx:74
+msgid "By creating an account you agree to the {els}."
+msgstr ""
+
+#: src/view/com/profile/ProfileSubpageHeader.tsx:159
+msgid "by you"
+msgstr "leat"
+
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:77
+msgid "Camera"
+msgstr "Ceamara"
+
+#: src/view/com/modals/AddAppPasswords.tsx:217
+msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long."
+msgstr "Ní féidir ach litreacha, uimhreacha, spásanna, daiseanna agus fostríocanna a bheith ann. Caithfear 4 charachtar ar a laghad a bheith ann agus gan níos mó ná 32 charachtar."
+
+#: src/components/Menu/index.tsx:213
+#: src/components/Prompt.tsx:113
+#: src/components/Prompt.tsx:115
+#: src/components/TagMenu/index.tsx:268
+#: src/view/com/composer/Composer.tsx:317
+#: src/view/com/composer/Composer.tsx:322
+#: src/view/com/modals/ChangeEmail.tsx:218
+#: src/view/com/modals/ChangeEmail.tsx:220
+#: src/view/com/modals/ChangeHandle.tsx:154
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
+#: src/view/com/modals/CreateOrEditList.tsx:356
+#: src/view/com/modals/crop-image/CropImage.web.tsx:138
+#: src/view/com/modals/EditImage.tsx:324
+#: src/view/com/modals/EditProfile.tsx:250
+#: src/view/com/modals/InAppBrowserConsent.tsx:78
+#: src/view/com/modals/InAppBrowserConsent.tsx:80
+#: src/view/com/modals/LinkWarning.tsx:105
+#: src/view/com/modals/LinkWarning.tsx:107
+#: src/view/com/modals/Repost.tsx:88
+#: src/view/com/modals/VerifyEmail.tsx:247
+#: src/view/com/modals/VerifyEmail.tsx:253
+#: src/view/screens/Search/Search.tsx:718
+#: src/view/shell/desktop/Search.tsx:239
+msgid "Cancel"
+msgstr "Cealaigh"
+
+#: src/view/com/modals/CreateOrEditList.tsx:361
+#: src/view/com/modals/DeleteAccount.tsx:155
+#: src/view/com/modals/DeleteAccount.tsx:233
+msgctxt "action"
+msgid "Cancel"
+msgstr "Cealaigh"
+
+#: src/view/com/modals/DeleteAccount.tsx:151
+#: src/view/com/modals/DeleteAccount.tsx:229
+msgid "Cancel account deletion"
+msgstr "Ná scrios an chuntas"
+
+#: src/view/com/modals/ChangeHandle.tsx:150
+msgid "Cancel change handle"
+msgstr "Ná hathraigh an leasainm"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:135
+msgid "Cancel image crop"
+msgstr "Cealaigh bearradh na híomhá"
+
+#: src/view/com/modals/EditProfile.tsx:245
+msgid "Cancel profile editing"
+msgstr "Cealaigh eagarthóireacht na próifíle"
+
+#: src/view/com/modals/Repost.tsx:79
+msgid "Cancel quote post"
+msgstr "Ná déan athlua na postála"
+
+#: src/view/com/modals/ListAddRemoveUsers.tsx:87
+#: src/view/shell/desktop/Search.tsx:235
+msgid "Cancel search"
+msgstr "Cealaigh an cuardach"
+
+#: src/view/com/modals/Waitlist.tsx:136
+#~ msgid "Cancel waitlist signup"
+#~ msgstr "Ná sábháil d’ainm ar an liosta feithimh"
+
+#: src/view/com/modals/LinkWarning.tsx:106
+msgid "Cancels opening the linked website"
+msgstr ""
+
+#: src/view/com/modals/VerifyEmail.tsx:152
+msgid "Change"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:353
+msgctxt "action"
+msgid "Change"
+msgstr "Athraigh"
+
+#: src/view/screens/Settings/index.tsx:716
+msgid "Change handle"
+msgstr "Athraigh mo leasainm"
+
+#: src/view/com/modals/ChangeHandle.tsx:162
+#: src/view/screens/Settings/index.tsx:727
+msgid "Change Handle"
+msgstr "Athraigh mo leasainm"
+
+#: src/view/com/modals/VerifyEmail.tsx:147
+msgid "Change my email"
+msgstr "Athraigh mo ríomhphost"
+
+#: src/view/screens/Settings/index.tsx:754
+msgid "Change password"
+msgstr "Athraigh mo phasfhocal"
+
+#: src/view/com/modals/ChangePassword.tsx:141
+#: src/view/screens/Settings/index.tsx:765
+msgid "Change Password"
+msgstr "Athraigh mo phasfhocal"
+
+#: src/view/com/composer/select-language/SuggestedLanguage.tsx:73
+msgid "Change post language to {0}"
+msgstr "Athraigh an teanga phostála go {0}"
+
+#: src/view/screens/Settings/index.tsx:733
+#~ msgid "Change your Bluesky password"
+#~ msgstr "Athraigh do phasfhocal Bluesky"
+
+#: src/view/com/modals/ChangeEmail.tsx:109
+msgid "Change Your Email"
+msgstr "Athraigh do ríomhphost"
+
+#: src/screens/Deactivated.tsx:72
+#: src/screens/Deactivated.tsx:76
+msgid "Check my status"
+msgstr "Seiceáil mo stádas"
+
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:121
+msgid "Check out some recommended feeds. Tap + to add them to your list of pinned feeds."
+msgstr "Cuir súil ar na fothaí seo. Brúigh + len iad a chur le liosta na bhfothaí atá greamaithe agat."
+
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:185
+msgid "Check out some recommended users. Follow them to see similar users."
+msgstr "Cuir súil ar na húsáideoirí seo. Lean iad le húsáideoirí atá cosúil leo a fheiceáil."
+
+#: src/view/com/modals/DeleteAccount.tsx:168
+msgid "Check your inbox for an email with the confirmation code to enter below:"
+msgstr "Féach ar do bhosca ríomhphoist le haghaidh teachtaireachta leis an gcód dearbhaithe atá le cur isteach thíos."
+
+#: src/view/com/modals/Threadgate.tsx:72
+msgid "Choose \"Everybody\" or \"Nobody\""
+msgstr "Roghnaigh “Chuile Dhuine” nó “Duine Ar Bith”"
+
+#: src/view/screens/Settings/index.tsx:697
+#~ msgid "Choose a new Bluesky username or create"
+#~ msgstr "Roghnaigh leasainm Bluesky nua nó cruthaigh leasainm"
+
+#: src/view/com/auth/server-input/index.tsx:79
+msgid "Choose Service"
+msgstr "Roghnaigh Seirbhís"
+
+#: src/screens/Onboarding/StepFinished.tsx:139
+msgid "Choose the algorithms that power your custom feeds."
+msgstr "Roghnaigh na halgartaim le haghaidh do chuid sainfhothaí."
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:83
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:85
+msgid "Choose the algorithms that power your experience with custom feeds."
+msgstr "Roghnaigh na halgartaim a shainíonn an dóigh a n-oibríonn do chuid sainfhothaí."
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:103
+#~ msgid "Choose your algorithmic feeds"
+#~ msgstr "Roghnaigh do chuid fothaí algartamacha"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:104
+msgid "Choose your main feeds"
+msgstr "Roghnaigh do phríomhfhothaí"
+
+#: src/screens/Signup/StepInfo/index.tsx:112
+msgid "Choose your password"
+msgstr "Roghnaigh do phasfhocal"
+
+#: src/view/screens/Settings/index.tsx:868
+msgid "Clear all legacy storage data"
+msgstr "Glan na sonraí oidhreachta ar fad atá i dtaisce."
+
+#: src/view/screens/Settings/index.tsx:871
+msgid "Clear all legacy storage data (restart after this)"
+msgstr "Glan na sonraí oidhreachta ar fad atá i dtaisce. Ansin atosaigh."
+
+#: src/view/screens/Settings/index.tsx:880
+msgid "Clear all storage data"
+msgstr "Glan na sonraí ar fad atá i dtaisce."
+
+#: src/view/screens/Settings/index.tsx:883
+msgid "Clear all storage data (restart after this)"
+msgstr "Glan na sonraí ar fad atá i dtaisce. Ansin atosaigh."
+
+#: src/view/com/util/forms/SearchInput.tsx:88
+#: src/view/screens/Search/Search.tsx:699
+msgid "Clear search query"
+msgstr "Glan an cuardach"
+
+#: src/view/screens/Settings/index.tsx:869
+msgid "Clears all legacy storage data"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:881
+msgid "Clears all storage data"
+msgstr ""
+
+#: src/view/screens/Support.tsx:40
+msgid "click here"
+msgstr "cliceáil anseo"
+
+#: src/components/TagMenu/index.web.tsx:138
+msgid "Click here to open tag menu for {tag}"
+msgstr ""
+
+#: src/components/RichText.tsx:192
+msgid "Click here to open tag menu for #{tag}"
+msgstr ""
+
+#: src/screens/Onboarding/index.tsx:35
+msgid "Climate"
+msgstr "Aeráid"
+
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
+msgid "Close"
+msgstr "Dún"
+
+#: src/components/Dialog/index.web.tsx:106
+#: src/components/Dialog/index.web.tsx:218
+msgid "Close active dialog"
+msgstr "Dún an dialóg oscailte"
+
+#: src/screens/Login/PasswordUpdatedForm.tsx:38
+msgid "Close alert"
+msgstr "Dún an rabhadh"
+
+#: src/view/com/util/BottomSheetCustomBackdrop.tsx:36
+msgid "Close bottom drawer"
+msgstr "Dún an tarraiceán íochtair"
+
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:36
+msgid "Close image"
+msgstr "Dún an íomhá"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:129
+msgid "Close image viewer"
+msgstr "Dún amharcóir na n-íomhánna"
+
+#: src/view/shell/index.web.tsx:55
+msgid "Close navigation footer"
+msgstr "Dún an buntásc"
+
+#: src/components/Menu/index.tsx:207
+#: src/components/TagMenu/index.tsx:262
+msgid "Close this dialog"
+msgstr ""
+
+#: src/view/shell/index.web.tsx:56
+msgid "Closes bottom navigation bar"
+msgstr "Dúnann sé seo an barra nascleanúna ag an mbun"
+
+#: src/screens/Login/PasswordUpdatedForm.tsx:39
+msgid "Closes password update alert"
+msgstr "Dúnann sé seo an rabhadh faoi uasdátú an phasfhocail"
+
+#: src/view/com/composer/Composer.tsx:319
+msgid "Closes post composer and discards post draft"
+msgstr "Dúnann sé seo cumadóir na postálacha agus ní shábhálann sé an dréacht"
+
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:37
+msgid "Closes viewer for header image"
+msgstr "Dúnann sé seo an t-amharcóir le haghaidh íomhá an cheanntáisc"
+
+#: src/view/com/notifications/FeedItem.tsx:321
+msgid "Collapses list of users for a given notification"
+msgstr "Laghdaíonn sé seo liosta na n-úsáideoirí le haghaidh an fhógra sin"
+
+#: src/screens/Onboarding/index.tsx:41
+msgid "Comedy"
+msgstr "Greann"
+
+#: src/screens/Onboarding/index.tsx:27
+msgid "Comics"
+msgstr "Greannáin"
+
+#: src/Navigation.tsx:241
+#: src/view/screens/CommunityGuidelines.tsx:32
+msgid "Community Guidelines"
+msgstr "Treoirlínte an phobail"
+
+#: src/screens/Onboarding/StepFinished.tsx:152
+msgid "Complete onboarding and start using your account"
+msgstr "Críochnaigh agus tosaigh ag baint úsáide as do chuntas."
+
+#: src/screens/Signup/index.tsx:154
+msgid "Complete the challenge"
+msgstr "Freagair an dúshlán"
+
+#: src/view/com/composer/Composer.tsx:438
+msgid "Compose posts up to {MAX_GRAPHEME_LENGTH} characters in length"
+msgstr "Scríobh postálacha chomh fada le {MAX_GRAPHEME_LENGTH} litir agus carachtair eile"
+
+#: src/view/com/composer/Prompt.tsx:24
+msgid "Compose reply"
+msgstr "Scríobh freagra"
+
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:81
+msgid "Configure content filtering setting for category: {0}"
+msgstr "Socraigh scagadh an ábhair le haghaidh catagóir: {0}"
+
+#: src/components/moderation/LabelPreference.tsx:81
+msgid "Configure content filtering setting for category: {name}"
+msgstr ""
+
+#: src/components/moderation/LabelPreference.tsx:244
+msgid "Configured in <0>moderation settings0>."
+msgstr ""
+
+#: src/components/Prompt.tsx:153
+#: src/components/Prompt.tsx:156
+#: src/view/com/modals/SelfLabel.tsx:154
+#: src/view/com/modals/VerifyEmail.tsx:231
+#: src/view/com/modals/VerifyEmail.tsx:233
+#: src/view/screens/PreferencesFollowingFeed.tsx:308
+#: src/view/screens/PreferencesThreads.tsx:159
+msgid "Confirm"
+msgstr "Dearbhaigh"
+
+#: src/view/com/modals/Confirm.tsx:75
+#: src/view/com/modals/Confirm.tsx:78
+#~ msgctxt "action"
+#~ msgid "Confirm"
+#~ msgstr "Dearbhaigh"
+
+#: src/view/com/modals/ChangeEmail.tsx:193
+#: src/view/com/modals/ChangeEmail.tsx:195
+msgid "Confirm Change"
+msgstr "Dearbhaigh an t-athrú"
+
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:35
+msgid "Confirm content language settings"
+msgstr "Dearbhaigh socruithe le haghaidh teanga an ábhair"
+
+#: src/view/com/modals/DeleteAccount.tsx:219
+msgid "Confirm delete account"
+msgstr "Dearbhaigh scriosadh an chuntais"
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:156
+#~ msgid "Confirm your age to enable adult content."
+#~ msgstr "Dearbhaigh d’aois chun ábhar do dhaoine fásta a fháil."
+
+#: src/screens/Moderation/index.tsx:301
+msgid "Confirm your age:"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:292
+msgid "Confirm your birthdate"
+msgstr ""
+
+#: src/view/com/modals/ChangeEmail.tsx:157
+#: src/view/com/modals/DeleteAccount.tsx:175
+#: src/view/com/modals/DeleteAccount.tsx:181
+#: src/view/com/modals/VerifyEmail.tsx:165
+msgid "Confirmation code"
+msgstr "Cód dearbhaithe"
+
+#: src/view/com/modals/Waitlist.tsx:120
+#~ msgid "Confirms signing up {email} to the waitlist"
+#~ msgstr "Dearbhaíonn sé seo go gcuirfear {email} leis an liosta feithimh"
+
+#: src/screens/Login/LoginForm.tsx:248
+msgid "Connecting..."
+msgstr "Ag nascadh…"
+
+#: src/screens/Signup/index.tsx:219
+msgid "Contact support"
+msgstr "Teagmháil le Support"
+
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "content"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:18
+msgid "Content Blocked"
+msgstr ""
+
+#: src/view/screens/Moderation.tsx:81
+#~ msgid "Content filtering"
+#~ msgstr "Scagadh ábhair"
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:44
+#~ msgid "Content Filtering"
+#~ msgstr "Scagadh Ábhair"
+
+#: src/screens/Moderation/index.tsx:285
+msgid "Content filters"
+msgstr ""
+
+#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74
+#: src/view/screens/LanguageSettings.tsx:278
+msgid "Content Languages"
+msgstr "Teangacha ábhair"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:75
+#: src/lib/moderation/useModerationCauseDescription.ts:75
+msgid "Content Not Available"
+msgstr "Ábhar nach bhfuil ar fáil"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:46
+#: src/components/moderation/ScreenHider.tsx:99
+#: src/lib/moderation/useGlobalLabelStrings.ts:22
+#: src/lib/moderation/useModerationCauseDescription.ts:38
+msgid "Content Warning"
+msgstr "Rabhadh ábhair"
+
+#: src/view/com/composer/labels/LabelsBtn.tsx:31
+msgid "Content warnings"
+msgstr "Rabhadh ábhair"
+
+#: src/components/Menu/index.web.tsx:84
+msgid "Context menu backdrop, click to close the menu."
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:161
+#: src/screens/Onboarding/StepFollowingFeed.tsx:154
+#: src/screens/Onboarding/StepInterests/index.tsx:252
+#: src/screens/Onboarding/StepModeration/index.tsx:103
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:118
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:96
+msgid "Continue"
+msgstr "Lean ar aghaidh"
+
+#: src/components/AccountList.tsx:108
+msgid "Continue as {0} (currently signed in)"
+msgstr ""
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:151
+#: src/screens/Onboarding/StepInterests/index.tsx:249
+#: src/screens/Onboarding/StepModeration/index.tsx:100
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:115
+#: src/screens/Signup/index.tsx:198
+msgid "Continue to next step"
+msgstr "Lean ar aghaidh go dtí an chéad chéim eile"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:158
+msgid "Continue to the next step"
+msgstr "Lean ar aghaidh go dtí an chéad chéim eile"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:199
+msgid "Continue to the next step without following any accounts"
+msgstr "Lean ar aghaidh go dtí an chéad chéim eile gan aon chuntas a leanúint"
+
+#: src/screens/Onboarding/index.tsx:44
+msgid "Cooking"
+msgstr "Cócaireacht"
+
+#: src/view/com/modals/AddAppPasswords.tsx:196
+#: src/view/com/modals/InviteCodes.tsx:183
+msgid "Copied"
+msgstr "Cóipeáilte"
+
+#: src/view/screens/Settings/index.tsx:251
+msgid "Copied build version to clipboard"
+msgstr "Leagan cóipeáilte sa ghearrthaisce"
+
+#: src/view/com/modals/AddAppPasswords.tsx:77
+#: src/view/com/modals/ChangeHandle.tsx:326
+#: src/view/com/modals/InviteCodes.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:158
+msgid "Copied to clipboard"
+msgstr "Cóipeáilte sa ghearrthaisce"
+
+#: src/view/com/modals/AddAppPasswords.tsx:190
+msgid "Copies app password"
+msgstr "Cóipeálann sé seo pasfhocal na haipe"
+
+#: src/view/com/modals/AddAppPasswords.tsx:189
+msgid "Copy"
+msgstr "Cóipeáil"
+
+#: src/view/com/modals/ChangeHandle.tsx:480
+msgid "Copy {0}"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:388
+msgid "Copy link to list"
+msgstr "Cóipeáil an nasc leis an liosta"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
+msgid "Copy link to post"
+msgstr "Cóipeáil an nasc leis an bpostáil"
+
+#: src/view/com/profile/ProfileHeader.tsx:294
+#~ msgid "Copy link to profile"
+#~ msgstr "Cóipeáil an nasc leis an bpróifíl"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:220
+#: src/view/com/util/forms/PostDropdownBtn.tsx:222
+msgid "Copy post text"
+msgstr "Cóipeáil téacs na postála"
+
+#: src/Navigation.tsx:246
+#: src/view/screens/CopyrightPolicy.tsx:29
+msgid "Copyright Policy"
+msgstr "An polasaí maidir le cóipcheart"
+
+#: src/view/screens/ProfileFeed.tsx:103
+msgid "Could not load feed"
+msgstr "Ní féidir an fotha a lódáil"
+
+#: src/view/screens/ProfileList.tsx:907
+msgid "Could not load list"
+msgstr "Ní féidir an liosta a lódáil"
+
+#: src/view/com/auth/create/Step2.tsx:91
+#~ msgid "Country"
+#~ msgstr "Tír"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:65
+#: src/view/com/auth/SplashScreen.tsx:75
+#: src/view/com/auth/SplashScreen.web.tsx:104
+msgid "Create a new account"
+msgstr "Cruthaigh cuntas nua"
+
+#: src/view/screens/Settings/index.tsx:403
+msgid "Create a new Bluesky account"
+msgstr "Cruthaigh cuntas nua Bluesky"
+
+#: src/screens/Signup/index.tsx:129
+msgid "Create Account"
+msgstr "Cruthaigh cuntas"
+
+#: src/view/com/modals/AddAppPasswords.tsx:227
+msgid "Create App Password"
+msgstr "Cruthaigh pasfhocal aipe"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:55
+#: src/view/com/auth/SplashScreen.tsx:66
+#: src/view/com/auth/SplashScreen.web.tsx:95
+msgid "Create new account"
+msgstr "Cruthaigh cuntas nua"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:93
+msgid "Create report for {0}"
+msgstr ""
+
+#: src/view/screens/AppPasswords.tsx:246
+msgid "Created {0}"
+msgstr "Cruthaíodh {0}"
+
+#: src/view/screens/ProfileFeed.tsx:616
+#~ msgid "Created by <0/>"
+#~ msgstr "Cruthaithe ag <0/>"
+
+#: src/view/screens/ProfileFeed.tsx:614
+#~ msgid "Created by you"
+#~ msgstr "Cruthaithe agat"
+
+#: src/view/com/composer/Composer.tsx:469
+msgid "Creates a card with a thumbnail. The card links to {url}"
+msgstr "Cruthaíonn sé seo cárta le mionsamhail. Nascann an cárta le {url}."
+
+#: src/screens/Onboarding/index.tsx:29
+msgid "Culture"
+msgstr "Cultúr"
+
+#: src/view/com/auth/server-input/index.tsx:97
+#: src/view/com/auth/server-input/index.tsx:99
+msgid "Custom"
+msgstr "Saincheaptha"
+
+#: src/view/com/modals/ChangeHandle.tsx:388
+msgid "Custom domain"
+msgstr "Sainfhearann"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:107
+#: src/view/screens/Feeds.tsx:692
+msgid "Custom feeds built by the community bring you new experiences and help you find the content you love."
+msgstr "Cruthaíonn an pobal fothaí chun eispéiris nua a chur ar fáil duit, agus chun cabhrú leat teacht ar an ábhar a thaitníonn leat"
+
+#: src/view/screens/PreferencesExternalEmbeds.tsx:55
+msgid "Customize media from external sites."
+msgstr "Oiriúnaigh na meáin ó shuíomhanna seachtracha"
+
+#: src/view/screens/Settings.tsx:687
+#~ msgid "Danger Zone"
+#~ msgstr "Limistéar Contúirte"
+
+#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:530
+msgid "Dark"
+msgstr "Dorcha"
+
+#: src/view/screens/Debug.tsx:63
+msgid "Dark mode"
+msgstr "Modh dorcha"
+
+#: src/view/screens/Settings/index.tsx:517
+msgid "Dark Theme"
+msgstr "Téama Dorcha"
+
+#: src/screens/Signup/StepInfo/index.tsx:132
+msgid "Date of birth"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:841
+msgid "Debug Moderation"
+msgstr ""
+
+#: src/view/screens/Debug.tsx:83
+msgid "Debug panel"
+msgstr "Painéal dífhabhtaithe"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:319
+#: src/view/screens/AppPasswords.tsx:268
+#: src/view/screens/ProfileList.tsx:613
+msgid "Delete"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:796
+msgid "Delete account"
+msgstr "Scrios an cuntas"
+
+#: src/view/com/modals/DeleteAccount.tsx:86
+msgid "Delete Account"
+msgstr "Scrios an Cuntas"
+
+#: src/view/screens/AppPasswords.tsx:239
+msgid "Delete app password"
+msgstr "Scrios pasfhocal na haipe"
+
+#: src/view/screens/AppPasswords.tsx:263
+msgid "Delete app password?"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:415
+msgid "Delete List"
+msgstr "Scrios an liosta"
+
+#: src/view/com/modals/DeleteAccount.tsx:222
+msgid "Delete my account"
+msgstr "Scrios mo chuntas"
+
+#: src/view/screens/Settings.tsx:706
+#~ msgid "Delete my account…"
+#~ msgstr "Scrios mo chuntas"
+
+#: src/view/screens/Settings/index.tsx:808
+msgid "Delete My Account…"
+msgstr "Scrios mo chuntas…"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:302
+#: src/view/com/util/forms/PostDropdownBtn.tsx:304
+msgid "Delete post"
+msgstr "Scrios an phostáil"
+
+#: src/view/screens/ProfileList.tsx:608
+msgid "Delete this list?"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:314
+msgid "Delete this post?"
+msgstr "An bhfuil fonn ort an phostáil seo a scriosadh?"
+
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:64
+msgid "Deleted"
+msgstr "Scriosta"
+
+#: src/view/com/post-thread/PostThread.tsx:305
+msgid "Deleted post."
+msgstr "Scriosadh an phostáil."
+
+#: src/view/com/modals/CreateOrEditList.tsx:301
+#: src/view/com/modals/CreateOrEditList.tsx:322
+#: src/view/com/modals/EditProfile.tsx:199
+#: src/view/com/modals/EditProfile.tsx:211
+msgid "Description"
+msgstr "Cur síos"
+
+#: src/view/screens/Settings.tsx:760
+#~ msgid "Developer Tools"
+#~ msgstr "Áiseanna forbróra"
+
+#: src/view/com/composer/Composer.tsx:218
+msgid "Did you want to say anything?"
+msgstr "Ar mhaith leat rud éigin a rá?"
+
+#: src/view/screens/Settings/index.tsx:523
+msgid "Dim"
+msgstr "Breacdhorcha"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:32
+#: src/lib/moderation/useLabelBehaviorDescription.ts:42
+#: src/lib/moderation/useLabelBehaviorDescription.ts:68
+#: src/screens/Moderation/index.tsx:341
+msgid "Disabled"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:511
+msgid "Discard"
+msgstr "Ná sábháil"
+
+#: src/view/com/composer/Composer.tsx:138
+#~ msgid "Discard draft"
+#~ msgstr "Ná sábháil an dréacht"
+
+#: src/view/com/composer/Composer.tsx:508
+msgid "Discard draft?"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:518
+#: src/screens/Moderation/index.tsx:522
+msgid "Discourage apps from showing my account to logged-out users"
+msgstr "Cuir ina luí ar aipeanna gan mo chuntas a thaispeáint d'úsáideoirí atá logáilte amach"
+
+#: src/view/com/posts/FollowingEmptyState.tsx:74
+#: src/view/com/posts/FollowingEndOfFeed.tsx:75
+msgid "Discover new custom feeds"
+msgstr "Aimsigh sainfhothaí nua"
+
+#: src/view/screens/Feeds.tsx:473
+#~ msgid "Discover new feeds"
+#~ msgstr "Aimsigh fothaí nua"
+
+#: src/view/screens/Feeds.tsx:689
+msgid "Discover New Feeds"
+msgstr "Aimsigh Fothaí Nua"
+
+#: src/view/com/modals/EditProfile.tsx:193
+msgid "Display name"
+msgstr "Ainm taispeána"
+
+#: src/view/com/modals/EditProfile.tsx:181
+msgid "Display Name"
+msgstr "Ainm Taispeána"
+
+#: src/view/com/modals/ChangeHandle.tsx:397
+msgid "DNS Panel"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:39
+msgid "Does not include nudity."
+msgstr ""
+
+#: src/screens/Signup/StepHandle.tsx:104
+msgid "Doesn't begin or end with a hyphen"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "Domain Value"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:488
+msgid "Domain verified!"
+msgstr "Fearann dearbhaithe!"
+
+#: src/view/com/auth/create/Step1.tsx:170
+#~ msgid "Don't have an invite code?"
+#~ msgstr "Níl cód cuiridh agat?"
+
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86
+#: src/view/com/modals/EditImage.tsx:334
+#: src/view/com/modals/ListAddRemoveUsers.tsx:144
+#: src/view/com/modals/SelfLabel.tsx:157
+#: src/view/com/modals/Threadgate.tsx:129
+#: src/view/com/modals/Threadgate.tsx:132
+#: src/view/com/modals/UserAddRemoveLists.tsx:95
+#: src/view/com/modals/UserAddRemoveLists.tsx:98
+#: src/view/screens/PreferencesThreads.tsx:162
+msgctxt "action"
+msgid "Done"
+msgstr "Déanta"
+
+#: src/components/dialogs/BirthDateSettings.tsx:119
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/components/forms/DateField/index.tsx:74
+#: src/components/forms/DateField/index.tsx:80
+#: src/view/com/auth/server-input/index.tsx:169
+#: src/view/com/auth/server-input/index.tsx:170
+#: src/view/com/modals/AddAppPasswords.tsx:227
+#: src/view/com/modals/AltImage.tsx:140
+#: src/view/com/modals/crop-image/CropImage.web.tsx:153
+#: src/view/com/modals/InviteCodes.tsx:81
+#: src/view/com/modals/InviteCodes.tsx:124
+#: src/view/com/modals/ListAddRemoveUsers.tsx:142
+#: src/view/screens/PreferencesFollowingFeed.tsx:311
+#: src/view/screens/Settings/ExportCarDialog.tsx:94
+#: src/view/screens/Settings/ExportCarDialog.tsx:96
+msgid "Done"
+msgstr "Déanta"
+
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:43
+msgid "Done{extraText}"
+msgstr "Déanta{extraText}"
+
+#: src/view/com/auth/login/ChooseAccountForm.tsx:45
+#~ msgid "Double tap to sign in"
+#~ msgstr "Tapáil faoi dhó le logáil isteach"
+
+#: src/view/screens/Settings/index.tsx:755
+#~ msgid "Download Bluesky account data (repository)"
+#~ msgstr "Íoslódáil na sonraí ó do chuntas Bluesky (cartlann)"
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:59
+#: src/view/screens/Settings/ExportCarDialog.tsx:63
+msgid "Download CAR file"
+msgstr "Íoslódáil comhad CAR"
+
+#: src/view/com/composer/text-input/TextInput.web.tsx:249
+msgid "Drop to add images"
+msgstr "Scaoil anseo chun íomhánna a chur leis"
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:120
+msgid "Due to Apple policies, adult content can only be enabled on the web after completing sign up."
+msgstr "De bharr pholasaí Apple, ní féidir ábhar do dhaoine fásta ar an nGréasán a fháil roimh an logáil isteach a chríochnú."
+
+#: src/view/com/modals/ChangeHandle.tsx:258
+msgid "e.g. alice"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:186
+msgid "e.g. Alice Roberts"
+msgstr "m.sh. Cáit Ní Dhuibhir"
+
+#: src/view/com/modals/ChangeHandle.tsx:380
+msgid "e.g. alice.com"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:204
+msgid "e.g. Artist, dog-lover, and avid reader."
+msgstr "m.sh. Ealaíontóir, File, Eolaí"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:43
+msgid "E.g. artistic nudes."
+msgstr ""
+
+#: src/view/com/modals/CreateOrEditList.tsx:284
+msgid "e.g. Great Posters"
+msgstr "m.sh. Na cuntais is fearr"
+
+#: src/view/com/modals/CreateOrEditList.tsx:285
+msgid "e.g. Spammers"
+msgstr "m.sh. Seoltóirí turscair"
+
+#: src/view/com/modals/CreateOrEditList.tsx:313
+msgid "e.g. The posters who never miss."
+msgstr "m.sh. Na cuntais nach dteipeann orthu riamh"
+
+#: src/view/com/modals/CreateOrEditList.tsx:314
+msgid "e.g. Users that repeatedly reply with ads."
+msgstr "m.sh. Úsáideoirí a fhreagraíonn le fógraí"
+
+#: src/view/com/modals/InviteCodes.tsx:97
+msgid "Each code works once. You'll receive more invite codes periodically."
+msgstr "Oibríonn gach cód uair amháin. Gheobhaidh tú tuilleadh cód go tráthrialta."
+
+#: src/view/com/lists/ListMembers.tsx:149
+msgctxt "action"
+msgid "Edit"
+msgstr "Eagar"
+
+#: src/view/com/util/UserAvatar.tsx:299
+#: src/view/com/util/UserBanner.tsx:85
+msgid "Edit avatar"
+msgstr ""
+
+#: src/view/com/composer/photos/Gallery.tsx:144
+#: src/view/com/modals/EditImage.tsx:208
+msgid "Edit image"
+msgstr "Cuir an íomhá seo in eagar"
+
+#: src/view/screens/ProfileList.tsx:403
+msgid "Edit list details"
+msgstr "Athraigh mionsonraí an liosta"
+
+#: src/view/com/modals/CreateOrEditList.tsx:251
+msgid "Edit Moderation List"
+msgstr "Athraigh liosta na modhnóireachta"
+
+#: src/Navigation.tsx:256
+#: src/view/screens/Feeds.tsx:434
+#: src/view/screens/SavedFeeds.tsx:84
+msgid "Edit My Feeds"
+msgstr "Athraigh mo chuid fothaí"
+
+#: src/view/com/modals/EditProfile.tsx:153
+msgid "Edit my profile"
+msgstr "Athraigh mo phróifíl"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:171
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:168
+msgid "Edit profile"
+msgstr "Athraigh an phróifíl"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:174
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:171
+msgid "Edit Profile"
+msgstr "Athraigh an Phróifíl"
+
+#: src/view/com/home/HomeHeaderLayout.web.tsx:62
+#: src/view/screens/Feeds.tsx:355
+msgid "Edit Saved Feeds"
+msgstr "Athraigh na fothaí sábháilte"
+
+#: src/view/com/modals/CreateOrEditList.tsx:246
+msgid "Edit User List"
+msgstr "Athraigh an liosta d’úsáideoirí"
+
+#: src/view/com/modals/EditProfile.tsx:194
+msgid "Edit your display name"
+msgstr "Athraigh d’ainm taispeána"
+
+#: src/view/com/modals/EditProfile.tsx:212
+msgid "Edit your profile description"
+msgstr "Athraigh an cur síos ort sa phróifíl"
+
+#: src/screens/Onboarding/index.tsx:34
+msgid "Education"
+msgstr "Oideachas"
+
+#: src/screens/Signup/StepInfo/index.tsx:80
+#: src/view/com/modals/ChangeEmail.tsx:141
+msgid "Email"
+msgstr "Ríomhphost"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:99
+msgid "Email address"
+msgstr "Seoladh ríomhphoist"
+
+#: src/view/com/modals/ChangeEmail.tsx:56
+#: src/view/com/modals/ChangeEmail.tsx:88
+msgid "Email updated"
+msgstr "Seoladh ríomhphoist uasdátaithe"
+
+#: src/view/com/modals/ChangeEmail.tsx:111
+msgid "Email Updated"
+msgstr "Seoladh ríomhphoist uasdátaithe"
+
+#: src/view/com/modals/VerifyEmail.tsx:78
+msgid "Email verified"
+msgstr "Ríomhphost dearbhaithe"
+
+#: src/view/screens/Settings/index.tsx:331
+msgid "Email:"
+msgstr "Ríomhphost:"
+
+#: src/components/dialogs/EmbedConsent.tsx:101
+msgid "Enable {0} only"
+msgstr "Cuir {0} amháin ar fáil"
+
+#: src/screens/Moderation/index.tsx:329
+msgid "Enable adult content"
+msgstr ""
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:94
+msgid "Enable Adult Content"
+msgstr "Cuir ábhar do dhaoine fásta ar fáil"
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:79
+msgid "Enable adult content in your feeds"
+msgstr "Cuir ábhar do dhaoine fásta ar fáil i do chuid fothaí"
+
+#: src/components/dialogs/EmbedConsent.tsx:82
+#: src/components/dialogs/EmbedConsent.tsx:89
+msgid "Enable external media"
+msgstr ""
+
+#: src/view/com/modals/EmbedConsent.tsx:97
+#~ msgid "Enable External Media"
+#~ msgstr "Cuir meáin sheachtracha ar fáil"
+
+#: src/view/screens/PreferencesExternalEmbeds.tsx:75
+msgid "Enable media players for"
+msgstr "Cuir seinnteoirí na meán ar fáil le haghaidh"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:147
+msgid "Enable this setting to only see replies between people you follow."
+msgstr "Cuir an socrú seo ar siúl le gan ach freagraí i measc na ndaoine a leanann tú a fheiceáil."
+
+#: src/components/dialogs/EmbedConsent.tsx:94
+msgid "Enable this source only"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:339
+msgid "Enabled"
+msgstr ""
+
+#: src/screens/Profile/Sections/Feed.tsx:84
+msgid "End of feed"
+msgstr "Deireadh an fhotha"
+
+#: src/view/com/modals/AddAppPasswords.tsx:167
+msgid "Enter a name for this App Password"
+msgstr "Cuir isteach ainm don phasfhocal aipe seo"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:139
+msgid "Enter a password"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:99
+#: src/components/dialogs/MutedWords.tsx:100
+msgid "Enter a word or tag"
+msgstr ""
+
+#: src/view/com/modals/VerifyEmail.tsx:105
+msgid "Enter Confirmation Code"
+msgstr "Cuir isteach an cód dearbhaithe"
+
+#: src/view/com/modals/ChangePassword.tsx:153
+msgid "Enter the code you received to change your password."
+msgstr "Cuir isteach an cód a fuair tú chun do phasfhocal a athrú."
+
+#: src/view/com/modals/ChangeHandle.tsx:370
+msgid "Enter the domain you want to use"
+msgstr "Cuir isteach an fearann is maith leat a úsáid"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:119
+msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password."
+msgstr "Cuir isteach an seoladh ríomhphoist a d’úsáid tú le do chuntas a chruthú. Cuirfidh muid “cód athshocraithe” chugat le go mbeidh tú in ann do phasfhocal a athrú."
+
+#: src/components/dialogs/BirthDateSettings.tsx:108
+msgid "Enter your birth date"
+msgstr "Cuir isteach do bhreithlá"
+
+#: src/view/com/modals/Waitlist.tsx:78
+#~ msgid "Enter your email"
+#~ msgstr "Cuir isteach do sheoladh ríomhphoist"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:105
+#: src/screens/Signup/StepInfo/index.tsx:91
+msgid "Enter your email address"
+msgstr "Cuir isteach do sheoladh ríomhphoist"
+
+#: src/view/com/modals/ChangeEmail.tsx:41
+msgid "Enter your new email above"
+msgstr "Cuir isteach do sheoladh ríomhphoist nua thuas"
+
+#: src/view/com/modals/ChangeEmail.tsx:117
+msgid "Enter your new email address below."
+msgstr "Cuir isteach do sheoladh ríomhphoist nua thíos."
+
+#: src/view/com/auth/create/Step2.tsx:188
+#~ msgid "Enter your phone number"
+#~ msgstr "Cuir isteach d’uimhir ghutháin"
+
+#: src/screens/Login/index.tsx:101
+msgid "Enter your username and password"
+msgstr "Cuir isteach do leasainm agus do phasfhocal"
+
+#: src/screens/Signup/StepCaptcha/index.tsx:49
+msgid "Error receiving captcha response."
+msgstr "Earráid agus an freagra ar an captcha á phróiseáil."
+
+#: src/view/screens/Search/Search.tsx:111
+msgid "Error:"
+msgstr "Earráid:"
+
+#: src/view/com/modals/Threadgate.tsx:76
+msgid "Everybody"
+msgstr "Chuile dhuine"
+
+#: src/lib/moderation/useReportOptions.ts:66
+msgid "Excessive mentions or replies"
+msgstr ""
+
+#: src/view/com/modals/DeleteAccount.tsx:230
+msgid "Exits account deletion process"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:151
+msgid "Exits handle change process"
+msgstr "Fágann sé seo athrú do leasainm"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:136
+msgid "Exits image cropping process"
+msgstr ""
+
+#: src/view/com/lightbox/Lightbox.web.tsx:130
+msgid "Exits image view"
+msgstr "Fágann sé seo an radharc ar an íomhá"
+
+#: src/view/com/modals/ListAddRemoveUsers.tsx:88
+#: src/view/shell/desktop/Search.tsx:236
+msgid "Exits inputting search query"
+msgstr "Fágann sé seo an cuardach"
+
+#: src/view/com/modals/Waitlist.tsx:138
+#~ msgid "Exits signing up for waitlist with {email}"
+#~ msgstr "Fágann sé seo an síniú ar an liosta feithimh le {email}"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:183
+msgid "Expand alt text"
+msgstr "Taispeáin an téacs malartach ina iomláine"
+
+#: src/view/com/composer/ComposerReplyTo.tsx:81
+#: src/view/com/composer/ComposerReplyTo.tsx:84
+msgid "Expand or collapse the full post you are replying to"
+msgstr "Leathnaigh nó laghdaigh an téacs iomlán a bhfuil tú ag freagairt"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:47
+msgid "Explicit or potentially disturbing media."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:35
+msgid "Explicit sexual images."
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:777
+msgid "Export my data"
+msgstr "Easpórtáil mo chuid sonraí"
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:44
+#: src/view/screens/Settings/index.tsx:788
+msgid "Export My Data"
+msgstr "Easpórtáil mo chuid sonraí"
+
+#: src/components/dialogs/EmbedConsent.tsx:55
+#: src/components/dialogs/EmbedConsent.tsx:59
+msgid "External Media"
+msgstr "Meáin sheachtracha"
+
+#: src/components/dialogs/EmbedConsent.tsx:71
+#: src/view/screens/PreferencesExternalEmbeds.tsx:66
+msgid "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."
+msgstr "Is féidir le meáin sheachtracha cumas a thabhairt do shuíomhanna ar an nGréasán eolas fútsa agus faoi do ghléas a chnuasach. Ní sheoltar ná iarrtar aon eolas go dtí go mbrúnn tú an cnaipe “play”."
+
+#: src/Navigation.tsx:275
+#: src/view/screens/PreferencesExternalEmbeds.tsx:52
+#: src/view/screens/Settings/index.tsx:677
+msgid "External Media Preferences"
+msgstr "Roghanna maidir le meáin sheachtracha"
+
+#: src/view/screens/Settings/index.tsx:668
+msgid "External media settings"
+msgstr "Socruithe maidir le meáin sheachtracha"
+
+#: src/view/com/modals/AddAppPasswords.tsx:116
+#: src/view/com/modals/AddAppPasswords.tsx:120
+msgid "Failed to create app password."
+msgstr "Teip ar phasfhocal aipe a chruthú."
+
+#: src/view/com/modals/CreateOrEditList.tsx:207
+msgid "Failed to create the list. Check your internet connection and try again."
+msgstr "Teip ar chruthú an liosta. Seiceáil do nasc leis an idirlíon agus déan iarracht eile."
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:125
+msgid "Failed to delete post, please try again"
+msgstr "Teip ar scriosadh na postála. Déan iarracht eile."
+
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:109
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:141
+msgid "Failed to load recommended feeds"
+msgstr "Teip ar lódáil na bhfothaí molta"
+
+#: src/view/com/lightbox/Lightbox.tsx:83
+msgid "Failed to save image: {0}"
+msgstr ""
+
+#: src/Navigation.tsx:196
+msgid "Feed"
+msgstr "Fotha"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:218
+msgid "Feed by {0}"
+msgstr "Fotha le {0}"
+
+#: src/view/screens/Feeds.tsx:605
+msgid "Feed offline"
+msgstr "Fotha as líne"
+
+#: src/view/com/feeds/FeedPage.tsx:143
+#~ msgid "Feed Preferences"
+#~ msgstr "Roghanna fotha"
+
+#: src/view/shell/desktop/RightNav.tsx:61
+#: src/view/shell/Drawer.tsx:314
+msgid "Feedback"
+msgstr "Aiseolas"
+
+#: src/Navigation.tsx:464
+#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:524
+#: src/view/screens/Profile.tsx:194
+#: src/view/shell/bottom-bar/BottomBar.tsx:191
+#: src/view/shell/desktop/LeftNav.tsx:346
+#: src/view/shell/Drawer.tsx:479
+#: src/view/shell/Drawer.tsx:480
+msgid "Feeds"
+msgstr "Fothaí"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
+#~ msgid "Feeds are created by users and can give you entirely new experiences."
+#~ msgstr "Cruthaíonn úsáideoirí fothaí a d'fhéadfadh eispéiris úrnua a thabhairt duit."
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
+#~ msgid "Feeds are created by users and organizations. They offer you varied experiences and suggest content you may like using algorithms."
+#~ msgstr "Is iad úsáideoirí agus eagraíochtaí a chruthaíonn na fothaí. Is féidir leo radharcanna úrnua a oscailt duit."
+
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:57
+msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting."
+msgstr "Is iad na húsáideoirí a chruthaíonn na fothaí le hábhar is spéis leo a chur ar fáil. Roghnaigh cúpla fotha a bhfuil suim agat iontu."
+
+#: src/view/screens/SavedFeeds.tsx:156
+msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information."
+msgstr "Is sainalgartaim iad na fothaí. Cruthaíonn úsáideoirí a bhfuil beagán taithí acu ar chódáil iad. <0/> le tuilleadh eolais a fháil."
+
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:80
+msgid "Feeds can be topical as well!"
+msgstr "Is féidir le fothaí a bheith bunaithe ar chúrsaí reatha freisin!"
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "File Contents"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:66
+msgid "Filter from feeds"
+msgstr ""
+
+#: src/screens/Onboarding/StepFinished.tsx:155
+msgid "Finalizing"
+msgstr "Ag cur crích air"
+
+#: src/view/com/posts/CustomFeedEmptyState.tsx:47
+#: src/view/com/posts/FollowingEmptyState.tsx:57
+#: src/view/com/posts/FollowingEndOfFeed.tsx:58
+msgid "Find accounts to follow"
+msgstr "Aimsigh fothaí le leanúint"
+
+#: src/view/screens/Search/Search.tsx:442
+msgid "Find users on Bluesky"
+msgstr "Aimsigh úsáideoirí ar Bluesky"
+
+#: src/view/screens/Search/Search.tsx:440
+msgid "Find users with the search tool on the right"
+msgstr "Aimsigh úsáideoirí leis an uirlis chuardaigh ar dheis"
+
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:155
+msgid "Finding similar accounts..."
+msgstr "Cuntais eile atá cosúil leis seo á n-aimsiú..."
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:111
+msgid "Fine-tune the content you see on your Following feed."
+msgstr ""
+
+#: src/view/screens/PreferencesHomeFeed.tsx:111
+#~ msgid "Fine-tune the content you see on your home screen."
+#~ msgstr "Mionathraigh an t-ábhar a fheiceann tú ar do scáileán baile."
+
+#: src/view/screens/PreferencesThreads.tsx:60
+msgid "Fine-tune the discussion threads."
+msgstr "Mionathraigh na snáitheanna chomhrá"
+
+#: src/screens/Onboarding/index.tsx:38
+msgid "Fitness"
+msgstr "Folláine"
+
+#: src/screens/Onboarding/StepFinished.tsx:135
+msgid "Flexible"
+msgstr "Solúbtha"
+
+#: src/view/com/modals/EditImage.tsx:116
+msgid "Flip horizontal"
+msgstr "Iompaigh go cothrománach é"
+
+#: src/view/com/modals/EditImage.tsx:121
+#: src/view/com/modals/EditImage.tsx:288
+msgid "Flip vertically"
+msgstr "Iompaigh go hingearach é"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:189
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:236
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:146
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
+msgid "Follow"
+msgstr "Lean"
+
+#: src/view/com/profile/FollowButton.tsx:69
+msgctxt "action"
+msgid "Follow"
+msgstr "Lean"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:58
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:221
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:128
+msgid "Follow {0}"
+msgstr "Lean {0}"
+
+#: src/view/com/profile/ProfileMenu.tsx:242
+#: src/view/com/profile/ProfileMenu.tsx:253
+msgid "Follow Account"
+msgstr ""
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:187
+msgid "Follow All"
+msgstr "Lean iad uile"
+
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:144
+msgid "Follow Back"
+msgstr ""
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:182
+msgid "Follow selected accounts and continue to the next step"
+msgstr "Lean na cuntais roghnaithe agus téigh ar aghaidh go dtí an chéad chéim eile"
+
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:64
+msgid "Follow some users to get started. We can recommend you more users based on who you find interesting."
+msgstr "Lean cúpla cuntas mar thosú. Tig linn níos mó úsáideoirí a mholadh duit a mbeadh suim agat iontu."
+
+#: src/view/com/profile/ProfileCard.tsx:216
+msgid "Followed by {0}"
+msgstr "Leanta ag {0}"
+
+#: src/view/com/modals/Threadgate.tsx:98
+msgid "Followed users"
+msgstr "Cuntais a leanann tú"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:154
+msgid "Followed users only"
+msgstr "Cuntais a leanann tú amháin"
+
+#: src/view/com/notifications/FeedItem.tsx:170
+msgid "followed you"
+msgstr "— lean sé/sí thú"
+
+#: src/view/com/profile/ProfileFollowers.tsx:104
+#: src/view/screens/ProfileFollowers.tsx:25
+msgid "Followers"
+msgstr "Leantóirí"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:234
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:149
+#: src/view/com/profile/ProfileFollows.tsx:104
+#: src/view/screens/ProfileFollows.tsx:25
+msgid "Following"
+msgstr "Á leanúint"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:93
+msgid "Following {0}"
+msgstr "Ag leanúint {0}"
+
+#: src/view/screens/Settings/index.tsx:553
+msgid "Following feed preferences"
+msgstr ""
+
+#: src/Navigation.tsx:262
+#: src/view/com/home/HomeHeaderLayout.web.tsx:50
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:84
+#: src/view/screens/PreferencesFollowingFeed.tsx:104
+#: src/view/screens/Settings/index.tsx:562
+msgid "Following Feed Preferences"
+msgstr ""
+
+#: src/screens/Profile/Header/Handle.tsx:24
+msgid "Follows you"
+msgstr "Leanann sé/sí thú"
+
+#: src/view/com/profile/ProfileCard.tsx:141
+msgid "Follows You"
+msgstr "Leanann sé/sí thú"
+
+#: src/screens/Onboarding/index.tsx:43
+msgid "Food"
+msgstr "Bia"
+
+#: src/view/com/modals/DeleteAccount.tsx:110
+msgid "For security reasons, we'll need to send a confirmation code to your email address."
+msgstr "Ar chúiseanna slándála, beidh orainn cód dearbhaithe a chur chuig do sheoladh ríomhphoist."
+
+#: src/view/com/modals/AddAppPasswords.tsx:210
+msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one."
+msgstr "Ar chúiseanna slándála, ní bheidh tú in ann é seo a fheiceáil arís. Má chailleann tú an pasfhocal seo beidh ort ceann nua a chruthú."
+
+#: src/view/com/auth/login/LoginForm.tsx:241
+#~ msgid "Forgot"
+#~ msgstr "Dearmadta"
+
+#: src/view/com/auth/login/LoginForm.tsx:238
+#~ msgid "Forgot password"
+#~ msgstr "Pasfhocal dearmadta"
+
+#: src/screens/Login/index.tsx:129
+#: src/screens/Login/index.tsx:144
+msgid "Forgot Password"
+msgstr "Pasfhocal dearmadta"
+
+#: src/screens/Login/LoginForm.tsx:201
+msgid "Forgot password?"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:212
+msgid "Forgot?"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:52
+msgid "Frequently Posts Unwanted Content"
+msgstr ""
+
+#: src/screens/Hashtag.tsx:109
+#: src/screens/Hashtag.tsx:149
+msgid "From @{sanitizedAuthor}"
+msgstr ""
+
+#: src/view/com/posts/FeedItem.tsx:179
+msgctxt "from-feed"
+msgid "From <0/>"
+msgstr "Ó <0/>"
+
+#: src/view/com/composer/photos/SelectPhotoBtn.tsx:43
+msgid "Gallery"
+msgstr "Gailearaí"
+
+#: src/view/com/modals/VerifyEmail.tsx:189
+#: src/view/com/modals/VerifyEmail.tsx:191
+msgid "Get Started"
+msgstr "Ar aghaidh leat anois!"
+
+#: src/lib/moderation/useReportOptions.ts:37
+msgid "Glaring violations of law or terms of service"
+msgstr ""
+
+#: src/components/moderation/ScreenHider.tsx:151
+#: src/components/moderation/ScreenHider.tsx:160
+#: src/view/com/auth/LoggedOut.tsx:82
+#: src/view/com/auth/LoggedOut.tsx:83
+#: src/view/screens/NotFound.tsx:55
+#: src/view/screens/ProfileFeed.tsx:112
+#: src/view/screens/ProfileList.tsx:916
+#: src/view/shell/desktop/LeftNav.tsx:108
+msgid "Go back"
+msgstr "Ar ais"
+
+#: src/components/Error.tsx:91
+#: src/screens/Profile/ErrorState.tsx:62
+#: src/screens/Profile/ErrorState.tsx:66
+#: src/view/screens/NotFound.tsx:54
+#: src/view/screens/ProfileFeed.tsx:117
+#: src/view/screens/ProfileList.tsx:921
+msgid "Go Back"
+msgstr "Ar ais"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:73
+#: src/components/ReportDialog/SubmitView.tsx:104
+#: src/screens/Onboarding/Layout.tsx:102
+#: src/screens/Onboarding/Layout.tsx:191
+#: src/screens/Signup/index.tsx:173
+msgid "Go back to previous step"
+msgstr "Fill ar an gcéim roimhe seo"
+
+#: src/view/screens/NotFound.tsx:55
+msgid "Go home"
+msgstr ""
+
+#: src/view/screens/NotFound.tsx:54
+msgid "Go Home"
+msgstr ""
+
+#: src/view/screens/Search/Search.tsx:749
+#: src/view/shell/desktop/Search.tsx:263
+msgid "Go to @{queryMaybeHandle}"
+msgstr "Téigh go dtí @{queryMaybeHandle}"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:172
+#: src/view/com/modals/ChangePassword.tsx:167
+msgid "Go to next"
+msgstr "Téigh go dtí an chéad rud eile"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:46
+msgid "Graphic Media"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:266
+msgid "Handle"
+msgstr "Leasainm"
+
+#: src/lib/moderation/useReportOptions.ts:32
+msgid "Harassment, trolling, or intolerance"
+msgstr ""
+
+#: src/Navigation.tsx:282
+msgid "Hashtag"
+msgstr ""
+
+#: src/components/RichText.tsx:191
+msgid "Hashtag: #{tag}"
+msgstr ""
+
+#: src/screens/Signup/index.tsx:217
+msgid "Having trouble?"
+msgstr "Fadhb ort?"
+
+#: src/view/shell/desktop/RightNav.tsx:90
+#: src/view/shell/Drawer.tsx:324
+msgid "Help"
+msgstr "Cúnamh"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:140
+msgid "Here are some accounts for you to follow"
+msgstr "Seo cúpla cuntas le leanúint duit"
+
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:89
+msgid "Here are some popular topical feeds. You can choose to follow as many as you like."
+msgstr "Seo cúpla fotha a bhfuil ráchairt orthu. Is féidir leat an méid acu is mian leat a leanúint."
+
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:84
+msgid "Here are some topical feeds based on your interests: {interestsText}. You can choose to follow as many as you like."
+msgstr "Seo cúpla fotha a phléann le rudaí a bhfuil suim agat iontu: {interestsText}. Is féidir leat an méid acu is mian leat a leanúint."
+
+#: src/view/com/modals/AddAppPasswords.tsx:154
+msgid "Here is your app password."
+msgstr "Seo é do phasfhocal aipe."
+
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:134
+#: src/components/moderation/PostHider.tsx:107
+#: src/lib/moderation/useLabelBehaviorDescription.ts:15
+#: src/lib/moderation/useLabelBehaviorDescription.ts:20
+#: src/lib/moderation/useLabelBehaviorDescription.ts:25
+#: src/lib/moderation/useLabelBehaviorDescription.ts:30
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:52
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:76
+#: src/view/com/util/forms/PostDropdownBtn.tsx:328
+msgid "Hide"
+msgstr "Cuir i bhfolach"
+
+#: src/view/com/notifications/FeedItem.tsx:329
+msgctxt "action"
+msgid "Hide"
+msgstr "Cuir i bhfolach"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:276
+#: src/view/com/util/forms/PostDropdownBtn.tsx:278
+msgid "Hide post"
+msgstr "Cuir an phostáil seo i bhfolach"
+
+#: src/components/moderation/ContentHider.tsx:67
+#: src/components/moderation/PostHider.tsx:64
+msgid "Hide the content"
+msgstr "Cuir an t-ábhar seo i bhfolach"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:325
+msgid "Hide this post?"
+msgstr "An bhfuil fonn ort an phostáil seo a chur i bhfolach?"
+
+#: src/view/com/notifications/FeedItem.tsx:319
+msgid "Hide user list"
+msgstr "Cuir liosta na gcuntas i bhfolach"
+
+#: src/view/com/profile/ProfileHeader.tsx:486
+#~ msgid "Hides posts from {0} in your feed"
+#~ msgstr "Cuireann sé seo na postálacha ó {0} i d’fhotha i bhfolach"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:111
+msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue."
+msgstr "Hmm. Tharla fadhb éigin sa dul i dteagmháil le freastalaí an fhotha seo. Cuir é seo in iúl d’úinéir an fhotha, le do thoil."
+
+#: src/view/com/posts/FeedErrorMessage.tsx:99
+msgid "Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue."
+msgstr "Hmm. Is cosúil nach bhfuil freastalaí an fhotha seo curtha le chéile i gceart. Cuir é seo in iúl d’úinéir an fhotha, le do thoil."
+
+#: src/view/com/posts/FeedErrorMessage.tsx:105
+msgid "Hmm, the feed server appears to be offline. Please let the feed owner know about this issue."
+msgstr "Hmm. Is cosúil go bhfuil freastalaí an fhotha as líne. Cuir é seo in iúl d’úinéir an fhotha, le do thoil."
+
+#: src/view/com/posts/FeedErrorMessage.tsx:102
+msgid "Hmm, the feed server gave a bad response. Please let the feed owner know about this issue."
+msgstr "Hmm. Thug freastalaí an fhotha drochfhreagra. Cuir é seo in iúl d’úinéir an fhotha, le do thoil."
+
+#: src/view/com/posts/FeedErrorMessage.tsx:96
+msgid "Hmm, we're having trouble finding this feed. It may have been deleted."
+msgstr "Hmm. Ní féidir linn an fotha seo a aimsiú. Is féidir gur scriosadh é."
+
+#: src/screens/Moderation/index.tsx:59
+msgid "Hmmmm, it seems we're having trouble loading this data. See below for more details. If this issue persists, please contact us."
+msgstr ""
+
+#: src/screens/Profile/ErrorState.tsx:31
+msgid "Hmmmm, we couldn't load that moderation service."
+msgstr ""
+
+#: src/Navigation.tsx:454
+#: src/view/shell/bottom-bar/BottomBar.tsx:147
+#: src/view/shell/desktop/LeftNav.tsx:310
+#: src/view/shell/Drawer.tsx:401
+#: src/view/shell/Drawer.tsx:402
+msgid "Home"
+msgstr "Baile"
+
+#: src/Navigation.tsx:247
+#: src/view/com/pager/FeedsTabBarMobile.tsx:123
+#: src/view/screens/PreferencesHomeFeed.tsx:104
+#: src/view/screens/Settings/index.tsx:543
+#~ msgid "Home Feed Preferences"
+#~ msgstr "Roghanna le haghaidh an fhotha baile"
+
+#: src/view/com/modals/ChangeHandle.tsx:420
+msgid "Host:"
+msgstr ""
+
+#: src/screens/Login/ForgotPasswordForm.tsx:89
+#: src/screens/Login/LoginForm.tsx:134
+#: src/screens/Signup/StepInfo/index.tsx:40
+#: src/view/com/modals/ChangeHandle.tsx:281
+msgid "Hosting provider"
+msgstr "Soláthraí óstála"
+
+#: src/view/com/modals/InAppBrowserConsent.tsx:44
+msgid "How should we open this link?"
+msgstr "Conas ar cheart dúinn an nasc seo a oscailt?"
+
+#: src/view/com/modals/VerifyEmail.tsx:214
+msgid "I have a code"
+msgstr "Tá cód agam"
+
+#: src/view/com/modals/VerifyEmail.tsx:216
+msgid "I have a confirmation code"
+msgstr "Tá cód dearbhaithe agam"
+
+#: src/view/com/modals/ChangeHandle.tsx:284
+msgid "I have my own domain"
+msgstr "Tá fearann de mo chuid féin agam"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:185
+msgid "If alt text is long, toggles alt text expanded state"
+msgstr "Má tá an téacs malartach rófhada, athraíonn sé seo go téacs leathnaithe"
+
+#: src/view/com/modals/SelfLabel.tsx:127
+msgid "If none are selected, suitable for all ages."
+msgstr "Mura roghnaítear tada, tá sé oiriúnach do gach aois."
+
+#: src/screens/Signup/StepInfo/Policies.tsx:83
+msgid "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."
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:610
+msgid "If you delete this list, you won't be able to recover it."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:316
+msgid "If you remove this post, you won't be able to recover it."
+msgstr ""
+
+#: src/view/com/modals/ChangePassword.tsx:148
+msgid "If you want to change your password, we will send you a code to verify that this is your account."
+msgstr "Más mian leat do phasfhocal a athrú, seolfaimid cód duit chun dearbhú gur leatsa an cuntas seo."
+
+#: src/lib/moderation/useReportOptions.ts:36
+msgid "Illegal and Urgent"
+msgstr ""
+
+#: src/view/com/util/images/Gallery.tsx:38
+msgid "Image"
+msgstr "Íomhá"
+
+#: src/view/com/modals/AltImage.tsx:121
+msgid "Image alt text"
+msgstr "Téacs malartach le híomhá"
+
+#: src/view/com/util/UserAvatar.tsx:311
+#: src/view/com/util/UserBanner.tsx:118
+#~ msgid "Image options"
+#~ msgstr "Roghanna maidir leis an íomhá"
+
+#: src/lib/moderation/useReportOptions.ts:47
+msgid "Impersonation or false claims about identity or affiliation"
+msgstr ""
+
+#: src/screens/Login/SetNewPasswordForm.tsx:127
+msgid "Input code sent to your email for password reset"
+msgstr "Cuir isteach an cód a seoladh chuig do ríomhphost leis an bpasfhocal a athrú"
+
+#: src/view/com/modals/DeleteAccount.tsx:183
+msgid "Input confirmation code for account deletion"
+msgstr "Cuir isteach an cód dearbhaithe leis an gcuntas a scriosadh"
+
+#: src/view/com/auth/create/Step1.tsx:200
+#~ msgid "Input email for Bluesky account"
+#~ msgstr "Cuir isteach an ríomhphost don chuntas Bluesky"
+
+#: src/view/com/auth/create/Step1.tsx:158
+#~ msgid "Input invite code to proceed"
+#~ msgstr "Cuir isteach an cód cuiridh le dul ar aghaidh"
+
+#: src/view/com/modals/AddAppPasswords.tsx:181
+msgid "Input name for app password"
+msgstr "Cuir isteach an t-ainm le haghaidh phasfhocal na haipe"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:151
+msgid "Input new password"
+msgstr "Cuir isteach an pasfhocal nua"
+
+#: src/view/com/modals/DeleteAccount.tsx:202
+msgid "Input password for account deletion"
+msgstr "Cuir isteach an pasfhocal chun an cuntas a scriosadh"
+
+#: src/view/com/auth/create/Step2.tsx:196
+#~ msgid "Input phone number for SMS verification"
+#~ msgstr "Cuir isteach an uimhir ghutháin le haghaidh dhearbhú SMS"
+
+#: src/screens/Login/LoginForm.tsx:195
+msgid "Input the password tied to {identifier}"
+msgstr "Cuir isteach an pasfhocal ceangailte le {identifier}"
+
+#: src/screens/Login/LoginForm.tsx:168
+msgid "Input the username or email address you used at signup"
+msgstr "Cuir isteach an leasainm nó an seoladh ríomhphoist a d’úsáid tú nuair a chláraigh tú"
+
+#: src/view/com/auth/create/Step2.tsx:271
+#~ msgid "Input the verification code we have texted to you"
+#~ msgstr "Cuir isteach an cód dearbhaithe a chuir muid chugat i dteachtaireacht téacs"
+
+#: src/view/com/modals/Waitlist.tsx:90
+#~ msgid "Input your email to get on the Bluesky waitlist"
+#~ msgstr "Cuir isteach do ríomhphost le bheith ar an liosta feithimh"
+
+#: src/screens/Login/LoginForm.tsx:194
+msgid "Input your password"
+msgstr "Cuir isteach do phasfhocal"
+
+#: src/view/com/modals/ChangeHandle.tsx:389
+msgid "Input your preferred hosting provider"
+msgstr ""
+
+#: src/screens/Signup/StepHandle.tsx:62
+msgid "Input your user handle"
+msgstr "Cuir isteach do leasainm"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:221
+msgid "Invalid or unsupported post record"
+msgstr "Taifead postála atá neamhbhailí nó gan bhunús"
+
+#: src/screens/Login/LoginForm.tsx:114
+msgid "Invalid username or password"
+msgstr "Leasainm nó pasfhocal míchruinn"
+
+#: src/view/screens/Settings.tsx:411
+#~ msgid "Invite"
+#~ msgstr "Cuireadh"
+
+#: src/view/com/modals/InviteCodes.tsx:94
+msgid "Invite a Friend"
+msgstr "Tabhair cuireadh chuig cara leat"
+
+#: src/screens/Signup/StepInfo/index.tsx:58
+msgid "Invite code"
+msgstr "Cód cuiridh"
+
+#: src/screens/Signup/state.ts:278
+msgid "Invite code not accepted. Check that you input it correctly and try again."
+msgstr "Níor glacadh leis an gcód cuiridh. Bí cinnte gur scríobh tú i gceart é agus bain triail eile as."
+
+#: src/view/com/modals/InviteCodes.tsx:171
+msgid "Invite codes: {0} available"
+msgstr "Cóid chuiridh: {0} ar fáil"
+
+#: src/view/shell/Drawer.tsx:645
+#~ msgid "Invite codes: {invitesAvailable} available"
+#~ msgstr "Cóid chuiridh: {invitesAvailable} ar fáil"
+
+#: src/view/com/modals/InviteCodes.tsx:170
+msgid "Invite codes: 1 available"
+msgstr "Cóid chuiridh: 1 ar fáil"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:65
+msgid "It shows posts from the people you follow as they happen."
+msgstr "Taispeánann sé postálacha ó na daoine a leanann tú nuair a fhoilsítear iad."
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:104
+#: src/view/com/auth/SplashScreen.web.tsx:172
+msgid "Jobs"
+msgstr "Jabanna"
+
+#: src/view/com/modals/Waitlist.tsx:67
+#~ msgid "Join the waitlist"
+#~ msgstr "Cuir d’ainm ar an liosta feithimh"
+
+#: src/view/com/auth/create/Step1.tsx:174
+#: src/view/com/auth/create/Step1.tsx:178
+#~ msgid "Join the waitlist."
+#~ msgstr "Cuir d’ainm ar an liosta feithimh."
+
+#: src/view/com/modals/Waitlist.tsx:128
+#~ msgid "Join Waitlist"
+#~ msgstr "Cuir d’ainm ar an liosta feithimh"
+
+#: src/screens/Onboarding/index.tsx:24
+msgid "Journalism"
+msgstr "Iriseoireacht"
+
+#: src/components/moderation/LabelsOnMe.tsx:59
+msgid "label has been placed on this {labelTarget}"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:144
+msgid "Labeled by {0}."
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:142
+msgid "Labeled by the author."
+msgstr ""
+
+#: src/view/screens/Profile.tsx:188
+msgid "Labels"
+msgstr ""
+
+#: src/screens/Profile/Sections/Labels.tsx:142
+msgid "Labels are annotations on users and content. They can be used to hide, warn, and categorize the network."
+msgstr ""
+
+#: src/components/moderation/LabelsOnMe.tsx:61
+msgid "labels have been placed on this {labelTarget}"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:62
+msgid "Labels on your account"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:64
+msgid "Labels on your content"
+msgstr ""
+
+#: src/view/com/composer/select-language/SelectLangBtn.tsx:104
+msgid "Language selection"
+msgstr "Rogha teanga"
+
+#: src/view/screens/Settings/index.tsx:614
+msgid "Language settings"
+msgstr "Socruithe teanga"
+
+#: src/Navigation.tsx:144
+#: src/view/screens/LanguageSettings.tsx:89
+msgid "Language Settings"
+msgstr "Socruithe teanga"
+
+#: src/view/screens/Settings/index.tsx:623
+msgid "Languages"
+msgstr "Teangacha"
+
+#: src/view/com/auth/create/StepHeader.tsx:20
+#~ msgid "Last step!"
+#~ msgstr "An chéim dheireanach!"
+
+#: src/view/com/util/moderation/ContentHider.tsx:103
+#~ msgid "Learn more"
+#~ msgstr "Le tuilleadh a fhoghlaim"
+
+#: src/components/moderation/ScreenHider.tsx:136
+msgid "Learn More"
+msgstr "Le tuilleadh a fhoghlaim"
+
+#: src/components/moderation/ContentHider.tsx:65
+#: src/components/moderation/ContentHider.tsx:128
+msgid "Learn more about the moderation applied to this content."
+msgstr ""
+
+#: src/components/moderation/PostHider.tsx:85
+#: src/components/moderation/ScreenHider.tsx:125
+msgid "Learn more about this warning"
+msgstr "Le tuilleadh a fhoghlaim faoin rabhadh seo"
+
+#: src/screens/Moderation/index.tsx:549
+msgid "Learn more about what is public on Bluesky."
+msgstr "Le tuilleadh a fhoghlaim faoi céard atá poiblí ar Bluesky"
+
+#: src/components/moderation/ContentHider.tsx:152
+msgid "Learn more."
+msgstr ""
+
+#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82
+msgid "Leave them all unchecked to see any language."
+msgstr "Fág iad uile gan tic le teanga ar bith a fheiceáil."
+
+#: src/view/com/modals/LinkWarning.tsx:65
+msgid "Leaving Bluesky"
+msgstr "Ag fágáil slán ag Bluesky"
+
+#: src/screens/Deactivated.tsx:128
+msgid "left to go."
+msgstr "le déanamh fós."
+
+#: src/view/screens/Settings/index.tsx:296
+msgid "Legacy storage cleared, you need to restart the app now."
+msgstr "Stóráil oidhreachta scriosta, tá ort an aip a atosú anois."
+
+#: src/screens/Login/index.tsx:130
+#: src/screens/Login/index.tsx:145
+msgid "Let's get your password reset!"
+msgstr "Socraímis do phasfhocal arís!"
+
+#: src/screens/Onboarding/StepFinished.tsx:155
+msgid "Let's go!"
+msgstr "Ar aghaidh linn!"
+
+#: src/view/com/util/UserAvatar.tsx:248
+#: src/view/com/util/UserBanner.tsx:62
+#~ msgid "Library"
+#~ msgstr "Leabharlann"
+
+#: src/view/screens/Settings/index.tsx:498
+msgid "Light"
+msgstr "Sorcha"
+
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
+msgid "Like"
+msgstr "Mol"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:258
+#: src/view/screens/ProfileFeed.tsx:573
+msgid "Like this feed"
+msgstr "Mol an fotha seo"
+
+#: src/components/LikesDialog.tsx:87
+#: src/Navigation.tsx:201
+#: src/Navigation.tsx:206
+msgid "Liked by"
+msgstr "Molta ag"
+
+#: src/screens/Profile/ProfileLabelerLikedBy.tsx:29
+#: src/view/screens/PostLikedBy.tsx:27
+#: src/view/screens/ProfileFeedLikedBy.tsx:27
+msgid "Liked By"
+msgstr "Molta ag"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:268
+msgid "Liked by {0} {1}"
+msgstr "Molta ag {0} {1}"
+
+#: src/components/LabelingServiceCard/index.tsx:72
+msgid "Liked by {count} {0}"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:278
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:292
+#: src/view/screens/ProfileFeed.tsx:588
+msgid "Liked by {likeCount} {0}"
+msgstr "Molta ag {likeCount} {0}"
+
+#: src/view/com/notifications/FeedItem.tsx:174
+msgid "liked your custom feed"
+msgstr "a mhol do shainfhotha"
+
+#: src/view/com/notifications/FeedItem.tsx:159
+msgid "liked your post"
+msgstr "a mhol do phostáil"
+
+#: src/view/screens/Profile.tsx:193
+msgid "Likes"
+msgstr "Moltaí"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:182
+msgid "Likes on this post"
+msgstr "Moltaí don phostáil seo"
+
+#: src/Navigation.tsx:170
+msgid "List"
+msgstr "Liosta"
+
+#: src/view/com/modals/CreateOrEditList.tsx:262
+msgid "List Avatar"
+msgstr "Abhatár an Liosta"
+
+#: src/view/screens/ProfileList.tsx:311
+msgid "List blocked"
+msgstr "Liosta blocáilte"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:220
+msgid "List by {0}"
+msgstr "Liosta le {0}"
+
+#: src/view/screens/ProfileList.tsx:355
+msgid "List deleted"
+msgstr "Scriosadh an liosta"
+
+#: src/view/screens/ProfileList.tsx:283
+msgid "List muted"
+msgstr "Balbhaíodh an liosta"
+
+#: src/view/com/modals/CreateOrEditList.tsx:276
+msgid "List Name"
+msgstr "Ainm an liosta"
+
+#: src/view/screens/ProfileList.tsx:325
+msgid "List unblocked"
+msgstr "Liosta díbhlocáilte"
+
+#: src/view/screens/ProfileList.tsx:297
+msgid "List unmuted"
+msgstr "Liosta nach bhfuil balbhaithe níos mó"
+
+#: src/Navigation.tsx:114
+#: src/view/screens/Profile.tsx:189
+#: src/view/screens/Profile.tsx:195
+#: src/view/shell/desktop/LeftNav.tsx:383
+#: src/view/shell/Drawer.tsx:495
+#: src/view/shell/Drawer.tsx:496
+msgid "Lists"
+msgstr "Liostaí"
+
+#: src/view/com/post-thread/PostThread.tsx:333
+#: src/view/com/post-thread/PostThread.tsx:341
+#~ msgid "Load more posts"
+#~ msgstr "Lódáil tuilleadh postálacha"
+
+#: src/view/screens/Notifications.tsx:159
+msgid "Load new notifications"
+msgstr "Lódáil fógraí nua"
+
+#: src/screens/Profile/Sections/Feed.tsx:70
+#: src/view/com/feeds/FeedPage.tsx:138
+#: src/view/screens/ProfileFeed.tsx:496
+#: src/view/screens/ProfileList.tsx:695
+msgid "Load new posts"
+msgstr "Lódáil postálacha nua"
+
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:99
+msgid "Loading..."
+msgstr "Ag lódáil …"
+
+#: src/view/com/modals/ServerInput.tsx:50
+#~ msgid "Local dev server"
+#~ msgstr "Freastálaí forbróra áitiúil"
+
+#: src/Navigation.tsx:221
+msgid "Log"
+msgstr "Logleabhar"
+
+#: src/screens/Deactivated.tsx:149
+#: src/screens/Deactivated.tsx:152
+#: src/screens/Deactivated.tsx:178
+#: src/screens/Deactivated.tsx:181
+msgid "Log out"
+msgstr "Logáil amach"
+
+#: src/screens/Moderation/index.tsx:442
+msgid "Logged-out visibility"
+msgstr "Feiceálacht le linn a bheith logáilte amach"
+
+#: src/components/AccountList.tsx:54
+msgid "Login to account that is not listed"
+msgstr "Logáil isteach ar chuntas nach bhfuil liostáilte"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:116
+msgid "Looks like XXXXX-XXXXX"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:79
+msgid "Make sure this is where you intend to go!"
+msgstr "Bí cinnte go bhfuil tú ag iarraidh cuairt a thabhairt ar an áit sin!"
+
+#: src/components/dialogs/MutedWords.tsx:82
+msgid "Manage your muted words and tags"
+msgstr ""
+
+#: src/view/screens/Profile.tsx:192
+msgid "Media"
+msgstr "Meáin"
+
+#: src/view/com/threadgate/WhoCanReply.tsx:139
+msgid "mentioned users"
+msgstr "úsáideoirí luaite"
+
+#: src/view/com/modals/Threadgate.tsx:93
+msgid "Mentioned users"
+msgstr "Úsáideoirí luaite"
+
+#: src/view/com/util/ViewHeader.tsx:87
+#: src/view/screens/Search/Search.tsx:648
+msgid "Menu"
+msgstr "Clár"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:192
+msgid "Message from server: {0}"
+msgstr "Teachtaireacht ón bhfreastalaí: {0}"
+
+#: src/lib/moderation/useReportOptions.ts:45
+msgid "Misleading Account"
+msgstr ""
+
+#: src/Navigation.tsx:119
+#: src/screens/Moderation/index.tsx:104
+#: src/view/screens/Settings/index.tsx:645
+#: src/view/shell/desktop/LeftNav.tsx:401
+#: src/view/shell/Drawer.tsx:514
+#: src/view/shell/Drawer.tsx:515
+msgid "Moderation"
+msgstr "Modhnóireacht"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:112
+msgid "Moderation details"
+msgstr ""
+
+#: src/view/com/lists/ListCard.tsx:93
+#: src/view/com/modals/UserAddRemoveLists.tsx:206
+msgid "Moderation list by {0}"
+msgstr "Liosta modhnóireachta le {0}"
+
+#: src/view/screens/ProfileList.tsx:789
+msgid "Moderation list by <0/>"
+msgstr "Liosta modhnóireachta le <0/>"
+
+#: src/view/com/lists/ListCard.tsx:91
+#: src/view/com/modals/UserAddRemoveLists.tsx:204
+#: src/view/screens/ProfileList.tsx:787
+msgid "Moderation list by you"
+msgstr "Liosta modhnóireachta leat"
+
+#: src/view/com/modals/CreateOrEditList.tsx:198
+msgid "Moderation list created"
+msgstr "Liosta modhnóireachta cruthaithe"
+
+#: src/view/com/modals/CreateOrEditList.tsx:184
+msgid "Moderation list updated"
+msgstr "Liosta modhnóireachta uasdátaithe"
+
+#: src/screens/Moderation/index.tsx:243
+msgid "Moderation lists"
+msgstr "Liostaí modhnóireachta"
+
+#: src/Navigation.tsx:124
+#: src/view/screens/ModerationModlists.tsx:58
+msgid "Moderation Lists"
+msgstr "Liostaí modhnóireachta"
+
+#: src/view/screens/Settings/index.tsx:639
+msgid "Moderation settings"
+msgstr "Socruithe modhnóireachta"
+
+#: src/Navigation.tsx:216
+msgid "Moderation states"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:215
+msgid "Moderation tools"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:48
+#: src/lib/moderation/useModerationCauseDescription.ts:40
+msgid "Moderator has chosen to set a general warning on the content."
+msgstr "Chuir an modhnóir rabhadh ginearálta ar an ábhar."
+
+#: src/view/com/post-thread/PostThreadItem.tsx:541
+msgid "More"
+msgstr ""
+
+#: src/view/shell/desktop/Feeds.tsx:65
+msgid "More feeds"
+msgstr "Tuilleadh fothaí"
+
+#: src/view/screens/ProfileList.tsx:599
+msgid "More options"
+msgstr "Tuilleadh roghanna"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:270
+#~ msgid "More post options"
+#~ msgstr "Tuilleadh roghanna postála"
+
+#: src/view/screens/PreferencesThreads.tsx:82
+msgid "Most-liked replies first"
+msgstr "Freagraí a fuair an méid is mó moltaí ar dtús"
+
+#: src/components/TagMenu/index.tsx:249
+msgid "Mute"
+msgstr ""
+
+#: src/components/TagMenu/index.web.tsx:105
+msgid "Mute {truncatedTag}"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:279
+#: src/view/com/profile/ProfileMenu.tsx:286
+msgid "Mute Account"
+msgstr "Cuir an cuntas i bhfolach"
+
+#: src/view/screens/ProfileList.tsx:518
+msgid "Mute accounts"
+msgstr "Cuir na cuntais i bhfolach"
+
+#: src/components/TagMenu/index.tsx:209
+msgid "Mute all {displayTag} posts"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:148
+msgid "Mute in tags only"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:133
+msgid "Mute in text & tags"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:461
+#: src/view/screens/ProfileList.tsx:624
+msgid "Mute list"
+msgstr "Cuir an liosta i bhfolach"
+
+#: src/view/screens/ProfileList.tsx:619
+msgid "Mute these accounts?"
+msgstr "An bhfuil fonn ort na cuntais seo a chur i bhfolach"
+
+#: src/view/screens/ProfileList.tsx:278
+#~ msgid "Mute this List"
+#~ msgstr "Cuir an liosta seo i bhfolach"
+
+#: src/components/dialogs/MutedWords.tsx:126
+msgid "Mute this word in post text and tags"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:141
+msgid "Mute this word in tags only"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:257
+msgid "Mute thread"
+msgstr "Cuir an snáithe seo i bhfolach"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:267
+#: src/view/com/util/forms/PostDropdownBtn.tsx:269
+msgid "Mute words & tags"
+msgstr ""
+
+#: src/view/com/lists/ListCard.tsx:102
+msgid "Muted"
+msgstr "Curtha i bhfolach"
+
+#: src/screens/Moderation/index.tsx:255
+msgid "Muted accounts"
+msgstr "Cuntais a cuireadh i bhfolach"
+
+#: src/Navigation.tsx:129
+#: src/view/screens/ModerationMutedAccounts.tsx:107
+msgid "Muted Accounts"
+msgstr "Cuntais a Cuireadh i bhFolach"
+
+#: src/view/screens/ModerationMutedAccounts.tsx:115
+msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private."
+msgstr "Baintear na postálacha ó na cuntais a chuir tú i bhfolach as d’fhotha agus as do chuid fógraí. Is príobháideach ar fad é an cur i bhfolach."
+
+#: src/lib/moderation/useModerationCauseDescription.ts:85
+msgid "Muted by \"{0}\""
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:231
+msgid "Muted words & tags"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:621
+msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them."
+msgstr "Tá an cur i bhfolach príobháideach. Is féidir leis na cuntais a chuir tú i bhfolach do chuid postálacha a fheiceáil agus is féidir leo scríobh chugat ach ní fheicfidh tú a gcuid postálacha eile ná aon fhógraí uathu."
+
+#: src/components/dialogs/BirthDateSettings.tsx:35
+#: src/components/dialogs/BirthDateSettings.tsx:38
+msgid "My Birthday"
+msgstr "Mo Bhreithlá"
+
+#: src/view/screens/Feeds.tsx:663
+msgid "My Feeds"
+msgstr "Mo Chuid Fothaí"
+
+#: src/view/shell/desktop/LeftNav.tsx:65
+msgid "My Profile"
+msgstr "Mo Phróifíl"
+
+#: src/view/screens/Settings/index.tsx:596
+msgid "My saved feeds"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:602
+msgid "My Saved Feeds"
+msgstr "Na Fothaí a Shábháil Mé"
+
+#: src/view/com/auth/server-input/index.tsx:118
+#~ msgid "my-server.com"
+#~ msgstr "my-server.com"
+
+#~ msgid "Ná bíodh gan fáil ar do chuid leantóirí ná ar do chuid dáta go deo."
+#~ msgstr "Cuir an comhrá seo i bhfolach"
+
+#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/CreateOrEditList.tsx:291
+msgid "Name"
+msgstr "Ainm"
+
+#: src/view/com/modals/CreateOrEditList.tsx:146
+msgid "Name is required"
+msgstr "Tá an t-ainm riachtanach"
+
+#: src/lib/moderation/useReportOptions.ts:57
+#: src/lib/moderation/useReportOptions.ts:78
+#: src/lib/moderation/useReportOptions.ts:86
+msgid "Name or Description Violates Community Standards"
+msgstr ""
+
+#: src/screens/Onboarding/index.tsx:25
+msgid "Nature"
+msgstr "Nádúr"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:173
+#: src/screens/Login/LoginForm.tsx:254
+#: src/view/com/modals/ChangePassword.tsx:168
+msgid "Navigates to the next screen"
+msgstr "Téann sé seo chuig an gcéad scáileán eile"
+
+#: src/view/shell/Drawer.tsx:71
+msgid "Navigates to your profile"
+msgstr "Téann sé seo chuig do phróifíl"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:122
+msgid "Need to report a copyright violation?"
+msgstr ""
+
+#: src/view/com/modals/EmbedConsent.tsx:107
+#: src/view/com/modals/EmbedConsent.tsx:123
+#~ msgid "Never load embeds from {0}"
+#~ msgstr "Ná lódáil ábhar leabaithe ó {0} go deo"
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:72
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:74
+msgid "Never lose access to your followers and data."
+msgstr "Ná bíodh gan fáil ar do chuid leantóirí ná ar do chuid dáta go deo."
+
+#: src/screens/Onboarding/StepFinished.tsx:123
+msgid "Never lose access to your followers or data."
+msgstr "Ná bíodh gan fáil ar do chuid leantóirí ná ar do chuid dáta go deo."
+
+#: src/view/com/modals/ChangeHandle.tsx:519
+msgid "Nevermind, create a handle for me"
+msgstr ""
+
+#: src/view/screens/Lists.tsx:76
+msgctxt "action"
+msgid "New"
+msgstr "Nua"
+
+#: src/view/screens/ModerationModlists.tsx:78
+msgid "New"
+msgstr "Nua"
+
+#: src/view/com/modals/CreateOrEditList.tsx:253
+msgid "New Moderation List"
+msgstr "Liosta modhnóireachta nua"
+
+#: src/view/com/modals/ChangePassword.tsx:212
+msgid "New password"
+msgstr "Pasfhocal Nua"
+
+#: src/view/com/modals/ChangePassword.tsx:217
+msgid "New Password"
+msgstr "Pasfhocal Nua"
+
+#: src/view/com/feeds/FeedPage.tsx:149
+msgctxt "action"
+msgid "New post"
+msgstr "Postáil nua"
+
+#: src/view/screens/Feeds.tsx:555
+#: src/view/screens/Notifications.tsx:168
+#: src/view/screens/Profile.tsx:452
+#: src/view/screens/ProfileFeed.tsx:434
+#: src/view/screens/ProfileList.tsx:199
+#: src/view/screens/ProfileList.tsx:227
+#: src/view/shell/desktop/LeftNav.tsx:252
+msgid "New post"
+msgstr "Postáil nua"
+
+#: src/view/shell/desktop/LeftNav.tsx:262
+msgctxt "action"
+msgid "New Post"
+msgstr "Postáil nua"
+
+#: src/view/com/modals/CreateOrEditList.tsx:248
+msgid "New User List"
+msgstr "Liosta Nua d’Úsáideoirí"
+
+#: src/view/screens/PreferencesThreads.tsx:79
+msgid "Newest replies first"
+msgstr "Na freagraí is déanaí ar dtús"
+
+#: src/screens/Onboarding/index.tsx:23
+msgid "News"
+msgstr "Nuacht"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:143
+#: src/screens/Login/ForgotPasswordForm.tsx:150
+#: src/screens/Login/LoginForm.tsx:253
+#: src/screens/Login/LoginForm.tsx:260
+#: src/screens/Login/SetNewPasswordForm.tsx:174
+#: src/screens/Login/SetNewPasswordForm.tsx:180
+#: src/screens/Signup/index.tsx:205
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79
+#: src/view/com/modals/ChangePassword.tsx:253
+#: src/view/com/modals/ChangePassword.tsx:255
+msgid "Next"
+msgstr "Ar aghaidh"
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:103
+msgctxt "action"
+msgid "Next"
+msgstr "Ar aghaidh"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:169
+msgid "Next image"
+msgstr "An chéad íomhá eile"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:200
+#: src/view/screens/PreferencesFollowingFeed.tsx:235
+#: src/view/screens/PreferencesFollowingFeed.tsx:272
+#: src/view/screens/PreferencesThreads.tsx:106
+#: src/view/screens/PreferencesThreads.tsx:129
+msgid "No"
+msgstr "Níl"
+
+#: src/view/screens/ProfileFeed.tsx:562
+#: src/view/screens/ProfileList.tsx:769
+msgid "No description"
+msgstr "Gan chur síos"
+
+#: src/view/com/modals/ChangeHandle.tsx:405
+msgid "No DNS Panel"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:118
+msgid "No longer following {0}"
+msgstr "Ní leantar {0} níos mó"
+
+#: src/screens/Signup/StepHandle.tsx:114
+msgid "No longer than 253 characters"
+msgstr ""
+
+#: src/view/com/notifications/Feed.tsx:109
+msgid "No notifications yet!"
+msgstr "Níl aon fhógra ann fós!"
+
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:101
+#: src/view/com/composer/text-input/web/Autocomplete.tsx:195
+msgid "No result"
+msgstr "Gan torthaí"
+
+#: src/components/Lists.tsx:183
+msgid "No results found"
+msgstr ""
+
+#: src/view/screens/Feeds.tsx:495
+msgid "No results found for \"{query}\""
+msgstr "Gan torthaí ar “{query}”"
+
+#: src/view/com/modals/ListAddRemoveUsers.tsx:127
+#: src/view/screens/Search/Search.tsx:283
+#: src/view/screens/Search/Search.tsx:311
+msgid "No results found for {query}"
+msgstr "Gan torthaí ar {query}"
+
+#: src/components/dialogs/EmbedConsent.tsx:105
+#: src/components/dialogs/EmbedConsent.tsx:112
+msgid "No thanks"
+msgstr "Níor mhaith liom é sin."
+
+#: src/view/com/modals/Threadgate.tsx:82
+msgid "Nobody"
+msgstr "Duine ar bith"
+
+#: src/components/LikedByList.tsx:79
+#: src/components/LikesDialog.tsx:99
+msgid "Nobody has liked this yet. Maybe you should be the first!"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:42
+msgid "Non-sexual Nudity"
+msgstr ""
+
+#: src/view/com/modals/SelfLabel.tsx:135
+msgid "Not Applicable."
+msgstr "Ní bhaineann sé sin le hábhar."
+
+#: src/Navigation.tsx:109
+#: src/view/screens/Profile.tsx:99
+msgid "Not Found"
+msgstr "Ní bhfuarthas é sin"
+
+#: src/view/com/modals/VerifyEmail.tsx:246
+#: src/view/com/modals/VerifyEmail.tsx:252
+msgid "Not right now"
+msgstr "Ní anois"
+
+#: src/view/com/profile/ProfileMenu.tsx:368
+#: src/view/com/util/forms/PostDropdownBtn.tsx:342
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:246
+msgid "Note about sharing"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:540
+msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites."
+msgstr "Nod leat: is gréasán oscailte poiblí Bluesky. Ní chuireann an socrú seo srian ar fheiceálacht do chuid ábhair ach amháin ar aip agus suíomh Bluesky. Is féidir nach gcloífidh aipeanna eile leis an socrú seo. Is féidir go dtaispeánfar do chuid ábhair d’úsáideoirí atá lógáilte amach ar aipeanna agus suíomhanna eile."
+
+#: src/Navigation.tsx:469
+#: src/view/screens/Notifications.tsx:124
+#: src/view/screens/Notifications.tsx:148
+#: src/view/shell/bottom-bar/BottomBar.tsx:215
+#: src/view/shell/desktop/LeftNav.tsx:365
+#: src/view/shell/Drawer.tsx:438
+#: src/view/shell/Drawer.tsx:439
+msgid "Notifications"
+msgstr "Fógraí"
+
+#: src/view/com/modals/SelfLabel.tsx:103
+msgid "Nudity"
+msgstr "Lomnochtacht"
+
+#: src/lib/moderation/useReportOptions.ts:71
+msgid "Nudity or adult content not labeled as such"
+msgstr ""
+
+#: src/screens/Signup/index.tsx:142
+msgid "of"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:11
+msgid "Off"
+msgstr ""
+
+#: src/view/com/util/ErrorBoundary.tsx:49
+msgid "Oh no!"
+msgstr "Úps!"
+
+#: src/screens/Onboarding/StepInterests/index.tsx:132
+msgid "Oh no! Something went wrong."
+msgstr "Úps! Theip ar rud éigin."
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:126
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:327
+msgid "OK"
+msgstr ""
+
+#: src/screens/Login/PasswordUpdatedForm.tsx:44
+msgid "Okay"
+msgstr "Maith go leor"
+
+#: src/view/screens/PreferencesThreads.tsx:78
+msgid "Oldest replies first"
+msgstr "Na freagraí is sine ar dtús"
+
+#: src/view/screens/Settings/index.tsx:244
+msgid "Onboarding reset"
+msgstr "Atosú an chláraithe"
+
+#: src/view/com/composer/Composer.tsx:392
+msgid "One or more images is missing alt text."
+msgstr "Tá téacs malartach de dhíth ar íomhá amháin nó níos mó acu."
+
+#: src/view/com/threadgate/WhoCanReply.tsx:100
+msgid "Only {0} can reply."
+msgstr "Ní féidir ach le {0} freagra a thabhairt."
+
+#: src/screens/Signup/StepHandle.tsx:97
+msgid "Only contains letters, numbers, and hyphens"
+msgstr ""
+
+#: src/components/Lists.tsx:75
+msgid "Oops, something went wrong!"
+msgstr ""
+
+#: src/components/Lists.tsx:170
+#: src/view/screens/AppPasswords.tsx:67
+#: src/view/screens/Profile.tsx:99
+msgid "Oops!"
+msgstr "Úps!"
+
+#: src/screens/Onboarding/StepFinished.tsx:119
+msgid "Open"
+msgstr "Oscail"
+
+#: src/view/com/composer/Composer.tsx:491
+#: src/view/com/composer/Composer.tsx:492
+msgid "Open emoji picker"
+msgstr "Oscail roghnóir na n-emoji"
+
+#: src/view/screens/ProfileFeed.tsx:300
+msgid "Open feed options menu"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:734
+msgid "Open links with in-app browser"
+msgstr "Oscail nascanna leis an mbrabhsálaí san aip"
+
+#: src/screens/Moderation/index.tsx:227
+msgid "Open muted words and tags settings"
+msgstr ""
+
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:50
+msgid "Open navigation"
+msgstr "Oscail an nascleanúint"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:183
+msgid "Open post options menu"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:828
+#: src/view/screens/Settings/index.tsx:838
+msgid "Open storybook page"
+msgstr "Oscail leathanach an Storybook"
+
+#: src/view/screens/Settings/index.tsx:816
+msgid "Open system log"
+msgstr ""
+
+#: src/view/com/util/forms/DropdownButton.tsx:154
+msgid "Opens {numItems} options"
+msgstr "Osclaíonn sé seo {numItems} rogha"
+
+#: src/view/screens/Log.tsx:54
+msgid "Opens additional details for a debug entry"
+msgstr "Osclaíonn sé seo tuilleadh sonraí le haghaidh iontráil dífhabhtaithe"
+
+#: src/view/com/notifications/FeedItem.tsx:353
+msgid "Opens an expanded list of users in this notification"
+msgstr "Osclaíonn sé seo liosta méadaithe d’úsáideoirí san fhógra seo"
+
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:78
+msgid "Opens camera on device"
+msgstr "Osclaíonn sé seo an ceamara ar an ngléas"
+
+#: src/view/com/composer/Prompt.tsx:25
+msgid "Opens composer"
+msgstr "Osclaíonn sé seo an t-eagarthóir"
+
+#: src/view/screens/Settings/index.tsx:615
+msgid "Opens configurable language settings"
+msgstr "Osclaíonn sé seo na socruithe teanga is féidir a dhéanamh"
+
+#: src/view/com/composer/photos/SelectPhotoBtn.tsx:44
+msgid "Opens device photo gallery"
+msgstr "Osclaíonn sé seo gailearaí na ngrianghraf ar an ngléas"
+
+#: src/view/com/profile/ProfileHeader.tsx:419
+#~ msgid "Opens editor for profile display name, avatar, background image, and description"
+#~ msgstr "Osclaíonn sé seo an t-eagarthóir le haghaidh gach a bhfuil i do phróifíl: an t-ainm, an t-abhatár, an íomhá sa chúlra, agus an cur síos."
+
+#: src/view/screens/Settings/index.tsx:669
+msgid "Opens external embeds settings"
+msgstr "Osclaíonn sé seo na socruithe le haghaidh leabuithe seachtracha"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:57
+#: src/view/com/auth/SplashScreen.tsx:68
+#: src/view/com/auth/SplashScreen.web.tsx:97
+msgid "Opens flow to create a new Bluesky account"
+msgstr ""
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:75
+#: src/view/com/auth/SplashScreen.tsx:83
+#: src/view/com/auth/SplashScreen.web.tsx:112
+msgid "Opens flow to sign into your existing Bluesky account"
+msgstr ""
+
+#: src/view/com/profile/ProfileHeader.tsx:574
+#~ msgid "Opens followers list"
+#~ msgstr "Osclaíonn sé seo liosta na leantóirí"
+
+#: src/view/com/profile/ProfileHeader.tsx:593
+#~ msgid "Opens following list"
+#~ msgstr "Osclaíonn sé seo liosta na ndaoine a leanann tú"
+
+#: src/view/screens/Settings.tsx:412
+#~ msgid "Opens invite code list"
+#~ msgstr "Osclaíonn sé seo liosta na gcód cuiridh"
+
+#: src/view/com/modals/InviteCodes.tsx:173
+msgid "Opens list of invite codes"
+msgstr "Osclaíonn sé seo liosta na gcód cuiridh"
+
+#: src/view/screens/Settings/index.tsx:798
+msgid "Opens modal for account deletion confirmation. Requires email code"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:774
+#~ msgid "Opens modal for account deletion confirmation. Requires email code."
+#~ msgstr "Osclaíonn sé seo an fhuinneog le scriosadh an chuntais a dhearbhú. Tá cód ríomhphoist riachtanach."
+
+#: src/view/screens/Settings/index.tsx:756
+msgid "Opens modal for changing your Bluesky password"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:718
+msgid "Opens modal for choosing a new Bluesky handle"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:779
+msgid "Opens modal for downloading your Bluesky account data (repository)"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:968
+msgid "Opens modal for email verification"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:282
+msgid "Opens modal for using custom domain"
+msgstr "Osclaíonn sé seo an fhuinneog le sainfhearann a úsáid"
+
+#: src/view/screens/Settings/index.tsx:640
+msgid "Opens moderation settings"
+msgstr "Osclaíonn sé seo socruithe na modhnóireachta"
+
+#: src/screens/Login/LoginForm.tsx:202
+msgid "Opens password reset form"
+msgstr "Osclaíonn sé seo an fhoirm leis an bpasfhocal a athrú"
+
+#: src/view/com/home/HomeHeaderLayout.web.tsx:63
+#: src/view/screens/Feeds.tsx:356
+msgid "Opens screen to edit Saved Feeds"
+msgstr "Osclaíonn sé seo an scáileán leis na fothaí sábháilte a athrú"
+
+#: src/view/screens/Settings/index.tsx:597
+msgid "Opens screen with all saved feeds"
+msgstr "Osclaíonn sé seo an scáileán leis na fothaí sábháilte go léir"
+
+#: src/view/screens/Settings/index.tsx:696
+msgid "Opens the app password settings"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:676
+#~ msgid "Opens the app password settings page"
+#~ msgstr "Osclaíonn sé seo an leathanach a bhfuil socruithe phasfhocal na haipe air"
+
+#: src/view/screens/Settings/index.tsx:554
+msgid "Opens the Following feed preferences"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:535
+#~ msgid "Opens the home feed preferences"
+#~ msgstr "Osclaíonn sé seo roghanna fhotha an bhaile"
+
+#: src/view/com/modals/LinkWarning.tsx:93
+msgid "Opens the linked website"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:829
+#: src/view/screens/Settings/index.tsx:839
+msgid "Opens the storybook page"
+msgstr "Osclaíonn sé seo leathanach an Storybook"
+
+#: src/view/screens/Settings/index.tsx:817
+msgid "Opens the system log page"
+msgstr "Osclaíonn sé seo logleabhar an chórais"
+
+#: src/view/screens/Settings/index.tsx:575
+msgid "Opens the threads preferences"
+msgstr "Osclaíonn sé seo roghanna na snáitheanna"
+
+#: src/view/com/util/forms/DropdownButton.tsx:280
+msgid "Option {0} of {numItems}"
+msgstr "Rogha {0} as {numItems}"
+
+#: src/components/ReportDialog/SubmitView.tsx:162
+msgid "Optionally provide additional information below:"
+msgstr ""
+
+#: src/view/com/modals/Threadgate.tsx:89
+msgid "Or combine these options:"
+msgstr "Nó cuir na roghanna seo le chéile:"
+
+#: src/lib/moderation/useReportOptions.ts:25
+msgid "Other"
+msgstr ""
+
+#: src/components/AccountList.tsx:73
+msgid "Other account"
+msgstr "Cuntas eile"
+
+#: src/view/com/modals/ServerInput.tsx:88
+#~ msgid "Other service"
+#~ msgstr "Seirbhís eile"
+
+#: src/view/com/composer/select-language/SelectLangBtn.tsx:91
+msgid "Other..."
+msgstr "Eile…"
+
+#: src/components/Lists.tsx:184
+#: src/view/screens/NotFound.tsx:45
+msgid "Page not found"
+msgstr "Leathanach gan aimsiú"
+
+#: src/view/screens/NotFound.tsx:42
+msgid "Page Not Found"
+msgstr "Leathanach gan aimsiú"
+
+#: src/screens/Login/LoginForm.tsx:178
+#: src/screens/Signup/StepInfo/index.tsx:101
+#: src/view/com/modals/DeleteAccount.tsx:194
+#: src/view/com/modals/DeleteAccount.tsx:201
+msgid "Password"
+msgstr "Pasfhocal"
+
+#: src/view/com/modals/ChangePassword.tsx:142
+msgid "Password Changed"
+msgstr ""
+
+#: src/screens/Login/index.tsx:157
+msgid "Password updated"
+msgstr "Pasfhocal uasdátaithe"
+
+#: src/screens/Login/PasswordUpdatedForm.tsx:30
+msgid "Password updated!"
+msgstr "Pasfhocal uasdátaithe!"
+
+#: src/Navigation.tsx:164
+msgid "People followed by @{0}"
+msgstr "Na daoine atá leanta ag @{0}"
+
+#: src/Navigation.tsx:157
+msgid "People following @{0}"
+msgstr "Na leantóirí atá ag @{0}"
+
+#: src/view/com/lightbox/Lightbox.tsx:66
+msgid "Permission to access camera roll is required."
+msgstr "Tá cead de dhíth le rolla an cheamara a oscailt."
+
+#: src/view/com/lightbox/Lightbox.tsx:72
+msgid "Permission to access camera roll was denied. Please enable it in your system settings."
+msgstr "Ní bhfuarthas cead le rolla an cheamara a oscailt. Athraigh socruithe an chórais len é seo a chur ar fáil, le do thoil."
+
+#: src/screens/Onboarding/index.tsx:31
+msgid "Pets"
+msgstr "Peataí"
+
+#: src/view/com/auth/create/Step2.tsx:183
+#~ msgid "Phone number"
+#~ msgstr "Uimhir ghutháin"
+
+#: src/view/com/modals/SelfLabel.tsx:121
+msgid "Pictures meant for adults."
+msgstr "Pictiúir le haghaidh daoine fásta."
+
+#: src/view/screens/ProfileFeed.tsx:292
+#: src/view/screens/ProfileList.tsx:563
+msgid "Pin to home"
+msgstr "Greamaigh le baile"
+
+#: src/view/screens/ProfileFeed.tsx:295
+msgid "Pin to Home"
+msgstr ""
+
+#: src/view/screens/SavedFeeds.tsx:88
+msgid "Pinned Feeds"
+msgstr "Fothaí greamaithe"
+
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:123
+msgid "Play {0}"
+msgstr "Seinn {0}"
+
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:57
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:58
+msgid "Play Video"
+msgstr "Seinn an físeán"
+
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:122
+msgid "Plays the GIF"
+msgstr "Seinneann sé seo an GIF"
+
+#: src/screens/Signup/state.ts:241
+msgid "Please choose your handle."
+msgstr "Roghnaigh do leasainm, le do thoil."
+
+#: src/screens/Signup/state.ts:234
+msgid "Please choose your password."
+msgstr "Roghnaigh do phasfhocal, le do thoil."
+
+#: src/screens/Signup/state.ts:251
+msgid "Please complete the verification captcha."
+msgstr "Déan an captcha, le do thoil."
+
+#: src/view/com/modals/ChangeEmail.tsx:67
+msgid "Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed."
+msgstr "Dearbhaigh do ríomhphost roimh é a athrú. Riachtanas sealadach é seo le linn dúinn acmhainní a chur isteach le haghaidh uasdátú an ríomhphoist. Scriosfar é seo roimh i bhfad."
+
+#: src/view/com/modals/AddAppPasswords.tsx:91
+msgid "Please enter a name for your app password. All spaces is not allowed."
+msgstr "Cuir isteach ainm le haghaidh phasfhocal na haipe, le do thoil. Ní cheadaítear spásanna gan aon rud eile ann."
+
+#: src/view/com/auth/create/Step2.tsx:206
+#~ msgid "Please enter a phone number that can receive SMS text messages."
+#~ msgstr "Cuir isteach uimhir ghutháin atá in ann teachtaireachtaí SMS a fháil, le do thoil."
+
+#: src/view/com/modals/AddAppPasswords.tsx:146
+msgid "Please enter a unique name for this App Password or use our randomly generated one."
+msgstr "Cuir isteach ainm nach bhfuil in úsáid cheana féin le haghaidh Phasfhocal na hAipe nó bain úsáid as an gceann a chruthóidh muid go randamach."
+
+#: src/components/dialogs/MutedWords.tsx:67
+msgid "Please enter a valid word, tag, or phrase to mute"
+msgstr ""
+
+#: src/view/com/auth/create/state.ts:170
+#~ msgid "Please enter the code you received by SMS."
+#~ msgstr "Cuir isteach an cód a fuair tú trí SMS, le do thoil."
+
+#: src/view/com/auth/create/Step2.tsx:282
+#~ msgid "Please enter the verification code sent to {phoneNumberFormatted}."
+#~ msgstr "Cuir isteach an cód dearbhaithe a cuireadh chuig {phoneNumberFormatted}, le do thoil."
+
+#: src/screens/Signup/state.ts:220
+msgid "Please enter your email."
+msgstr "Cuir isteach do sheoladh ríomhphoist, le do thoil."
+
+#: src/view/com/modals/DeleteAccount.tsx:190
+msgid "Please enter your password as well:"
+msgstr "Cuir isteach do phasfhocal freisin, le do thoil."
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:221
+msgid "Please explain why you think this label was incorrectly applied by {0}"
+msgstr ""
+
+#: src/view/com/modals/AppealLabel.tsx:72
+#: src/view/com/modals/AppealLabel.tsx:75
+#~ msgid "Please tell us why you think this content warning was incorrectly applied!"
+#~ msgstr "Abair linn, le do thoil, cén fáth a gcreideann tú gur cuireadh an rabhadh ábhair seo i bhfeidhm go mícheart."
+
+#: src/view/com/modals/AppealLabel.tsx:72
+#: src/view/com/modals/AppealLabel.tsx:75
+#~ msgid "Please tell us why you think this decision was incorrect."
+#~ msgstr "Abair linn, le do thoil, cén fáth a gcreideann tú go bhfuil an cinneadh seo mícheart."
+
+#: src/view/com/modals/VerifyEmail.tsx:101
+msgid "Please Verify Your Email"
+msgstr "Dearbhaigh do ríomhphost, le do thoil."
+
+#: src/view/com/composer/Composer.tsx:222
+msgid "Please wait for your link card to finish loading"
+msgstr "Fan le lódáil ar fad do chárta naisc, le do thoil."
+
+#: src/screens/Onboarding/index.tsx:37
+msgid "Politics"
+msgstr "Polaitíocht"
+
+#: src/view/com/modals/SelfLabel.tsx:111
+msgid "Porn"
+msgstr "Pornagrafaíocht"
+
+#: src/view/com/composer/Composer.tsx:367
+#: src/view/com/composer/Composer.tsx:375
+msgctxt "action"
+msgid "Post"
+msgstr "Postáil"
+
+#: src/view/com/post-thread/PostThread.tsx:292
+msgctxt "description"
+msgid "Post"
+msgstr "Postáil"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:175
+msgid "Post by {0}"
+msgstr "Postáil ó {0}"
+
+#: src/Navigation.tsx:176
+#: src/Navigation.tsx:183
+#: src/Navigation.tsx:190
+msgid "Post by @{0}"
+msgstr "Postáil ó @{0}"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:105
+msgid "Post deleted"
+msgstr "Scriosadh an phostáil"
+
+#: src/view/com/post-thread/PostThread.tsx:157
+msgid "Post hidden"
+msgstr "Cuireadh an phostáil i bhfolach"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:97
+#: src/lib/moderation/useModerationCauseDescription.ts:99
+msgid "Post Hidden by Muted Word"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:100
+#: src/lib/moderation/useModerationCauseDescription.ts:108
+msgid "Post Hidden by You"
+msgstr ""
+
+#: src/view/com/composer/select-language/SelectLangBtn.tsx:87
+msgid "Post language"
+msgstr "Teanga postála"
+
+#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:75
+msgid "Post Languages"
+msgstr "Teangacha postála"
+
+#: src/view/com/post-thread/PostThread.tsx:152
+#: src/view/com/post-thread/PostThread.tsx:164
+msgid "Post not found"
+msgstr "Ní bhfuarthas an phostáil"
+
+#: src/components/TagMenu/index.tsx:253
+msgid "posts"
+msgstr ""
+
+#: src/view/screens/Profile.tsx:190
+msgid "Posts"
+msgstr "Postálacha"
+
+#: src/components/dialogs/MutedWords.tsx:89
+msgid "Posts can be muted based on their text, their tags, or both."
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:64
+msgid "Posts hidden"
+msgstr "Cuireadh na postálacha i bhfolach"
+
+#: src/view/com/modals/LinkWarning.tsx:60
+msgid "Potentially Misleading Link"
+msgstr "Is féidir go bhfuil an nasc seo míthreorach."
+
+#: src/components/forms/HostingProvider.tsx:45
+msgid "Press to change hosting provider"
+msgstr ""
+
+#: src/components/Error.tsx:74
+#: src/components/Lists.tsx:80
+#: src/screens/Signup/index.tsx:186
+msgid "Press to retry"
+msgstr ""
+
+#: src/view/com/lightbox/Lightbox.web.tsx:150
+msgid "Previous image"
+msgstr "An íomhá roimhe seo"
+
+#: src/view/screens/LanguageSettings.tsx:187
+msgid "Primary Language"
+msgstr "Príomhtheanga"
+
+#: src/view/screens/PreferencesThreads.tsx:97
+msgid "Prioritize Your Follows"
+msgstr "Tabhair Tosaíocht do Do Chuid Leantóirí"
+
+#: src/view/screens/Settings/index.tsx:652
+#: src/view/shell/desktop/RightNav.tsx:72
+msgid "Privacy"
+msgstr "Príobháideacht"
+
+#: src/Navigation.tsx:231
+#: src/screens/Signup/StepInfo/Policies.tsx:56
+#: src/view/screens/PrivacyPolicy.tsx:29
+#: src/view/screens/Settings/index.tsx:923
+#: src/view/shell/Drawer.tsx:265
+msgid "Privacy Policy"
+msgstr "Polasaí príobháideachta"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:156
+msgid "Processing..."
+msgstr "Á phróiseáil..."
+
+#: src/view/screens/DebugMod.tsx:888
+#: src/view/screens/Profile.tsx:342
+msgid "profile"
+msgstr ""
+
+#: src/view/shell/bottom-bar/BottomBar.tsx:260
+#: src/view/shell/desktop/LeftNav.tsx:419
+#: src/view/shell/Drawer.tsx:70
+#: src/view/shell/Drawer.tsx:549
+#: src/view/shell/Drawer.tsx:550
+msgid "Profile"
+msgstr "Próifíl"
+
+#: src/view/com/modals/EditProfile.tsx:129
+msgid "Profile updated"
+msgstr "Próifíl uasdátaithe"
+
+#: src/view/screens/Settings/index.tsx:981
+msgid "Protect your account by verifying your email."
+msgstr "Dearbhaigh do ríomhphost le do chuntas a chosaint."
+
+#: src/screens/Onboarding/StepFinished.tsx:105
+msgid "Public"
+msgstr "Poiblí"
+
+#: src/view/screens/ModerationModlists.tsx:61
+msgid "Public, shareable lists of users to mute or block in bulk."
+msgstr "Liostaí poiblí agus inroinnte d’úsáideoirí le cur i bhfolach nó le blocáil ar an mórchóir"
+
+#: src/view/screens/Lists.tsx:61
+msgid "Public, shareable lists which can drive feeds."
+msgstr "Liostaí poiblí agus inroinnte atá in ann fothaí a bheathú"
+
+#: src/view/com/composer/Composer.tsx:352
+msgid "Publish post"
+msgstr "Foilsigh an phostáil"
+
+#: src/view/com/composer/Composer.tsx:352
+msgid "Publish reply"
+msgstr "Foilsigh an freagra"
+
+#: src/view/com/modals/Repost.tsx:66
+msgctxt "action"
+msgid "Quote post"
+msgstr "Luaigh an phostáil seo"
+
+#: src/view/com/util/post-ctrls/RepostButton.web.tsx:58
+msgid "Quote post"
+msgstr "Postáil athluaite"
+
+#: src/view/com/modals/Repost.tsx:71
+msgctxt "action"
+msgid "Quote Post"
+msgstr "Luaigh an phostáil seo"
+
+#: src/view/screens/PreferencesThreads.tsx:86
+msgid "Random (aka \"Poster's Roulette\")"
+msgstr "Randamach"
+
+#: src/view/com/modals/EditImage.tsx:237
+msgid "Ratios"
+msgstr "Cóimheasa"
+
+#: src/view/screens/Search/Search.tsx:777
+msgid "Recent Searches"
+msgstr ""
+
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116
+msgid "Recommended Feeds"
+msgstr "Fothaí molta"
+
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:180
+msgid "Recommended Users"
+msgstr "Cuntais mholta"
+
+#: src/components/dialogs/MutedWords.tsx:286
+#: src/view/com/feeds/FeedSourceCard.tsx:283
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
+#: src/view/com/modals/SelfLabel.tsx:83
+#: src/view/com/modals/UserAddRemoveLists.tsx:219
+#: src/view/com/posts/FeedErrorMessage.tsx:204
+msgid "Remove"
+msgstr "Scrios"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:106
+#~ msgid "Remove {0} from my feeds?"
+#~ msgstr "An bhfuil fonn ort {0} a bhaint de do chuid fothaí?"
+
+#: src/view/com/util/AccountDropdownBtn.tsx:22
+msgid "Remove account"
+msgstr "Bain an cuntas de"
+
+#: src/view/com/util/UserAvatar.tsx:358
+msgid "Remove Avatar"
+msgstr ""
+
+#: src/view/com/util/UserBanner.tsx:148
+msgid "Remove Banner"
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:160
+msgid "Remove feed"
+msgstr "Bain an fotha de"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:201
+msgid "Remove feed?"
+msgstr ""
+
+#: src/view/com/feeds/FeedSourceCard.tsx:173
+#: src/view/com/feeds/FeedSourceCard.tsx:233
+#: src/view/screens/ProfileFeed.tsx:335
+#: src/view/screens/ProfileFeed.tsx:341
+msgid "Remove from my feeds"
+msgstr "Bain de mo chuid fothaí"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:278
+msgid "Remove from my feeds?"
+msgstr ""
+
+#: src/view/com/composer/photos/Gallery.tsx:167
+msgid "Remove image"
+msgstr "Bain an íomhá de"
+
+#: src/view/com/composer/ExternalEmbed.tsx:70
+msgid "Remove image preview"
+msgstr "Bain réamhléiriú den íomhá"
+
+#: src/components/dialogs/MutedWords.tsx:329
+msgid "Remove mute word from your list"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:48
+msgid "Remove repost"
+msgstr "Scrios an athphostáil"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:173
+#~ msgid "Remove this feed from my feeds?"
+#~ msgstr "An bhfuil fonn ort an fotha seo a bhaint de do chuid fothaí?"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:202
+msgid "Remove this feed from your saved feeds"
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:132
+#~ msgid "Remove this feed from your saved feeds?"
+#~ msgstr "An bhfuil fonn ort an fotha seo a bhaint de do chuid fothaí sábháilte?"
+
+#: src/view/com/modals/ListAddRemoveUsers.tsx:199
+#: src/view/com/modals/UserAddRemoveLists.tsx:152
+msgid "Removed from list"
+msgstr "Baineadh den liosta é"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:121
+msgid "Removed from my feeds"
+msgstr "Baineadh de do chuid fothaí é"
+
+#: src/view/screens/ProfileFeed.tsx:209
+msgid "Removed from your feeds"
+msgstr ""
+
+#: src/view/com/composer/ExternalEmbed.tsx:71
+msgid "Removes default thumbnail from {0}"
+msgstr "Baineann sé seo an mhionsamhail réamhshocraithe de {0}"
+
+#: src/view/screens/Profile.tsx:191
+msgid "Replies"
+msgstr "Freagraí"
+
+#: src/view/com/threadgate/WhoCanReply.tsx:98
+msgid "Replies to this thread are disabled"
+msgstr "Ní féidir freagraí a thabhairt ar an gcomhrá seo"
+
+#: src/view/com/composer/Composer.tsx:365
+msgctxt "action"
+msgid "Reply"
+msgstr "Freagair"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:144
+msgid "Reply Filters"
+msgstr "Scagairí freagra"
+
+#: src/view/com/post/Post.tsx:166
+#: src/view/com/posts/FeedItem.tsx:280
+msgctxt "description"
+msgid "Reply to <0/>"
+msgstr "Freagra ar <0/>"
+
+#: src/view/com/modals/report/Modal.tsx:166
+#~ msgid "Report {collectionName}"
+#~ msgstr "Déan gearán faoi {collectionName}"
+
+#: src/view/com/profile/ProfileMenu.tsx:319
+#: src/view/com/profile/ProfileMenu.tsx:322
+msgid "Report Account"
+msgstr "Déan gearán faoi chuntas"
+
+#: src/components/ReportDialog/index.tsx:49
+msgid "Report dialog"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:352
+#: src/view/screens/ProfileFeed.tsx:354
+msgid "Report feed"
+msgstr "Déan gearán faoi fhotha"
+
+#: src/view/screens/ProfileList.tsx:429
+msgid "Report List"
+msgstr "Déan gearán faoi liosta"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:292
+#: src/view/com/util/forms/PostDropdownBtn.tsx:294
+msgid "Report post"
+msgstr "Déan gearán faoi phostáil"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:42
+msgid "Report this content"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:55
+msgid "Report this feed"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:52
+msgid "Report this list"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:49
+msgid "Report this post"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:46
+msgid "Report this user"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:44
+#: src/view/com/modals/Repost.tsx:49
+#: src/view/com/modals/Repost.tsx:54
+#: src/view/com/util/post-ctrls/RepostButton.tsx:61
+msgctxt "action"
+msgid "Repost"
+msgstr "Athphostáil"
+
+#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
+msgid "Repost"
+msgstr "Athphostáil"
+
+#: src/view/com/util/post-ctrls/RepostButton.web.tsx:94
+#: src/view/com/util/post-ctrls/RepostButton.web.tsx:105
+msgid "Repost or quote post"
+msgstr "Athphostáil nó luaigh postáil"
+
+#: src/view/screens/PostRepostedBy.tsx:27
+msgid "Reposted By"
+msgstr "Athphostáilte ag"
+
+#: src/view/com/posts/FeedItem.tsx:197
+msgid "Reposted by {0}"
+msgstr "Athphostáilte ag {0}"
+
+#: src/view/com/posts/FeedItem.tsx:214
+msgid "Reposted by <0/>"
+msgstr "Athphostáilte ag <0/>"
+
+#: src/view/com/notifications/FeedItem.tsx:166
+msgid "reposted your post"
+msgstr "— d'athphostáil sé/sí do phostáil"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:187
+msgid "Reposts of this post"
+msgstr "Athphostálacha den phostáil seo"
+
+#: src/view/com/modals/ChangeEmail.tsx:181
+#: src/view/com/modals/ChangeEmail.tsx:183
+msgid "Request Change"
+msgstr "Iarr Athrú"
+
+#: src/view/com/auth/create/Step2.tsx:219
+#~ msgid "Request code"
+#~ msgstr "Iarr cód"
+
+#: src/view/com/modals/ChangePassword.tsx:241
+#: src/view/com/modals/ChangePassword.tsx:243
+msgid "Request Code"
+msgstr "Iarr Cód"
+
+#: src/view/screens/Settings/index.tsx:475
+msgid "Require alt text before posting"
+msgstr "Bíodh téacs malartach ann roimh phostáil i gcónaí"
+
+#: src/screens/Signup/StepInfo/index.tsx:69
+msgid "Required for this provider"
+msgstr "Riachtanach don soláthraí seo"
+
+#: src/view/com/modals/ChangePassword.tsx:185
+msgid "Reset code"
+msgstr "Cód athshocraithe"
+
+#: src/view/com/modals/ChangePassword.tsx:192
+msgid "Reset Code"
+msgstr "Cód Athshocraithe"
+
+#: src/view/screens/Settings/index.tsx:824
+#~ msgid "Reset onboarding"
+#~ msgstr "Athshocraigh an próiseas cláraithe"
+
+#: src/view/screens/Settings/index.tsx:858
+#: src/view/screens/Settings/index.tsx:861
+msgid "Reset onboarding state"
+msgstr "Athshocraigh an próiseas cláraithe"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:86
+msgid "Reset password"
+msgstr "Athshocraigh an pasfhocal"
+
+#: src/view/screens/Settings/index.tsx:814
+#~ msgid "Reset preferences"
+#~ msgstr "Athshocraigh na roghanna"
+
+#: src/view/screens/Settings/index.tsx:848
+#: src/view/screens/Settings/index.tsx:851
+msgid "Reset preferences state"
+msgstr "Athshocraigh na roghanna"
+
+#: src/view/screens/Settings/index.tsx:859
+msgid "Resets the onboarding state"
+msgstr "Athshocraíonn sé seo an clárú"
+
+#: src/view/screens/Settings/index.tsx:849
+msgid "Resets the preferences state"
+msgstr "Athshocraíonn sé seo na roghanna"
+
+#: src/screens/Login/LoginForm.tsx:235
+msgid "Retries login"
+msgstr "Baineann sé seo triail eile as an logáil isteach"
+
+#: src/view/com/util/error/ErrorMessage.tsx:57
+#: src/view/com/util/error/ErrorScreen.tsx:74
+msgid "Retries the last action, which errored out"
+msgstr "Baineann sé seo triail eile as an ngníomh is déanaí, ar theip air"
+
+#: src/components/Error.tsx:79
+#: src/components/Lists.tsx:91
+#: src/screens/Login/LoginForm.tsx:234
+#: src/screens/Login/LoginForm.tsx:241
+#: src/screens/Onboarding/StepInterests/index.tsx:225
+#: src/screens/Onboarding/StepInterests/index.tsx:228
+#: src/screens/Signup/index.tsx:193
+#: src/view/com/util/error/ErrorMessage.tsx:55
+#: src/view/com/util/error/ErrorScreen.tsx:72
+msgid "Retry"
+msgstr "Bain triail eile as"
+
+#: src/view/com/auth/create/Step2.tsx:247
+#~ msgid "Retry."
+#~ msgstr "Bain triail eile as."
+
+#: src/components/Error.tsx:86
+#: src/view/screens/ProfileList.tsx:917
+msgid "Return to previous page"
+msgstr "Fill ar an leathanach roimhe seo"
+
+#: src/view/screens/NotFound.tsx:59
+msgid "Returns to home page"
+msgstr ""
+
+#: src/view/screens/NotFound.tsx:58
+#: src/view/screens/ProfileFeed.tsx:113
+msgid "Returns to previous page"
+msgstr ""
+
+#: src/view/shell/desktop/RightNav.tsx:55
+#~ msgid "SANDBOX. Posts and accounts are not permanent."
+#~ msgstr "BOSCA GAINIMH. Ní choinneofar póstálacha ná cuntais."
+
+#: src/view/com/lightbox/Lightbox.tsx:132
+#: src/view/com/modals/CreateOrEditList.tsx:346
+msgctxt "action"
+msgid "Save"
+msgstr "Sábháil"
+
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/view/com/modals/ChangeHandle.tsx:174
+#: src/view/com/modals/CreateOrEditList.tsx:338
+#: src/view/com/modals/EditProfile.tsx:225
+msgid "Save"
+msgstr "Sábháil"
+
+#: src/view/com/modals/AltImage.tsx:131
+msgid "Save alt text"
+msgstr "Sábháil an téacs malartach"
+
+#: src/components/dialogs/BirthDateSettings.tsx:119
+msgid "Save birthday"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:233
+msgid "Save Changes"
+msgstr "Sábháil na hathruithe"
+
+#: src/view/com/modals/ChangeHandle.tsx:171
+msgid "Save handle change"
+msgstr "Sábháil an leasainm nua"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:145
+msgid "Save image crop"
+msgstr "Sábháil an pictiúr bearrtha"
+
+#: src/view/screens/ProfileFeed.tsx:336
+#: src/view/screens/ProfileFeed.tsx:342
+msgid "Save to my feeds"
+msgstr ""
+
+#: src/view/screens/SavedFeeds.tsx:122
+msgid "Saved Feeds"
+msgstr "Fothaí Sábháilte"
+
+#: src/view/com/lightbox/Lightbox.tsx:81
+msgid "Saved to your camera roll."
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:213
+msgid "Saved to your feeds"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:226
+msgid "Saves any changes to your profile"
+msgstr "Sábhálann sé seo na hathruithe a rinne tú ar do phróifíl"
+
+#: src/view/com/modals/ChangeHandle.tsx:172
+msgid "Saves handle change to {handle}"
+msgstr "Sábhálann sé seo athrú an leasainm go {handle}"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:146
+msgid "Saves image crop settings"
+msgstr ""
+
+#: src/screens/Onboarding/index.tsx:36
+msgid "Science"
+msgstr "Eolaíocht"
+
+#: src/view/screens/ProfileList.tsx:873
+msgid "Scroll to top"
+msgstr "Fill ar an mbarr"
+
+#: src/Navigation.tsx:459
+#: src/view/com/auth/LoggedOut.tsx:123
+#: src/view/com/modals/ListAddRemoveUsers.tsx:75
+#: src/view/com/util/forms/SearchInput.tsx:67
+#: src/view/com/util/forms/SearchInput.tsx:79
+#: src/view/screens/Search/Search.tsx:421
+#: src/view/screens/Search/Search.tsx:670
+#: src/view/screens/Search/Search.tsx:688
+#: src/view/shell/bottom-bar/BottomBar.tsx:169
+#: src/view/shell/desktop/LeftNav.tsx:328
+#: src/view/shell/desktop/Search.tsx:215
+#: src/view/shell/desktop/Search.tsx:224
+#: src/view/shell/Drawer.tsx:365
+#: src/view/shell/Drawer.tsx:366
+msgid "Search"
+msgstr "Cuardaigh"
+
+#: src/view/screens/Search/Search.tsx:737
+#: src/view/shell/desktop/Search.tsx:256
+msgid "Search for \"{query}\""
+msgstr "Déan cuardach ar “{query}”"
+
+#: src/components/TagMenu/index.tsx:145
+msgid "Search for all posts by @{authorHandle} with tag {displayTag}"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:94
+msgid "Search for all posts with tag {displayTag}"
+msgstr ""
+
+#: src/view/com/auth/LoggedOut.tsx:105
+#: src/view/com/auth/LoggedOut.tsx:106
+#: src/view/com/modals/ListAddRemoveUsers.tsx:70
+msgid "Search for users"
+msgstr "Cuardaigh úsáideoirí"
+
+#: src/view/com/modals/ChangeEmail.tsx:110
+msgid "Security Step Required"
+msgstr "Céim Slándála de dhíth"
+
+#: src/components/TagMenu/index.web.tsx:66
+msgid "See {truncatedTag} posts"
+msgstr ""
+
+#: src/components/TagMenu/index.web.tsx:83
+msgid "See {truncatedTag} posts by user"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:128
+msgid "See <0>{displayTag}0> posts"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:187
+msgid "See <0>{displayTag}0> posts by this user"
+msgstr ""
+
+#: src/view/screens/SavedFeeds.tsx:163
+msgid "See this guide"
+msgstr "Féach ar an treoirleabhar seo"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:40
+msgid "See what's next"
+msgstr "Féach an chéad rud eile"
+
+#: src/view/com/util/Selector.tsx:106
+msgid "Select {item}"
+msgstr "Roghnaigh {item}"
+
+#: src/screens/Login/ChooseAccountForm.tsx:61
+msgid "Select account"
+msgstr ""
+
+#: src/view/com/modals/ServerInput.tsx:75
+#~ msgid "Select Bluesky Social"
+#~ msgstr "Roghnaigh Bluesky Social"
+
+#: src/screens/Login/index.tsx:120
+msgid "Select from an existing account"
+msgstr "Roghnaigh ó chuntas atá ann"
+
+#: src/view/screens/LanguageSettings.tsx:299
+msgid "Select languages"
+msgstr ""
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:30
+msgid "Select moderator"
+msgstr ""
+
+#: src/view/com/util/Selector.tsx:107
+msgid "Select option {i} of {numItems}"
+msgstr "Roghnaigh rogha {i} as {numItems}"
+
+#: src/view/com/auth/create/Step1.tsx:103
+#: src/view/com/auth/login/LoginForm.tsx:150
+#~ msgid "Select service"
+#~ msgstr "Roghnaigh seirbhís"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:52
+msgid "Select some accounts below to follow"
+msgstr "Roghnaigh cúpla cuntas le leanúint"
+
+#: src/components/ReportDialog/SubmitView.tsx:135
+msgid "Select the moderation service(s) to report to"
+msgstr ""
+
+#: src/view/com/auth/server-input/index.tsx:82
+msgid "Select the service that hosts your data."
+msgstr "Roghnaigh an tseirbhís a óstálann do chuid sonraí."
+
+#: src/screens/Onboarding/StepModeration/index.tsx:49
+#~ msgid "Select the types of content that you want to see (or not see), and we'll handle the rest."
+#~ msgstr "Roghnaigh na rudaí ba mhaith leat a fheiceáil (nó gan a fheiceáil), agus leanfaimid ar aghaidh as sin."
+
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:100
+msgid "Select topical feeds to follow from the list below"
+msgstr "Roghnaigh fothaí le leanúint ón liosta thíos"
+
+#: src/screens/Onboarding/StepModeration/index.tsx:63
+msgid "Select what you want to see (or not see), and we’ll handle the rest."
+msgstr "Roghnaigh na rudaí ba mhaith leat a fheiceáil (nó gan a fheiceáil), agus leanfaimid ar aghaidh as sin"
+
+#: src/view/screens/LanguageSettings.tsx:281
+msgid "Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown."
+msgstr "Roghnaigh na teangacha ba mhaith leat a fheiceáil i do chuid fothaí. Mura roghnaíonn tú, taispeánfar ábhar i ngach teanga duit."
+
+#: src/view/screens/LanguageSettings.tsx:98
+#~ msgid "Select your app language for the default text to display in the app"
+#~ msgstr "Roghnaigh teanga na roghchlár a fheicfidh tú san aip"
+
+#: src/view/screens/LanguageSettings.tsx:98
+msgid "Select your app language for the default text to display in the app."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/index.tsx:133
+msgid "Select your date of birth"
+msgstr ""
+
+#: src/screens/Onboarding/StepInterests/index.tsx:200
+msgid "Select your interests from the options below"
+msgstr "Roghnaigh na rudaí a bhfuil suim agat iontu as na roghanna thíos"
+
+#: src/view/com/auth/create/Step2.tsx:155
+#~ msgid "Select your phone's country"
+#~ msgstr "Roghnaigh tír do ghutháin"
+
+#: src/view/screens/LanguageSettings.tsx:190
+msgid "Select your preferred language for translations in your feed."
+msgstr "Do rogha teanga nuair a dhéanfar aistriúchán ar ábhar i d'fhotha."
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:117
+msgid "Select your primary algorithmic feeds"
+msgstr "Roghnaigh do phríomhfhothaí algartamacha"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:133
+msgid "Select your secondary algorithmic feeds"
+msgstr "Roghnaigh do chuid fothaí algartamacha tánaisteacha"
+
+#: src/view/com/modals/VerifyEmail.tsx:202
+#: src/view/com/modals/VerifyEmail.tsx:204
+msgid "Send Confirmation Email"
+msgstr "Seol ríomhphost dearbhaithe"
+
+#: src/view/com/modals/DeleteAccount.tsx:130
+msgid "Send email"
+msgstr "Seol ríomhphost"
+
+#: src/view/com/modals/DeleteAccount.tsx:143
+msgctxt "action"
+msgid "Send Email"
+msgstr "Seol ríomhphost"
+
+#: src/view/shell/Drawer.tsx:298
+#: src/view/shell/Drawer.tsx:319
+msgid "Send feedback"
+msgstr "Seol aiseolas"
+
+#: src/components/ReportDialog/SubmitView.tsx:214
+#: src/components/ReportDialog/SubmitView.tsx:218
+msgid "Send report"
+msgstr ""
+
+#: src/view/com/modals/report/SendReportButton.tsx:45
+#~ msgid "Send Report"
+#~ msgstr "Seol an tuairisc"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:44
+msgid "Send report to {0}"
+msgstr ""
+
+#: src/view/com/modals/DeleteAccount.tsx:132
+msgid "Sends email with confirmation code for account deletion"
+msgstr "Seolann sé seo ríomhphost ina bhfuil cód dearbhaithe chun an cuntas a scriosadh"
+
+#: src/view/com/auth/server-input/index.tsx:114
+msgid "Server address"
+msgstr "Seoladh an fhreastalaí"
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:311
+#~ msgid "Set {value} for {labelGroup} content moderation policy"
+#~ msgstr "Socraigh {value} le haghaidh polasaí modhnóireachta {labelGroup}"
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:160
+#: src/view/com/modals/ContentFilteringSettings.tsx:179
+#~ msgctxt "action"
+#~ msgid "Set Age"
+#~ msgstr "Cén aois thú?"
+
+#: src/screens/Moderation/index.tsx:304
+msgid "Set birthdate"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:488
+#~ msgid "Set color theme to dark"
+#~ msgstr "Roghnaigh an modh dorcha"
+
+#: src/view/screens/Settings/index.tsx:481
+#~ msgid "Set color theme to light"
+#~ msgstr "Roghnaigh an modh sorcha"
+
+#: src/view/screens/Settings/index.tsx:475
+#~ msgid "Set color theme to system setting"
+#~ msgstr "Úsáid scéim dathanna an chórais"
+
+#: src/view/screens/Settings/index.tsx:514
+#~ msgid "Set dark theme to the dark theme"
+#~ msgstr "Úsáid an téama dorcha mar théama dorcha"
+
+#: src/view/screens/Settings/index.tsx:507
+#~ msgid "Set dark theme to the dim theme"
+#~ msgstr "Úsáid an téama breacdhorcha mar théama dorcha"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:102
+msgid "Set new password"
+msgstr "Socraigh pasfhocal nua"
+
+#: src/view/com/auth/create/Step1.tsx:225
+#~ msgid "Set password"
+#~ msgstr "Socraigh pasfhocal"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:225
+msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible."
+msgstr "Roghnaigh “Níl” chun postálacha athluaite a chur i bhfolach i d'fhotha. Feicfidh tú athphostálacha fós."
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:122
+msgid "Set this setting to \"No\" to hide all replies from your feed."
+msgstr "Roghnaigh “Níl” chun freagraí a chur i bhfolach i d'fhotha."
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:191
+msgid "Set this setting to \"No\" to hide all reposts from your feed."
+msgstr "Roghnaigh “Níl” chun athphostálacha a chur i bhfolach i d'fhotha."
+
+#: src/view/screens/PreferencesThreads.tsx:122
+msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature."
+msgstr "Roghnaigh “Tá” le freagraí a thaispeáint i snáitheanna. Is gné thurgnamhach é seo."
+
+#: src/view/screens/PreferencesHomeFeed.tsx:261
+#~ msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
+#~ msgstr "Roghnaigh “Tá” le samplaí ó do chuid fothaí sábháilte a thaispeáint in ”Á Leanúint”. Is gné thurgnamhach é seo."
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:261
+msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your Following feed. This is an experimental feature."
+msgstr ""
+
+#: src/screens/Onboarding/Layout.tsx:48
+msgid "Set up your account"
+msgstr "Socraigh do chuntas"
+
+#: src/view/com/modals/ChangeHandle.tsx:267
+msgid "Sets Bluesky username"
+msgstr "Socraíonn sé seo d'ainm úsáideora ar Bluesky"
+
+#: src/view/screens/Settings/index.tsx:507
+msgid "Sets color theme to dark"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:500
+msgid "Sets color theme to light"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:494
+msgid "Sets color theme to system setting"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:533
+msgid "Sets dark theme to the dark theme"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:526
+msgid "Sets dark theme to the dim theme"
+msgstr ""
+
+#: src/screens/Login/ForgotPasswordForm.tsx:113
+msgid "Sets email for password reset"
+msgstr "Socraíonn sé seo an seoladh ríomhphoist le haghaidh athshocrú an phasfhocail"
+
+#: src/view/com/auth/login/ForgotPasswordForm.tsx:122
+#~ msgid "Sets hosting provider for password reset"
+#~ msgstr "Socraíonn sé seo an soláthraí óstála le haghaidh athshocrú an phasfhocail"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:124
+msgid "Sets image aspect ratio to square"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:114
+msgid "Sets image aspect ratio to tall"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:104
+msgid "Sets image aspect ratio to wide"
+msgstr ""
+
+#: src/view/com/auth/create/Step1.tsx:104
+#: src/view/com/auth/login/LoginForm.tsx:151
+#~ msgid "Sets server for the Bluesky client"
+#~ msgstr "Socraíonn sé seo freastalaí an chliaint Bluesky"
+
+#: src/Navigation.tsx:139
+#: src/view/screens/Settings/index.tsx:313
+#: src/view/shell/desktop/LeftNav.tsx:437
+#: src/view/shell/Drawer.tsx:570
+#: src/view/shell/Drawer.tsx:571
+msgid "Settings"
+msgstr "Socruithe"
+
+#: src/view/com/modals/SelfLabel.tsx:125
+msgid "Sexual activity or erotic nudity."
+msgstr "Gníomhaíocht ghnéasach nó lomnochtacht gháirsiúil."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:38
+msgid "Sexually Suggestive"
+msgstr ""
+
+#: src/view/com/lightbox/Lightbox.tsx:141
+msgctxt "action"
+msgid "Share"
+msgstr "Comhroinn"
+
+#: src/view/com/profile/ProfileMenu.tsx:215
+#: src/view/com/profile/ProfileMenu.tsx:224
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:235
+#: src/view/screens/ProfileList.tsx:388
+msgid "Share"
+msgstr "Comhroinn"
+
+#: src/view/com/profile/ProfileMenu.tsx:373
+#: src/view/com/util/forms/PostDropdownBtn.tsx:347
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:251
+msgid "Share anyway"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:362
+#: src/view/screens/ProfileFeed.tsx:364
+msgid "Share feed"
+msgstr "Comhroinn an fotha"
+
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
+msgid "Share Link"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:92
+msgid "Shares the linked website"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:136
+#: src/components/moderation/PostHider.tsx:107
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:54
+#: src/view/screens/Settings/index.tsx:363
+msgid "Show"
+msgstr "Taispeáin"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:68
+msgid "Show all replies"
+msgstr "Taispeáin gach freagra"
+
+#: src/components/moderation/ScreenHider.tsx:169
+#: src/components/moderation/ScreenHider.tsx:172
+msgid "Show anyway"
+msgstr "Taispeáin mar sin féin"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:27
+#: src/lib/moderation/useLabelBehaviorDescription.ts:63
+msgid "Show badge"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:61
+msgid "Show badge and filter from feeds"
+msgstr ""
+
+#: src/view/com/modals/EmbedConsent.tsx:87
+#~ msgid "Show embeds from {0}"
+#~ msgstr "Taispeáin ábhar leabaithe ó {0}"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:200
+msgid "Show follows similar to {0}"
+msgstr "Taispeáin cuntais cosúil le {0}"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:507
+#: src/view/com/post/Post.tsx:201
+#: src/view/com/posts/FeedItem.tsx:355
+msgid "Show More"
+msgstr "Tuilleadh"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:258
+msgid "Show Posts from My Feeds"
+msgstr "Taispeáin postálacha ó mo chuid fothaí"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:222
+msgid "Show Quote Posts"
+msgstr "Taispeáin postálacha athluaite"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:119
+msgid "Show quote-posts in Following feed"
+msgstr "Taispeáin postálacha athluaite san fhotha “Á Leanúint”"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:135
+msgid "Show quotes in Following"
+msgstr "Taispeáin postálacha athluaite san fhotha “Á Leanúint”"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:95
+msgid "Show re-posts in Following feed"
+msgstr "Taispeáin athphostálacha san fhotha “Á Leanúint”"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:119
+msgid "Show Replies"
+msgstr "Taispeáin freagraí"
+
+#: src/view/screens/PreferencesThreads.tsx:100
+msgid "Show replies by people you follow before all other replies."
+msgstr "Taispeáin freagraí ó na daoine a leanann tú roimh aon fhreagra eile."
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:87
+msgid "Show replies in Following"
+msgstr "Taispeáin freagraí san fhotha “Á Leanúint”"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:71
+msgid "Show replies in Following feed"
+msgstr "Taispeáin freagraí san fhotha “Á Leanúint”"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:70
+msgid "Show replies with at least {value} {0}"
+msgstr "Taispeáin freagraí a bhfuil ar a laghad {value} {0} acu"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:188
+msgid "Show Reposts"
+msgstr "Taispeáin athphostálacha"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:111
+msgid "Show reposts in Following"
+msgstr "Taispeáin athphostálacha san fhotha “Á Leanúint”"
+
+#: src/components/moderation/ContentHider.tsx:68
+#: src/components/moderation/PostHider.tsx:64
+msgid "Show the content"
+msgstr "Taispeáin an t-ábhar"
+
+#: src/view/com/notifications/FeedItem.tsx:351
+msgid "Show users"
+msgstr "Taispeáin úsáideoirí"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:58
+msgid "Show warning"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:56
+msgid "Show warning and filter from feeds"
+msgstr ""
+
+#: src/view/com/profile/ProfileHeader.tsx:461
+#~ msgid "Shows a list of users similar to this user."
+#~ msgstr "Taispeánann sé seo liosta úsáideoirí cosúil leis an úsáideoir seo."
+
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:130
+msgid "Shows posts from {0} in your feed"
+msgstr "Taispeánann sé seo postálacha ó {0} i d'fhotha"
+
+#: src/screens/Login/index.tsx:100
+#: src/screens/Login/index.tsx:119
+#: src/screens/Login/LoginForm.tsx:131
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:73
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:83
+#: src/view/com/auth/SplashScreen.tsx:81
+#: src/view/com/auth/SplashScreen.tsx:90
+#: src/view/com/auth/SplashScreen.web.tsx:110
+#: src/view/com/auth/SplashScreen.web.tsx:119
+#: src/view/shell/bottom-bar/BottomBar.tsx:300
+#: src/view/shell/bottom-bar/BottomBar.tsx:301
+#: src/view/shell/bottom-bar/BottomBar.tsx:303
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:178
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:179
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:181
+#: src/view/shell/NavSignupCard.tsx:58
+#: src/view/shell/NavSignupCard.tsx:59
+#: src/view/shell/NavSignupCard.tsx:61
+msgid "Sign in"
+msgstr "Logáil isteach"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:78
+#: src/view/com/auth/SplashScreen.tsx:82
+#: src/view/com/auth/SplashScreen.web.tsx:91
+#~ msgid "Sign In"
+#~ msgstr "Logáil isteach"
+
+#: src/components/AccountList.tsx:109
+msgid "Sign in as {0}"
+msgstr "Logáil isteach mar {0}"
+
+#: src/screens/Login/ChooseAccountForm.tsx:64
+msgid "Sign in as..."
+msgstr "Logáil isteach mar..."
+
+#: src/view/com/auth/login/LoginForm.tsx:137
+#~ msgid "Sign into"
+#~ msgstr "Logáil isteach i"
+
+#: src/view/screens/Settings/index.tsx:107
+#: src/view/screens/Settings/index.tsx:110
+msgid "Sign out"
+msgstr "Logáil amach"
+
+#: src/view/shell/bottom-bar/BottomBar.tsx:290
+#: src/view/shell/bottom-bar/BottomBar.tsx:291
+#: src/view/shell/bottom-bar/BottomBar.tsx:293
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:168
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:169
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:171
+#: src/view/shell/NavSignupCard.tsx:49
+#: src/view/shell/NavSignupCard.tsx:50
+#: src/view/shell/NavSignupCard.tsx:52
+msgid "Sign up"
+msgstr "Cláraigh"
+
+#: src/view/shell/NavSignupCard.tsx:42
+msgid "Sign up or sign in to join the conversation"
+msgstr "Cláraigh nó logáil isteach chun páirt a ghlacadh sa chomhrá"
+
+#: src/components/moderation/ScreenHider.tsx:97
+#: src/lib/moderation/useGlobalLabelStrings.ts:28
+msgid "Sign-in Required"
+msgstr "Caithfidh tú logáil isteach"
+
+#: src/view/screens/Settings/index.tsx:374
+msgid "Signed in as"
+msgstr "Logáilte isteach mar"
+
+#: src/screens/Login/ChooseAccountForm.tsx:48
+msgid "Signed in as @{0}"
+msgstr "Logáilte isteach mar @{0}"
+
+#: src/view/com/modals/SwitchAccount.tsx:66
+#~ msgid "Signs {0} out of Bluesky"
+#~ msgstr "Logálann sé seo {0} amach as Bluesky"
+
+#: src/screens/Onboarding/StepInterests/index.tsx:239
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:203
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:35
+msgid "Skip"
+msgstr "Ná bac leis"
+
+#: src/screens/Onboarding/StepInterests/index.tsx:236
+msgid "Skip this flow"
+msgstr "Ná bac leis an bpróiseas seo"
+
+#: src/view/com/auth/create/Step2.tsx:82
+#~ msgid "SMS verification"
+#~ msgstr "Dearbhú SMS"
+
+#: src/screens/Onboarding/index.tsx:40
+msgid "Software Dev"
+msgstr "Forbairt Bogearraí"
+
+#: src/view/com/modals/ProfilePreview.tsx:62
+#~ msgid "Something went wrong and we're not sure what."
+#~ msgstr "Chuaigh rud éigin ó rath, agus nílimid cinnte céard a bhí ann."
+
+#: src/components/ReportDialog/index.tsx:59
+#: src/screens/Moderation/index.tsx:114
+#: src/screens/Profile/Sections/Labels.tsx:76
+msgid "Something went wrong, please try again."
+msgstr ""
+
+#: src/view/com/modals/Waitlist.tsx:51
+#~ msgid "Something went wrong. Check your email and try again."
+#~ msgstr "Chuaigh rud éigin ó rath. Féach ar do ríomhphost agus bain triail eile as."
+
+#: src/App.native.tsx:66
+msgid "Sorry! Your session expired. Please log in again."
+msgstr "Ár leithscéal. Chuaigh do sheisiún i léig. Ní mór duit logáil isteach arís."
+
+#: src/view/screens/PreferencesThreads.tsx:69
+msgid "Sort Replies"
+msgstr "Sórtáil freagraí"
+
+#: src/view/screens/PreferencesThreads.tsx:72
+msgid "Sort replies to the same post by:"
+msgstr "Sórtáil freagraí ar an bpostáil chéanna de réir:"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:146
+msgid "Source:"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:65
+msgid "Spam"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:53
+msgid "Spam; excessive mentions or replies"
+msgstr ""
+
+#: src/screens/Onboarding/index.tsx:30
+msgid "Sports"
+msgstr "Spórt"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:123
+msgid "Square"
+msgstr "Cearnóg"
+
+#: src/view/com/modals/ServerInput.tsx:62
+#~ msgid "Staging"
+#~ msgstr "Freastalaí tástála"
+
+#: src/view/screens/Settings/index.tsx:903
+msgid "Status page"
+msgstr "Leathanach stádais"
+
+#: src/screens/Signup/index.tsx:142
+msgid "Step"
+msgstr ""
+
+#: src/view/com/auth/create/StepHeader.tsx:22
+#~ msgid "Step {0} of {numSteps}"
+#~ msgstr "Céim {0} as {numSteps}"
+
+#: src/view/screens/Settings/index.tsx:292
+msgid "Storage cleared, you need to restart the app now."
+msgstr "Stóráil scriosta, tá ort an aip a atosú anois."
+
+#: src/Navigation.tsx:211
+#: src/view/screens/Settings/index.tsx:831
+msgid "Storybook"
+msgstr "Storybook"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:255
+#: src/components/moderation/LabelsOnMeDialog.tsx:256
+msgid "Submit"
+msgstr "Seol"
+
+#: src/view/screens/ProfileList.tsx:590
+msgid "Subscribe"
+msgstr "Liostáil"
+
+#: src/screens/Profile/Sections/Labels.tsx:180
+msgid "Subscribe to @{0} to use these labels:"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:221
+msgid "Subscribe to Labeler"
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:172
+#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:307
+msgid "Subscribe to the {0} feed"
+msgstr "Liostáil leis an bhfotha {0}"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:184
+msgid "Subscribe to this labeler"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:586
+msgid "Subscribe to this list"
+msgstr "Liostáil leis an liosta seo"
+
+#: src/view/screens/Search/Search.tsx:376
+msgid "Suggested Follows"
+msgstr "Cuntais le leanúint"
+
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:65
+msgid "Suggested for you"
+msgstr "Molta duit"
+
+#: src/view/com/modals/SelfLabel.tsx:95
+msgid "Suggestive"
+msgstr "Gáirsiúil"
+
+#: src/Navigation.tsx:226
+#: src/view/screens/Support.tsx:30
+#: src/view/screens/Support.tsx:33
+msgid "Support"
+msgstr "Tacaíocht"
+
+#: src/view/com/modals/ProfilePreview.tsx:110
+#~ msgid "Swipe up to see more"
+#~ msgstr "Svaidhpeáil aníos le tuilleadh a fheiceáil"
+
+#: src/components/dialogs/SwitchAccount.tsx:46
+#: src/components/dialogs/SwitchAccount.tsx:49
+msgid "Switch Account"
+msgstr "Athraigh an cuntas"
+
+#: src/view/screens/Settings/index.tsx:139
+msgid "Switch to {0}"
+msgstr "Athraigh go {0}"
+
+#: src/view/screens/Settings/index.tsx:140
+msgid "Switches the account you are logged in to"
+msgstr "Athraíonn sé seo an cuntas beo"
+
+#: src/view/screens/Settings/index.tsx:491
+msgid "System"
+msgstr "Córas"
+
+#: src/view/screens/Settings/index.tsx:819
+msgid "System log"
+msgstr "Logleabhar an chórais"
+
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "tag"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:78
+msgid "Tag menu: {displayTag}"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:113
+msgid "Tall"
+msgstr "Ard"
+
+#: src/view/com/util/images/AutoSizedImage.tsx:70
+msgid "Tap to view fully"
+msgstr "Tapáil leis an rud iomlán a fheiceáil"
+
+#: src/screens/Onboarding/index.tsx:39
+msgid "Tech"
+msgstr "Teic"
+
+#: src/view/shell/desktop/RightNav.tsx:81
+msgid "Terms"
+msgstr "Téarmaí"
+
+#: src/Navigation.tsx:236
+#: src/screens/Signup/StepInfo/Policies.tsx:49
+#: src/view/screens/Settings/index.tsx:917
+#: src/view/screens/TermsOfService.tsx:29
+#: src/view/shell/Drawer.tsx:259
+msgid "Terms of Service"
+msgstr "Téarmaí Seirbhíse"
+
+#: src/lib/moderation/useReportOptions.ts:58
+#: src/lib/moderation/useReportOptions.ts:79
+#: src/lib/moderation/useReportOptions.ts:87
+msgid "Terms used violate community standards"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "text"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:219
+msgid "Text input field"
+msgstr "Réimse téacs"
+
+#: src/components/ReportDialog/SubmitView.tsx:78
+msgid "Thank you. Your report has been sent."
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:465
+msgid "That contains the following:"
+msgstr ""
+
+#: src/screens/Signup/index.tsx:84
+msgid "That handle is already taken."
+msgstr "Tá an leasainm sin in úsáid cheana féin."
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:283
+#: src/view/com/profile/ProfileMenu.tsx:349
+msgid "The account will be able to interact with you after unblocking."
+msgstr "Beidh an cuntas seo in ann caidreamh a dhéanamh leat tar éis duit é a dhíbhlocáil"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:127
+msgid "the author"
+msgstr ""
+
+#: src/view/screens/CommunityGuidelines.tsx:36
+msgid "The Community Guidelines have been moved to <0/>"
+msgstr "Bogadh Treoirlínte an Phobail go dtí <0/>"
+
+#: src/view/screens/CopyrightPolicy.tsx:33
+msgid "The Copyright Policy has been moved to <0/>"
+msgstr "Bogadh an Polasaí Cóipchirt go dtí <0/>"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:48
+msgid "The following labels were applied to your account."
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:49
+msgid "The following labels were applied to your content."
+msgstr ""
+
+#: src/screens/Onboarding/Layout.tsx:58
+msgid "The following steps will help customize your Bluesky experience."
+msgstr "Cuideoidh na céimeanna seo a leanas leat Bluesky a chur in oiriúint duit féin."
+
+#: src/view/com/post-thread/PostThread.tsx:153
+#: src/view/com/post-thread/PostThread.tsx:165
+msgid "The post may have been deleted."
+msgstr "Is féidir gur scriosadh an phostáil seo."
+
+#: src/view/screens/PrivacyPolicy.tsx:33
+msgid "The Privacy Policy has been moved to <0/>"
+msgstr "Bogadh Polasaí na Príobháideachta go dtí <0/>"
+
+#: src/view/screens/Support.tsx:36
+msgid "The support form has been moved. If you need help, please <0/> or visit {HELP_DESK_URL} to get in touch with us."
+msgstr "Bogadh an fhoirm tacaíochta go dtí <0/>. Má tá cuidiú ag teastáil uait, <0/> le do thoil, nó tabhair cuairt ar {HELP_DESK_URL} le dul i dteagmháil linn."
+
+#: src/view/screens/TermsOfService.tsx:33
+msgid "The Terms of Service have been moved to"
+msgstr "Bogadh ár dTéarmaí Seirbhíse go dtí"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:141
+msgid "There are many feeds to try:"
+msgstr "Tá a lán fothaí ann le blaiseadh:"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:112
+#: src/view/screens/ProfileFeed.tsx:544
+msgid "There was an an issue contacting the server, please check your internet connection and try again."
+msgstr "Bhí fadhb ann maidir le dul i dteagmháil leis an bhfreastalaí. Seiceáil do cheangal leis an idirlíon agus bain triail eile as, le do thoil."
+
+#: src/view/com/posts/FeedErrorMessage.tsx:138
+msgid "There was an an issue removing this feed. Please check your internet connection and try again."
+msgstr "Bhí fadhb ann maidir leis an bhfotha seo a bhaint. Seiceáil do cheangal leis an idirlíon agus bain triail eile as, le do thoil."
+
+#: src/view/screens/ProfileFeed.tsx:218
+msgid "There was an an issue updating your feeds, please check your internet connection and try again."
+msgstr "Bhí fadhb ann maidir le huasdátú do chuid fothaí. Seiceáil do cheangal leis an idirlíon agus bain triail eile as, le do thoil."
+
+#: src/view/screens/ProfileFeed.tsx:245
+#: src/view/screens/ProfileList.tsx:275
+#: src/view/screens/SavedFeeds.tsx:209
+#: src/view/screens/SavedFeeds.tsx:231
+#: src/view/screens/SavedFeeds.tsx:252
+msgid "There was an issue contacting the server"
+msgstr "Bhí fadhb ann maidir le teagmháil a dhéanamh leis an bhfreastalaí"
+
+#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:57
+#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:66
+#: src/view/com/feeds/FeedSourceCard.tsx:110
+#: src/view/com/feeds/FeedSourceCard.tsx:123
+msgid "There was an issue contacting your server"
+msgstr "Bhí fadhb ann maidir le teagmháil a dhéanamh le do fhreastálaí"
+
+#: src/view/com/notifications/Feed.tsx:117
+msgid "There was an issue fetching notifications. Tap here to try again."
+msgstr "Bhí fadhb ann maidir le fógraí a fháil. Tapáil anseo le triail eile a bhaint as."
+
+#: src/view/com/posts/Feed.tsx:287
+msgid "There was an issue fetching posts. Tap here to try again."
+msgstr "Bhí fadhb ann maidir le postálacha a fháil. Tapáil anseo le triail eile a bhaint as."
+
+#: src/view/com/lists/ListMembers.tsx:172
+msgid "There was an issue fetching the list. Tap here to try again."
+msgstr "Bhí fadhb ann maidir leis an liosta a fháil. Tapáil anseo le triail eile a bhaint as."
+
+#: src/view/com/feeds/ProfileFeedgens.tsx:148
+#: src/view/com/lists/ProfileLists.tsx:155
+msgid "There was an issue fetching your lists. Tap here to try again."
+msgstr "Bhí fadhb ann maidir le do chuid liostaí a fháil. Tapáil anseo le triail eile a bhaint as."
+
+#: src/components/ReportDialog/SubmitView.tsx:83
+msgid "There was an issue sending your report. Please check your internet connection."
+msgstr ""
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:65
+msgid "There was an issue syncing your preferences with the server"
+msgstr "Bhí fadhb ann maidir le do chuid roghanna a shioncronú leis an bhfreastalaí"
+
+#: src/view/screens/AppPasswords.tsx:68
+msgid "There was an issue with fetching your app passwords"
+msgstr "Bhí fadhb ann maidir le do chuid pasfhocal don aip a fháil"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:105
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:127
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:99
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:111
+#: src/view/com/profile/ProfileMenu.tsx:106
+#: src/view/com/profile/ProfileMenu.tsx:117
+#: src/view/com/profile/ProfileMenu.tsx:132
+#: src/view/com/profile/ProfileMenu.tsx:143
+#: src/view/com/profile/ProfileMenu.tsx:157
+#: src/view/com/profile/ProfileMenu.tsx:170
+msgid "There was an issue! {0}"
+msgstr "Bhí fadhb ann! {0}"
+
+#: src/view/screens/ProfileList.tsx:288
+#: src/view/screens/ProfileList.tsx:302
+#: src/view/screens/ProfileList.tsx:316
+#: src/view/screens/ProfileList.tsx:330
+msgid "There was an issue. Please check your internet connection and try again."
+msgstr "Bhí fadhb ann. Seiceáil do cheangal leis an idirlíon, le do thoil, agus bain triail eile as."
+
+#: src/view/com/util/ErrorBoundary.tsx:51
+msgid "There was an unexpected issue in the application. Please let us know if this happened to you!"
+msgstr "D’éirigh fadhb gan choinne leis an aip. Abair linn, le do thoil, má tharla sé sin duit!"
+
+#: src/screens/Deactivated.tsx:106
+msgid "There's been a rush of new users to Bluesky! We'll activate your account as soon as we can."
+msgstr "Tá ráchairt ar Bluesky le déanaí! Cuirfidh muid do chuntas ag obair chomh luath agus is féidir."
+
+#: src/view/com/auth/create/Step2.tsx:55
+#~ msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
+#~ msgstr "Tá rud éigin mícheart leis an uimhir seo. Roghnaigh do thír, le do thoil, agus cuir d’uimhir ghutháin iomlán isteach."
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:146
+msgid "These are popular accounts you might like:"
+msgstr "Is cuntais iad seo a bhfuil a lán leantóirí acu. Is féidir go dtaitneoidh siad leat."
+
+#: src/components/moderation/ScreenHider.tsx:116
+msgid "This {screenDescription} has been flagged:"
+msgstr "Cuireadh bratach leis an {screenDescription} seo:"
+
+#: src/components/moderation/ScreenHider.tsx:111
+msgid "This account has requested that users sign in to view their profile."
+msgstr "Ní mór duit logáil isteach le próifíl an chuntais seo a fheiceáil."
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:204
+msgid "This appeal will be sent to <0>{0}0>."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:19
+msgid "This content has been hidden by the moderators."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:24
+msgid "This content has received a general warning from moderators."
+msgstr ""
+
+#: src/components/dialogs/EmbedConsent.tsx:64
+msgid "This content is hosted by {0}. Do you want to enable external media?"
+msgstr "Tá an t-ábhar seo ar fáil ó {0}. An bhfuil fonn ort na meáin sheachtracha a thaispeáint?"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:77
+#: src/lib/moderation/useModerationCauseDescription.ts:77
+msgid "This content is not available because one of the users involved has blocked the other."
+msgstr "Níl an t-ábhar seo le feiceáil toisc gur bhlocáil duine de na húsáideoirí an duine eile."
+
+#: src/view/com/posts/FeedErrorMessage.tsx:108
+msgid "This content is not viewable without a Bluesky account."
+msgstr "Níl an t-ábhar seo le feiceáil gan chuntas Bluesky."
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:75
+#~ msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
+#~ msgstr "Tá an ghné seo á tástáil fós. Tig leat níos mó faoi chartlanna easpórtáilte a léamh sa <0>bhlagphost seo.0>"
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:75
+msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost0>."
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:114
+msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later."
+msgstr "Tá ráchairt an-mhór ar an bhfotha seo faoi láthair. Níl sé ar fáil anois díreach dá bhrí sin. Bain triail eile as níos déanaí, le do thoil."
+
+#: src/screens/Profile/Sections/Feed.tsx:50
+#: src/view/screens/ProfileFeed.tsx:477
+#: src/view/screens/ProfileList.tsx:675
+msgid "This feed is empty!"
+msgstr "Tá an fotha seo folamh!"
+
+#: src/view/com/posts/CustomFeedEmptyState.tsx:37
+msgid "This feed is empty! You may need to follow more users or tune your language settings."
+msgstr "Tá an fotha seo folamh! Is féidir go mbeidh ort tuilleadh úsáideoirí a leanúint nó do shocruithe teanga a athrú."
+
+#: src/components/dialogs/BirthDateSettings.tsx:41
+msgid "This information is not shared with other users."
+msgstr "Ní roinntear an t-eolas seo le húsáideoirí eile."
+
+#: src/view/com/modals/VerifyEmail.tsx:119
+msgid "This is important in case you ever need to change your email or reset your password."
+msgstr "Tá sé seo tábhachtach má bhíonn ort do ríomhphost nó do phasfhocal a athrú."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:124
+msgid "This label was applied by {0}."
+msgstr ""
+
+#: src/screens/Profile/Sections/Labels.tsx:167
+msgid "This labeler hasn't declared what labels it publishes, and may not be active."
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:72
+msgid "This link is taking you to the following website:"
+msgstr "Téann an nasc seo go dtí an suíomh idirlín seo:"
+
+#: src/view/screens/ProfileList.tsx:853
+msgid "This list is empty!"
+msgstr "Tá an liosta seo folamh!"
+
+#: src/screens/Profile/ErrorState.tsx:40
+msgid "This moderation service is unavailable. See below for more details. If this issue persists, contact us."
+msgstr ""
+
+#: src/view/com/modals/AddAppPasswords.tsx:107
+msgid "This name is already in use"
+msgstr "Tá an t-ainm seo in úsáid cheana féin"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:125
+msgid "This post has been deleted."
+msgstr "Scriosadh an phostáil seo."
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:344
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:248
+msgid "This post is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:326
+msgid "This post will be hidden from feeds."
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:370
+msgid "This profile is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/Policies.tsx:37
+msgid "This service has not provided terms of service or a privacy policy."
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:445
+msgid "This should create a domain record at:"
+msgstr ""
+
+#: src/view/com/profile/ProfileFollowers.tsx:87
+msgid "This user doesn't have any followers."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:72
+#: src/lib/moderation/useModerationCauseDescription.ts:68
+msgid "This user has blocked you. You cannot view their content."
+msgstr "Tá an t-úsáideoir seo tar éis thú a bhlocáil. Ní féidir leat a gcuid ábhair a fheiceáil."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:30
+msgid "This user has requested that their content only be shown to signed-in users."
+msgstr ""
+
+#: src/view/com/modals/ModerationDetails.tsx:42
+#~ msgid "This user is included in the <0/> list which you have blocked."
+#~ msgstr "Tá an t-úsáideoir seo ar an liosta <0/> a bhlocáil tú."
+
+#: src/view/com/modals/ModerationDetails.tsx:74
+#~ msgid "This user is included in the <0/> list which you have muted."
+#~ msgstr "Tá an t-úsáideoir seo ar an liosta <0/> a chuir tú i bhfolach."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:55
+msgid "This user is included in the <0>{0}0> list which you have blocked."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:84
+msgid "This user is included in the <0>{0}0> list which you have muted."
+msgstr ""
+
+#: src/view/com/modals/ModerationDetails.tsx:74
+#~ msgid "This user is included the <0/> list which you have muted."
+#~ msgstr "Tá an t-úsáideoir seo ar an liosta <0/> a chuir tú i bhfolach."
+
+#: src/view/com/profile/ProfileFollows.tsx:87
+msgid "This user isn't following anyone."
+msgstr ""
+
+#: src/view/com/modals/SelfLabel.tsx:137
+msgid "This warning is only available for posts with media attached."
+msgstr "Níl an rabhadh seo ar fáil ach le haghaidh postálacha a bhfuil meáin ceangailte leo."
+
+#: src/components/dialogs/MutedWords.tsx:283
+msgid "This will delete {0} from your muted words. You can always add it back later."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:192
+#~ msgid "This will hide this post from your feeds."
+#~ msgstr "Leis seo ní bheidh an phostáil seo le feiceáil ar do chuid fothaí."
+
+#: src/view/screens/Settings/index.tsx:574
+msgid "Thread preferences"
+msgstr ""
+
+#: src/view/screens/PreferencesThreads.tsx:53
+#: src/view/screens/Settings/index.tsx:584
+msgid "Thread Preferences"
+msgstr "Roghanna Snáitheanna"
+
+#: src/view/screens/PreferencesThreads.tsx:119
+msgid "Threaded Mode"
+msgstr "Modh Snáithithe"
+
+#: src/Navigation.tsx:269
+msgid "Threads Preferences"
+msgstr "Roghanna Snáitheanna"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:33
+msgid "To whom would you like to send this report?"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:112
+msgid "Toggle between muted word options."
+msgstr ""
+
+#: src/view/com/util/forms/DropdownButton.tsx:246
+msgid "Toggle dropdown"
+msgstr "Scoránaigh an bosca anuas"
+
+#: src/screens/Moderation/index.tsx:332
+msgid "Toggle to enable or disable adult content"
+msgstr ""
+
+#: src/view/com/modals/EditImage.tsx:272
+msgid "Transformations"
+msgstr "Trasfhoirmithe"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:644
+#: src/view/com/post-thread/PostThreadItem.tsx:646
+#: src/view/com/util/forms/PostDropdownBtn.tsx:212
+#: src/view/com/util/forms/PostDropdownBtn.tsx:214
+msgid "Translate"
+msgstr "Aistrigh"
+
+#: src/view/com/util/error/ErrorScreen.tsx:82
+msgctxt "action"
+msgid "Try again"
+msgstr "Bain triail eile as"
+
+#: src/view/com/modals/ChangeHandle.tsx:428
+msgid "Type:"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:478
+msgid "Un-block list"
+msgstr "Díbhlocáil an liosta"
+
+#: src/view/screens/ProfileList.tsx:461
+msgid "Un-mute list"
+msgstr "Ná coinnigh an liosta sin i bhfolach níos mó"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:74
+#: src/screens/Login/index.tsx:78
+#: src/screens/Login/LoginForm.tsx:119
+#: src/screens/Login/SetNewPasswordForm.tsx:77
+#: src/screens/Signup/index.tsx:63
+#: src/view/com/modals/ChangePassword.tsx:70
+msgid "Unable to contact your service. Please check your Internet connection."
+msgstr "Ní féidir teagmháil a dhéanamh le do sheirbhís. Seiceáil do cheangal leis an idirlíon, le do thoil."
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:181
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+#: src/view/screens/ProfileList.tsx:572
+msgid "Unblock"
+msgstr "Díbhlocáil"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:186
+msgctxt "action"
+msgid "Unblock"
+msgstr "Díbhlocáil"
+
+#: src/view/com/profile/ProfileMenu.tsx:299
+#: src/view/com/profile/ProfileMenu.tsx:305
+msgid "Unblock Account"
+msgstr "Díbhlocáil an cuntas"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:281
+#: src/view/com/profile/ProfileMenu.tsx:343
+msgid "Unblock Account?"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:43
+#: src/view/com/modals/Repost.tsx:56
+#: src/view/com/util/post-ctrls/RepostButton.tsx:60
+#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
+msgid "Undo repost"
+msgstr "Cuir stop leis an athphostáil"
+
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
+msgid "Unfollow"
+msgstr ""
+
+#: src/view/com/profile/FollowButton.tsx:60
+msgctxt "action"
+msgid "Unfollow"
+msgstr "Dílean"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:220
+msgid "Unfollow {0}"
+msgstr "Dílean {0}"
+
+#: src/view/com/profile/ProfileMenu.tsx:241
+#: src/view/com/profile/ProfileMenu.tsx:251
+msgid "Unfollow Account"
+msgstr ""
+
+#: src/view/com/auth/create/state.ts:262
+#~ msgid "Unfortunately, you do not meet the requirements to create an account."
+#~ msgstr "Ar an drochuair, ní chomhlíonann tú na riachtanais le cuntas a chruthú."
+
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
+msgid "Unlike"
+msgstr "Dímhol"
+
+#: src/view/screens/ProfileFeed.tsx:573
+msgid "Unlike this feed"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:249
+#: src/view/screens/ProfileList.tsx:579
+msgid "Unmute"
+msgstr "Ná coinnigh i bhfolach"
+
+#: src/components/TagMenu/index.web.tsx:104
+msgid "Unmute {truncatedTag}"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:278
+#: src/view/com/profile/ProfileMenu.tsx:284
+msgid "Unmute Account"
+msgstr "Ná coinnigh an cuntas seo i bhfolach níos mó"
+
+#: src/components/TagMenu/index.tsx:208
+msgid "Unmute all {displayTag} posts"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:256
+msgid "Unmute thread"
+msgstr "Ná coinnigh an snáithe seo i bhfolach níos mó"
+
+#: src/view/screens/ProfileFeed.tsx:295
+#: src/view/screens/ProfileList.tsx:563
+msgid "Unpin"
+msgstr "Díghreamaigh"
+
+#: src/view/screens/ProfileFeed.tsx:292
+msgid "Unpin from home"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:444
+msgid "Unpin moderation list"
+msgstr "Díghreamaigh an liosta modhnóireachta"
+
+#: src/view/screens/ProfileFeed.tsx:345
+#~ msgid "Unsave"
+#~ msgstr "Díshábháil"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:219
+msgid "Unsubscribe"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:183
+msgid "Unsubscribe from this labeler"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:70
+msgid "Unwanted Sexual Content"
+msgstr ""
+
+#: src/view/com/modals/UserAddRemoveLists.tsx:70
+msgid "Update {displayName} in Lists"
+msgstr "Uasdátú {displayName} sna Liostaí"
+
+#: src/lib/hooks/useOTAUpdate.ts:15
+#~ msgid "Update Available"
+#~ msgstr "Uasdátú ar fáil"
+
+#: src/view/com/modals/ChangeHandle.tsx:508
+msgid "Update to {handle}"
+msgstr ""
+
+#: src/screens/Login/SetNewPasswordForm.tsx:186
+msgid "Updating..."
+msgstr "Á uasdátú…"
+
+#: src/view/com/modals/ChangeHandle.tsx:454
+msgid "Upload a text file to:"
+msgstr "Uaslódáil comhad téacs chuig:"
+
+#: src/view/com/util/UserAvatar.tsx:326
+#: src/view/com/util/UserAvatar.tsx:329
+#: src/view/com/util/UserBanner.tsx:116
+#: src/view/com/util/UserBanner.tsx:119
+msgid "Upload from Camera"
+msgstr ""
+
+#: src/view/com/util/UserAvatar.tsx:343
+#: src/view/com/util/UserBanner.tsx:133
+msgid "Upload from Files"
+msgstr ""
+
+#: src/view/com/util/UserAvatar.tsx:337
+#: src/view/com/util/UserAvatar.tsx:341
+#: src/view/com/util/UserBanner.tsx:127
+#: src/view/com/util/UserBanner.tsx:131
+msgid "Upload from Library"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:408
+msgid "Use a file on your server"
+msgstr ""
+
+#: src/view/screens/AppPasswords.tsx:197
+msgid "Use app passwords to login to other Bluesky clients without giving full access to your account or password."
+msgstr "Bain úsáid as pasfhocail na haipe le logáil isteach ar chliaint eile de chuid Bluesky gan fáil iomlán ar do chuntas ná do phasfhocal a thabhairt dóibh."
+
+#: src/view/com/modals/ChangeHandle.tsx:517
+msgid "Use bsky.social as hosting provider"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:516
+msgid "Use default provider"
+msgstr "Úsáid an soláthraí réamhshocraithe"
+
+#: src/view/com/modals/InAppBrowserConsent.tsx:56
+#: src/view/com/modals/InAppBrowserConsent.tsx:58
+msgid "Use in-app browser"
+msgstr "Úsáid an brabhsálaí san aip seo"
+
+#: src/view/com/modals/InAppBrowserConsent.tsx:66
+#: src/view/com/modals/InAppBrowserConsent.tsx:68
+msgid "Use my default browser"
+msgstr "Úsáid an brabhsálaí réamhshocraithe atá agam"
+
+#: src/view/com/modals/ChangeHandle.tsx:400
+msgid "Use the DNS panel"
+msgstr ""
+
+#: src/view/com/modals/AddAppPasswords.tsx:156
+msgid "Use this to sign into the other app along with your handle."
+msgstr "Úsáid é seo le logáil isteach ar an aip eile in éindí le do leasainm."
+
+#: src/view/com/modals/ServerInput.tsx:105
+#~ msgid "Use your domain as your Bluesky client service provider"
+#~ msgstr "Úsáid d’fhearann féin mar sholáthraí seirbhíse cliaint Bluesky"
+
+#: src/view/com/modals/InviteCodes.tsx:201
+msgid "Used by:"
+msgstr "In úsáid ag:"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:64
+#: src/lib/moderation/useModerationCauseDescription.ts:56
+msgid "User Blocked"
+msgstr "Úsáideoir blocáilte"
+
+#: src/lib/moderation/useModerationCauseDescription.ts:48
+msgid "User Blocked by \"{0}\""
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:53
+msgid "User Blocked by List"
+msgstr "Úsáideoir blocáilte le liosta"
+
+#: src/lib/moderation/useModerationCauseDescription.ts:66
+msgid "User Blocking You"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:70
+msgid "User Blocks You"
+msgstr "Blocálann an t-úsáideoir seo thú"
+
+#: src/view/com/auth/create/Step2.tsx:44
+#~ msgid "User handle"
+#~ msgstr "Leasainm"
+
+#: src/view/com/lists/ListCard.tsx:85
+#: src/view/com/modals/UserAddRemoveLists.tsx:198
+msgid "User list by {0}"
+msgstr "Liosta úsáideoirí le {0}"
+
+#: src/view/screens/ProfileList.tsx:777
+msgid "User list by <0/>"
+msgstr "Liosta úsáideoirí le <0/>"
+
+#: src/view/com/lists/ListCard.tsx:83
+#: src/view/com/modals/UserAddRemoveLists.tsx:196
+#: src/view/screens/ProfileList.tsx:775
+msgid "User list by you"
+msgstr "Liosta úsáideoirí leat"
+
+#: src/view/com/modals/CreateOrEditList.tsx:197
+msgid "User list created"
+msgstr "Liosta úsáideoirí cruthaithe"
+
+#: src/view/com/modals/CreateOrEditList.tsx:183
+msgid "User list updated"
+msgstr "Liosta úsáideoirí uasdátaithe"
+
+#: src/view/screens/Lists.tsx:58
+msgid "User Lists"
+msgstr "Liostaí Úsáideoirí"
+
+#: src/screens/Login/LoginForm.tsx:151
+msgid "Username or email address"
+msgstr "Ainm úsáideora nó ríomhphost"
+
+#: src/view/screens/ProfileList.tsx:811
+msgid "Users"
+msgstr "Úsáideoirí"
+
+#: src/view/com/threadgate/WhoCanReply.tsx:143
+msgid "users followed by <0/>"
+msgstr "Úsáideoirí a bhfuil <0/> á leanúint"
+
+#: src/view/com/modals/Threadgate.tsx:106
+msgid "Users in \"{0}\""
+msgstr "Úsáideoirí in ”{0}“"
+
+#: src/components/LikesDialog.tsx:85
+msgid "Users that have liked this content or profile"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:436
+msgid "Value:"
+msgstr ""
+
+#: src/view/com/auth/create/Step2.tsx:243
+#~ msgid "Verification code"
+#~ msgstr "Cód dearbhaithe"
+
+#: src/view/com/modals/ChangeHandle.tsx:509
+msgid "Verify {0}"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:942
+msgid "Verify email"
+msgstr "Dearbhaigh ríomhphost"
+
+#: src/view/screens/Settings/index.tsx:967
+msgid "Verify my email"
+msgstr "Dearbhaigh mo ríomhphost"
+
+#: src/view/screens/Settings/index.tsx:976
+msgid "Verify My Email"
+msgstr "Dearbhaigh Mo Ríomhphost"
+
+#: src/view/com/modals/ChangeEmail.tsx:205
+#: src/view/com/modals/ChangeEmail.tsx:207
+msgid "Verify New Email"
+msgstr "Dearbhaigh an Ríomhphost Nua"
+
+#: src/view/com/modals/VerifyEmail.tsx:103
+msgid "Verify Your Email"
+msgstr "Dearbhaigh Do Ríomhphost"
+
+#: src/view/screens/Settings/index.tsx:893
+msgid "Version {0}"
+msgstr ""
+
+#: src/screens/Onboarding/index.tsx:42
+msgid "Video Games"
+msgstr "Físchluichí"
+
+#: src/screens/Profile/Header/Shell.tsx:107
+msgid "View {0}'s avatar"
+msgstr "Féach ar an abhatár atá ag {0}"
+
+#: src/view/screens/Log.tsx:52
+msgid "View debug entry"
+msgstr "Féach ar an iontráil dífhabhtaithe"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:131
+msgid "View details"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:126
+msgid "View details for reporting a copyright violation"
+msgstr ""
+
+#: src/view/com/posts/FeedSlice.tsx:99
+msgid "View full thread"
+msgstr "Féach ar an snáithe iomlán"
+
+#: src/components/moderation/LabelsOnMe.tsx:51
+msgid "View information about these labels"
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:166
+msgid "View profile"
+msgstr "Féach ar an bpróifíl"
+
+#: src/view/com/profile/ProfileSubpageHeader.tsx:128
+msgid "View the avatar"
+msgstr "Féach ar an abhatár"
+
+#: src/components/LabelingServiceCard/index.tsx:140
+msgid "View the labeling service provided by @{0}"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:585
+msgid "View users who like this feed"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
+msgid "Visit Site"
+msgstr "Tabhair cuairt ar an suíomh"
+
+#: src/components/moderation/LabelPreference.tsx:135
+#: src/lib/moderation/useLabelBehaviorDescription.ts:17
+#: src/lib/moderation/useLabelBehaviorDescription.ts:22
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:53
+msgid "Warn"
+msgstr "Rabhadh"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:48
+msgid "Warn content"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:46
+msgid "Warn content and filter from feeds"
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:134
+#~ msgid "We also think you'll like \"For You\" by Skygaze:"
+#~ msgstr "Creidimid go dtaitneoidh “For You” le Skygaze leat:"
+
+#: src/screens/Hashtag.tsx:133
+msgid "We couldn't find any results for that hashtag."
+msgstr ""
+
+#: src/screens/Deactivated.tsx:133
+msgid "We estimate {estimatedTime} until your account is ready."
+msgstr "Measaimid go mbeidh do chuntas réidh i gceann {estimatedTime}"
+
+#: src/screens/Onboarding/StepFinished.tsx:97
+msgid "We hope you have a wonderful time. Remember, Bluesky is:"
+msgstr "Tá súil againn go mbeidh an-chraic agat anseo. Ná déan dearmad go bhfuil Bluesky:"
+
+#: src/view/com/posts/DiscoverFallbackHeader.tsx:29
+msgid "We ran out of posts from your follows. Here's the latest from <0/>."
+msgstr "Níl aon ábhar nua le taispeáint ó na cuntais a leanann tú. Seo duit an t-ábhar is déanaí ó <0/>."
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:118
+#~ msgid "We recommend \"For You\" by Skygaze:"
+#~ msgstr "Creidimid go dtaitneoidh “For You” le Skygaze leat:"
+
+#: src/components/dialogs/MutedWords.tsx:203
+msgid "We recommend avoiding common words that appear in many posts, since it can result in no posts being shown."
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:125
+msgid "We recommend our \"Discover\" feed:"
+msgstr "Molaimid an fotha “Discover”."
+
+#: src/components/dialogs/BirthDateSettings.tsx:52
+msgid "We were unable to load your birth date preferences. Please try again."
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:385
+msgid "We were unable to load your configured labelers at this time."
+msgstr ""
+
+#: src/screens/Onboarding/StepInterests/index.tsx:137
+msgid "We weren't able to connect. Please try again to continue setting up your account. If it continues to fail, you can skip this flow."
+msgstr "Níorbh fhéidir linn ceangal a bhunú. Bain triail eile as do chuntas a shocrú. Má mhaireann an fhadhb, ní gá duit an próiseas seo a chur i gcrích."
+
+#: src/screens/Deactivated.tsx:137
+msgid "We will let you know when your account is ready."
+msgstr "Déarfaidh muid leat nuair a bheidh do chuntas réidh."
+
+#: src/view/com/modals/AppealLabel.tsx:48
+#~ msgid "We'll look into your appeal promptly."
+#~ msgstr "Fiosróimid d'achomharc gan mhoill."
+
+#: src/screens/Onboarding/StepInterests/index.tsx:142
+msgid "We'll use this to help customize your experience."
+msgstr "Bainfimid úsáid as seo chun an suíomh a chur in oiriúint duit."
+
+#: src/screens/Signup/index.tsx:130
+msgid "We're so excited to have you join us!"
+msgstr "Tá muid an-sásta go bhfuil tú linn!"
+
+#: src/view/screens/ProfileList.tsx:89
+msgid "We're sorry, but we were unable to resolve this list. If this persists, please contact the list creator, @{handleOrDid}."
+msgstr "Ár leithscéal, ach ní féidir linn an liosta seo a thaispeáint. Má mhaireann an fhadhb, déan teagmháil leis an duine a chruthaigh an liosta, @{handleOrDid}."
+
+#: src/components/dialogs/MutedWords.tsx:229
+msgid "We're sorry, but we weren't able to load your muted words at this time. Please try again."
+msgstr ""
+
+#: src/view/screens/Search/Search.tsx:256
+msgid "We're sorry, but your search could not be completed. Please try again in a few minutes."
+msgstr "Ár leithscéal, ach níorbh fhéidir linn do chuardach a chur i gcrích. Bain triail eile as i gceann cúpla nóiméad."
+
+#: src/components/Lists.tsx:188
+#: src/view/screens/NotFound.tsx:48
+msgid "We're sorry! We can't find the page you were looking for."
+msgstr "Ár leithscéal, ach ní féidir linn an leathanach atá tú ag lorg a aimsiú."
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:321
+msgid "We're sorry! You can only subscribe to ten labelers, and you've reached your limit of ten."
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:48
+msgid "Welcome to <0>Bluesky0>"
+msgstr "Fáilte go <0>Bluesky0>"
+
+#: src/screens/Onboarding/StepInterests/index.tsx:134
+msgid "What are your interests?"
+msgstr "Cad iad na rudaí a bhfuil suim agat iontu?"
+
+#: src/view/com/modals/report/Modal.tsx:169
+#~ msgid "What is the issue with this {collectionName}?"
+#~ msgstr "Cad é an fhadhb le {collectionName}?"
+
+#: src/view/com/auth/SplashScreen.tsx:58
+#: src/view/com/auth/SplashScreen.web.tsx:84
+#: src/view/com/composer/Composer.tsx:296
+msgid "What's up?"
+msgstr "Aon scéal?"
+
+#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:78
+msgid "Which languages are used in this post?"
+msgstr "Cad iad na teangacha sa phostáil seo?"
+
+#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:77
+msgid "Which languages would you like to see in your algorithmic feeds?"
+msgstr "Cad iad na teangacha ba mhaith leat a fheiceáil i do chuid fothaí algartamacha?"
+
+#: src/view/com/composer/threadgate/ThreadgateBtn.tsx:47
+#: src/view/com/modals/Threadgate.tsx:66
+msgid "Who can reply"
+msgstr "Cé atá in ann freagra a thabhairt"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:43
+msgid "Why should this content be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:56
+msgid "Why should this feed be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:53
+msgid "Why should this list be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:50
+msgid "Why should this post be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:47
+msgid "Why should this user be reviewed?"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:103
+msgid "Wide"
+msgstr "Leathan"
+
+#: src/view/com/composer/Composer.tsx:436
+msgid "Write post"
+msgstr "Scríobh postáil"
+
+#: src/view/com/composer/Composer.tsx:295
+#: src/view/com/composer/Prompt.tsx:37
+msgid "Write your reply"
+msgstr "Scríobh freagra"
+
+#: src/screens/Onboarding/index.tsx:28
+msgid "Writers"
+msgstr "Scríbhneoirí"
+
+#: src/view/com/auth/create/Step2.tsx:263
+#~ msgid "XXXXXX"
+#~ msgstr "XXXXXX"
+
+#: src/view/com/composer/select-language/SuggestedLanguage.tsx:77
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:201
+#: src/view/screens/PreferencesFollowingFeed.tsx:236
+#: src/view/screens/PreferencesFollowingFeed.tsx:271
+#: src/view/screens/PreferencesThreads.tsx:106
+#: src/view/screens/PreferencesThreads.tsx:129
+msgid "Yes"
+msgstr "Tá"
+
+#: src/screens/Onboarding/StepModeration/index.tsx:46
+#~ msgid "You are in control"
+#~ msgstr "Tá sé faoi do stiúir"
+
+#: src/screens/Deactivated.tsx:130
+msgid "You are in line."
+msgstr "Tá tú sa scuaine."
+
+#: src/view/com/profile/ProfileFollows.tsx:86
+msgid "You are not following anyone."
+msgstr ""
+
+#: src/view/com/posts/FollowingEmptyState.tsx:67
+#: src/view/com/posts/FollowingEndOfFeed.tsx:68
+msgid "You can also discover new Custom Feeds to follow."
+msgstr "Is féidir leat sainfhothaí nua a aimsiú le leanúint."
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:123
+#~ msgid "You can also try our \"Discover\" algorithm:"
+#~ msgstr "Tig leat freisin triail a bhaint as ár n-algartam “Discover”:"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:143
+msgid "You can change these settings later."
+msgstr "Is féidir leat na socruithe seo a athrú níos déanaí."
+
+#: src/screens/Login/index.tsx:158
+#: src/screens/Login/PasswordUpdatedForm.tsx:33
+msgid "You can now sign in with your new password."
+msgstr "Is féidir leat logáil isteach le do phasfhocal nua anois."
+
+#: src/view/com/profile/ProfileFollowers.tsx:86
+msgid "You do not have any followers."
+msgstr ""
+
+#: src/view/com/modals/InviteCodes.tsx:67
+msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer."
+msgstr "Níl aon chóid chuiridh agat fós! Cuirfidh muid cúpla cód chugat tar éis duit beagán ama a chaitheamh anseo."
+
+#: src/view/screens/SavedFeeds.tsx:102
+msgid "You don't have any pinned feeds."
+msgstr "Níl aon fhothaí greamaithe agat."
+
+#: src/view/screens/Feeds.tsx:452
+msgid "You don't have any saved feeds!"
+msgstr "Níl aon fhothaí sábháilte agat!"
+
+#: src/view/screens/SavedFeeds.tsx:135
+msgid "You don't have any saved feeds."
+msgstr "Níl aon fhothaí sábháilte agat."
+
+#: src/view/com/post-thread/PostThread.tsx:159
+msgid "You have blocked the author or you have been blocked by the author."
+msgstr "Bhlocáil tú an t-údar nó tá tú blocáilte ag an údar."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:66
+#: src/lib/moderation/useModerationCauseDescription.ts:50
+#: src/lib/moderation/useModerationCauseDescription.ts:58
+msgid "You have blocked this user. You cannot view their content."
+msgstr "Bhlocáil tú an cuntas seo. Ní féidir leat a gcuid ábhar a fheiceáil."
+
+#: src/screens/Login/SetNewPasswordForm.tsx:54
+#: src/screens/Login/SetNewPasswordForm.tsx:91
+#: src/view/com/modals/ChangePassword.tsx:87
+#: src/view/com/modals/ChangePassword.tsx:121
+msgid "You have entered an invalid code. It should look like XXXXX-XXXXX."
+msgstr "Tá tú tar éis cód míchruinn a chur isteach. Ba cheart an cruth seo a bheith air: XXXXX-XXXXX."
+
+#: src/lib/moderation/useModerationCauseDescription.ts:109
+msgid "You have hidden this post"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:101
+msgid "You have hidden this post."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:94
+#: src/lib/moderation/useModerationCauseDescription.ts:92
+msgid "You have muted this account."
+msgstr ""
+
+#: src/lib/moderation/useModerationCauseDescription.ts:86
+msgid "You have muted this user"
+msgstr ""
+
+#: src/view/com/modals/ModerationDetails.tsx:87
+#~ msgid "You have muted this user."
+#~ msgstr "Chuir tú an cuntas seo i bhfolach."
+
+#: src/view/com/feeds/ProfileFeedgens.tsx:136
+msgid "You have no feeds."
+msgstr "Níl aon fhothaí agat."
+
+#: src/view/com/lists/MyLists.tsx:89
+#: src/view/com/lists/ProfileLists.tsx:140
+msgid "You have no lists."
+msgstr "Níl aon liostaí agat."
+
+#: src/view/screens/ModerationBlockedAccounts.tsx:132
+msgid "You have not blocked any accounts yet. To block an account, go to their profile and select \"Block account\" from the menu on their account."
+msgstr ""
+
+#: src/view/screens/ModerationBlockedAccounts.tsx:132
+#~ msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
+#~ msgstr "Níor bhlocáil tú aon chuntas fós. Le cuntas a bhlocáil, téigh go dtí a bpróifíl agus roghnaigh “Blocáil an cuntas seo” ar an gclár ansin."
+
+#: src/view/screens/AppPasswords.tsx:89
+msgid "You have not created any app passwords yet. You can create one by pressing the button below."
+msgstr "Níor chruthaigh tú aon phasfhocal aipe fós. Is féidir leat ceann a chruthú ach brú ar an gcnaipe thíos."
+
+#: src/view/screens/ModerationMutedAccounts.tsx:131
+msgid "You have not muted any accounts yet. To mute an account, go to their profile and select \"Mute account\" from the menu on their account."
+msgstr ""
+
+#: src/view/screens/ModerationMutedAccounts.tsx:131
+#~ msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
+#~ msgstr "Níor chuir tú aon chuntas i bhfolach fós. Le cuntas a chur i bhfolach, téigh go dtí a bpróifíl agus roghnaigh “Cuir an cuntas i bhfolach” ar an gclár ansin."
+
+#: src/components/dialogs/MutedWords.tsx:249
+msgid "You haven't muted any words or tags yet"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:68
+msgid "You may appeal these labels if you feel they were placed in error."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/Policies.tsx:79
+msgid "You must be 13 years of age or older to sign up."
+msgstr ""
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:175
+#~ msgid "You must be 18 or older to enable adult content."
+#~ msgstr "Caithfidh tú a bheith 18 mbliana d’aois nó níos sine le hábhar do dhaoine fásta a fháil."
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:110
+msgid "You must be 18 years or older to enable adult content"
+msgstr "Caithfidh tú a bheith 18 mbliana d’aois nó níos sine le hábhar do dhaoine fásta a fháil."
+
+#: src/components/ReportDialog/SubmitView.tsx:205
+msgid "You must select at least one labeler for a report"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:144
+msgid "You will no longer receive notifications for this thread"
+msgstr "Ní bhfaighidh tú fógraí don snáithe seo a thuilleadh."
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:147
+msgid "You will now receive notifications for this thread"
+msgstr "Gheobhaidh tú fógraí don snáithe seo anois."
+
+#: src/screens/Login/SetNewPasswordForm.tsx:104
+msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password."
+msgstr "Gheobhaidh tú teachtaireacht ríomhphoist le “cód athshocraithe” ann. Cuir an cód sin isteach anseo, ansin cuir do phasfhocal nua isteach."
+
+#: src/screens/Onboarding/StepModeration/index.tsx:60
+msgid "You're in control"
+msgstr "Tá sé faoi do stiúir"
+
+#: src/screens/Deactivated.tsx:87
+#: src/screens/Deactivated.tsx:88
+#: src/screens/Deactivated.tsx:103
+msgid "You're in line"
+msgstr "Tá tú sa scuaine"
+
+#: src/screens/Onboarding/StepFinished.tsx:94
+msgid "You're ready to go!"
+msgstr "Tá tú réidh!"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:98
+#: src/lib/moderation/useModerationCauseDescription.ts:101
+msgid "You've chosen to hide a word or tag within this post."
+msgstr ""
+
+#: src/view/com/posts/FollowingEndOfFeed.tsx:48
+msgid "You've reached the end of your feed! Find some more accounts to follow."
+msgstr "Tháinig tú go deireadh d’fhotha! Aimsigh cuntais eile le leanúint."
+
+#: src/screens/Signup/index.tsx:150
+msgid "Your account"
+msgstr "Do chuntas"
+
+#: src/view/com/modals/DeleteAccount.tsx:68
+msgid "Your account has been deleted"
+msgstr "Scriosadh do chuntas"
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:47
+msgid "Your account repository, containing all public data records, can be downloaded as a \"CAR\" file. This file does not include media embeds, such as images, or your private data, which must be fetched separately."
+msgstr "Is féidir cartlann do chuntais, a bhfuil na taifid phoiblí uile inti, a íoslódáil mar chomhad “CAR”. Ní bheidh aon mheáin leabaithe (íomhánna, mar shampla) ná do shonraí príobháideacha inti. Ní mór iad a fháil ar dhóigh eile."
+
+#: src/screens/Signup/StepInfo/index.tsx:121
+msgid "Your birth date"
+msgstr "Do bhreithlá"
+
+#: src/view/com/modals/InAppBrowserConsent.tsx:47
+msgid "Your choice will be saved, but can be changed later in settings."
+msgstr "Sábhálfar do rogha, ach is féidir é athrú níos déanaí sna socruithe."
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:62
+msgid "Your default feed is \"Following\""
+msgstr "Is é “Following” d’fhotha réamhshocraithe"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:57
+#: src/screens/Signup/state.ts:227
+#: src/view/com/modals/ChangePassword.tsx:54
+msgid "Your email appears to be invalid."
+msgstr "Is cosúil go bhfuil do ríomhphost neamhbhailí."
+
+#: src/view/com/modals/Waitlist.tsx:109
+#~ msgid "Your email has been saved! We'll be in touch soon."
+#~ msgstr "Cláraíodh do sheoladh ríomhphost! Beidh muid i dteagmháil leat go luath."
+
+#: src/view/com/modals/ChangeEmail.tsx:125
+msgid "Your email has been updated but not verified. As a next step, please verify your new email."
+msgstr "Uasdátaíodh do sheoladh ríomhphoist ach níor dearbhaíodh é. An chéad chéim eile anois ná do sheoladh nua a dhearbhú, le do thoil."
+
+#: src/view/com/modals/VerifyEmail.tsx:114
+msgid "Your email has not yet been verified. This is an important security step which we recommend."
+msgstr "Níor dearbhaíodh do sheoladh ríomhphoist fós. Is tábhachtach an chéim shábháilteachta é sin agus molaimid é."
+
+#: src/view/com/posts/FollowingEmptyState.tsx:47
+msgid "Your following feed is empty! Follow more users to see what's happening."
+msgstr "Tá an fotha de na daoine a leanann tú folamh! Lean tuilleadh úsáideoirí le feiceáil céard atá ar siúl."
+
+#: src/screens/Signup/StepHandle.tsx:72
+msgid "Your full handle will be"
+msgstr "Do leasainm iomlán anseo:"
+
+#: src/view/com/modals/ChangeHandle.tsx:271
+msgid "Your full handle will be <0>@{0}0>"
+msgstr "Do leasainm iomlán anseo: <0>@{0}0>"
+
+#: src/view/screens/Settings.tsx:NaN
+#: src/view/shell/Drawer.tsx:660
+#~ msgid "Your invite codes are hidden when logged in using an App Password"
+#~ msgstr "Níl do chuid cód cuiridh le feiceáil nuair atá tú logáilte isteach le pasfhocal aipe"
+
+#: src/components/dialogs/MutedWords.tsx:220
+msgid "Your muted words"
+msgstr ""
+
+#: src/view/com/modals/ChangePassword.tsx:157
+msgid "Your password has been changed successfully!"
+msgstr "Athraíodh do phasfhocal!"
+
+#: src/view/com/composer/Composer.tsx:284
+msgid "Your post has been published"
+msgstr "Foilsíodh do phostáil"
+
+#: src/screens/Onboarding/StepFinished.tsx:109
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:59
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:61
+msgid "Your posts, likes, and blocks are public. Mutes are private."
+msgstr "Tá do chuid postálacha, moltaí, agus blocálacha poiblí. Is príobháideach iad na cuntais a chuireann tú i bhfolach."
+
+#: src/view/screens/Settings/index.tsx:125
+msgid "Your profile"
+msgstr "Do phróifíl"
+
+#: src/view/com/composer/Composer.tsx:283
+msgid "Your reply has been published"
+msgstr "Foilsíodh do fhreagra"
+
+#: src/screens/Signup/index.tsx:152
+msgid "Your user handle"
+msgstr "Do leasainm"
diff --git a/src/locale/locales/hi/messages.po b/src/locale/locales/hi/messages.po
index 0569ae2993..437ecb2628 100644
--- a/src/locale/locales/hi/messages.po
+++ b/src/locale/locales/hi/messages.po
@@ -21,7 +21,7 @@ msgstr ""
#~ msgid "{0, plural, one {# invite code available} other {# invite codes available}}"
#~ msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:592
+#: src/screens/Profile/Header/Metrics.tsx:44
msgid "{following} following"
msgstr ""
@@ -39,7 +39,7 @@ msgstr ""
#~ msgid "{invitesAvailable} invite codes available"
#~ msgstr ""
-#: src/view/shell/Drawer.tsx:440
+#: src/view/shell/Drawer.tsx:443
msgid "{numUnreadNotifications} unread"
msgstr ""
@@ -47,7 +47,11 @@ msgstr ""
msgid "<0/> members"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:594
+#: src/view/shell/Drawer.tsx:97
+msgid "<0>{0}0> following"
+msgstr ""
+
+#: src/screens/Profile/Header/Metrics.tsx:45
msgid "<0>{following} 0><1>following1>"
msgstr ""
@@ -67,51 +71,60 @@ msgstr "<0>कुछ0><1>पसंदीदा उपयोगकर्ता
msgid "<0>Welcome to0><1>Bluesky1>"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:557
+#: src/screens/Profile/Header/Handle.tsx:42
msgid "⚠Invalid Handle"
msgstr ""
#: src/view/com/util/moderation/LabelInfo.tsx:45
-msgid "A content warning has been applied to this {0}."
-msgstr ""
+#~ msgid "A content warning has been applied to this {0}."
+#~ msgstr ""
#: src/lib/hooks/useOTAUpdate.ts:16
-msgid "A new version of the app is available. Please update to continue using the app."
-msgstr "ऐप का एक नया संस्करण उपलब्ध है. कृपया ऐप का उपयोग जारी रखने के लिए अपडेट करें।"
+#~ msgid "A new version of the app is available. Please update to continue using the app."
+#~ msgstr "ऐप का एक नया संस्करण उपलब्ध है. कृपया ऐप का उपयोग जारी रखने के लिए अपडेट करें।"
-#: src/view/com/util/ViewHeader.tsx:83
-#: src/view/screens/Search/Search.tsx:624
+#: src/view/com/util/ViewHeader.tsx:89
+#: src/view/screens/Search/Search.tsx:649
msgid "Access navigation links and settings"
msgstr ""
-#: src/view/com/pager/FeedsTabBarMobile.tsx:89
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:52
msgid "Access profile and other navigation links"
msgstr ""
-#: src/view/com/modals/EditImage.tsx:299
-#: src/view/screens/Settings/index.tsx:451
+#: src/view/com/modals/EditImage.tsx:300
+#: src/view/screens/Settings/index.tsx:470
msgid "Accessibility"
msgstr "प्रवेर्शयोग्यता"
-#: src/view/com/auth/login/LoginForm.tsx:166
-#: src/view/screens/Settings/index.tsx:308
-#: src/view/screens/Settings/index.tsx:721
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "account"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:144
+#: src/view/screens/Settings/index.tsx:327
+#: src/view/screens/Settings/index.tsx:743
msgid "Account"
msgstr "अकाउंट"
-#: src/view/com/profile/ProfileHeader.tsx:245
+#: src/view/com/profile/ProfileMenu.tsx:139
msgid "Account blocked"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:212
+#: src/view/com/profile/ProfileMenu.tsx:153
+msgid "Account followed"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:113
msgid "Account muted"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:86
+#: src/components/moderation/ModerationDetailsDialog.tsx:93
+#: src/lib/moderation/useModerationCauseDescription.ts:91
msgid "Account Muted"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:72
+#: src/components/moderation/ModerationDetailsDialog.tsx:82
msgid "Account Muted by List"
msgstr ""
@@ -123,18 +136,24 @@ msgstr "अकाउंट के विकल्प"
msgid "Account removed from quick access"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:267
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:137
+#: src/view/com/profile/ProfileMenu.tsx:128
msgid "Account unblocked"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:225
+#: src/view/com/profile/ProfileMenu.tsx:166
+msgid "Account unfollowed"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:102
msgid "Account unmuted"
msgstr ""
+#: src/components/dialogs/MutedWords.tsx:164
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:150
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/screens/ProfileList.tsx:812
+#: src/view/screens/ProfileList.tsx:827
msgid "Add"
msgstr "ऐड करो"
@@ -142,54 +161,63 @@ msgstr "ऐड करो"
msgid "Add a content warning"
msgstr "सामग्री चेतावनी जोड़ें"
-#: src/view/screens/ProfileList.tsx:802
+#: src/view/screens/ProfileList.tsx:817
msgid "Add a user to this list"
msgstr "इस सूची में किसी को जोड़ें"
-#: src/view/screens/Settings/index.tsx:383
-#: src/view/screens/Settings/index.tsx:392
+#: src/components/dialogs/SwitchAccount.tsx:55
+#: src/view/screens/Settings/index.tsx:402
+#: src/view/screens/Settings/index.tsx:411
msgid "Add account"
msgstr "अकाउंट जोड़ें"
#: src/view/com/composer/photos/Gallery.tsx:119
#: src/view/com/composer/photos/Gallery.tsx:180
-#: src/view/com/modals/AltImage.tsx:116
+#: src/view/com/modals/AltImage.tsx:117
msgid "Add alt text"
msgstr "इस फ़ोटो में विवरण जोड़ें"
-#: src/view/screens/AppPasswords.tsx:102
-#: src/view/screens/AppPasswords.tsx:143
-#: src/view/screens/AppPasswords.tsx:156
+#: src/view/screens/AppPasswords.tsx:104
+#: src/view/screens/AppPasswords.tsx:145
+#: src/view/screens/AppPasswords.tsx:158
msgid "Add App Password"
msgstr ""
#: src/view/com/modals/report/InputIssueDetails.tsx:41
#: src/view/com/modals/report/Modal.tsx:191
-msgid "Add details"
-msgstr "विवरण जोड़ें"
+#~ msgid "Add details"
+#~ msgstr "विवरण जोड़ें"
#: src/view/com/modals/report/Modal.tsx:194
-msgid "Add details to report"
-msgstr "रिपोर्ट करने के लिए विवरण जोड़ें"
+#~ msgid "Add details to report"
+#~ msgstr "रिपोर्ट करने के लिए विवरण जोड़ें"
-#: src/view/com/composer/Composer.tsx:446
+#: src/view/com/composer/Composer.tsx:467
msgid "Add link card"
msgstr "लिंक कार्ड जोड़ें"
-#: src/view/com/composer/Composer.tsx:451
+#: src/view/com/composer/Composer.tsx:472
msgid "Add link card:"
msgstr "लिंक कार्ड जोड़ें:"
-#: src/view/com/modals/ChangeHandle.tsx:417
+#: src/components/dialogs/MutedWords.tsx:157
+msgid "Add mute word for configured settings"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:86
+msgid "Add muted words and tags"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:416
msgid "Add the following DNS record to your domain:"
msgstr "अपने डोमेन में निम्नलिखित DNS रिकॉर्ड जोड़ें:"
-#: src/view/com/profile/ProfileHeader.tsx:309
+#: src/view/com/profile/ProfileMenu.tsx:263
+#: src/view/com/profile/ProfileMenu.tsx:266
msgid "Add to Lists"
msgstr "सूचियों में जोड़ें"
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/feeds/FeedSourceCard.tsx:234
msgid "Add to my feeds"
msgstr "इस फ़ीड को सहेजें"
@@ -202,36 +230,47 @@ msgstr ""
msgid "Added to list"
msgstr ""
-#: src/view/com/feeds/FeedSourceCard.tsx:125
+#: src/view/com/feeds/FeedSourceCard.tsx:108
msgid "Added to my feeds"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:173
+#: src/view/screens/PreferencesFollowingFeed.tsx:173
msgid "Adjust the number of likes a reply must have to be shown in your feed."
msgstr "पसंद की संख्या को समायोजित करें उत्तर को आपके फ़ीड में दिखाया जाना चाहिए।।"
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:117
#: src/view/com/modals/SelfLabel.tsx:75
msgid "Adult Content"
msgstr "वयस्क सामग्री"
#: src/view/com/modals/ContentFilteringSettings.tsx:141
-msgid "Adult content can only be enabled via the Web at <0/>."
-msgstr ""
+#~ msgid "Adult content can only be enabled via the Web at <0/>."
+#~ msgstr ""
#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
#~ msgid "Adult content can only be enabled via the Web at <0>bsky.app0>."
#~ msgstr ""
-#: src/view/screens/Settings/index.tsx:664
+#: src/components/moderation/LabelPreference.tsx:242
+msgid "Adult content is disabled."
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:375
+#: src/view/screens/Settings/index.tsx:684
msgid "Advanced"
msgstr "विकसित"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:221
-#: src/view/com/modals/ChangePassword.tsx:168
+#: src/view/screens/Feeds.tsx:666
+msgid "All the feeds you've saved, right in one place."
+msgstr ""
+
+#: src/screens/Login/ForgotPasswordForm.tsx:178
+#: src/view/com/modals/ChangePassword.tsx:170
msgid "Already have a code?"
msgstr ""
-#: src/view/com/auth/login/ChooseAccountForm.tsx:98
+#: src/screens/Login/ChooseAccountForm.tsx:39
msgid "Already signed in as @{0}"
msgstr ""
@@ -239,7 +278,7 @@ msgstr ""
msgid "ALT"
msgstr "ALT"
-#: src/view/com/modals/EditImage.tsx:315
+#: src/view/com/modals/EditImage.tsx:316
msgid "Alt text"
msgstr "वैकल्पिक पाठ"
@@ -255,12 +294,18 @@ msgstr "{0} को ईमेल भेजा गया है। इसमें
msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below."
msgstr "{0} को ईमेल भेजा गया है। इसमें एक OTP कोड शामिल है जिसे आप नीचे दर्ज कर सकते हैं।।"
-#: src/view/com/profile/FollowButton.tsx:30
-#: src/view/com/profile/FollowButton.tsx:40
+#: src/lib/moderation/useReportOptions.ts:26
+msgid "An issue not included in these options"
+msgstr ""
+
+#: src/view/com/profile/FollowButton.tsx:35
+#: src/view/com/profile/FollowButton.tsx:45
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:188
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:198
msgid "An issue occurred, please try again."
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:236
+#: src/view/com/notifications/FeedItem.tsx:240
#: src/view/com/threadgate/WhoCanReply.tsx:178
msgid "and"
msgstr "और"
@@ -269,23 +314,27 @@ msgstr "और"
msgid "Animals"
msgstr ""
+#: src/lib/moderation/useReportOptions.ts:31
+msgid "Anti-Social Behavior"
+msgstr ""
+
#: src/view/screens/LanguageSettings.tsx:95
msgid "App Language"
msgstr "ऐप भाषा"
-#: src/view/screens/AppPasswords.tsx:228
+#: src/view/screens/AppPasswords.tsx:223
msgid "App password deleted"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:134
+#: src/view/com/modals/AddAppPasswords.tsx:135
msgid "App Password names can only contain letters, numbers, spaces, dashes, and underscores."
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:99
+#: src/view/com/modals/AddAppPasswords.tsx:100
msgid "App Password names must be at least 4 characters long."
msgstr ""
-#: src/view/screens/Settings/index.tsx:675
+#: src/view/screens/Settings/index.tsx:695
msgid "App password settings"
msgstr ""
@@ -293,47 +342,65 @@ msgstr ""
#~ msgid "App passwords"
#~ msgstr "ऐप पासवर्ड"
-#: src/Navigation.tsx:237
-#: src/view/screens/AppPasswords.tsx:187
-#: src/view/screens/Settings/index.tsx:684
+#: src/Navigation.tsx:251
+#: src/view/screens/AppPasswords.tsx:189
+#: src/view/screens/Settings/index.tsx:704
msgid "App Passwords"
msgstr "ऐप पासवर्ड"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:250
-msgid "Appeal content warning"
+#: src/components/moderation/LabelsOnMeDialog.tsx:133
+#: src/components/moderation/LabelsOnMeDialog.tsx:136
+msgid "Appeal"
msgstr ""
+#: src/components/moderation/LabelsOnMeDialog.tsx:201
+msgid "Appeal \"{0}\" label"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:337
+#: src/view/com/util/forms/PostDropdownBtn.tsx:346
+#~ msgid "Appeal content warning"
+#~ msgstr ""
+
#: src/view/com/modals/AppealLabel.tsx:65
-msgid "Appeal Content Warning"
+#~ msgid "Appeal Content Warning"
+#~ msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:192
+msgid "Appeal submitted."
msgstr ""
#: src/view/com/util/moderation/LabelInfo.tsx:52
-msgid "Appeal this decision"
-msgstr ""
+#~ msgid "Appeal this decision"
+#~ msgstr ""
#: src/view/com/util/moderation/LabelInfo.tsx:56
-msgid "Appeal this decision."
-msgstr ""
+#~ msgid "Appeal this decision."
+#~ msgstr ""
-#: src/view/screens/Settings/index.tsx:466
+#: src/view/screens/Settings/index.tsx:485
msgid "Appearance"
msgstr "दिखावट"
-#: src/view/screens/AppPasswords.tsx:224
+#: src/view/screens/AppPasswords.tsx:265
msgid "Are you sure you want to delete the app password \"{name}\"?"
msgstr "क्या आप वाकई ऐप पासवर्ड \"{name}\" हटाना चाहते हैं?"
-#: src/view/com/composer/Composer.tsx:143
+#: src/view/com/feeds/FeedSourceCard.tsx:280
+msgid "Are you sure you want to remove {0} from your feeds?"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:509
msgid "Are you sure you'd like to discard this draft?"
msgstr "क्या आप वाकई इस ड्राफ्ट को हटाना करना चाहेंगे?"
-#: src/view/screens/ProfileList.tsx:364
+#: src/components/dialogs/MutedWords.tsx:281
msgid "Are you sure?"
msgstr "क्या आप वास्तव में इसे करना चाहते हैं?"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:233
-msgid "Are you sure? This cannot be undone."
-msgstr "क्या आप वास्तव में इसे करना चाहते हैं? इसे असंपादित नहीं किया जा सकता है।"
+#: src/view/com/util/forms/PostDropdownBtn.tsx:322
+#~ msgid "Are you sure? This cannot be undone."
+#~ msgstr "क्या आप वास्तव में इसे करना चाहते हैं? इसे असंपादित नहीं किया जा सकता है।"
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:60
msgid "Are you writing in <0>{0}0>?"
@@ -347,78 +414,93 @@ msgstr ""
msgid "Artistic or non-erotic nudity."
msgstr "कलात्मक या गैर-कामुक नग्नता।।"
-#: src/view/com/auth/create/CreateAccount.tsx:147
-#: src/view/com/auth/login/ChooseAccountForm.tsx:151
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:174
-#: src/view/com/auth/login/LoginForm.tsx:259
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:179
-#: src/view/com/modals/report/InputIssueDetails.tsx:46
-#: src/view/com/post-thread/PostThread.tsx:408
-#: src/view/com/post-thread/PostThread.tsx:458
-#: src/view/com/post-thread/PostThread.tsx:466
-#: src/view/com/profile/ProfileHeader.tsx:648
-#: src/view/com/util/ViewHeader.tsx:81
+#: src/screens/Signup/StepHandle.tsx:118
+msgid "At least 3 characters"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:246
+#: src/components/moderation/LabelsOnMeDialog.tsx:247
+#: src/screens/Login/ChooseAccountForm.tsx:73
+#: src/screens/Login/ChooseAccountForm.tsx:78
+#: src/screens/Login/ForgotPasswordForm.tsx:129
+#: src/screens/Login/ForgotPasswordForm.tsx:135
+#: src/screens/Login/LoginForm.tsx:221
+#: src/screens/Login/LoginForm.tsx:227
+#: src/screens/Login/SetNewPasswordForm.tsx:160
+#: src/screens/Login/SetNewPasswordForm.tsx:166
+#: src/screens/Profile/Header/Shell.tsx:96
+#: src/screens/Signup/index.tsx:179
+#: src/view/com/util/ViewHeader.tsx:87
msgid "Back"
msgstr "वापस"
-#: src/view/com/post-thread/PostThread.tsx:416
-msgctxt "action"
-msgid "Back"
-msgstr ""
+#: src/view/com/post-thread/PostThread.tsx:480
+#~ msgctxt "action"
+#~ msgid "Back"
+#~ msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:136
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:144
msgid "Based on your interest in {interestsText}"
msgstr ""
-#: src/view/screens/Settings/index.tsx:523
+#: src/view/screens/Settings/index.tsx:542
msgid "Basics"
msgstr "मूल बातें"
-#: src/view/com/auth/create/Step1.tsx:246
-#: src/view/com/modals/BirthDateSettings.tsx:73
+#: src/components/dialogs/BirthDateSettings.tsx:107
msgid "Birthday"
msgstr "जन्मदिन"
-#: src/view/screens/Settings/index.tsx:340
+#: src/view/screens/Settings/index.tsx:359
msgid "Birthday:"
msgstr "जन्मदिन:"
-#: src/view/com/profile/ProfileHeader.tsx:238
-#: src/view/com/profile/ProfileHeader.tsx:345
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+msgid "Block"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:300
+#: src/view/com/profile/ProfileMenu.tsx:307
msgid "Block Account"
msgstr "खाता ब्लॉक करें"
-#: src/view/screens/ProfileList.tsx:555
+#: src/view/com/profile/ProfileMenu.tsx:344
+msgid "Block Account?"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:530
msgid "Block accounts"
msgstr "खाता ब्लॉक करें"
-#: src/view/screens/ProfileList.tsx:505
+#: src/view/screens/ProfileList.tsx:478
+#: src/view/screens/ProfileList.tsx:634
msgid "Block list"
msgstr ""
-#: src/view/screens/ProfileList.tsx:315
+#: src/view/screens/ProfileList.tsx:629
msgid "Block these accounts?"
msgstr "खाता ब्लॉक करें?"
-#: src/view/screens/ProfileList.tsx:319
-msgid "Block this List"
-msgstr ""
+#: src/view/screens/ProfileList.tsx:320
+#~ msgid "Block this List"
+#~ msgstr ""
-#: src/view/com/lists/ListCard.tsx:109
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:60
+#: src/view/com/lists/ListCard.tsx:110
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:55
msgid "Blocked"
msgstr ""
-#: src/view/screens/Moderation.tsx:123
+#: src/screens/Moderation/index.tsx:267
msgid "Blocked accounts"
msgstr "ब्लॉक किए गए खाते"
-#: src/Navigation.tsx:130
+#: src/Navigation.tsx:134
#: src/view/screens/ModerationBlockedAccounts.tsx:107
msgid "Blocked Accounts"
msgstr "ब्लॉक किए गए खाते"
-#: src/view/com/profile/ProfileHeader.tsx:240
+#: src/view/com/profile/ProfileMenu.tsx:356
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
msgstr "अवरुद्ध खाते आपके थ्रेड्स में उत्तर नहीं दे सकते, आपका उल्लेख नहीं कर सकते, या अन्यथा आपके साथ बातचीत नहीं कर सकते।"
@@ -426,48 +508,57 @@ msgstr "अवरुद्ध खाते आपके थ्रेड्स
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours."
msgstr "अवरुद्ध खाते आपके थ्रेड्स में उत्तर नहीं दे सकते, आपका उल्लेख नहीं कर सकते, या अन्यथा आपके साथ बातचीत नहीं कर सकते। आप उनकी सामग्री नहीं देख पाएंगे और उन्हें आपकी सामग्री देखने से रोका जाएगा।"
-#: src/view/com/post-thread/PostThread.tsx:267
+#: src/view/com/post-thread/PostThread.tsx:313
msgid "Blocked post."
msgstr "ब्लॉक पोस्ट।"
-#: src/view/screens/ProfileList.tsx:317
+#: src/screens/Profile/Sections/Labels.tsx:152
+msgid "Blocking does not prevent this labeler from placing labels on your account."
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:631
msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
msgstr "अवरोधन सार्वजनिक है. अवरुद्ध खाते आपके थ्रेड्स में उत्तर नहीं दे सकते, आपका उल्लेख नहीं कर सकते, या अन्यथा आपके साथ बातचीत नहीं कर सकते।"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:93
+#: src/view/com/profile/ProfileMenu.tsx:353
+msgid "Blocking will not prevent labels from being applied on your account, but it will stop this account from replying in your threads or interacting with you."
+msgstr ""
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:98
+#: src/view/com/auth/SplashScreen.web.tsx:169
msgid "Blog"
msgstr ""
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:31
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:32
#: src/view/com/auth/server-input/index.tsx:89
-#: src/view/com/auth/server-input/index.tsx:90
+#: src/view/com/auth/server-input/index.tsx:91
msgid "Bluesky"
msgstr "Bluesky"
-#: src/view/com/auth/server-input/index.tsx:150
+#: src/view/com/auth/server-input/index.tsx:154
msgid "Bluesky is an open network where you can choose your hosting provider. Custom hosting is now available in beta for developers."
msgstr ""
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:80
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:80
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:82
msgid "Bluesky is flexible."
msgstr "Bluesky लचीला है।।"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:69
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:69
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:71
msgid "Bluesky is open."
msgstr "Bluesky खुला है।।"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:56
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:56
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:58
msgid "Bluesky is public."
msgstr "Bluesky सार्वजनिक है।।"
#: src/view/com/modals/Waitlist.tsx:70
-msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
-msgstr "ब्लूस्की एक स्वस्थ समुदाय बनाने के लिए आमंत्रित करता है। यदि आप किसी को आमंत्रित नहीं करते हैं, तो आप प्रतीक्षा सूची के लिए साइन अप कर सकते हैं और हम जल्द ही एक भेज देंगे।।"
+#~ msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
+#~ msgstr "ब्लूस्की एक स्वस्थ समुदाय बनाने के लिए आमंत्रित करता है। यदि आप किसी को आमंत्रित नहीं करते हैं, तो आप प्रतीक्षा सूची के लिए साइन अप कर सकते हैं और हम जल्द ही एक भेज देंगे।।"
-#: src/view/screens/Moderation.tsx:226
+#: src/screens/Moderation/index.tsx:533
msgid "Bluesky will not show your profile and posts to logged-out users. Other apps may not honor this request. This does not make your account private."
msgstr ""
@@ -475,15 +566,24 @@ msgstr ""
#~ msgid "Bluesky.Social"
#~ msgstr "Bluesky.Social"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:53
+msgid "Blur images"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:51
+msgid "Blur images and filter from feeds"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:33
msgid "Books"
msgstr ""
-#: src/view/screens/Settings/index.tsx:859
-msgid "Build version {0} {1}"
-msgstr "Build version {0} {1}"
+#: src/view/screens/Settings/index.tsx:893
+#~ msgid "Build version {0} {1}"
+#~ msgstr "Build version {0} {1}"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:87
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:92
+#: src/view/com/auth/SplashScreen.web.tsx:166
msgid "Business"
msgstr ""
@@ -499,95 +599,113 @@ msgstr ""
msgid "by {0}"
msgstr ""
+#: src/components/LabelingServiceCard/index.tsx:57
+msgid "By {0}"
+msgstr ""
+
#: src/view/com/profile/ProfileSubpageHeader.tsx:161
msgid "by <0/>"
msgstr ""
+#: src/screens/Signup/StepInfo/Policies.tsx:74
+msgid "By creating an account you agree to the {els}."
+msgstr ""
+
#: src/view/com/profile/ProfileSubpageHeader.tsx:159
msgid "by you"
msgstr ""
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:60
-#: src/view/com/util/UserAvatar.tsx:224
-#: src/view/com/util/UserBanner.tsx:40
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:77
msgid "Camera"
msgstr "कैमरा"
-#: src/view/com/modals/AddAppPasswords.tsx:216
+#: src/view/com/modals/AddAppPasswords.tsx:217
msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long."
msgstr "केवल अक्षर, संख्या, रिक्त स्थान, डैश और अंडरस्कोर हो सकते हैं। कम से कम 4 अक्षर लंबा होना चाहिए, लेकिन 32 अक्षरों से अधिक लंबा नहीं होना चाहिए।।"
-#: src/components/Prompt.tsx:91
-#: src/view/com/composer/Composer.tsx:300
-#: src/view/com/composer/Composer.tsx:305
+#: src/components/Menu/index.tsx:213
+#: src/components/Prompt.tsx:113
+#: src/components/Prompt.tsx:115
+#: src/components/TagMenu/index.tsx:268
+#: src/view/com/composer/Composer.tsx:317
+#: src/view/com/composer/Composer.tsx:322
#: src/view/com/modals/ChangeEmail.tsx:218
#: src/view/com/modals/ChangeEmail.tsx:220
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
-#: src/view/com/modals/CreateOrEditList.tsx:355
-#: src/view/com/modals/EditImage.tsx:323
-#: src/view/com/modals/EditProfile.tsx:249
+#: src/view/com/modals/ChangeHandle.tsx:154
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
+#: src/view/com/modals/CreateOrEditList.tsx:356
+#: src/view/com/modals/crop-image/CropImage.web.tsx:138
+#: src/view/com/modals/EditImage.tsx:324
+#: src/view/com/modals/EditProfile.tsx:250
#: src/view/com/modals/InAppBrowserConsent.tsx:78
-#: src/view/com/modals/LinkWarning.tsx:87
-#: src/view/com/modals/Repost.tsx:87
+#: src/view/com/modals/InAppBrowserConsent.tsx:80
+#: src/view/com/modals/LinkWarning.tsx:105
+#: src/view/com/modals/LinkWarning.tsx:107
+#: src/view/com/modals/Repost.tsx:88
#: src/view/com/modals/VerifyEmail.tsx:247
#: src/view/com/modals/VerifyEmail.tsx:253
-#: src/view/com/modals/Waitlist.tsx:142
-#: src/view/screens/Search/Search.tsx:693
-#: src/view/shell/desktop/Search.tsx:238
+#: src/view/screens/Search/Search.tsx:718
+#: src/view/shell/desktop/Search.tsx:239
msgid "Cancel"
msgstr "कैंसिल"
-#: src/view/com/modals/Confirm.tsx:88
-#: src/view/com/modals/Confirm.tsx:91
-#: src/view/com/modals/CreateOrEditList.tsx:360
-#: src/view/com/modals/DeleteAccount.tsx:156
-#: src/view/com/modals/DeleteAccount.tsx:234
+#: src/view/com/modals/CreateOrEditList.tsx:361
+#: src/view/com/modals/DeleteAccount.tsx:155
+#: src/view/com/modals/DeleteAccount.tsx:233
msgctxt "action"
msgid "Cancel"
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:152
-#: src/view/com/modals/DeleteAccount.tsx:230
+#: src/view/com/modals/DeleteAccount.tsx:151
+#: src/view/com/modals/DeleteAccount.tsx:229
msgid "Cancel account deletion"
msgstr "अकाउंट बंद मत करो"
-#: src/view/com/modals/ChangeHandle.tsx:149
+#: src/view/com/modals/ChangeHandle.tsx:150
msgid "Cancel change handle"
msgstr "नाम मत बदलो"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:134
+#: src/view/com/modals/crop-image/CropImage.web.tsx:135
msgid "Cancel image crop"
msgstr "तस्वीर को क्रॉप मत करो"
-#: src/view/com/modals/EditProfile.tsx:244
+#: src/view/com/modals/EditProfile.tsx:245
msgid "Cancel profile editing"
msgstr "प्रोफ़ाइल संपादन मत करो"
-#: src/view/com/modals/Repost.tsx:78
+#: src/view/com/modals/Repost.tsx:79
msgid "Cancel quote post"
msgstr "कोटे पोस्ट मत करो"
#: src/view/com/modals/ListAddRemoveUsers.tsx:87
-#: src/view/shell/desktop/Search.tsx:234
+#: src/view/shell/desktop/Search.tsx:235
msgid "Cancel search"
msgstr "खोज मत करो"
#: src/view/com/modals/Waitlist.tsx:136
-msgid "Cancel waitlist signup"
-msgstr "प्रतीक्षा सूची पंजीकरण मत करो"
+#~ msgid "Cancel waitlist signup"
+#~ msgstr "प्रतीक्षा सूची पंजीकरण मत करो"
+
+#: src/view/com/modals/LinkWarning.tsx:106
+msgid "Cancels opening the linked website"
+msgstr ""
+
+#: src/view/com/modals/VerifyEmail.tsx:152
+msgid "Change"
+msgstr ""
-#: src/view/screens/Settings/index.tsx:334
+#: src/view/screens/Settings/index.tsx:353
msgctxt "action"
msgid "Change"
msgstr "परिवर्तन"
-#: src/view/screens/Settings/index.tsx:696
+#: src/view/screens/Settings/index.tsx:716
msgid "Change handle"
msgstr "हैंडल बदलें"
-#: src/view/com/modals/ChangeHandle.tsx:161
-#: src/view/screens/Settings/index.tsx:705
+#: src/view/com/modals/ChangeHandle.tsx:162
+#: src/view/screens/Settings/index.tsx:727
msgid "Change Handle"
msgstr "हैंडल बदलें"
@@ -595,11 +713,12 @@ msgstr "हैंडल बदलें"
msgid "Change my email"
msgstr "मेरा ईमेल बदलें"
-#: src/view/screens/Settings/index.tsx:732
+#: src/view/screens/Settings/index.tsx:754
msgid "Change password"
msgstr ""
-#: src/view/screens/Settings/index.tsx:741
+#: src/view/com/modals/ChangePassword.tsx:141
+#: src/view/screens/Settings/index.tsx:765
msgid "Change Password"
msgstr ""
@@ -608,8 +727,8 @@ msgid "Change post language to {0}"
msgstr ""
#: src/view/screens/Settings/index.tsx:733
-msgid "Change your Bluesky password"
-msgstr ""
+#~ msgid "Change your Bluesky password"
+#~ msgstr ""
#: src/view/com/modals/ChangeEmail.tsx:109
msgid "Change Your Email"
@@ -628,7 +747,7 @@ msgstr "कुछ अनुशंसित फ़ीड देखें. उन
msgid "Check out some recommended users. Follow them to see similar users."
msgstr "कुछ अनुशंसित उपयोगकर्ताओं की जाँच करें। ऐसे ही उपयोगकर्ता देखने के लिए उनका अनुसरण करें।"
-#: src/view/com/modals/DeleteAccount.tsx:169
+#: src/view/com/modals/DeleteAccount.tsx:168
msgid "Check your inbox for an email with the confirmation code to enter below:"
msgstr "नीचे प्रवेश करने के लिए OTP कोड के साथ एक ईमेल के लिए अपने इनबॉक्स की जाँच करें:"
@@ -637,19 +756,19 @@ msgid "Choose \"Everybody\" or \"Nobody\""
msgstr ""
#: src/view/screens/Settings/index.tsx:697
-msgid "Choose a new Bluesky username or create"
-msgstr ""
+#~ msgid "Choose a new Bluesky username or create"
+#~ msgstr ""
#: src/view/com/auth/server-input/index.tsx:79
msgid "Choose Service"
msgstr "सेवा चुनें"
-#: src/screens/Onboarding/StepFinished.tsx:135
+#: src/screens/Onboarding/StepFinished.tsx:139
msgid "Choose the algorithms that power your custom feeds."
msgstr ""
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:83
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:83
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:85
msgid "Choose the algorithms that power your experience with custom feeds."
msgstr "उन एल्गोरिदम का चयन करें जो कस्टम फीड्स के साथ अपने अनुभव को शक्ति देते हैं।।"
@@ -657,91 +776,111 @@ msgstr "उन एल्गोरिदम का चयन करें जो
#~ msgid "Choose your algorithmic feeds"
#~ msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:103
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:104
msgid "Choose your main feeds"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:215
+#: src/screens/Signup/StepInfo/index.tsx:112
msgid "Choose your password"
msgstr "अपना पासवर्ड चुनें"
-#: src/view/screens/Settings/index.tsx:834
-#: src/view/screens/Settings/index.tsx:835
+#: src/view/screens/Settings/index.tsx:868
msgid "Clear all legacy storage data"
msgstr ""
-#: src/view/screens/Settings/index.tsx:837
+#: src/view/screens/Settings/index.tsx:871
msgid "Clear all legacy storage data (restart after this)"
msgstr ""
-#: src/view/screens/Settings/index.tsx:846
-#: src/view/screens/Settings/index.tsx:847
+#: src/view/screens/Settings/index.tsx:880
msgid "Clear all storage data"
msgstr ""
-#: src/view/screens/Settings/index.tsx:849
+#: src/view/screens/Settings/index.tsx:883
msgid "Clear all storage data (restart after this)"
msgstr ""
#: src/view/com/util/forms/SearchInput.tsx:88
-#: src/view/screens/Search/Search.tsx:674
+#: src/view/screens/Search/Search.tsx:699
msgid "Clear search query"
msgstr "खोज क्वेरी साफ़ करें"
+#: src/view/screens/Settings/index.tsx:869
+msgid "Clears all legacy storage data"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:881
+msgid "Clears all storage data"
+msgstr ""
+
#: src/view/screens/Support.tsx:40
msgid "click here"
msgstr ""
+#: src/components/TagMenu/index.web.tsx:138
+msgid "Click here to open tag menu for {tag}"
+msgstr ""
+
+#: src/components/RichText.tsx:192
+msgid "Click here to open tag menu for #{tag}"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:35
msgid "Climate"
msgstr ""
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
msgid "Close"
msgstr ""
-#: src/components/Dialog/index.web.tsx:78
+#: src/components/Dialog/index.web.tsx:106
+#: src/components/Dialog/index.web.tsx:218
msgid "Close active dialog"
msgstr ""
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:38
+#: src/screens/Login/PasswordUpdatedForm.tsx:38
msgid "Close alert"
msgstr "चेतावनी को बंद करो"
-#: src/view/com/util/BottomSheetCustomBackdrop.tsx:33
+#: src/view/com/util/BottomSheetCustomBackdrop.tsx:36
msgid "Close bottom drawer"
msgstr "बंद करो"
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:26
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:36
msgid "Close image"
msgstr "छवि बंद करें"
-#: src/view/com/lightbox/Lightbox.web.tsx:119
+#: src/view/com/lightbox/Lightbox.web.tsx:129
msgid "Close image viewer"
msgstr "छवि बंद करें"
-#: src/view/shell/index.web.tsx:49
+#: src/view/shell/index.web.tsx:55
msgid "Close navigation footer"
msgstr "नेविगेशन पाद बंद करें"
-#: src/view/shell/index.web.tsx:50
+#: src/components/Menu/index.tsx:207
+#: src/components/TagMenu/index.tsx:262
+msgid "Close this dialog"
+msgstr ""
+
+#: src/view/shell/index.web.tsx:56
msgid "Closes bottom navigation bar"
msgstr ""
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:39
+#: src/screens/Login/PasswordUpdatedForm.tsx:39
msgid "Closes password update alert"
msgstr ""
-#: src/view/com/composer/Composer.tsx:302
+#: src/view/com/composer/Composer.tsx:319
msgid "Closes post composer and discards post draft"
msgstr ""
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:27
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:37
msgid "Closes viewer for header image"
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:317
+#: src/view/com/notifications/FeedItem.tsx:321
msgid "Collapses list of users for a given notification"
msgstr ""
@@ -753,16 +892,20 @@ msgstr ""
msgid "Comics"
msgstr ""
-#: src/Navigation.tsx:227
+#: src/Navigation.tsx:241
#: src/view/screens/CommunityGuidelines.tsx:32
msgid "Community Guidelines"
msgstr "समुदाय दिशानिर्देश"
-#: src/screens/Onboarding/StepFinished.tsx:148
+#: src/screens/Onboarding/StepFinished.tsx:152
msgid "Complete onboarding and start using your account"
msgstr ""
-#: src/view/com/composer/Composer.tsx:417
+#: src/screens/Signup/index.tsx:154
+msgid "Complete the challenge"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:438
msgid "Compose posts up to {MAX_GRAPHEME_LENGTH} characters in length"
msgstr ""
@@ -770,81 +913,112 @@ msgstr ""
msgid "Compose reply"
msgstr "जवाब लिखो"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:67
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:81
msgid "Configure content filtering setting for category: {0}"
msgstr ""
-#: src/components/Prompt.tsx:113
-#: src/view/com/modals/AppealLabel.tsx:98
+#: src/components/moderation/LabelPreference.tsx:81
+msgid "Configure content filtering setting for category: {name}"
+msgstr ""
+
+#: src/components/moderation/LabelPreference.tsx:244
+msgid "Configured in <0>moderation settings0>."
+msgstr ""
+
+#: src/components/Prompt.tsx:153
+#: src/components/Prompt.tsx:156
#: src/view/com/modals/SelfLabel.tsx:154
#: src/view/com/modals/VerifyEmail.tsx:231
#: src/view/com/modals/VerifyEmail.tsx:233
-#: src/view/screens/PreferencesHomeFeed.tsx:308
+#: src/view/screens/PreferencesFollowingFeed.tsx:308
#: src/view/screens/PreferencesThreads.tsx:159
msgid "Confirm"
msgstr "हो गया"
#: src/view/com/modals/Confirm.tsx:75
#: src/view/com/modals/Confirm.tsx:78
-msgctxt "action"
-msgid "Confirm"
-msgstr ""
+#~ msgctxt "action"
+#~ msgid "Confirm"
+#~ msgstr ""
#: src/view/com/modals/ChangeEmail.tsx:193
#: src/view/com/modals/ChangeEmail.tsx:195
msgid "Confirm Change"
msgstr "बदलाव की पुष्टि करें"
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:34
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:35
msgid "Confirm content language settings"
msgstr "सामग्री भाषा सेटिंग्स की पुष्टि करें"
-#: src/view/com/modals/DeleteAccount.tsx:220
+#: src/view/com/modals/DeleteAccount.tsx:219
msgid "Confirm delete account"
msgstr "खाते को हटा दें"
#: src/view/com/modals/ContentFilteringSettings.tsx:156
-msgid "Confirm your age to enable adult content."
+#~ msgid "Confirm your age to enable adult content."
+#~ msgstr ""
+
+#: src/screens/Moderation/index.tsx:301
+msgid "Confirm your age:"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:292
+msgid "Confirm your birthdate"
msgstr ""
#: src/view/com/modals/ChangeEmail.tsx:157
-#: src/view/com/modals/DeleteAccount.tsx:182
+#: src/view/com/modals/DeleteAccount.tsx:175
+#: src/view/com/modals/DeleteAccount.tsx:181
#: src/view/com/modals/VerifyEmail.tsx:165
msgid "Confirmation code"
msgstr "OTP कोड"
#: src/view/com/modals/Waitlist.tsx:120
-msgid "Confirms signing up {email} to the waitlist"
-msgstr ""
+#~ msgid "Confirms signing up {email} to the waitlist"
+#~ msgstr ""
-#: src/view/com/auth/create/CreateAccount.tsx:182
-#: src/view/com/auth/login/LoginForm.tsx:278
+#: src/screens/Login/LoginForm.tsx:248
msgid "Connecting..."
msgstr "कनेक्टिंग ..।"
-#: src/view/com/auth/create/CreateAccount.tsx:202
+#: src/screens/Signup/index.tsx:219
msgid "Contact support"
msgstr ""
-#: src/view/screens/Moderation.tsx:81
-msgid "Content filtering"
-msgstr "सामग्री फ़िल्टरिंग"
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "content"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:18
+msgid "Content Blocked"
+msgstr ""
+
+#: src/view/screens/Moderation.tsx:83
+#~ msgid "Content filtering"
+#~ msgstr "सामग्री फ़िल्टरिंग"
#: src/view/com/modals/ContentFilteringSettings.tsx:44
-msgid "Content Filtering"
-msgstr "सामग्री फ़िल्टरिंग"
+#~ msgid "Content Filtering"
+#~ msgstr "सामग्री फ़िल्टरिंग"
+
+#: src/screens/Moderation/index.tsx:285
+msgid "Content filters"
+msgstr ""
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74
#: src/view/screens/LanguageSettings.tsx:278
msgid "Content Languages"
msgstr "सामग्री भाषा"
-#: src/view/com/modals/ModerationDetails.tsx:65
+#: src/components/moderation/ModerationDetailsDialog.tsx:75
+#: src/lib/moderation/useModerationCauseDescription.ts:75
msgid "Content Not Available"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:33
-#: src/view/com/util/moderation/ScreenHider.tsx:78
+#: src/components/moderation/ModerationDetailsDialog.tsx:46
+#: src/components/moderation/ScreenHider.tsx:99
+#: src/lib/moderation/useGlobalLabelStrings.ts:22
+#: src/lib/moderation/useModerationCauseDescription.ts:38
msgid "Content Warning"
msgstr "सामग्री चेतावनी"
@@ -852,28 +1026,38 @@ msgstr "सामग्री चेतावनी"
msgid "Content warnings"
msgstr "सामग्री चेतावनी"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:170
-#: src/screens/Onboarding/StepFollowingFeed.tsx:153
-#: src/screens/Onboarding/StepInterests/index.tsx:248
-#: src/screens/Onboarding/StepModeration/index.tsx:118
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:108
+#: src/components/Menu/index.web.tsx:84
+msgid "Context menu backdrop, click to close the menu."
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:161
+#: src/screens/Onboarding/StepFollowingFeed.tsx:154
+#: src/screens/Onboarding/StepInterests/index.tsx:252
+#: src/screens/Onboarding/StepModeration/index.tsx:103
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:118
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:96
msgid "Continue"
msgstr "आगे बढ़ें"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:150
-#: src/screens/Onboarding/StepInterests/index.tsx:245
-#: src/screens/Onboarding/StepModeration/index.tsx:115
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:105
+#: src/components/AccountList.tsx:108
+msgid "Continue as {0} (currently signed in)"
+msgstr ""
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:151
+#: src/screens/Onboarding/StepInterests/index.tsx:249
+#: src/screens/Onboarding/StepModeration/index.tsx:100
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:115
+#: src/screens/Signup/index.tsx:198
msgid "Continue to next step"
msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:167
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:158
msgid "Continue to the next step"
msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:191
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:199
msgid "Continue to the next step without following any accounts"
msgstr ""
@@ -881,98 +1065,110 @@ msgstr ""
msgid "Cooking"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:195
-#: src/view/com/modals/InviteCodes.tsx:182
+#: src/view/com/modals/AddAppPasswords.tsx:196
+#: src/view/com/modals/InviteCodes.tsx:183
msgid "Copied"
msgstr "कॉपी कर ली"
-#: src/view/screens/Settings/index.tsx:241
+#: src/view/screens/Settings/index.tsx:251
msgid "Copied build version to clipboard"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:76
-#: src/view/com/modals/InviteCodes.tsx:152
-#: src/view/com/util/forms/PostDropdownBtn.tsx:112
+#: src/view/com/modals/AddAppPasswords.tsx:77
+#: src/view/com/modals/ChangeHandle.tsx:326
+#: src/view/com/modals/InviteCodes.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:158
msgid "Copied to clipboard"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:189
+#: src/view/com/modals/AddAppPasswords.tsx:190
msgid "Copies app password"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:188
+#: src/view/com/modals/AddAppPasswords.tsx:189
msgid "Copy"
msgstr "कॉपी"
-#: src/view/screens/ProfileList.tsx:417
+#: src/view/com/modals/ChangeHandle.tsx:480
+msgid "Copy {0}"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:388
msgid "Copy link to list"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
msgid "Copy link to post"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:294
-msgid "Copy link to profile"
-msgstr ""
+#: src/view/com/profile/ProfileHeader.tsx:295
+#~ msgid "Copy link to profile"
+#~ msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:139
+#: src/view/com/util/forms/PostDropdownBtn.tsx:220
+#: src/view/com/util/forms/PostDropdownBtn.tsx:222
msgid "Copy post text"
msgstr "पोस्ट टेक्स्ट कॉपी करें"
-#: src/Navigation.tsx:232
+#: src/Navigation.tsx:246
#: src/view/screens/CopyrightPolicy.tsx:29
msgid "Copyright Policy"
msgstr "कॉपीराइट नीति"
-#: src/view/screens/ProfileFeed.tsx:96
+#: src/view/screens/ProfileFeed.tsx:103
msgid "Could not load feed"
msgstr "फ़ीड लोड नहीं कर सकता"
-#: src/view/screens/ProfileList.tsx:888
+#: src/view/screens/ProfileList.tsx:907
msgid "Could not load list"
msgstr "सूची लोड नहीं कर सकता"
#: src/view/com/auth/create/Step2.tsx:91
-msgid "Country"
-msgstr ""
+#~ msgid "Country"
+#~ msgstr ""
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:62
-#: src/view/com/auth/SplashScreen.tsx:46
-#: src/view/com/auth/SplashScreen.web.tsx:77
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:65
+#: src/view/com/auth/SplashScreen.tsx:75
+#: src/view/com/auth/SplashScreen.web.tsx:104
msgid "Create a new account"
msgstr "नया खाता बनाएं"
-#: src/view/screens/Settings/index.tsx:384
+#: src/view/screens/Settings/index.tsx:403
msgid "Create a new Bluesky account"
msgstr ""
-#: src/view/com/auth/create/CreateAccount.tsx:122
+#: src/screens/Signup/index.tsx:129
msgid "Create Account"
msgstr "खाता बनाएँ"
-#: src/view/com/modals/AddAppPasswords.tsx:226
+#: src/view/com/modals/AddAppPasswords.tsx:227
msgid "Create App Password"
msgstr ""
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:54
-#: src/view/com/auth/SplashScreen.tsx:43
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:55
+#: src/view/com/auth/SplashScreen.tsx:66
+#: src/view/com/auth/SplashScreen.web.tsx:95
msgid "Create new account"
msgstr "नया खाता बनाएं"
-#: src/view/screens/AppPasswords.tsx:249
+#: src/components/ReportDialog/SelectReportOptionView.tsx:93
+msgid "Create report for {0}"
+msgstr ""
+
+#: src/view/screens/AppPasswords.tsx:246
msgid "Created {0}"
msgstr "बनाया गया {0}"
#: src/view/screens/ProfileFeed.tsx:616
-msgid "Created by <0/>"
-msgstr ""
+#~ msgid "Created by <0/>"
+#~ msgstr ""
#: src/view/screens/ProfileFeed.tsx:614
-msgid "Created by you"
-msgstr ""
+#~ msgid "Created by you"
+#~ msgstr ""
-#: src/view/com/composer/Composer.tsx:448
+#: src/view/com/composer/Composer.tsx:469
msgid "Creates a card with a thumbnail. The card links to {url}"
msgstr ""
@@ -980,16 +1176,17 @@ msgstr ""
msgid "Culture"
msgstr ""
-#: src/view/com/auth/server-input/index.tsx:95
-#: src/view/com/auth/server-input/index.tsx:96
+#: src/view/com/auth/server-input/index.tsx:97
+#: src/view/com/auth/server-input/index.tsx:99
msgid "Custom"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:389
+#: src/view/com/modals/ChangeHandle.tsx:388
msgid "Custom domain"
msgstr "कस्टम डोमेन"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:107
+#: src/view/screens/Feeds.tsx:692
msgid "Custom feeds built by the community bring you new experiences and help you find the content you love."
msgstr ""
@@ -1001,8 +1198,8 @@ msgstr ""
#~ msgid "Danger Zone"
#~ msgstr "खतरा क्षेत्र"
-#: src/view/screens/Settings/index.tsx:485
-#: src/view/screens/Settings/index.tsx:511
+#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:530
msgid "Dark"
msgstr "डार्क मोड"
@@ -1010,33 +1207,49 @@ msgstr "डार्क मोड"
msgid "Dark mode"
msgstr ""
-#: src/view/screens/Settings/index.tsx:498
+#: src/view/screens/Settings/index.tsx:517
msgid "Dark Theme"
msgstr ""
+#: src/screens/Signup/StepInfo/index.tsx:132
+msgid "Date of birth"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:841
+msgid "Debug Moderation"
+msgstr ""
+
#: src/view/screens/Debug.tsx:83
msgid "Debug panel"
msgstr ""
-#: src/view/screens/Settings/index.tsx:772
+#: src/view/com/util/forms/PostDropdownBtn.tsx:319
+#: src/view/screens/AppPasswords.tsx:268
+#: src/view/screens/ProfileList.tsx:613
+msgid "Delete"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:796
msgid "Delete account"
msgstr "खाता हटाएं"
-#: src/view/com/modals/DeleteAccount.tsx:87
+#: src/view/com/modals/DeleteAccount.tsx:86
msgid "Delete Account"
msgstr "खाता हटाएं"
-#: src/view/screens/AppPasswords.tsx:222
-#: src/view/screens/AppPasswords.tsx:242
+#: src/view/screens/AppPasswords.tsx:239
msgid "Delete app password"
msgstr "अप्प पासवर्ड हटाएं"
-#: src/view/screens/ProfileList.tsx:363
-#: src/view/screens/ProfileList.tsx:444
+#: src/view/screens/AppPasswords.tsx:263
+msgid "Delete app password?"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:415
msgid "Delete List"
msgstr "सूची हटाएँ"
-#: src/view/com/modals/DeleteAccount.tsx:223
+#: src/view/com/modals/DeleteAccount.tsx:222
msgid "Delete my account"
msgstr "मेरा खाता हटाएं"
@@ -1044,30 +1257,35 @@ msgstr "मेरा खाता हटाएं"
#~ msgid "Delete my account…"
#~ msgstr "मेरा खाता हटाएं…"
-#: src/view/screens/Settings/index.tsx:784
+#: src/view/screens/Settings/index.tsx:808
msgid "Delete My Account…"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:302
+#: src/view/com/util/forms/PostDropdownBtn.tsx:304
msgid "Delete post"
msgstr "पोस्ट को हटाएं"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:232
+#: src/view/screens/ProfileList.tsx:608
+msgid "Delete this list?"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:314
msgid "Delete this post?"
msgstr "इस पोस्ट को डीलीट करें?"
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:69
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:64
msgid "Deleted"
msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:259
+#: src/view/com/post-thread/PostThread.tsx:305
msgid "Deleted post."
msgstr "यह पोस्ट मिटाई जा चुकी है"
-#: src/view/com/modals/CreateOrEditList.tsx:300
-#: src/view/com/modals/CreateOrEditList.tsx:321
-#: src/view/com/modals/EditProfile.tsx:198
-#: src/view/com/modals/EditProfile.tsx:210
+#: src/view/com/modals/CreateOrEditList.tsx:301
+#: src/view/com/modals/CreateOrEditList.tsx:322
+#: src/view/com/modals/EditProfile.tsx:199
+#: src/view/com/modals/EditProfile.tsx:211
msgid "Description"
msgstr "विवरण"
@@ -1075,23 +1293,35 @@ msgstr "विवरण"
#~ msgid "Developer Tools"
#~ msgstr "डेवलपर उपकरण"
-#: src/view/com/composer/Composer.tsx:211
+#: src/view/com/composer/Composer.tsx:218
msgid "Did you want to say anything?"
msgstr ""
-#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:523
msgid "Dim"
msgstr ""
-#: src/view/com/composer/Composer.tsx:144
+#: src/lib/moderation/useLabelBehaviorDescription.ts:32
+#: src/lib/moderation/useLabelBehaviorDescription.ts:42
+#: src/lib/moderation/useLabelBehaviorDescription.ts:68
+#: src/screens/Moderation/index.tsx:341
+msgid "Disabled"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:511
msgid "Discard"
msgstr ""
-#: src/view/com/composer/Composer.tsx:138
-msgid "Discard draft"
-msgstr "ड्राफ्ट हटाएं"
+#: src/view/com/composer/Composer.tsx:145
+#~ msgid "Discard draft"
+#~ msgstr "ड्राफ्ट हटाएं"
+
+#: src/view/com/composer/Composer.tsx:508
+msgid "Discard draft?"
+msgstr ""
-#: src/view/screens/Moderation.tsx:207
+#: src/screens/Moderation/index.tsx:518
+#: src/screens/Moderation/index.tsx:522
msgid "Discourage apps from showing my account to logged-out users"
msgstr ""
@@ -1101,27 +1331,65 @@ msgid "Discover new custom feeds"
msgstr ""
#: src/view/screens/Feeds.tsx:473
-msgid "Discover new feeds"
-msgstr "नए फ़ीड की खोज करें"
+#~ msgid "Discover new feeds"
+#~ msgstr "नए फ़ीड की खोज करें"
+
+#: src/view/screens/Feeds.tsx:689
+msgid "Discover New Feeds"
+msgstr ""
-#: src/view/com/modals/EditProfile.tsx:192
+#: src/view/com/modals/EditProfile.tsx:193
msgid "Display name"
msgstr "नाम"
-#: src/view/com/modals/EditProfile.tsx:180
+#: src/view/com/modals/EditProfile.tsx:181
msgid "Display Name"
msgstr "प्रदर्शन का नाम"
-#: src/view/com/modals/ChangeHandle.tsx:487
+#: src/view/com/modals/ChangeHandle.tsx:397
+msgid "DNS Panel"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:39
+msgid "Does not include nudity."
+msgstr ""
+
+#: src/screens/Signup/StepHandle.tsx:104
+msgid "Doesn't begin or end with a hyphen"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "Domain Value"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:488
msgid "Domain verified!"
msgstr "डोमेन सत्यापित!"
-#: src/view/com/auth/create/Step1.tsx:166
-msgid "Don't have an invite code?"
-msgstr ""
+#: src/view/com/auth/create/Step1.tsx:170
+#~ msgid "Don't have an invite code?"
+#~ msgstr ""
+
+#: src/components/dialogs/BirthDateSettings.tsx:119
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/components/forms/DateField/index.tsx:74
+#: src/components/forms/DateField/index.tsx:80
+#: src/view/com/auth/server-input/index.tsx:169
+#: src/view/com/auth/server-input/index.tsx:170
+#: src/view/com/modals/AddAppPasswords.tsx:227
+#: src/view/com/modals/AltImage.tsx:140
+#: src/view/com/modals/crop-image/CropImage.web.tsx:153
+#: src/view/com/modals/InviteCodes.tsx:81
+#: src/view/com/modals/InviteCodes.tsx:124
+#: src/view/com/modals/ListAddRemoveUsers.tsx:142
+#: src/view/screens/PreferencesFollowingFeed.tsx:311
+#: src/view/screens/Settings/ExportCarDialog.tsx:94
+#: src/view/screens/Settings/ExportCarDialog.tsx:96
+msgid "Done"
+msgstr "खत्म"
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86
-#: src/view/com/modals/EditImage.tsx:333
+#: src/view/com/modals/EditImage.tsx:334
#: src/view/com/modals/ListAddRemoveUsers.tsx:144
#: src/view/com/modals/SelfLabel.tsx:157
#: src/view/com/modals/Threadgate.tsx:129
@@ -1133,72 +1401,68 @@ msgctxt "action"
msgid "Done"
msgstr ""
-#: src/view/com/auth/server-input/index.tsx:165
-#: src/view/com/auth/server-input/index.tsx:166
-#: src/view/com/modals/AddAppPasswords.tsx:226
-#: src/view/com/modals/AltImage.tsx:139
-#: src/view/com/modals/ContentFilteringSettings.tsx:88
-#: src/view/com/modals/ContentFilteringSettings.tsx:96
-#: src/view/com/modals/crop-image/CropImage.web.tsx:152
-#: src/view/com/modals/InviteCodes.tsx:80
-#: src/view/com/modals/InviteCodes.tsx:123
-#: src/view/com/modals/ListAddRemoveUsers.tsx:142
-#: src/view/screens/PreferencesHomeFeed.tsx:311
-#: src/view/screens/Settings/ExportCarDialog.tsx:93
-#: src/view/screens/Settings/ExportCarDialog.tsx:94
-msgid "Done"
-msgstr "खत्म"
-
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:42
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:43
msgid "Done{extraText}"
msgstr "खत्म {extraText}"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:45
-msgid "Double tap to sign in"
-msgstr ""
+#: src/view/com/auth/login/ChooseAccountForm.tsx:46
+#~ msgid "Double tap to sign in"
+#~ msgstr ""
#: src/view/screens/Settings/index.tsx:755
-msgid "Download Bluesky account data (repository)"
-msgstr ""
+#~ msgid "Download Bluesky account data (repository)"
+#~ msgstr ""
#: src/view/screens/Settings/ExportCarDialog.tsx:59
#: src/view/screens/Settings/ExportCarDialog.tsx:63
msgid "Download CAR file"
msgstr ""
-#: src/view/com/composer/text-input/TextInput.web.tsx:247
+#: src/view/com/composer/text-input/TextInput.web.tsx:249
msgid "Drop to add images"
msgstr ""
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:111
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:120
msgid "Due to Apple policies, adult content can only be enabled on the web after completing sign up."
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:185
+#: src/view/com/modals/ChangeHandle.tsx:258
+msgid "e.g. alice"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:186
msgid "e.g. Alice Roberts"
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:203
+#: src/view/com/modals/ChangeHandle.tsx:380
+msgid "e.g. alice.com"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:204
msgid "e.g. Artist, dog-lover, and avid reader."
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:283
-msgid "e.g. Great Posters"
+#: src/lib/moderation/useGlobalLabelStrings.ts:43
+msgid "E.g. artistic nudes."
msgstr ""
#: src/view/com/modals/CreateOrEditList.tsx:284
+msgid "e.g. Great Posters"
+msgstr ""
+
+#: src/view/com/modals/CreateOrEditList.tsx:285
msgid "e.g. Spammers"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:312
+#: src/view/com/modals/CreateOrEditList.tsx:313
msgid "e.g. The posters who never miss."
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:313
+#: src/view/com/modals/CreateOrEditList.tsx:314
msgid "e.g. Users that repeatedly reply with ads."
msgstr ""
-#: src/view/com/modals/InviteCodes.tsx:96
+#: src/view/com/modals/InviteCodes.tsx:97
msgid "Each code works once. You'll receive more invite codes periodically."
msgstr "प्रत्येक कोड एक बार काम करता है। आपको समय-समय पर अधिक आमंत्रण कोड प्राप्त होंगे।"
@@ -1207,50 +1471,58 @@ msgctxt "action"
msgid "Edit"
msgstr ""
+#: src/view/com/util/UserAvatar.tsx:299
+#: src/view/com/util/UserBanner.tsx:85
+msgid "Edit avatar"
+msgstr ""
+
#: src/view/com/composer/photos/Gallery.tsx:144
-#: src/view/com/modals/EditImage.tsx:207
+#: src/view/com/modals/EditImage.tsx:208
msgid "Edit image"
msgstr "छवि संपादित करें"
-#: src/view/screens/ProfileList.tsx:432
+#: src/view/screens/ProfileList.tsx:403
msgid "Edit list details"
msgstr "सूची विवरण संपादित करें"
-#: src/view/com/modals/CreateOrEditList.tsx:250
+#: src/view/com/modals/CreateOrEditList.tsx:251
msgid "Edit Moderation List"
msgstr ""
-#: src/Navigation.tsx:242
+#: src/Navigation.tsx:256
#: src/view/screens/Feeds.tsx:434
#: src/view/screens/SavedFeeds.tsx:84
msgid "Edit My Feeds"
msgstr "मेरी फ़ीड संपादित करें"
-#: src/view/com/modals/EditProfile.tsx:152
+#: src/view/com/modals/EditProfile.tsx:153
msgid "Edit my profile"
msgstr "मेरी प्रोफ़ाइल संपादित करें"
-#: src/view/com/profile/ProfileHeader.tsx:417
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:171
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:168
msgid "Edit profile"
msgstr "मेरी प्रोफ़ाइल संपादित करें"
-#: src/view/com/profile/ProfileHeader.tsx:422
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:174
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:171
msgid "Edit Profile"
msgstr "मेरी प्रोफ़ाइल संपादित करें"
-#: src/view/screens/Feeds.tsx:356
+#: src/view/com/home/HomeHeaderLayout.web.tsx:62
+#: src/view/screens/Feeds.tsx:355
msgid "Edit Saved Feeds"
msgstr "एडिट सेव्ड फीड"
-#: src/view/com/modals/CreateOrEditList.tsx:245
+#: src/view/com/modals/CreateOrEditList.tsx:246
msgid "Edit User List"
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:193
+#: src/view/com/modals/EditProfile.tsx:194
msgid "Edit your display name"
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:211
+#: src/view/com/modals/EditProfile.tsx:212
msgid "Edit your profile description"
msgstr ""
@@ -1258,17 +1530,12 @@ msgstr ""
msgid "Education"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:195
-#: src/view/com/auth/create/Step2.tsx:194
-#: src/view/com/auth/create/Step2.tsx:269
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:156
+#: src/screens/Signup/StepInfo/index.tsx:80
#: src/view/com/modals/ChangeEmail.tsx:141
-#: src/view/com/modals/Waitlist.tsx:88
msgid "Email"
msgstr "ईमेल"
-#: src/view/com/auth/create/Step1.tsx:186
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:147
+#: src/screens/Login/ForgotPasswordForm.tsx:99
msgid "Email address"
msgstr "ईमेल"
@@ -1285,69 +1552,95 @@ msgstr "ईमेल अपडेट किया गया"
msgid "Email verified"
msgstr ""
-#: src/view/screens/Settings/index.tsx:312
+#: src/view/screens/Settings/index.tsx:331
msgid "Email:"
msgstr "ईमेल:"
-#: src/view/com/modals/EmbedConsent.tsx:113
+#: src/components/dialogs/EmbedConsent.tsx:101
msgid "Enable {0} only"
msgstr ""
-#: src/view/com/modals/ContentFilteringSettings.tsx:167
+#: src/screens/Moderation/index.tsx:329
+msgid "Enable adult content"
+msgstr ""
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:94
msgid "Enable Adult Content"
msgstr ""
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:76
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:77
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:79
msgid "Enable adult content in your feeds"
msgstr ""
-#: src/view/com/modals/EmbedConsent.tsx:97
-msgid "Enable External Media"
+#: src/components/dialogs/EmbedConsent.tsx:82
+#: src/components/dialogs/EmbedConsent.tsx:89
+msgid "Enable external media"
msgstr ""
+#: src/view/com/modals/EmbedConsent.tsx:97
+#~ msgid "Enable External Media"
+#~ msgstr ""
+
#: src/view/screens/PreferencesExternalEmbeds.tsx:75
msgid "Enable media players for"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:147
+#: src/view/screens/PreferencesFollowingFeed.tsx:147
msgid "Enable this setting to only see replies between people you follow."
msgstr "इस सेटिंग को केवल उन लोगों के बीच जवाब देखने में सक्षम करें जिन्हें आप फॉलो करते हैं।।"
-#: src/view/screens/Profile.tsx:455
+#: src/components/dialogs/EmbedConsent.tsx:94
+msgid "Enable this source only"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:339
+msgid "Enabled"
+msgstr ""
+
+#: src/screens/Profile/Sections/Feed.tsx:84
msgid "End of feed"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:166
+#: src/view/com/modals/AddAppPasswords.tsx:167
msgid "Enter a name for this App Password"
msgstr ""
+#: src/screens/Login/SetNewPasswordForm.tsx:139
+msgid "Enter a password"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:99
+#: src/components/dialogs/MutedWords.tsx:100
+msgid "Enter a word or tag"
+msgstr ""
+
#: src/view/com/modals/VerifyEmail.tsx:105
msgid "Enter Confirmation Code"
msgstr ""
-#: src/view/com/modals/ChangePassword.tsx:151
+#: src/view/com/modals/ChangePassword.tsx:153
msgid "Enter the code you received to change your password."
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:371
+#: src/view/com/modals/ChangeHandle.tsx:370
msgid "Enter the domain you want to use"
msgstr "आप जिस डोमेन का उपयोग करना चाहते हैं उसे दर्ज करें"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:107
+#: src/screens/Login/ForgotPasswordForm.tsx:119
msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password."
msgstr "वह ईमेल दर्ज करें जिसका उपयोग आपने अपना खाता बनाने के लिए किया था। हम आपको एक \"reset code\" भेजेंगे ताकि आप एक नया पासवर्ड सेट कर सकें।"
-#: src/view/com/auth/create/Step1.tsx:247
-#: src/view/com/modals/BirthDateSettings.tsx:74
+#: src/components/dialogs/BirthDateSettings.tsx:108
msgid "Enter your birth date"
msgstr ""
#: src/view/com/modals/Waitlist.tsx:78
-msgid "Enter your email"
-msgstr ""
+#~ msgid "Enter your email"
+#~ msgstr ""
-#: src/view/com/auth/create/Step1.tsx:191
+#: src/screens/Login/ForgotPasswordForm.tsx:105
+#: src/screens/Signup/StepInfo/index.tsx:91
msgid "Enter your email address"
msgstr "अपना ईमेल पता दर्ज करें"
@@ -1360,14 +1653,18 @@ msgid "Enter your new email address below."
msgstr "नीचे अपना नया ईमेल पता दर्ज करें।।"
#: src/view/com/auth/create/Step2.tsx:188
-msgid "Enter your phone number"
-msgstr ""
+#~ msgid "Enter your phone number"
+#~ msgstr ""
-#: src/view/com/auth/login/Login.tsx:99
+#: src/screens/Login/index.tsx:101
msgid "Enter your username and password"
msgstr "अपने यूज़रनेम और पासवर्ड दर्ज करें"
-#: src/view/screens/Search/Search.tsx:109
+#: src/screens/Signup/StepCaptcha/index.tsx:49
+msgid "Error receiving captcha response."
+msgstr ""
+
+#: src/view/screens/Search/Search.tsx:111
msgid "Error:"
msgstr ""
@@ -1375,24 +1672,36 @@ msgstr ""
msgid "Everybody"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:150
+#: src/lib/moderation/useReportOptions.ts:66
+msgid "Excessive mentions or replies"
+msgstr ""
+
+#: src/view/com/modals/DeleteAccount.tsx:230
+msgid "Exits account deletion process"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:151
msgid "Exits handle change process"
msgstr ""
-#: src/view/com/lightbox/Lightbox.web.tsx:120
+#: src/view/com/modals/crop-image/CropImage.web.tsx:136
+msgid "Exits image cropping process"
+msgstr ""
+
+#: src/view/com/lightbox/Lightbox.web.tsx:130
msgid "Exits image view"
msgstr ""
#: src/view/com/modals/ListAddRemoveUsers.tsx:88
-#: src/view/shell/desktop/Search.tsx:235
+#: src/view/shell/desktop/Search.tsx:236
msgid "Exits inputting search query"
msgstr ""
#: src/view/com/modals/Waitlist.tsx:138
-msgid "Exits signing up for waitlist with {email}"
-msgstr ""
+#~ msgid "Exits signing up for waitlist with {email}"
+#~ msgstr ""
-#: src/view/com/lightbox/Lightbox.web.tsx:163
+#: src/view/com/lightbox/Lightbox.web.tsx:183
msgid "Expand alt text"
msgstr "ऑल्ट टेक्स्ट"
@@ -1401,44 +1710,53 @@ msgstr "ऑल्ट टेक्स्ट"
msgid "Expand or collapse the full post you are replying to"
msgstr ""
-#: src/view/screens/Settings/index.tsx:753
+#: src/lib/moderation/useGlobalLabelStrings.ts:47
+msgid "Explicit or potentially disturbing media."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:35
+msgid "Explicit sexual images."
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:777
msgid "Export my data"
msgstr ""
#: src/view/screens/Settings/ExportCarDialog.tsx:44
-#: src/view/screens/Settings/index.tsx:764
+#: src/view/screens/Settings/index.tsx:788
msgid "Export My Data"
msgstr ""
-#: src/view/com/modals/EmbedConsent.tsx:64
+#: src/components/dialogs/EmbedConsent.tsx:55
+#: src/components/dialogs/EmbedConsent.tsx:59
msgid "External Media"
msgstr ""
-#: src/view/com/modals/EmbedConsent.tsx:75
+#: src/components/dialogs/EmbedConsent.tsx:71
#: src/view/screens/PreferencesExternalEmbeds.tsx:66
msgid "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."
msgstr ""
-#: src/Navigation.tsx:258
+#: src/Navigation.tsx:275
#: src/view/screens/PreferencesExternalEmbeds.tsx:52
-#: src/view/screens/Settings/index.tsx:657
+#: src/view/screens/Settings/index.tsx:677
msgid "External Media Preferences"
msgstr ""
-#: src/view/screens/Settings/index.tsx:648
+#: src/view/screens/Settings/index.tsx:668
msgid "External media settings"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:115
-#: src/view/com/modals/AddAppPasswords.tsx:119
+#: src/view/com/modals/AddAppPasswords.tsx:116
+#: src/view/com/modals/AddAppPasswords.tsx:120
msgid "Failed to create app password."
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:206
+#: src/view/com/modals/CreateOrEditList.tsx:207
msgid "Failed to create the list. Check your internet connection and try again."
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:88
+#: src/view/com/util/forms/PostDropdownBtn.tsx:125
msgid "Failed to delete post, please try again"
msgstr ""
@@ -1447,34 +1765,39 @@ msgstr ""
msgid "Failed to load recommended feeds"
msgstr "अनुशंसित फ़ीड लोड करने में विफल"
-#: src/Navigation.tsx:192
+#: src/view/com/lightbox/Lightbox.tsx:83
+msgid "Failed to save image: {0}"
+msgstr ""
+
+#: src/Navigation.tsx:196
msgid "Feed"
msgstr ""
-#: src/view/com/feeds/FeedSourceCard.tsx:229
+#: src/view/com/feeds/FeedSourceCard.tsx:218
msgid "Feed by {0}"
msgstr ""
-#: src/view/screens/Feeds.tsx:631
+#: src/view/screens/Feeds.tsx:605
msgid "Feed offline"
msgstr "फ़ीड ऑफ़लाइन है"
#: src/view/com/feeds/FeedPage.tsx:143
-msgid "Feed Preferences"
-msgstr "फ़ीड प्राथमिकता"
+#~ msgid "Feed Preferences"
+#~ msgstr "फ़ीड प्राथमिकता"
-#: src/view/shell/desktop/RightNav.tsx:69
-#: src/view/shell/Drawer.tsx:311
+#: src/view/shell/desktop/RightNav.tsx:61
+#: src/view/shell/Drawer.tsx:314
msgid "Feedback"
msgstr "प्रतिक्रिया"
-#: src/Navigation.tsx:442
-#: src/view/screens/Feeds.tsx:548
-#: src/view/screens/Profile.tsx:184
-#: src/view/shell/bottom-bar/BottomBar.tsx:181
-#: src/view/shell/desktop/LeftNav.tsx:342
-#: src/view/shell/Drawer.tsx:476
-#: src/view/shell/Drawer.tsx:477
+#: src/Navigation.tsx:464
+#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:524
+#: src/view/screens/Profile.tsx:194
+#: src/view/shell/bottom-bar/BottomBar.tsx:191
+#: src/view/shell/desktop/LeftNav.tsx:346
+#: src/view/shell/Drawer.tsx:479
+#: src/view/shell/Drawer.tsx:480
msgid "Feeds"
msgstr "सभी फ़ीड"
@@ -1494,11 +1817,19 @@ msgstr "सामग्री को व्यवस्थित करने
msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information."
msgstr "फ़ीड कस्टम एल्गोरिदम हैं जिन्हें उपयोगकर्ता थोड़ी कोडिंग विशेषज्ञता के साथ बनाते हैं। <0/> अधिक जानकारी के लिए."
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:70
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:80
msgid "Feeds can be topical as well!"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:151
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "File Contents"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:66
+msgid "Filter from feeds"
+msgstr ""
+
+#: src/screens/Onboarding/StepFinished.tsx:155
msgid "Finalizing"
msgstr ""
@@ -1508,21 +1839,25 @@ msgstr ""
msgid "Find accounts to follow"
msgstr ""
-#: src/view/screens/Search/Search.tsx:439
+#: src/view/screens/Search/Search.tsx:442
msgid "Find users on Bluesky"
msgstr ""
-#: src/view/screens/Search/Search.tsx:437
+#: src/view/screens/Search/Search.tsx:440
msgid "Find users with the search tool on the right"
msgstr ""
-#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:155
msgid "Finding similar accounts..."
msgstr "मिलते-जुलते खाते ढूँढना"
+#: src/view/screens/PreferencesFollowingFeed.tsx:111
+msgid "Fine-tune the content you see on your Following feed."
+msgstr ""
+
#: src/view/screens/PreferencesHomeFeed.tsx:111
-msgid "Fine-tune the content you see on your home screen."
-msgstr "अपने मुख्य फ़ीड की स्क्रीन पर दिखाई देने वाली सामग्री को ठीक करें।।"
+#~ msgid "Fine-tune the content you see on your home screen."
+#~ msgstr "अपने मुख्य फ़ीड की स्क्रीन पर दिखाई देने वाली सामग्री को ठीक करें।।"
#: src/view/screens/PreferencesThreads.tsx:60
msgid "Fine-tune the discussion threads."
@@ -1532,41 +1867,52 @@ msgstr "चर्चा धागे को ठीक-ट्यून करे
msgid "Fitness"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:131
+#: src/screens/Onboarding/StepFinished.tsx:135
msgid "Flexible"
msgstr ""
-#: src/view/com/modals/EditImage.tsx:115
+#: src/view/com/modals/EditImage.tsx:116
msgid "Flip horizontal"
msgstr ""
-#: src/view/com/modals/EditImage.tsx:120
-#: src/view/com/modals/EditImage.tsx:287
+#: src/view/com/modals/EditImage.tsx:121
+#: src/view/com/modals/EditImage.tsx:288
msgid "Flip vertically"
msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:181
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:512
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:189
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:236
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:146
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
msgid "Follow"
msgstr "फॉलो"
-#: src/view/com/profile/FollowButton.tsx:64
+#: src/view/com/profile/FollowButton.tsx:69
msgctxt "action"
msgid "Follow"
msgstr ""
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:58
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:122
-#: src/view/com/profile/ProfileHeader.tsx:503
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:221
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:128
msgid "Follow {0}"
msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:179
+#: src/view/com/profile/ProfileMenu.tsx:242
+#: src/view/com/profile/ProfileMenu.tsx:253
+msgid "Follow Account"
+msgstr ""
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:187
msgid "Follow All"
msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:174
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:144
+msgid "Follow Back"
+msgstr ""
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:182
msgid "Follow selected accounts and continue to the next step"
msgstr ""
@@ -1574,7 +1920,7 @@ msgstr ""
msgid "Follow some users to get started. We can recommend you more users based on who you find interesting."
msgstr "आरंभ करने के लिए कुछ उपयोगकर्ताओं का अनुसरण करें. आपको कौन दिलचस्प लगता है, इसके आधार पर हम आपको और अधिक उपयोगकर्ताओं की अनुशंसा कर सकते हैं।"
-#: src/view/com/profile/ProfileCard.tsx:194
+#: src/view/com/profile/ProfileCard.tsx:216
msgid "Followed by {0}"
msgstr ""
@@ -1582,29 +1928,43 @@ msgstr ""
msgid "Followed users"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:154
+#: src/view/screens/PreferencesFollowingFeed.tsx:154
msgid "Followed users only"
msgstr "केवल वे यूजर को फ़ॉलो किया गया"
-#: src/view/com/notifications/FeedItem.tsx:166
+#: src/view/com/notifications/FeedItem.tsx:170
msgid "followed you"
msgstr ""
+#: src/view/com/profile/ProfileFollowers.tsx:104
#: src/view/screens/ProfileFollowers.tsx:25
msgid "Followers"
msgstr "यह यूजर आपका फ़ोलो करता है"
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:494
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:234
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:149
+#: src/view/com/profile/ProfileFollows.tsx:104
#: src/view/screens/ProfileFollows.tsx:25
msgid "Following"
msgstr "फोल्लोविंग"
-#: src/view/com/profile/ProfileHeader.tsx:148
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:93
msgid "Following {0}"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:545
+#: src/view/screens/Settings/index.tsx:553
+msgid "Following feed preferences"
+msgstr ""
+
+#: src/Navigation.tsx:262
+#: src/view/com/home/HomeHeaderLayout.web.tsx:50
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:84
+#: src/view/screens/PreferencesFollowingFeed.tsx:104
+#: src/view/screens/Settings/index.tsx:562
+msgid "Following Feed Preferences"
+msgstr ""
+
+#: src/screens/Profile/Header/Handle.tsx:24
msgid "Follows you"
msgstr "यह यूजर आपका फ़ोलो करता है"
@@ -1616,28 +1976,45 @@ msgstr ""
msgid "Food"
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:111
+#: src/view/com/modals/DeleteAccount.tsx:110
msgid "For security reasons, we'll need to send a confirmation code to your email address."
msgstr "सुरक्षा कारणों के लिए, हमें आपके ईमेल पते पर एक OTP कोड भेजने की आवश्यकता होगी।।"
-#: src/view/com/modals/AddAppPasswords.tsx:209
+#: src/view/com/modals/AddAppPasswords.tsx:210
msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one."
msgstr "सुरक्षा कारणों के लिए, आप इसे फिर से देखने में सक्षम नहीं होंगे। यदि आप इस पासवर्ड को खो देते हैं, तो आपको एक नया उत्पन्न करना होगा।।"
-#: src/view/com/auth/login/LoginForm.tsx:241
-msgid "Forgot"
-msgstr "भूल"
+#: src/view/com/auth/login/LoginForm.tsx:244
+#~ msgid "Forgot"
+#~ msgstr "भूल"
-#: src/view/com/auth/login/LoginForm.tsx:238
-msgid "Forgot password"
-msgstr "पासवर्ड भूल गए"
+#: src/view/com/auth/login/LoginForm.tsx:241
+#~ msgid "Forgot password"
+#~ msgstr "पासवर्ड भूल गए"
-#: src/view/com/auth/login/Login.tsx:127
-#: src/view/com/auth/login/Login.tsx:143
+#: src/screens/Login/index.tsx:129
+#: src/screens/Login/index.tsx:144
msgid "Forgot Password"
msgstr "पासवर्ड भूल गए"
-#: src/view/com/posts/FeedItem.tsx:189
+#: src/screens/Login/LoginForm.tsx:201
+msgid "Forgot password?"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:212
+msgid "Forgot?"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:52
+msgid "Frequently Posts Unwanted Content"
+msgstr ""
+
+#: src/screens/Hashtag.tsx:109
+#: src/screens/Hashtag.tsx:149
+msgid "From @{sanitizedAuthor}"
+msgstr ""
+
+#: src/view/com/posts/FeedItem.tsx:179
msgctxt "from-feed"
msgid "From <0/>"
msgstr ""
@@ -1651,100 +2028,144 @@ msgstr "गैलरी"
msgid "Get Started"
msgstr "प्रारंभ करें"
-#: src/view/com/auth/LoggedOut.tsx:81
+#: src/lib/moderation/useReportOptions.ts:37
+msgid "Glaring violations of law or terms of service"
+msgstr ""
+
+#: src/components/moderation/ScreenHider.tsx:151
+#: src/components/moderation/ScreenHider.tsx:160
#: src/view/com/auth/LoggedOut.tsx:82
-#: src/view/com/util/moderation/ScreenHider.tsx:123
-#: src/view/shell/desktop/LeftNav.tsx:104
+#: src/view/com/auth/LoggedOut.tsx:83
+#: src/view/screens/NotFound.tsx:55
+#: src/view/screens/ProfileFeed.tsx:112
+#: src/view/screens/ProfileList.tsx:916
+#: src/view/shell/desktop/LeftNav.tsx:108
msgid "Go back"
msgstr "वापस जाओ"
-#: src/view/screens/ProfileFeed.tsx:105
-#: src/view/screens/ProfileFeed.tsx:110
-#: src/view/screens/ProfileList.tsx:897
-#: src/view/screens/ProfileList.tsx:902
+#: src/components/Error.tsx:91
+#: src/screens/Profile/ErrorState.tsx:62
+#: src/screens/Profile/ErrorState.tsx:66
+#: src/view/screens/NotFound.tsx:54
+#: src/view/screens/ProfileFeed.tsx:117
+#: src/view/screens/ProfileList.tsx:921
msgid "Go Back"
msgstr "वापस जाओ"
-#: src/screens/Onboarding/Layout.tsx:104
-#: src/screens/Onboarding/Layout.tsx:193
+#: src/components/ReportDialog/SelectReportOptionView.tsx:73
+#: src/components/ReportDialog/SubmitView.tsx:104
+#: src/screens/Onboarding/Layout.tsx:102
+#: src/screens/Onboarding/Layout.tsx:191
+#: src/screens/Signup/index.tsx:173
msgid "Go back to previous step"
msgstr ""
-#: src/view/screens/Search/Search.tsx:724
-#: src/view/shell/desktop/Search.tsx:262
+#: src/view/screens/NotFound.tsx:55
+msgid "Go home"
+msgstr ""
+
+#: src/view/screens/NotFound.tsx:54
+msgid "Go Home"
+msgstr ""
+
+#: src/view/screens/Search/Search.tsx:749
+#: src/view/shell/desktop/Search.tsx:263
msgid "Go to @{queryMaybeHandle}"
msgstr ""
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:189
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:218
-#: src/view/com/auth/login/LoginForm.tsx:288
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:195
-#: src/view/com/modals/ChangePassword.tsx:165
+#: src/screens/Login/ForgotPasswordForm.tsx:172
+#: src/view/com/modals/ChangePassword.tsx:167
msgid "Go to next"
msgstr "अगला"
-#: src/view/com/modals/ChangeHandle.tsx:265
+#: src/lib/moderation/useGlobalLabelStrings.ts:46
+msgid "Graphic Media"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:266
msgid "Handle"
msgstr "हैंडल"
-#: src/view/com/auth/create/CreateAccount.tsx:197
+#: src/lib/moderation/useReportOptions.ts:32
+msgid "Harassment, trolling, or intolerance"
+msgstr ""
+
+#: src/Navigation.tsx:282
+msgid "Hashtag"
+msgstr ""
+
+#: src/components/RichText.tsx:188
+#~ msgid "Hashtag: {tag}"
+#~ msgstr ""
+
+#: src/components/RichText.tsx:191
+msgid "Hashtag: #{tag}"
+msgstr ""
+
+#: src/screens/Signup/index.tsx:217
msgid "Having trouble?"
msgstr ""
-#: src/view/shell/desktop/RightNav.tsx:98
-#: src/view/shell/Drawer.tsx:321
+#: src/view/shell/desktop/RightNav.tsx:90
+#: src/view/shell/Drawer.tsx:324
msgid "Help"
msgstr "सहायता"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:132
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:140
msgid "Here are some accounts for you to follow"
msgstr ""
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:79
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:89
msgid "Here are some popular topical feeds. You can choose to follow as many as you like."
msgstr ""
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:74
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:84
msgid "Here are some topical feeds based on your interests: {interestsText}. You can choose to follow as many as you like."
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:153
+#: src/view/com/modals/AddAppPasswords.tsx:154
msgid "Here is your app password."
msgstr "यहां आपका ऐप पासवर्ड है."
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:41
-#: src/view/com/modals/ContentFilteringSettings.tsx:251
-#: src/view/com/util/moderation/ContentHider.tsx:105
-#: src/view/com/util/moderation/PostHider.tsx:108
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:134
+#: src/components/moderation/PostHider.tsx:107
+#: src/lib/moderation/useLabelBehaviorDescription.ts:15
+#: src/lib/moderation/useLabelBehaviorDescription.ts:20
+#: src/lib/moderation/useLabelBehaviorDescription.ts:25
+#: src/lib/moderation/useLabelBehaviorDescription.ts:30
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:52
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:76
+#: src/view/com/util/forms/PostDropdownBtn.tsx:328
msgid "Hide"
msgstr "इसे छिपाएं"
-#: src/view/com/modals/ContentFilteringSettings.tsx:224
-#: src/view/com/notifications/FeedItem.tsx:325
+#: src/view/com/notifications/FeedItem.tsx:329
msgctxt "action"
msgid "Hide"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:187
+#: src/view/com/util/forms/PostDropdownBtn.tsx:276
+#: src/view/com/util/forms/PostDropdownBtn.tsx:278
msgid "Hide post"
msgstr ""
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:67
+#: src/components/moderation/PostHider.tsx:64
msgid "Hide the content"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:191
+#: src/view/com/util/forms/PostDropdownBtn.tsx:325
msgid "Hide this post?"
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:315
+#: src/view/com/notifications/FeedItem.tsx:319
msgid "Hide user list"
msgstr "उपयोगकर्ता सूची छुपाएँ"
-#: src/view/com/profile/ProfileHeader.tsx:486
-msgid "Hides posts from {0} in your feed"
-msgstr ""
+#: src/view/com/profile/ProfileHeader.tsx:487
+#~ msgid "Hides posts from {0} in your feed"
+#~ msgstr ""
#: src/view/com/posts/FeedErrorMessage.tsx:111
msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue."
@@ -1766,11 +2187,19 @@ msgstr ""
msgid "Hmm, we're having trouble finding this feed. It may have been deleted."
msgstr ""
-#: src/Navigation.tsx:432
-#: src/view/shell/bottom-bar/BottomBar.tsx:137
-#: src/view/shell/desktop/LeftNav.tsx:306
-#: src/view/shell/Drawer.tsx:398
-#: src/view/shell/Drawer.tsx:399
+#: src/screens/Moderation/index.tsx:59
+msgid "Hmmmm, it seems we're having trouble loading this data. See below for more details. If this issue persists, please contact us."
+msgstr ""
+
+#: src/screens/Profile/ErrorState.tsx:31
+msgid "Hmmmm, we couldn't load that moderation service."
+msgstr ""
+
+#: src/Navigation.tsx:454
+#: src/view/shell/bottom-bar/BottomBar.tsx:147
+#: src/view/shell/desktop/LeftNav.tsx:310
+#: src/view/shell/Drawer.tsx:401
+#: src/view/shell/Drawer.tsx:402
msgid "Home"
msgstr "होम फीड"
@@ -1778,11 +2207,17 @@ msgstr "होम फीड"
#: src/view/com/pager/FeedsTabBarMobile.tsx:123
#: src/view/screens/PreferencesHomeFeed.tsx:104
#: src/view/screens/Settings/index.tsx:543
-msgid "Home Feed Preferences"
-msgstr "होम फ़ीड प्राथमिकताएं"
+#~ msgid "Home Feed Preferences"
+#~ msgstr "होम फ़ीड प्राथमिकताएं"
+
+#: src/view/com/modals/ChangeHandle.tsx:420
+msgid "Host:"
+msgstr ""
-#: src/view/com/auth/create/Step1.tsx:78
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:120
+#: src/screens/Login/ForgotPasswordForm.tsx:89
+#: src/screens/Login/LoginForm.tsx:134
+#: src/screens/Signup/StepInfo/index.tsx:40
+#: src/view/com/modals/ChangeHandle.tsx:281
msgid "Hosting provider"
msgstr "होस्टिंग प्रदाता"
@@ -1798,11 +2233,11 @@ msgstr "मेरे पास एक OTP कोड है"
msgid "I have a confirmation code"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:283
+#: src/view/com/modals/ChangeHandle.tsx:284
msgid "I have my own domain"
msgstr "मेरे पास अपना डोमेन है"
-#: src/view/com/lightbox/Lightbox.web.tsx:165
+#: src/view/com/lightbox/Lightbox.web.tsx:185
msgid "If alt text is long, toggles alt text expanded state"
msgstr ""
@@ -1810,84 +2245,108 @@ msgstr ""
msgid "If none are selected, suitable for all ages."
msgstr "यदि किसी को चुना जाता है, तो सभी उम्र के लिए उपयुक्त है।।"
-#: src/view/com/modals/ChangePassword.tsx:146
+#: src/screens/Signup/StepInfo/Policies.tsx:83
+msgid "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."
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:610
+msgid "If you delete this list, you won't be able to recover it."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:316
+msgid "If you remove this post, you won't be able to recover it."
+msgstr ""
+
+#: src/view/com/modals/ChangePassword.tsx:148
msgid "If you want to change your password, we will send you a code to verify that this is your account."
msgstr ""
+#: src/lib/moderation/useReportOptions.ts:36
+msgid "Illegal and Urgent"
+msgstr ""
+
#: src/view/com/util/images/Gallery.tsx:38
msgid "Image"
msgstr ""
-#: src/view/com/modals/AltImage.tsx:120
+#: src/view/com/modals/AltImage.tsx:121
msgid "Image alt text"
msgstr "छवि alt पाठ"
#: src/view/com/util/UserAvatar.tsx:311
#: src/view/com/util/UserBanner.tsx:118
-msgid "Image options"
-msgstr "छवि विकल्प"
+#~ msgid "Image options"
+#~ msgstr "छवि विकल्प"
+
+#: src/lib/moderation/useReportOptions.ts:47
+msgid "Impersonation or false claims about identity or affiliation"
+msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:138
+#: src/screens/Login/SetNewPasswordForm.tsx:127
msgid "Input code sent to your email for password reset"
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:184
+#: src/view/com/modals/DeleteAccount.tsx:183
msgid "Input confirmation code for account deletion"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:196
-msgid "Input email for Bluesky account"
-msgstr ""
+#: src/view/com/auth/create/Step1.tsx:177
+#~ msgid "Input email for Bluesky account"
+#~ msgstr ""
-#: src/view/com/auth/create/Step1.tsx:154
-msgid "Input invite code to proceed"
-msgstr ""
+#: src/view/com/auth/create/Step1.tsx:151
+#~ msgid "Input invite code to proceed"
+#~ msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/AddAppPasswords.tsx:181
msgid "Input name for app password"
msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:162
+#: src/screens/Login/SetNewPasswordForm.tsx:151
msgid "Input new password"
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:203
+#: src/view/com/modals/DeleteAccount.tsx:202
msgid "Input password for account deletion"
msgstr ""
#: src/view/com/auth/create/Step2.tsx:196
-msgid "Input phone number for SMS verification"
-msgstr ""
+#~ msgid "Input phone number for SMS verification"
+#~ msgstr ""
-#: src/view/com/auth/login/LoginForm.tsx:230
+#: src/screens/Login/LoginForm.tsx:195
msgid "Input the password tied to {identifier}"
msgstr ""
-#: src/view/com/auth/login/LoginForm.tsx:197
+#: src/screens/Login/LoginForm.tsx:168
msgid "Input the username or email address you used at signup"
msgstr ""
#: src/view/com/auth/create/Step2.tsx:271
-msgid "Input the verification code we have texted to you"
-msgstr ""
+#~ msgid "Input the verification code we have texted to you"
+#~ msgstr ""
#: src/view/com/modals/Waitlist.tsx:90
-msgid "Input your email to get on the Bluesky waitlist"
-msgstr ""
+#~ msgid "Input your email to get on the Bluesky waitlist"
+#~ msgstr ""
-#: src/view/com/auth/login/LoginForm.tsx:229
+#: src/screens/Login/LoginForm.tsx:194
msgid "Input your password"
msgstr ""
-#: src/view/com/auth/create/Step3.tsx:42
+#: src/view/com/modals/ChangeHandle.tsx:389
+msgid "Input your preferred hosting provider"
+msgstr ""
+
+#: src/screens/Signup/StepHandle.tsx:62
msgid "Input your user handle"
msgstr ""
-#: src/view/com/post-thread/PostThreadItem.tsx:225
+#: src/view/com/post-thread/PostThreadItem.tsx:221
msgid "Invalid or unsupported post record"
msgstr ""
-#: src/view/com/auth/login/LoginForm.tsx:113
+#: src/screens/Login/LoginForm.tsx:114
msgid "Invalid username or password"
msgstr "अवैध उपयोगकर्ता नाम या पासवर्ड"
@@ -1895,20 +2354,19 @@ msgstr "अवैध उपयोगकर्ता नाम या पास
#~ msgid "Invite"
#~ msgstr "आमंत्रण भेजो"
-#: src/view/com/modals/InviteCodes.tsx:93
+#: src/view/com/modals/InviteCodes.tsx:94
msgid "Invite a Friend"
msgstr "एक दोस्त को आमंत्रित करें"
-#: src/view/com/auth/create/Step1.tsx:144
-#: src/view/com/auth/create/Step1.tsx:153
+#: src/screens/Signup/StepInfo/index.tsx:58
msgid "Invite code"
msgstr "आमंत्रण कोड"
-#: src/view/com/auth/create/state.ts:199
+#: src/screens/Signup/state.ts:278
msgid "Invite code not accepted. Check that you input it correctly and try again."
msgstr ""
-#: src/view/com/modals/InviteCodes.tsx:170
+#: src/view/com/modals/InviteCodes.tsx:171
msgid "Invite codes: {0} available"
msgstr ""
@@ -1916,83 +2374,120 @@ msgstr ""
#~ msgid "Invite codes: {invitesAvailable} available"
#~ msgstr ""
-#: src/view/com/modals/InviteCodes.tsx:169
+#: src/view/com/modals/InviteCodes.tsx:170
msgid "Invite codes: 1 available"
msgstr ""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:64
+#: src/screens/Onboarding/StepFollowingFeed.tsx:65
msgid "It shows posts from the people you follow as they happen."
msgstr ""
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:99
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:104
+#: src/view/com/auth/SplashScreen.web.tsx:172
msgid "Jobs"
msgstr ""
#: src/view/com/modals/Waitlist.tsx:67
-msgid "Join the waitlist"
-msgstr "प्रतीक्षा सूची में शामिल हों"
+#~ msgid "Join the waitlist"
+#~ msgstr "प्रतीक्षा सूची में शामिल हों"
-#: src/view/com/auth/create/Step1.tsx:170
#: src/view/com/auth/create/Step1.tsx:174
-msgid "Join the waitlist."
-msgstr "प्रतीक्षा सूची में शामिल हों।।"
+#: src/view/com/auth/create/Step1.tsx:178
+#~ msgid "Join the waitlist."
+#~ msgstr "प्रतीक्षा सूची में शामिल हों।।"
#: src/view/com/modals/Waitlist.tsx:128
-msgid "Join Waitlist"
-msgstr "वेटरलिस्ट में शामिल हों"
+#~ msgid "Join Waitlist"
+#~ msgstr "वेटरलिस्ट में शामिल हों"
#: src/screens/Onboarding/index.tsx:24
msgid "Journalism"
msgstr ""
+#: src/components/moderation/LabelsOnMe.tsx:59
+msgid "label has been placed on this {labelTarget}"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:144
+msgid "Labeled by {0}."
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:142
+msgid "Labeled by the author."
+msgstr ""
+
+#: src/view/screens/Profile.tsx:188
+msgid "Labels"
+msgstr ""
+
+#: src/screens/Profile/Sections/Labels.tsx:142
+msgid "Labels are annotations on users and content. They can be used to hide, warn, and categorize the network."
+msgstr ""
+
+#: src/components/moderation/LabelsOnMe.tsx:61
+msgid "labels have been placed on this {labelTarget}"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:62
+msgid "Labels on your account"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:64
+msgid "Labels on your content"
+msgstr ""
+
#: src/view/com/composer/select-language/SelectLangBtn.tsx:104
msgid "Language selection"
msgstr "अपनी भाषा चुने"
-#: src/view/screens/Settings/index.tsx:594
+#: src/view/screens/Settings/index.tsx:614
msgid "Language settings"
msgstr ""
-#: src/Navigation.tsx:140
+#: src/Navigation.tsx:144
#: src/view/screens/LanguageSettings.tsx:89
msgid "Language Settings"
msgstr "भाषा सेटिंग्स"
-#: src/view/screens/Settings/index.tsx:603
+#: src/view/screens/Settings/index.tsx:623
msgid "Languages"
msgstr "भाषा"
#: src/view/com/auth/create/StepHeader.tsx:20
-msgid "Last step!"
-msgstr ""
+#~ msgid "Last step!"
+#~ msgstr ""
#: src/view/com/util/moderation/ContentHider.tsx:103
-msgid "Learn more"
-msgstr ""
+#~ msgid "Learn more"
+#~ msgstr ""
-#: src/view/com/util/moderation/PostAlerts.tsx:47
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:65
-#: src/view/com/util/moderation/ScreenHider.tsx:104
+#: src/components/moderation/ScreenHider.tsx:136
msgid "Learn More"
msgstr "अधिक जानें"
-#: src/view/com/util/moderation/ContentHider.tsx:85
-#: src/view/com/util/moderation/PostAlerts.tsx:40
-#: src/view/com/util/moderation/PostHider.tsx:78
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:49
-#: src/view/com/util/moderation/ScreenHider.tsx:101
+#: src/components/moderation/ContentHider.tsx:65
+#: src/components/moderation/ContentHider.tsx:128
+msgid "Learn more about the moderation applied to this content."
+msgstr ""
+
+#: src/components/moderation/PostHider.tsx:85
+#: src/components/moderation/ScreenHider.tsx:125
msgid "Learn more about this warning"
msgstr "इस चेतावनी के बारे में अधिक जानें"
-#: src/view/screens/Moderation.tsx:243
+#: src/screens/Moderation/index.tsx:549
msgid "Learn more about what is public on Bluesky."
msgstr ""
+#: src/components/moderation/ContentHider.tsx:152
+msgid "Learn more."
+msgstr ""
+
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82
msgid "Leave them all unchecked to see any language."
msgstr "उन्हें किसी भी भाषा को देखने के लिए अनचेक छोड़ दें।।"
-#: src/view/com/modals/LinkWarning.tsx:51
+#: src/view/com/modals/LinkWarning.tsx:65
msgid "Leaving Bluesky"
msgstr "लीविंग Bluesky"
@@ -2000,63 +2495,72 @@ msgstr "लीविंग Bluesky"
msgid "left to go."
msgstr ""
-#: src/view/screens/Settings/index.tsx:278
+#: src/view/screens/Settings/index.tsx:296
msgid "Legacy storage cleared, you need to restart the app now."
msgstr ""
-#: src/view/com/auth/login/Login.tsx:128
-#: src/view/com/auth/login/Login.tsx:144
+#: src/screens/Login/index.tsx:130
+#: src/screens/Login/index.tsx:145
msgid "Let's get your password reset!"
msgstr "चलो अपना पासवर्ड रीसेट करें!"
-#: src/screens/Onboarding/StepFinished.tsx:151
+#: src/screens/Onboarding/StepFinished.tsx:155
msgid "Let's go!"
msgstr ""
#: src/view/com/util/UserAvatar.tsx:248
#: src/view/com/util/UserBanner.tsx:62
-msgid "Library"
-msgstr "चित्र पुस्तकालय"
+#~ msgid "Library"
+#~ msgstr "चित्र पुस्तकालय"
-#: src/view/screens/Settings/index.tsx:479
+#: src/view/screens/Settings/index.tsx:498
msgid "Light"
msgstr "लाइट मोड"
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Like"
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:591
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:258
+#: src/view/screens/ProfileFeed.tsx:573
msgid "Like this feed"
msgstr "इस फ़ीड को लाइक करो"
-#: src/Navigation.tsx:197
+#: src/components/LikesDialog.tsx:87
+#: src/Navigation.tsx:201
+#: src/Navigation.tsx:206
msgid "Liked by"
msgstr "इन यूजर ने लाइक किया है"
+#: src/screens/Profile/ProfileLabelerLikedBy.tsx:29
#: src/view/screens/PostLikedBy.tsx:27
#: src/view/screens/ProfileFeedLikedBy.tsx:27
msgid "Liked By"
msgstr ""
-#: src/view/com/feeds/FeedSourceCard.tsx:277
+#: src/view/com/feeds/FeedSourceCard.tsx:268
msgid "Liked by {0} {1}"
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:606
+#: src/components/LabelingServiceCard/index.tsx:72
+msgid "Liked by {count} {0}"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:278
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:292
+#: src/view/screens/ProfileFeed.tsx:588
msgid "Liked by {likeCount} {0}"
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:170
+#: src/view/com/notifications/FeedItem.tsx:174
msgid "liked your custom feed"
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:155
+#: src/view/com/notifications/FeedItem.tsx:159
msgid "liked your post"
msgstr ""
-#: src/view/screens/Profile.tsx:183
+#: src/view/screens/Profile.tsx:193
msgid "Likes"
msgstr ""
@@ -2064,67 +2568,68 @@ msgstr ""
msgid "Likes on this post"
msgstr ""
-#: src/Navigation.tsx:166
+#: src/Navigation.tsx:170
msgid "List"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:261
+#: src/view/com/modals/CreateOrEditList.tsx:262
msgid "List Avatar"
msgstr "सूची अवतार"
-#: src/view/screens/ProfileList.tsx:323
+#: src/view/screens/ProfileList.tsx:311
msgid "List blocked"
msgstr ""
-#: src/view/com/feeds/FeedSourceCard.tsx:231
+#: src/view/com/feeds/FeedSourceCard.tsx:220
msgid "List by {0}"
msgstr ""
-#: src/view/screens/ProfileList.tsx:377
+#: src/view/screens/ProfileList.tsx:355
msgid "List deleted"
msgstr ""
-#: src/view/screens/ProfileList.tsx:282
+#: src/view/screens/ProfileList.tsx:283
msgid "List muted"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:275
+#: src/view/com/modals/CreateOrEditList.tsx:276
msgid "List Name"
msgstr "सूची का नाम"
-#: src/view/screens/ProfileList.tsx:342
+#: src/view/screens/ProfileList.tsx:325
msgid "List unblocked"
msgstr ""
-#: src/view/screens/ProfileList.tsx:301
+#: src/view/screens/ProfileList.tsx:297
msgid "List unmuted"
msgstr ""
-#: src/Navigation.tsx:110
-#: src/view/screens/Profile.tsx:185
-#: src/view/shell/desktop/LeftNav.tsx:379
-#: src/view/shell/Drawer.tsx:492
-#: src/view/shell/Drawer.tsx:493
+#: src/Navigation.tsx:114
+#: src/view/screens/Profile.tsx:189
+#: src/view/screens/Profile.tsx:195
+#: src/view/shell/desktop/LeftNav.tsx:383
+#: src/view/shell/Drawer.tsx:495
+#: src/view/shell/Drawer.tsx:496
msgid "Lists"
msgstr "सूची"
-#: src/view/com/post-thread/PostThread.tsx:276
-#: src/view/com/post-thread/PostThread.tsx:284
-msgid "Load more posts"
-msgstr "अधिक पोस्ट लोड करें"
+#: src/view/com/post-thread/PostThread.tsx:333
+#: src/view/com/post-thread/PostThread.tsx:341
+#~ msgid "Load more posts"
+#~ msgstr "अधिक पोस्ट लोड करें"
#: src/view/screens/Notifications.tsx:159
msgid "Load new notifications"
msgstr "नई सूचनाएं लोड करें"
-#: src/view/com/feeds/FeedPage.tsx:190
-#: src/view/screens/Profile.tsx:440
-#: src/view/screens/ProfileFeed.tsx:494
-#: src/view/screens/ProfileList.tsx:680
+#: src/screens/Profile/Sections/Feed.tsx:70
+#: src/view/com/feeds/FeedPage.tsx:138
+#: src/view/screens/ProfileFeed.tsx:496
+#: src/view/screens/ProfileList.tsx:695
msgid "Load new posts"
msgstr "नई पोस्ट लोड करें"
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:99
msgid "Loading..."
msgstr ""
@@ -2132,7 +2637,7 @@ msgstr ""
#~ msgid "Local dev server"
#~ msgstr "स्थानीय देव सर्वर"
-#: src/Navigation.tsx:207
+#: src/Navigation.tsx:221
msgid "Log"
msgstr ""
@@ -2143,19 +2648,35 @@ msgstr ""
msgid "Log out"
msgstr ""
-#: src/view/screens/Moderation.tsx:136
+#: src/screens/Moderation/index.tsx:442
msgid "Logged-out visibility"
msgstr ""
-#: src/view/com/auth/login/ChooseAccountForm.tsx:133
+#: src/components/AccountList.tsx:54
msgid "Login to account that is not listed"
msgstr "उस खाते में लॉग इन करें जो सूचीबद्ध नहीं है"
-#: src/view/com/modals/LinkWarning.tsx:65
+#: src/screens/Login/SetNewPasswordForm.tsx:116
+msgid "Looks like XXXXX-XXXXX"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:79
msgid "Make sure this is where you intend to go!"
msgstr "यह सुनिश्चित करने के लिए कि आप कहाँ जाना चाहते हैं!"
-#: src/view/screens/Profile.tsx:182
+#: src/components/dialogs/MutedWords.tsx:82
+msgid "Manage your muted words and tags"
+msgstr ""
+
+#: src/view/com/auth/create/Step2.tsx:118
+#~ msgid "May not be longer than 253 characters"
+#~ msgstr ""
+
+#: src/view/com/auth/create/Step2.tsx:109
+#~ msgid "May only contain letters and numbers"
+#~ msgstr ""
+
+#: src/view/screens/Profile.tsx:192
msgid "Media"
msgstr ""
@@ -2167,115 +2688,178 @@ msgstr ""
msgid "Mentioned users"
msgstr ""
-#: src/view/com/util/ViewHeader.tsx:81
-#: src/view/screens/Search/Search.tsx:623
+#: src/view/com/util/ViewHeader.tsx:87
+#: src/view/screens/Search/Search.tsx:648
msgid "Menu"
msgstr "मेनू"
-#: src/view/com/posts/FeedErrorMessage.tsx:197
+#: src/view/com/posts/FeedErrorMessage.tsx:192
msgid "Message from server: {0}"
msgstr ""
-#: src/Navigation.tsx:115
-#: src/view/screens/Moderation.tsx:64
-#: src/view/screens/Settings/index.tsx:625
-#: src/view/shell/desktop/LeftNav.tsx:397
-#: src/view/shell/Drawer.tsx:511
-#: src/view/shell/Drawer.tsx:512
+#: src/lib/moderation/useReportOptions.ts:45
+msgid "Misleading Account"
+msgstr ""
+
+#: src/Navigation.tsx:119
+#: src/screens/Moderation/index.tsx:104
+#: src/view/screens/Settings/index.tsx:645
+#: src/view/shell/desktop/LeftNav.tsx:401
+#: src/view/shell/Drawer.tsx:514
+#: src/view/shell/Drawer.tsx:515
msgid "Moderation"
msgstr "मॉडरेशन"
-#: src/view/com/lists/ListCard.tsx:92
+#: src/components/moderation/ModerationDetailsDialog.tsx:112
+msgid "Moderation details"
+msgstr ""
+
+#: src/view/com/lists/ListCard.tsx:93
#: src/view/com/modals/UserAddRemoveLists.tsx:206
msgid "Moderation list by {0}"
msgstr ""
-#: src/view/screens/ProfileList.tsx:774
+#: src/view/screens/ProfileList.tsx:789
msgid "Moderation list by <0/>"
msgstr ""
-#: src/view/com/lists/ListCard.tsx:90
+#: src/view/com/lists/ListCard.tsx:91
#: src/view/com/modals/UserAddRemoveLists.tsx:204
-#: src/view/screens/ProfileList.tsx:772
+#: src/view/screens/ProfileList.tsx:787
msgid "Moderation list by you"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:197
+#: src/view/com/modals/CreateOrEditList.tsx:198
msgid "Moderation list created"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:183
+#: src/view/com/modals/CreateOrEditList.tsx:184
msgid "Moderation list updated"
msgstr ""
-#: src/view/screens/Moderation.tsx:95
+#: src/screens/Moderation/index.tsx:243
msgid "Moderation lists"
msgstr "मॉडरेशन सूचियाँ"
-#: src/Navigation.tsx:120
+#: src/Navigation.tsx:124
#: src/view/screens/ModerationModlists.tsx:58
msgid "Moderation Lists"
msgstr ""
-#: src/view/screens/Settings/index.tsx:619
+#: src/view/screens/Settings/index.tsx:639
msgid "Moderation settings"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:35
+#: src/Navigation.tsx:216
+msgid "Moderation states"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:215
+msgid "Moderation tools"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:48
+#: src/lib/moderation/useModerationCauseDescription.ts:40
msgid "Moderator has chosen to set a general warning on the content."
msgstr ""
-#: src/view/shell/desktop/Feeds.tsx:63
+#: src/view/com/post-thread/PostThreadItem.tsx:541
+msgid "More"
+msgstr ""
+
+#: src/view/shell/desktop/Feeds.tsx:65
msgid "More feeds"
msgstr "अधिक फ़ीड"
-#: src/view/com/profile/ProfileHeader.tsx:522
-#: src/view/screens/ProfileFeed.tsx:362
-#: src/view/screens/ProfileList.tsx:616
+#: src/view/screens/ProfileList.tsx:599
msgid "More options"
msgstr "अधिक विकल्प"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:270
-msgid "More post options"
-msgstr "पोस्ट विकल्प"
+#: src/view/com/util/forms/PostDropdownBtn.tsx:315
+#~ msgid "More post options"
+#~ msgstr "पोस्ट विकल्प"
#: src/view/screens/PreferencesThreads.tsx:82
msgid "Most-liked replies first"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:326
+#: src/view/com/auth/create/Step2.tsx:122
+#~ msgid "Must be at least 3 characters"
+#~ msgstr ""
+
+#: src/components/TagMenu/index.tsx:249
+msgid "Mute"
+msgstr ""
+
+#: src/components/TagMenu/index.web.tsx:105
+msgid "Mute {truncatedTag}"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:279
+#: src/view/com/profile/ProfileMenu.tsx:286
msgid "Mute Account"
msgstr "खाता म्यूट करें"
-#: src/view/screens/ProfileList.tsx:543
+#: src/view/screens/ProfileList.tsx:518
msgid "Mute accounts"
msgstr "खातों को म्यूट करें"
-#: src/view/screens/ProfileList.tsx:490
+#: src/components/TagMenu/index.tsx:209
+msgid "Mute all {displayTag} posts"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:211
+#~ msgid "Mute all {tag} posts"
+#~ msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:148
+msgid "Mute in tags only"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:133
+msgid "Mute in text & tags"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:461
+#: src/view/screens/ProfileList.tsx:624
msgid "Mute list"
msgstr ""
-#: src/view/screens/ProfileList.tsx:274
+#: src/view/screens/ProfileList.tsx:619
msgid "Mute these accounts?"
msgstr "इन खातों को म्यूट करें?"
-#: src/view/screens/ProfileList.tsx:278
-msgid "Mute this List"
+#: src/view/screens/ProfileList.tsx:279
+#~ msgid "Mute this List"
+#~ msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:126
+msgid "Mute this word in post text and tags"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/components/dialogs/MutedWords.tsx:141
+msgid "Mute this word in tags only"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:257
msgid "Mute thread"
msgstr "थ्रेड म्यूट करें"
-#: src/view/com/lists/ListCard.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:267
+#: src/view/com/util/forms/PostDropdownBtn.tsx:269
+msgid "Mute words & tags"
+msgstr ""
+
+#: src/view/com/lists/ListCard.tsx:102
msgid "Muted"
msgstr ""
-#: src/view/screens/Moderation.tsx:109
+#: src/screens/Moderation/index.tsx:255
msgid "Muted accounts"
msgstr "म्यूट किए गए खाते"
-#: src/Navigation.tsx:125
+#: src/Navigation.tsx:129
#: src/view/screens/ModerationMutedAccounts.tsx:107
msgid "Muted Accounts"
msgstr "म्यूट किए गए खाते"
@@ -2284,15 +2868,24 @@ msgstr "म्यूट किए गए खाते"
msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private."
msgstr "म्यूट किए गए खातों की पोस्ट आपके फ़ीड और आपकी सूचनाओं से हटा दी जाती हैं। म्यूट पूरी तरह से निजी हैं."
-#: src/view/screens/ProfileList.tsx:276
+#: src/lib/moderation/useModerationCauseDescription.ts:85
+msgid "Muted by \"{0}\""
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:231
+msgid "Muted words & tags"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:621
msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them."
msgstr "म्यूट करना निजी है. म्यूट किए गए खाते आपके साथ इंटरैक्ट कर सकते हैं, लेकिन आप उनकी पोस्ट नहीं देखेंगे या उनसे सूचनाएं प्राप्त नहीं करेंगे।"
-#: src/view/com/modals/BirthDateSettings.tsx:56
+#: src/components/dialogs/BirthDateSettings.tsx:35
+#: src/components/dialogs/BirthDateSettings.tsx:38
msgid "My Birthday"
msgstr "जन्मदिन"
-#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:663
msgid "My Feeds"
msgstr "मेरी फ़ीड"
@@ -2300,32 +2893,40 @@ msgstr "मेरी फ़ीड"
msgid "My Profile"
msgstr "मेरी प्रोफाइल"
-#: src/view/screens/Settings/index.tsx:582
+#: src/view/screens/Settings/index.tsx:596
+msgid "My saved feeds"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:602
msgid "My Saved Feeds"
msgstr "मेरी फ़ीड"
#: src/view/com/auth/server-input/index.tsx:118
-msgid "my-server.com"
-msgstr ""
+#~ msgid "my-server.com"
+#~ msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:179
-#: src/view/com/modals/CreateOrEditList.tsx:290
+#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/CreateOrEditList.tsx:291
msgid "Name"
msgstr "नाम"
-#: src/view/com/modals/CreateOrEditList.tsx:145
+#: src/view/com/modals/CreateOrEditList.tsx:146
msgid "Name is required"
msgstr ""
+#: src/lib/moderation/useReportOptions.ts:57
+#: src/lib/moderation/useReportOptions.ts:78
+#: src/lib/moderation/useReportOptions.ts:86
+msgid "Name or Description Violates Community Standards"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:25
msgid "Nature"
msgstr ""
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:190
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:219
-#: src/view/com/auth/login/LoginForm.tsx:289
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:196
-#: src/view/com/modals/ChangePassword.tsx:166
+#: src/screens/Login/ForgotPasswordForm.tsx:173
+#: src/screens/Login/LoginForm.tsx:254
+#: src/view/com/modals/ChangePassword.tsx:168
msgid "Navigates to the next screen"
msgstr ""
@@ -2333,20 +2934,32 @@ msgstr ""
msgid "Navigates to your profile"
msgstr ""
+#: src/components/ReportDialog/SelectReportOptionView.tsx:122
+msgid "Need to report a copyright violation?"
+msgstr ""
+
#: src/view/com/modals/EmbedConsent.tsx:107
#: src/view/com/modals/EmbedConsent.tsx:123
-msgid "Never load embeds from {0}"
-msgstr ""
+#~ msgid "Never load embeds from {0}"
+#~ msgstr ""
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:72
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:72
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:74
msgid "Never lose access to your followers and data."
msgstr "अपने फ़ॉलोअर्स और डेटा तक पहुंच कभी न खोएं।"
-#: src/screens/Onboarding/StepFinished.tsx:119
+#: src/screens/Onboarding/StepFinished.tsx:123
msgid "Never lose access to your followers or data."
msgstr ""
+#: src/components/dialogs/MutedWords.tsx:293
+#~ msgid "Nevermind"
+#~ msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:519
+msgid "Nevermind, create a handle for me"
+msgstr ""
+
#: src/view/screens/Lists.tsx:76
msgctxt "action"
msgid "New"
@@ -2356,39 +2969,39 @@ msgstr ""
msgid "New"
msgstr "नया"
-#: src/view/com/modals/CreateOrEditList.tsx:252
+#: src/view/com/modals/CreateOrEditList.tsx:253
msgid "New Moderation List"
msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:150
+#: src/view/com/modals/ChangePassword.tsx:212
msgid "New password"
msgstr ""
-#: src/view/com/modals/ChangePassword.tsx:215
+#: src/view/com/modals/ChangePassword.tsx:217
msgid "New Password"
msgstr ""
-#: src/view/com/feeds/FeedPage.tsx:201
+#: src/view/com/feeds/FeedPage.tsx:149
msgctxt "action"
msgid "New post"
msgstr ""
-#: src/view/screens/Feeds.tsx:581
+#: src/view/screens/Feeds.tsx:555
#: src/view/screens/Notifications.tsx:168
-#: src/view/screens/Profile.tsx:382
-#: src/view/screens/ProfileFeed.tsx:432
-#: src/view/screens/ProfileList.tsx:195
-#: src/view/screens/ProfileList.tsx:223
-#: src/view/shell/desktop/LeftNav.tsx:248
+#: src/view/screens/Profile.tsx:452
+#: src/view/screens/ProfileFeed.tsx:434
+#: src/view/screens/ProfileList.tsx:199
+#: src/view/screens/ProfileList.tsx:227
+#: src/view/shell/desktop/LeftNav.tsx:252
msgid "New post"
msgstr "नई पोस्ट"
-#: src/view/shell/desktop/LeftNav.tsx:258
+#: src/view/shell/desktop/LeftNav.tsx:262
msgctxt "action"
msgid "New Post"
msgstr "नई पोस्ट"
-#: src/view/com/modals/CreateOrEditList.tsx:247
+#: src/view/com/modals/CreateOrEditList.tsx:248
msgid "New User List"
msgstr ""
@@ -2400,15 +3013,16 @@ msgstr ""
msgid "News"
msgstr ""
-#: src/view/com/auth/create/CreateAccount.tsx:161
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:182
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:192
-#: src/view/com/auth/login/LoginForm.tsx:291
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:187
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:198
+#: src/screens/Login/ForgotPasswordForm.tsx:143
+#: src/screens/Login/ForgotPasswordForm.tsx:150
+#: src/screens/Login/LoginForm.tsx:253
+#: src/screens/Login/LoginForm.tsx:260
+#: src/screens/Login/SetNewPasswordForm.tsx:174
+#: src/screens/Login/SetNewPasswordForm.tsx:180
+#: src/screens/Signup/index.tsx:205
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79
-#: src/view/com/modals/ChangePassword.tsx:251
#: src/view/com/modals/ChangePassword.tsx:253
+#: src/view/com/modals/ChangePassword.tsx:255
msgid "Next"
msgstr "अगला"
@@ -2417,48 +3031,61 @@ msgctxt "action"
msgid "Next"
msgstr ""
-#: src/view/com/lightbox/Lightbox.web.tsx:149
+#: src/view/com/lightbox/Lightbox.web.tsx:169
msgid "Next image"
msgstr "अगली फोटो"
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:200
-#: src/view/screens/PreferencesHomeFeed.tsx:235
-#: src/view/screens/PreferencesHomeFeed.tsx:272
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:200
+#: src/view/screens/PreferencesFollowingFeed.tsx:235
+#: src/view/screens/PreferencesFollowingFeed.tsx:272
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "No"
msgstr "नहीं"
-#: src/view/screens/ProfileFeed.tsx:584
-#: src/view/screens/ProfileList.tsx:754
+#: src/view/screens/ProfileFeed.tsx:562
+#: src/view/screens/ProfileList.tsx:769
msgid "No description"
msgstr "कोई विवरण नहीं"
-#: src/view/com/profile/ProfileHeader.tsx:169
+#: src/view/com/modals/ChangeHandle.tsx:405
+msgid "No DNS Panel"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:118
msgid "No longer following {0}"
msgstr ""
+#: src/screens/Signup/StepHandle.tsx:114
+msgid "No longer than 253 characters"
+msgstr ""
+
#: src/view/com/notifications/Feed.tsx:109
msgid "No notifications yet!"
msgstr ""
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:97
-#: src/view/com/composer/text-input/web/Autocomplete.tsx:191
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:101
+#: src/view/com/composer/text-input/web/Autocomplete.tsx:195
msgid "No result"
msgstr ""
-#: src/view/screens/Feeds.tsx:524
+#: src/components/Lists.tsx:183
+msgid "No results found"
+msgstr ""
+
+#: src/view/screens/Feeds.tsx:495
msgid "No results found for \"{query}\""
msgstr "\"{query}\" के लिए कोई परिणाम नहीं मिला"
#: src/view/com/modals/ListAddRemoveUsers.tsx:127
-#: src/view/screens/Search/Search.tsx:280
-#: src/view/screens/Search/Search.tsx:308
+#: src/view/screens/Search/Search.tsx:283
+#: src/view/screens/Search/Search.tsx:311
msgid "No results found for {query}"
msgstr "{query} के लिए कोई परिणाम नहीं मिला\""
-#: src/view/com/modals/EmbedConsent.tsx:129
+#: src/components/dialogs/EmbedConsent.tsx:105
+#: src/components/dialogs/EmbedConsent.tsx:112
msgid "No thanks"
msgstr ""
@@ -2466,12 +3093,21 @@ msgstr ""
msgid "Nobody"
msgstr ""
+#: src/components/LikedByList.tsx:79
+#: src/components/LikesDialog.tsx:99
+msgid "Nobody has liked this yet. Maybe you should be the first!"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:42
+msgid "Non-sexual Nudity"
+msgstr ""
+
#: src/view/com/modals/SelfLabel.tsx:135
msgid "Not Applicable."
msgstr "लागू नहीं।"
-#: src/Navigation.tsx:105
-#: src/view/screens/Profile.tsx:106
+#: src/Navigation.tsx:109
+#: src/view/screens/Profile.tsx:99
msgid "Not Found"
msgstr ""
@@ -2480,17 +3116,23 @@ msgstr ""
msgid "Not right now"
msgstr ""
-#: src/view/screens/Moderation.tsx:233
+#: src/view/com/profile/ProfileMenu.tsx:368
+#: src/view/com/util/forms/PostDropdownBtn.tsx:342
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:246
+msgid "Note about sharing"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:540
msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites."
msgstr ""
-#: src/Navigation.tsx:447
+#: src/Navigation.tsx:469
#: src/view/screens/Notifications.tsx:124
#: src/view/screens/Notifications.tsx:148
-#: src/view/shell/bottom-bar/BottomBar.tsx:205
-#: src/view/shell/desktop/LeftNav.tsx:361
-#: src/view/shell/Drawer.tsx:435
-#: src/view/shell/Drawer.tsx:436
+#: src/view/shell/bottom-bar/BottomBar.tsx:215
+#: src/view/shell/desktop/LeftNav.tsx:365
+#: src/view/shell/Drawer.tsx:438
+#: src/view/shell/Drawer.tsx:439
msgid "Notifications"
msgstr "सूचनाएं"
@@ -2498,15 +3140,36 @@ msgstr "सूचनाएं"
msgid "Nudity"
msgstr ""
-#: src/view/com/util/ErrorBoundary.tsx:35
+#: src/lib/moderation/useReportOptions.ts:71
+msgid "Nudity or adult content not labeled as such"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:71
+#~ msgid "Nudity or pornography not labeled as such"
+#~ msgstr ""
+
+#: src/screens/Signup/index.tsx:142
+msgid "of"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:11
+msgid "Off"
+msgstr ""
+
+#: src/view/com/util/ErrorBoundary.tsx:49
msgid "Oh no!"
msgstr "अरे नहीं!"
-#: src/screens/Onboarding/StepInterests/index.tsx:128
+#: src/screens/Onboarding/StepInterests/index.tsx:132
msgid "Oh no! Something went wrong."
msgstr ""
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:41
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:126
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:327
+msgid "OK"
+msgstr ""
+
+#: src/screens/Login/PasswordUpdatedForm.tsx:44
msgid "Okay"
msgstr "ठीक है"
@@ -2514,11 +3177,11 @@ msgstr "ठीक है"
msgid "Oldest replies first"
msgstr ""
-#: src/view/screens/Settings/index.tsx:234
+#: src/view/screens/Settings/index.tsx:244
msgid "Onboarding reset"
msgstr ""
-#: src/view/com/composer/Composer.tsx:375
+#: src/view/com/composer/Composer.tsx:392
msgid "One or more images is missing alt text."
msgstr "एक या अधिक छवियाँ alt पाठ याद आती हैं।।"
@@ -2526,32 +3189,66 @@ msgstr "एक या अधिक छवियाँ alt पाठ याद
msgid "Only {0} can reply."
msgstr ""
-#: src/view/screens/AppPasswords.tsx:65
-#: src/view/screens/Profile.tsx:106
+#: src/screens/Signup/StepHandle.tsx:97
+msgid "Only contains letters, numbers, and hyphens"
+msgstr ""
+
+#: src/components/Lists.tsx:75
+msgid "Oops, something went wrong!"
+msgstr ""
+
+#: src/components/Lists.tsx:170
+#: src/view/screens/AppPasswords.tsx:67
+#: src/view/screens/Profile.tsx:99
msgid "Oops!"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:115
+#: src/screens/Onboarding/StepFinished.tsx:119
msgid "Open"
msgstr ""
-#: src/view/com/composer/Composer.tsx:470
-#: src/view/com/composer/Composer.tsx:471
+#: src/view/screens/Moderation.tsx:75
+#~ msgid "Open content filtering settings"
+#~ msgstr ""
+
+#: src/view/com/composer/Composer.tsx:491
+#: src/view/com/composer/Composer.tsx:492
msgid "Open emoji picker"
msgstr ""
-#: src/view/screens/Settings/index.tsx:712
+#: src/view/screens/ProfileFeed.tsx:300
+msgid "Open feed options menu"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:734
msgid "Open links with in-app browser"
msgstr ""
-#: src/view/com/pager/FeedsTabBarMobile.tsx:87
+#: src/screens/Moderation/index.tsx:227
+msgid "Open muted words and tags settings"
+msgstr ""
+
+#: src/view/screens/Moderation.tsx:92
+#~ msgid "Open muted words settings"
+#~ msgstr ""
+
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:50
msgid "Open navigation"
msgstr "ओपन नेविगेशन"
-#: src/view/screens/Settings/index.tsx:804
+#: src/view/com/util/forms/PostDropdownBtn.tsx:183
+msgid "Open post options menu"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:828
+#: src/view/screens/Settings/index.tsx:838
msgid "Open storybook page"
msgstr ""
+#: src/view/screens/Settings/index.tsx:816
+msgid "Open system log"
+msgstr ""
+
#: src/view/com/util/forms/DropdownButton.tsx:154
msgid "Opens {numItems} options"
msgstr ""
@@ -2560,11 +3257,11 @@ msgstr ""
msgid "Opens additional details for a debug entry"
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:348
+#: src/view/com/notifications/FeedItem.tsx:353
msgid "Opens an expanded list of users in this notification"
msgstr ""
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:61
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:78
msgid "Opens camera on device"
msgstr ""
@@ -2572,7 +3269,7 @@ msgstr ""
msgid "Opens composer"
msgstr ""
-#: src/view/screens/Settings/index.tsx:595
+#: src/view/screens/Settings/index.tsx:615
msgid "Opens configurable language settings"
msgstr "भाषा सेटिंग्स खोलें"
@@ -2580,71 +3277,117 @@ msgstr "भाषा सेटिंग्स खोलें"
msgid "Opens device photo gallery"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:419
-msgid "Opens editor for profile display name, avatar, background image, and description"
-msgstr ""
+#: src/view/com/profile/ProfileHeader.tsx:420
+#~ msgid "Opens editor for profile display name, avatar, background image, and description"
+#~ msgstr ""
-#: src/view/screens/Settings/index.tsx:649
+#: src/view/screens/Settings/index.tsx:669
msgid "Opens external embeds settings"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:574
-msgid "Opens followers list"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:57
+#: src/view/com/auth/SplashScreen.tsx:68
+#: src/view/com/auth/SplashScreen.web.tsx:97
+msgid "Opens flow to create a new Bluesky account"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:593
-msgid "Opens following list"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:75
+#: src/view/com/auth/SplashScreen.tsx:83
+#: src/view/com/auth/SplashScreen.web.tsx:112
+msgid "Opens flow to sign into your existing Bluesky account"
msgstr ""
+#: src/view/com/profile/ProfileHeader.tsx:575
+#~ msgid "Opens followers list"
+#~ msgstr ""
+
+#: src/view/com/profile/ProfileHeader.tsx:594
+#~ msgid "Opens following list"
+#~ msgstr ""
+
#: src/view/screens/Settings.tsx:412
#~ msgid "Opens invite code list"
#~ msgstr ""
-#: src/view/com/modals/InviteCodes.tsx:172
+#: src/view/com/modals/InviteCodes.tsx:173
msgid "Opens list of invite codes"
msgstr ""
+#: src/view/screens/Settings/index.tsx:798
+msgid "Opens modal for account deletion confirmation. Requires email code"
+msgstr ""
+
#: src/view/screens/Settings/index.tsx:774
-msgid "Opens modal for account deletion confirmation. Requires email code."
+#~ msgid "Opens modal for account deletion confirmation. Requires email code."
+#~ msgstr ""
+
+#: src/view/screens/Settings/index.tsx:756
+msgid "Opens modal for changing your Bluesky password"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:281
+#: src/view/screens/Settings/index.tsx:718
+msgid "Opens modal for choosing a new Bluesky handle"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:779
+msgid "Opens modal for downloading your Bluesky account data (repository)"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:968
+msgid "Opens modal for email verification"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:282
msgid "Opens modal for using custom domain"
msgstr "कस्टम डोमेन का उपयोग करने के लिए मोडल खोलें"
-#: src/view/screens/Settings/index.tsx:620
+#: src/view/screens/Settings/index.tsx:640
msgid "Opens moderation settings"
msgstr "मॉडरेशन सेटिंग्स खोलें"
-#: src/view/com/auth/login/LoginForm.tsx:239
+#: src/screens/Login/LoginForm.tsx:202
msgid "Opens password reset form"
msgstr ""
-#: src/view/screens/Feeds.tsx:357
+#: src/view/com/home/HomeHeaderLayout.web.tsx:63
+#: src/view/screens/Feeds.tsx:356
msgid "Opens screen to edit Saved Feeds"
msgstr ""
-#: src/view/screens/Settings/index.tsx:576
+#: src/view/screens/Settings/index.tsx:597
msgid "Opens screen with all saved feeds"
msgstr "सभी बचाया फ़ीड के साथ स्क्रीन खोलें"
+#: src/view/screens/Settings/index.tsx:696
+msgid "Opens the app password settings"
+msgstr ""
+
#: src/view/screens/Settings/index.tsx:676
-msgid "Opens the app password settings page"
-msgstr "ऐप पासवर्ड सेटिंग पेज खोलें"
+#~ msgid "Opens the app password settings page"
+#~ msgstr "ऐप पासवर्ड सेटिंग पेज खोलें"
+
+#: src/view/screens/Settings/index.tsx:554
+msgid "Opens the Following feed preferences"
+msgstr ""
#: src/view/screens/Settings/index.tsx:535
-msgid "Opens the home feed preferences"
-msgstr "होम फीड वरीयताओं को खोलता है"
+#~ msgid "Opens the home feed preferences"
+#~ msgstr "होम फीड वरीयताओं को खोलता है"
+
+#: src/view/com/modals/LinkWarning.tsx:93
+msgid "Opens the linked website"
+msgstr ""
-#: src/view/screens/Settings/index.tsx:805
+#: src/view/screens/Settings/index.tsx:829
+#: src/view/screens/Settings/index.tsx:839
msgid "Opens the storybook page"
msgstr "स्टोरीबुक पेज खोलें"
-#: src/view/screens/Settings/index.tsx:793
+#: src/view/screens/Settings/index.tsx:817
msgid "Opens the system log page"
msgstr "सिस्टम लॉग पेज खोलें"
-#: src/view/screens/Settings/index.tsx:556
+#: src/view/screens/Settings/index.tsx:575
msgid "Opens the threads preferences"
msgstr "धागे वरीयताओं को खोलता है"
@@ -2652,6 +3395,10 @@ msgstr "धागे वरीयताओं को खोलता है"
msgid "Option {0} of {numItems}"
msgstr ""
+#: src/components/ReportDialog/SubmitView.tsx:162
+msgid "Optionally provide additional information below:"
+msgstr ""
+
#: src/view/com/modals/Threadgate.tsx:89
msgid "Or combine these options:"
msgstr ""
@@ -2660,7 +3407,11 @@ msgstr ""
#~ msgid "Or you can try our \"Discover\" algorithm:"
#~ msgstr ""
-#: src/view/com/auth/login/ChooseAccountForm.tsx:138
+#: src/lib/moderation/useReportOptions.ts:25
+msgid "Other"
+msgstr ""
+
+#: src/components/AccountList.tsx:73
msgid "Other account"
msgstr "अन्य खाता"
@@ -2672,6 +3423,7 @@ msgstr "अन्य खाता"
msgid "Other..."
msgstr "अन्य..।"
+#: src/components/Lists.tsx:184
#: src/view/screens/NotFound.tsx:45
msgid "Page not found"
msgstr "पृष्ठ नहीं मिला"
@@ -2680,27 +3432,30 @@ msgstr "पृष्ठ नहीं मिला"
msgid "Page Not Found"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:210
-#: src/view/com/auth/create/Step1.tsx:220
-#: src/view/com/auth/login/LoginForm.tsx:226
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:161
-#: src/view/com/modals/DeleteAccount.tsx:202
+#: src/screens/Login/LoginForm.tsx:178
+#: src/screens/Signup/StepInfo/index.tsx:101
+#: src/view/com/modals/DeleteAccount.tsx:194
+#: src/view/com/modals/DeleteAccount.tsx:201
msgid "Password"
msgstr "पासवर्ड"
-#: src/view/com/auth/login/Login.tsx:157
+#: src/view/com/modals/ChangePassword.tsx:142
+msgid "Password Changed"
+msgstr ""
+
+#: src/screens/Login/index.tsx:157
msgid "Password updated"
msgstr ""
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:28
+#: src/screens/Login/PasswordUpdatedForm.tsx:30
msgid "Password updated!"
msgstr "पासवर्ड अद्यतन!"
-#: src/Navigation.tsx:160
+#: src/Navigation.tsx:164
msgid "People followed by @{0}"
msgstr ""
-#: src/Navigation.tsx:153
+#: src/Navigation.tsx:157
msgid "People following @{0}"
msgstr ""
@@ -2717,85 +3472,101 @@ msgid "Pets"
msgstr ""
#: src/view/com/auth/create/Step2.tsx:183
-msgid "Phone number"
-msgstr ""
+#~ msgid "Phone number"
+#~ msgstr ""
#: src/view/com/modals/SelfLabel.tsx:121
msgid "Pictures meant for adults."
msgstr "चित्र वयस्कों के लिए थे।।"
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:292
+#: src/view/screens/ProfileList.tsx:563
msgid "Pin to home"
msgstr ""
+#: src/view/screens/ProfileFeed.tsx:295
+msgid "Pin to Home"
+msgstr ""
+
#: src/view/screens/SavedFeeds.tsx:88
msgid "Pinned Feeds"
msgstr "पिन किया गया फ़ीड"
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:111
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:123
msgid "Play {0}"
msgstr ""
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:54
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:55
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:57
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:58
msgid "Play Video"
msgstr ""
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:110
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:122
msgid "Plays the GIF"
msgstr ""
-#: src/view/com/auth/create/state.ts:177
+#: src/screens/Signup/state.ts:241
msgid "Please choose your handle."
msgstr ""
-#: src/view/com/auth/create/state.ts:160
+#: src/screens/Signup/state.ts:234
msgid "Please choose your password."
msgstr ""
+#: src/screens/Signup/state.ts:251
+msgid "Please complete the verification captcha."
+msgstr ""
+
#: src/view/com/modals/ChangeEmail.tsx:67
msgid "Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed."
msgstr "इसे बदलने से पहले कृपया अपने ईमेल की पुष्टि करें। यह एक अस्थायी आवश्यकता है जबकि ईमेल-अपडेटिंग टूल जोड़ा जाता है, और इसे जल्द ही हटा दिया जाएगा।।"
-#: src/view/com/modals/AddAppPasswords.tsx:90
+#: src/view/com/modals/AddAppPasswords.tsx:91
msgid "Please enter a name for your app password. All spaces is not allowed."
msgstr ""
#: src/view/com/auth/create/Step2.tsx:206
-msgid "Please enter a phone number that can receive SMS text messages."
-msgstr ""
+#~ msgid "Please enter a phone number that can receive SMS text messages."
+#~ msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:145
+#: src/view/com/modals/AddAppPasswords.tsx:146
msgid "Please enter a unique name for this App Password or use our randomly generated one."
msgstr "कृपया इस ऐप पासवर्ड के लिए एक अद्वितीय नाम दर्ज करें या हमारे यादृच्छिक रूप से उत्पन्न एक का उपयोग करें।।"
-#: src/view/com/auth/create/state.ts:170
-msgid "Please enter the code you received by SMS."
+#: src/components/dialogs/MutedWords.tsx:67
+msgid "Please enter a valid word, tag, or phrase to mute"
msgstr ""
+#: src/view/com/auth/create/state.ts:170
+#~ msgid "Please enter the code you received by SMS."
+#~ msgstr ""
+
#: src/view/com/auth/create/Step2.tsx:282
-msgid "Please enter the verification code sent to {phoneNumberFormatted}."
-msgstr ""
+#~ msgid "Please enter the verification code sent to {phoneNumberFormatted}."
+#~ msgstr ""
-#: src/view/com/auth/create/state.ts:146
+#: src/screens/Signup/state.ts:220
msgid "Please enter your email."
msgstr ""
-#: src/view/com/modals/DeleteAccount.tsx:191
+#: src/view/com/modals/DeleteAccount.tsx:190
msgid "Please enter your password as well:"
msgstr "कृपया अपना पासवर्ड भी दर्ज करें:"
+#: src/components/moderation/LabelsOnMeDialog.tsx:221
+msgid "Please explain why you think this label was incorrectly applied by {0}"
+msgstr ""
+
#: src/view/com/modals/AppealLabel.tsx:72
#: src/view/com/modals/AppealLabel.tsx:75
-msgid "Please tell us why you think this content warning was incorrectly applied!"
-msgstr ""
+#~ msgid "Please tell us why you think this content warning was incorrectly applied!"
+#~ msgstr ""
#: src/view/com/modals/VerifyEmail.tsx:101
msgid "Please Verify Your Email"
msgstr ""
-#: src/view/com/composer/Composer.tsx:215
+#: src/view/com/composer/Composer.tsx:222
msgid "Please wait for your link card to finish loading"
msgstr ""
@@ -2807,35 +3578,49 @@ msgstr ""
msgid "Porn"
msgstr ""
-#: src/view/com/composer/Composer.tsx:350
-#: src/view/com/composer/Composer.tsx:358
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#~ msgid "Pornography"
+#~ msgstr ""
+
+#: src/view/com/composer/Composer.tsx:367
+#: src/view/com/composer/Composer.tsx:375
msgctxt "action"
msgid "Post"
msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:246
+#: src/view/com/post-thread/PostThread.tsx:292
msgctxt "description"
msgid "Post"
msgstr "पोस्ट"
-#: src/view/com/post-thread/PostThreadItem.tsx:174
+#: src/view/com/post-thread/PostThreadItem.tsx:175
msgid "Post by {0}"
msgstr ""
-#: src/Navigation.tsx:172
-#: src/Navigation.tsx:179
-#: src/Navigation.tsx:186
+#: src/Navigation.tsx:176
+#: src/Navigation.tsx:183
+#: src/Navigation.tsx:190
msgid "Post by @{0}"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:84
+#: src/view/com/util/forms/PostDropdownBtn.tsx:105
msgid "Post deleted"
msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:398
+#: src/view/com/post-thread/PostThread.tsx:157
msgid "Post hidden"
msgstr "छुपा पोस्ट"
+#: src/components/moderation/ModerationDetailsDialog.tsx:97
+#: src/lib/moderation/useModerationCauseDescription.ts:99
+msgid "Post Hidden by Muted Word"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:100
+#: src/lib/moderation/useModerationCauseDescription.ts:108
+msgid "Post Hidden by You"
+msgstr ""
+
#: src/view/com/composer/select-language/SelectLangBtn.tsx:87
msgid "Post language"
msgstr "पोस्ट भाषा"
@@ -2844,23 +3629,42 @@ msgstr "पोस्ट भाषा"
msgid "Post Languages"
msgstr "पोस्ट भाषा"
-#: src/view/com/post-thread/PostThread.tsx:450
+#: src/view/com/post-thread/PostThread.tsx:152
+#: src/view/com/post-thread/PostThread.tsx:164
msgid "Post not found"
msgstr "पोस्ट नहीं मिला"
-#: src/view/screens/Profile.tsx:180
+#: src/components/TagMenu/index.tsx:253
+msgid "posts"
+msgstr ""
+
+#: src/view/screens/Profile.tsx:190
msgid "Posts"
msgstr ""
+#: src/components/dialogs/MutedWords.tsx:89
+msgid "Posts can be muted based on their text, their tags, or both."
+msgstr ""
+
#: src/view/com/posts/FeedErrorMessage.tsx:64
msgid "Posts hidden"
msgstr ""
-#: src/view/com/modals/LinkWarning.tsx:46
+#: src/view/com/modals/LinkWarning.tsx:60
msgid "Potentially Misleading Link"
msgstr "शायद एक भ्रामक लिंक"
-#: src/view/com/lightbox/Lightbox.web.tsx:135
+#: src/components/forms/HostingProvider.tsx:45
+msgid "Press to change hosting provider"
+msgstr ""
+
+#: src/components/Error.tsx:74
+#: src/components/Lists.tsx:80
+#: src/screens/Signup/index.tsx:186
+msgid "Press to retry"
+msgstr ""
+
+#: src/view/com/lightbox/Lightbox.web.tsx:150
msgid "Previous image"
msgstr "पिछली छवि"
@@ -2872,39 +3676,45 @@ msgstr "प्राथमिक भाषा"
msgid "Prioritize Your Follows"
msgstr "अपने फ़ॉलोअर्स को प्राथमिकता दें"
-#: src/view/screens/Settings/index.tsx:632
-#: src/view/shell/desktop/RightNav.tsx:80
+#: src/view/screens/Settings/index.tsx:652
+#: src/view/shell/desktop/RightNav.tsx:72
msgid "Privacy"
msgstr "गोपनीयता"
-#: src/Navigation.tsx:217
+#: src/Navigation.tsx:231
+#: src/screens/Signup/StepInfo/Policies.tsx:56
#: src/view/screens/PrivacyPolicy.tsx:29
-#: src/view/screens/Settings/index.tsx:891
-#: src/view/shell/Drawer.tsx:262
+#: src/view/screens/Settings/index.tsx:923
+#: src/view/shell/Drawer.tsx:265
msgid "Privacy Policy"
msgstr "गोपनीयता नीति"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:198
+#: src/screens/Login/ForgotPasswordForm.tsx:156
msgid "Processing..."
msgstr "प्रसंस्करण..."
-#: src/view/shell/bottom-bar/BottomBar.tsx:247
-#: src/view/shell/desktop/LeftNav.tsx:415
+#: src/view/screens/DebugMod.tsx:888
+#: src/view/screens/Profile.tsx:342
+msgid "profile"
+msgstr ""
+
+#: src/view/shell/bottom-bar/BottomBar.tsx:260
+#: src/view/shell/desktop/LeftNav.tsx:419
#: src/view/shell/Drawer.tsx:70
-#: src/view/shell/Drawer.tsx:546
-#: src/view/shell/Drawer.tsx:547
+#: src/view/shell/Drawer.tsx:549
+#: src/view/shell/Drawer.tsx:550
msgid "Profile"
msgstr "प्रोफ़ाइल"
-#: src/view/com/modals/EditProfile.tsx:128
+#: src/view/com/modals/EditProfile.tsx:129
msgid "Profile updated"
msgstr ""
-#: src/view/screens/Settings/index.tsx:949
+#: src/view/screens/Settings/index.tsx:981
msgid "Protect your account by verifying your email."
msgstr "अपने ईमेल को सत्यापित करके अपने खाते को सुरक्षित रखें।।"
-#: src/screens/Onboarding/StepFinished.tsx:101
+#: src/screens/Onboarding/StepFinished.tsx:105
msgid "Public"
msgstr ""
@@ -2916,15 +3726,15 @@ msgstr ""
msgid "Public, shareable lists which can drive feeds."
msgstr "सार्वजनिक, साझा करने योग्य सूचियाँ जो फ़ीड चला सकती हैं।"
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish post"
msgstr ""
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish reply"
msgstr ""
-#: src/view/com/modals/Repost.tsx:65
+#: src/view/com/modals/Repost.tsx:66
msgctxt "action"
msgid "Quote post"
msgstr ""
@@ -2933,7 +3743,7 @@ msgstr ""
msgid "Quote post"
msgstr "कोटे पोस्ट"
-#: src/view/com/modals/Repost.tsx:70
+#: src/view/com/modals/Repost.tsx:71
msgctxt "action"
msgid "Quote Post"
msgstr "कोटे पोस्ट"
@@ -2942,10 +3752,14 @@ msgstr "कोटे पोस्ट"
msgid "Random (aka \"Poster's Roulette\")"
msgstr ""
-#: src/view/com/modals/EditImage.tsx:236
+#: src/view/com/modals/EditImage.tsx:237
msgid "Ratios"
msgstr "अनुपात"
+#: src/view/screens/Search/Search.tsx:777
+msgid "Recent Searches"
+msgstr ""
+
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116
msgid "Recommended Feeds"
msgstr "अनुशंसित फ़ीड"
@@ -2954,35 +3768,50 @@ msgstr "अनुशंसित फ़ीड"
msgid "Recommended Users"
msgstr "अनुशंसित लोग"
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/components/dialogs/MutedWords.tsx:286
+#: src/view/com/feeds/FeedSourceCard.tsx:283
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/SelfLabel.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/com/util/UserAvatar.tsx:285
-#: src/view/com/util/UserBanner.tsx:91
+#: src/view/com/posts/FeedErrorMessage.tsx:204
msgid "Remove"
msgstr "निकालें"
-#: src/view/com/feeds/FeedSourceCard.tsx:106
-msgid "Remove {0} from my feeds?"
-msgstr "मेरे फ़ीड से {0} हटाएं?"
+#: src/view/com/feeds/FeedSourceCard.tsx:108
+#~ msgid "Remove {0} from my feeds?"
+#~ msgstr "मेरे फ़ीड से {0} हटाएं?"
#: src/view/com/util/AccountDropdownBtn.tsx:22
msgid "Remove account"
msgstr "खाता हटाएं"
-#: src/view/com/posts/FeedErrorMessage.tsx:131
-#: src/view/com/posts/FeedErrorMessage.tsx:166
+#: src/view/com/util/UserAvatar.tsx:358
+msgid "Remove Avatar"
+msgstr ""
+
+#: src/view/com/util/UserBanner.tsx:148
+msgid "Remove Banner"
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:160
msgid "Remove feed"
msgstr "फ़ीड हटाएँ"
-#: src/view/com/feeds/FeedSourceCard.tsx:105
-#: src/view/com/feeds/FeedSourceCard.tsx:167
-#: src/view/com/feeds/FeedSourceCard.tsx:172
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/posts/FeedErrorMessage.tsx:201
+msgid "Remove feed?"
+msgstr ""
+
+#: src/view/com/feeds/FeedSourceCard.tsx:173
+#: src/view/com/feeds/FeedSourceCard.tsx:233
+#: src/view/screens/ProfileFeed.tsx:335
+#: src/view/screens/ProfileFeed.tsx:341
msgid "Remove from my feeds"
msgstr "मेरे फ़ीड से हटाएँ"
+#: src/view/com/feeds/FeedSourceCard.tsx:278
+msgid "Remove from my feeds?"
+msgstr ""
+
#: src/view/com/composer/photos/Gallery.tsx:167
msgid "Remove image"
msgstr "छवि निकालें"
@@ -2991,33 +3820,44 @@ msgstr "छवि निकालें"
msgid "Remove image preview"
msgstr "छवि पूर्वावलोकन निकालें"
-#: src/view/com/modals/Repost.tsx:47
+#: src/components/dialogs/MutedWords.tsx:329
+msgid "Remove mute word from your list"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:48
msgid "Remove repost"
msgstr ""
-#: src/view/com/feeds/FeedSourceCard.tsx:173
-msgid "Remove this feed from my feeds?"
+#: src/view/com/feeds/FeedSourceCard.tsx:175
+#~ msgid "Remove this feed from my feeds?"
+#~ msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:202
+msgid "Remove this feed from your saved feeds"
msgstr ""
#: src/view/com/posts/FeedErrorMessage.tsx:132
-msgid "Remove this feed from your saved feeds?"
-msgstr "इस फ़ीड को सहेजे गए फ़ीड से हटा दें?"
+#~ msgid "Remove this feed from your saved feeds?"
+#~ msgstr "इस फ़ीड को सहेजे गए फ़ीड से हटा दें?"
#: src/view/com/modals/ListAddRemoveUsers.tsx:199
#: src/view/com/modals/UserAddRemoveLists.tsx:152
msgid "Removed from list"
msgstr ""
-#: src/view/com/feeds/FeedSourceCard.tsx:111
-#: src/view/com/feeds/FeedSourceCard.tsx:178
+#: src/view/com/feeds/FeedSourceCard.tsx:121
msgid "Removed from my feeds"
msgstr ""
+#: src/view/screens/ProfileFeed.tsx:209
+msgid "Removed from your feeds"
+msgstr ""
+
#: src/view/com/composer/ExternalEmbed.tsx:71
msgid "Removes default thumbnail from {0}"
msgstr ""
-#: src/view/screens/Profile.tsx:181
+#: src/view/screens/Profile.tsx:191
msgid "Replies"
msgstr ""
@@ -3025,45 +3865,71 @@ msgstr ""
msgid "Replies to this thread are disabled"
msgstr ""
-#: src/view/com/composer/Composer.tsx:348
+#: src/view/com/composer/Composer.tsx:365
msgctxt "action"
msgid "Reply"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:144
+#: src/view/screens/PreferencesFollowingFeed.tsx:144
msgid "Reply Filters"
msgstr "फिल्टर"
#: src/view/com/post/Post.tsx:166
-#: src/view/com/posts/FeedItem.tsx:287
+#: src/view/com/posts/FeedItem.tsx:280
msgctxt "description"
msgid "Reply to <0/>"
msgstr ""
#: src/view/com/modals/report/Modal.tsx:166
-msgid "Report {collectionName}"
-msgstr "रिपोर्ट {collectionName}"
+#~ msgid "Report {collectionName}"
+#~ msgstr "रिपोर्ट {collectionName}"
-#: src/view/com/profile/ProfileHeader.tsx:360
+#: src/view/com/profile/ProfileMenu.tsx:319
+#: src/view/com/profile/ProfileMenu.tsx:322
msgid "Report Account"
msgstr "रिपोर्ट"
-#: src/view/screens/ProfileFeed.tsx:292
+#: src/components/ReportDialog/index.tsx:49
+msgid "Report dialog"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:352
+#: src/view/screens/ProfileFeed.tsx:354
msgid "Report feed"
msgstr "रिपोर्ट फ़ीड"
-#: src/view/screens/ProfileList.tsx:458
+#: src/view/screens/ProfileList.tsx:429
msgid "Report List"
msgstr "रिपोर्ट सूची"
-#: src/view/com/modals/report/SendReportButton.tsx:37
-#: src/view/com/util/forms/PostDropdownBtn.tsx:210
+#: src/view/com/util/forms/PostDropdownBtn.tsx:292
+#: src/view/com/util/forms/PostDropdownBtn.tsx:294
msgid "Report post"
msgstr "रिपोर्ट पोस्ट"
-#: src/view/com/modals/Repost.tsx:43
-#: src/view/com/modals/Repost.tsx:48
-#: src/view/com/modals/Repost.tsx:53
+#: src/components/ReportDialog/SelectReportOptionView.tsx:42
+msgid "Report this content"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:55
+msgid "Report this feed"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:52
+msgid "Report this list"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:49
+msgid "Report this post"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:46
+msgid "Report this user"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:44
+#: src/view/com/modals/Repost.tsx:49
+#: src/view/com/modals/Repost.tsx:54
#: src/view/com/util/post-ctrls/RepostButton.tsx:61
msgctxt "action"
msgid "Repost"
@@ -3082,15 +3948,15 @@ msgstr "पोस्ट दोबारा पोस्ट करें या
msgid "Reposted By"
msgstr "द्वारा दोबारा पोस्ट किया गया"
-#: src/view/com/posts/FeedItem.tsx:207
+#: src/view/com/posts/FeedItem.tsx:197
msgid "Reposted by {0}"
msgstr ""
-#: src/view/com/posts/FeedItem.tsx:224
+#: src/view/com/posts/FeedItem.tsx:214
msgid "Reposted by <0/>"
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:162
+#: src/view/com/notifications/FeedItem.tsx:166
msgid "reposted your post"
msgstr ""
@@ -3104,60 +3970,61 @@ msgid "Request Change"
msgstr "अनुरोध बदलें"
#: src/view/com/auth/create/Step2.tsx:219
-msgid "Request code"
-msgstr ""
+#~ msgid "Request code"
+#~ msgstr ""
-#: src/view/com/modals/ChangePassword.tsx:239
#: src/view/com/modals/ChangePassword.tsx:241
+#: src/view/com/modals/ChangePassword.tsx:243
msgid "Request Code"
msgstr ""
-#: src/view/screens/Settings/index.tsx:456
+#: src/view/screens/Settings/index.tsx:475
msgid "Require alt text before posting"
msgstr "पोस्ट करने से पहले वैकल्पिक टेक्स्ट की आवश्यकता है"
-#: src/view/com/auth/create/Step1.tsx:149
+#: src/screens/Signup/StepInfo/index.tsx:69
msgid "Required for this provider"
msgstr "इस प्रदाता के लिए आवश्यक"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:124
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:136
+#: src/view/com/modals/ChangePassword.tsx:185
msgid "Reset code"
msgstr "कोड रीसेट करें"
-#: src/view/com/modals/ChangePassword.tsx:190
+#: src/view/com/modals/ChangePassword.tsx:192
msgid "Reset Code"
msgstr ""
#: src/view/screens/Settings/index.tsx:824
-msgid "Reset onboarding"
-msgstr ""
+#~ msgid "Reset onboarding"
+#~ msgstr ""
-#: src/view/screens/Settings/index.tsx:827
+#: src/view/screens/Settings/index.tsx:858
+#: src/view/screens/Settings/index.tsx:861
msgid "Reset onboarding state"
msgstr "ऑनबोर्डिंग स्टेट को रीसेट करें"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:104
+#: src/screens/Login/ForgotPasswordForm.tsx:86
msgid "Reset password"
msgstr "पासवर्ड रीसेट"
#: src/view/screens/Settings/index.tsx:814
-msgid "Reset preferences"
-msgstr ""
+#~ msgid "Reset preferences"
+#~ msgstr ""
-#: src/view/screens/Settings/index.tsx:817
+#: src/view/screens/Settings/index.tsx:848
+#: src/view/screens/Settings/index.tsx:851
msgid "Reset preferences state"
msgstr "प्राथमिकताओं को रीसेट करें"
-#: src/view/screens/Settings/index.tsx:825
+#: src/view/screens/Settings/index.tsx:859
msgid "Resets the onboarding state"
msgstr "ऑनबोर्डिंग स्टेट को रीसेट करें"
-#: src/view/screens/Settings/index.tsx:815
+#: src/view/screens/Settings/index.tsx:849
msgid "Resets the preferences state"
msgstr "प्राथमिकताओं की स्थिति को रीसेट करें"
-#: src/view/com/auth/login/LoginForm.tsx:269
+#: src/screens/Login/LoginForm.tsx:235
msgid "Retries login"
msgstr ""
@@ -3166,105 +4033,150 @@ msgstr ""
msgid "Retries the last action, which errored out"
msgstr ""
-#: src/screens/Onboarding/StepInterests/index.tsx:221
-#: src/screens/Onboarding/StepInterests/index.tsx:224
-#: src/view/com/auth/create/CreateAccount.tsx:170
-#: src/view/com/auth/create/CreateAccount.tsx:175
-#: src/view/com/auth/create/Step2.tsx:255
-#: src/view/com/auth/login/LoginForm.tsx:268
-#: src/view/com/auth/login/LoginForm.tsx:271
+#: src/components/Error.tsx:79
+#: src/components/Lists.tsx:91
+#: src/screens/Login/LoginForm.tsx:234
+#: src/screens/Login/LoginForm.tsx:241
+#: src/screens/Onboarding/StepInterests/index.tsx:225
+#: src/screens/Onboarding/StepInterests/index.tsx:228
+#: src/screens/Signup/index.tsx:193
#: src/view/com/util/error/ErrorMessage.tsx:55
#: src/view/com/util/error/ErrorScreen.tsx:72
msgid "Retry"
msgstr "फिर से कोशिश करो"
#: src/view/com/auth/create/Step2.tsx:247
-msgid "Retry."
-msgstr ""
+#~ msgid "Retry."
+#~ msgstr ""
-#: src/view/screens/ProfileList.tsx:898
+#: src/components/Error.tsx:86
+#: src/view/screens/ProfileList.tsx:917
msgid "Return to previous page"
msgstr ""
-#: src/view/shell/desktop/RightNav.tsx:55
-msgid "SANDBOX. Posts and accounts are not permanent."
+#: src/view/screens/NotFound.tsx:59
+msgid "Returns to home page"
msgstr ""
-#: src/view/com/lightbox/Lightbox.tsx:132
-#: src/view/com/modals/CreateOrEditList.tsx:345
-msgctxt "action"
-msgid "Save"
+#: src/view/screens/NotFound.tsx:58
+#: src/view/screens/ProfileFeed.tsx:113
+msgid "Returns to previous page"
msgstr ""
-#: src/view/com/modals/BirthDateSettings.tsx:94
-#: src/view/com/modals/BirthDateSettings.tsx:97
-#: src/view/com/modals/ChangeHandle.tsx:173
-#: src/view/com/modals/CreateOrEditList.tsx:337
-#: src/view/com/modals/EditProfile.tsx:224
-#: src/view/screens/ProfileFeed.tsx:345
+#: src/view/shell/desktop/RightNav.tsx:55
+#~ msgid "SANDBOX. Posts and accounts are not permanent."
+#~ msgstr ""
+
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/view/com/modals/ChangeHandle.tsx:174
+#: src/view/com/modals/CreateOrEditList.tsx:338
+#: src/view/com/modals/EditProfile.tsx:225
msgid "Save"
msgstr "सेव करो"
-#: src/view/com/modals/AltImage.tsx:130
+#: src/view/com/lightbox/Lightbox.tsx:132
+#: src/view/com/modals/CreateOrEditList.tsx:346
+msgctxt "action"
+msgid "Save"
+msgstr ""
+
+#: src/view/com/modals/AltImage.tsx:131
msgid "Save alt text"
msgstr "सेव ऑल्ट टेक्स्ट"
-#: src/view/com/modals/EditProfile.tsx:232
+#: src/components/dialogs/BirthDateSettings.tsx:119
+msgid "Save birthday"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:233
msgid "Save Changes"
msgstr "बदलाव सेव करो"
-#: src/view/com/modals/ChangeHandle.tsx:170
+#: src/view/com/modals/ChangeHandle.tsx:171
msgid "Save handle change"
msgstr "बदलाव सेव करो"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:144
+#: src/view/com/modals/crop-image/CropImage.web.tsx:145
msgid "Save image crop"
msgstr "फोटो बदलाव सेव करो"
+#: src/view/screens/ProfileFeed.tsx:336
+#: src/view/screens/ProfileFeed.tsx:342
+msgid "Save to my feeds"
+msgstr ""
+
#: src/view/screens/SavedFeeds.tsx:122
msgid "Saved Feeds"
msgstr "सहेजे गए फ़ीड"
-#: src/view/com/modals/EditProfile.tsx:225
+#: src/view/com/lightbox/Lightbox.tsx:81
+msgid "Saved to your camera roll."
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:213
+msgid "Saved to your feeds"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:226
msgid "Saves any changes to your profile"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:171
+#: src/view/com/modals/ChangeHandle.tsx:172
msgid "Saves handle change to {handle}"
msgstr ""
+#: src/view/com/modals/crop-image/CropImage.web.tsx:146
+msgid "Saves image crop settings"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:36
msgid "Science"
msgstr ""
-#: src/view/screens/ProfileList.tsx:854
+#: src/view/screens/ProfileList.tsx:873
msgid "Scroll to top"
msgstr ""
-#: src/Navigation.tsx:437
-#: src/view/com/auth/LoggedOut.tsx:122
+#: src/Navigation.tsx:459
+#: src/view/com/auth/LoggedOut.tsx:123
#: src/view/com/modals/ListAddRemoveUsers.tsx:75
#: src/view/com/util/forms/SearchInput.tsx:67
#: src/view/com/util/forms/SearchInput.tsx:79
-#: src/view/screens/Search/Search.tsx:418
-#: src/view/screens/Search/Search.tsx:645
-#: src/view/screens/Search/Search.tsx:663
-#: src/view/shell/bottom-bar/BottomBar.tsx:159
-#: src/view/shell/desktop/LeftNav.tsx:324
-#: src/view/shell/desktop/Search.tsx:214
-#: src/view/shell/desktop/Search.tsx:223
-#: src/view/shell/Drawer.tsx:362
-#: src/view/shell/Drawer.tsx:363
+#: src/view/screens/Search/Search.tsx:421
+#: src/view/screens/Search/Search.tsx:670
+#: src/view/screens/Search/Search.tsx:688
+#: src/view/shell/bottom-bar/BottomBar.tsx:169
+#: src/view/shell/desktop/LeftNav.tsx:328
+#: src/view/shell/desktop/Search.tsx:215
+#: src/view/shell/desktop/Search.tsx:224
+#: src/view/shell/Drawer.tsx:365
+#: src/view/shell/Drawer.tsx:366
msgid "Search"
msgstr "खोज"
-#: src/view/screens/Search/Search.tsx:712
-#: src/view/shell/desktop/Search.tsx:255
+#: src/view/screens/Search/Search.tsx:737
+#: src/view/shell/desktop/Search.tsx:256
msgid "Search for \"{query}\""
msgstr ""
-#: src/view/com/auth/LoggedOut.tsx:104
+#: src/components/TagMenu/index.tsx:145
+msgid "Search for all posts by @{authorHandle} with tag {displayTag}"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:145
+#~ msgid "Search for all posts by @{authorHandle} with tag {tag}"
+#~ msgstr ""
+
+#: src/components/TagMenu/index.tsx:94
+msgid "Search for all posts with tag {displayTag}"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:90
+#~ msgid "Search for all posts with tag {tag}"
+#~ msgstr ""
+
#: src/view/com/auth/LoggedOut.tsx:105
+#: src/view/com/auth/LoggedOut.tsx:106
#: src/view/com/modals/ListAddRemoveUsers.tsx:70
msgid "Search for users"
msgstr ""
@@ -3273,11 +4185,35 @@ msgstr ""
msgid "Security Step Required"
msgstr "सुरक्षा चरण आवश्यक"
+#: src/components/TagMenu/index.web.tsx:66
+msgid "See {truncatedTag} posts"
+msgstr ""
+
+#: src/components/TagMenu/index.web.tsx:83
+msgid "See {truncatedTag} posts by user"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:128
+msgid "See <0>{displayTag}0> posts"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:187
+msgid "See <0>{displayTag}0> posts by this user"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:128
+#~ msgid "See <0>{tag}0> posts"
+#~ msgstr ""
+
+#: src/components/TagMenu/index.tsx:189
+#~ msgid "See <0>{tag}0> posts by this user"
+#~ msgstr ""
+
#: src/view/screens/SavedFeeds.tsx:163
msgid "See this guide"
msgstr ""
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:39
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:40
msgid "See what's next"
msgstr "आगे क्या है"
@@ -3285,27 +4221,43 @@ msgstr "आगे क्या है"
msgid "Select {item}"
msgstr ""
+#: src/screens/Login/ChooseAccountForm.tsx:61
+msgid "Select account"
+msgstr ""
+
#: src/view/com/modals/ServerInput.tsx:75
#~ msgid "Select Bluesky Social"
#~ msgstr "Bluesky Social का चयन करें"
-#: src/view/com/auth/login/Login.tsx:117
+#: src/screens/Login/index.tsx:120
msgid "Select from an existing account"
msgstr "मौजूदा खाते से चुनें"
+#: src/view/screens/LanguageSettings.tsx:299
+msgid "Select languages"
+msgstr ""
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:30
+msgid "Select moderator"
+msgstr ""
+
#: src/view/com/util/Selector.tsx:107
msgid "Select option {i} of {numItems}"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:99
-#: src/view/com/auth/login/LoginForm.tsx:150
-msgid "Select service"
-msgstr "सेवा चुनें"
+#: src/view/com/auth/create/Step1.tsx:96
+#: src/view/com/auth/login/LoginForm.tsx:153
+#~ msgid "Select service"
+#~ msgstr "सेवा चुनें"
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:52
msgid "Select some accounts below to follow"
msgstr ""
+#: src/components/ReportDialog/SubmitView.tsx:135
+msgid "Select the moderation service(s) to report to"
+msgstr ""
+
#: src/view/com/auth/server-input/index.tsx:82
msgid "Select the service that hosts your data."
msgstr ""
@@ -3314,11 +4266,11 @@ msgstr ""
#~ msgid "Select the types of content that you want to see (or not see), and we'll handle the rest."
#~ msgstr ""
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:90
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:100
msgid "Select topical feeds to follow from the list below"
msgstr ""
-#: src/screens/Onboarding/StepModeration/index.tsx:75
+#: src/screens/Onboarding/StepModeration/index.tsx:63
msgid "Select what you want to see (or not see), and we’ll handle the rest."
msgstr ""
@@ -3327,26 +4279,34 @@ msgid "Select which languages you want your subscribed feeds to include. If none
msgstr "चुनें कि आप अपनी सदस्यता वाली फ़ीड में कौन सी भाषाएँ शामिल करना चाहते हैं। यदि कोई भी चयनित नहीं है, तो सभी भाषाएँ दिखाई जाएंगी।"
#: src/view/screens/LanguageSettings.tsx:98
-msgid "Select your app language for the default text to display in the app"
-msgstr "ऐप में प्रदर्शित होने वाले डिफ़ॉल्ट टेक्स्ट के लिए अपनी ऐप भाषा चुनें"
+#~ msgid "Select your app language for the default text to display in the app"
+#~ msgstr "ऐप में प्रदर्शित होने वाले डिफ़ॉल्ट टेक्स्ट के लिए अपनी ऐप भाषा चुनें"
+
+#: src/view/screens/LanguageSettings.tsx:98
+msgid "Select your app language for the default text to display in the app."
+msgstr ""
-#: src/screens/Onboarding/StepInterests/index.tsx:196
+#: src/screens/Signup/StepInfo/index.tsx:133
+msgid "Select your date of birth"
+msgstr ""
+
+#: src/screens/Onboarding/StepInterests/index.tsx:200
msgid "Select your interests from the options below"
msgstr ""
#: src/view/com/auth/create/Step2.tsx:155
-msgid "Select your phone's country"
-msgstr ""
+#~ msgid "Select your phone's country"
+#~ msgstr ""
#: src/view/screens/LanguageSettings.tsx:190
msgid "Select your preferred language for translations in your feed."
msgstr "अपने फ़ीड में अनुवाद के लिए अपनी पसंदीदा भाषा चुनें।"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:116
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:117
msgid "Select your primary algorithmic feeds"
msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:142
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:133
msgid "Select your secondary algorithmic feeds"
msgstr ""
@@ -3355,79 +4315,92 @@ msgstr ""
msgid "Send Confirmation Email"
msgstr "पुष्टिकरण ईमेल भेजें"
-#: src/view/com/modals/DeleteAccount.tsx:131
+#: src/view/com/modals/DeleteAccount.tsx:130
msgid "Send email"
msgstr "ईमेल भेजें"
-#: src/view/com/modals/DeleteAccount.tsx:144
+#: src/view/com/modals/DeleteAccount.tsx:143
msgctxt "action"
msgid "Send Email"
msgstr "ईमेल भेजें"
-#: src/view/shell/Drawer.tsx:295
-#: src/view/shell/Drawer.tsx:316
+#: src/view/shell/Drawer.tsx:298
+#: src/view/shell/Drawer.tsx:319
msgid "Send feedback"
msgstr "प्रतिक्रिया भेजें"
+#: src/components/ReportDialog/SubmitView.tsx:214
+#: src/components/ReportDialog/SubmitView.tsx:218
+msgid "Send report"
+msgstr ""
+
#: src/view/com/modals/report/SendReportButton.tsx:45
-msgid "Send Report"
-msgstr "रिपोर्ट भेजें"
+#~ msgid "Send Report"
+#~ msgstr "रिपोर्ट भेजें"
-#: src/view/com/modals/DeleteAccount.tsx:133
+#: src/components/ReportDialog/SelectLabelerView.tsx:44
+msgid "Send report to {0}"
+msgstr ""
+
+#: src/view/com/modals/DeleteAccount.tsx:132
msgid "Sends email with confirmation code for account deletion"
msgstr ""
-#: src/view/com/auth/server-input/index.tsx:110
+#: src/view/com/auth/server-input/index.tsx:114
msgid "Server address"
msgstr ""
#: src/view/com/modals/ContentFilteringSettings.tsx:311
-msgid "Set {value} for {labelGroup} content moderation policy"
-msgstr ""
+#~ msgid "Set {value} for {labelGroup} content moderation policy"
+#~ msgstr ""
#: src/view/com/modals/ContentFilteringSettings.tsx:160
#: src/view/com/modals/ContentFilteringSettings.tsx:179
-msgctxt "action"
-msgid "Set Age"
+#~ msgctxt "action"
+#~ msgid "Set Age"
+#~ msgstr ""
+
+#: src/screens/Moderation/index.tsx:304
+msgid "Set birthdate"
msgstr ""
#: src/view/screens/Settings/index.tsx:488
-msgid "Set color theme to dark"
-msgstr ""
+#~ msgid "Set color theme to dark"
+#~ msgstr ""
#: src/view/screens/Settings/index.tsx:481
-msgid "Set color theme to light"
-msgstr ""
+#~ msgid "Set color theme to light"
+#~ msgstr ""
#: src/view/screens/Settings/index.tsx:475
-msgid "Set color theme to system setting"
-msgstr ""
+#~ msgid "Set color theme to system setting"
+#~ msgstr ""
#: src/view/screens/Settings/index.tsx:514
-msgid "Set dark theme to the dark theme"
-msgstr ""
+#~ msgid "Set dark theme to the dark theme"
+#~ msgstr ""
#: src/view/screens/Settings/index.tsx:507
-msgid "Set dark theme to the dim theme"
-msgstr ""
+#~ msgid "Set dark theme to the dim theme"
+#~ msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:104
+#: src/screens/Login/SetNewPasswordForm.tsx:102
msgid "Set new password"
msgstr "नया पासवर्ड सेट करें"
-#: src/view/com/auth/create/Step1.tsx:221
-msgid "Set password"
-msgstr ""
+#: src/view/com/auth/create/Step1.tsx:202
+#~ msgid "Set password"
+#~ msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:225
+#: src/view/screens/PreferencesFollowingFeed.tsx:225
msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible."
msgstr "अपने फ़ीड से सभी उद्धरण पदों को छिपाने के लिए इस सेटिंग को \"नहीं\" में सेट करें। Reposts अभी भी दिखाई देगा।।"
-#: src/view/screens/PreferencesHomeFeed.tsx:122
+#: src/view/screens/PreferencesFollowingFeed.tsx:122
msgid "Set this setting to \"No\" to hide all replies from your feed."
msgstr "इस सेटिंग को अपने फ़ीड से सभी उत्तरों को छिपाने के लिए \"नहीं\" पर सेट करें।।"
-#: src/view/screens/PreferencesHomeFeed.tsx:191
+#: src/view/screens/PreferencesFollowingFeed.tsx:191
msgid "Set this setting to \"No\" to hide all reposts from your feed."
msgstr "इस सेटिंग को अपने फ़ीड से सभी पोस्ट छिपाने के लिए \"नहीं\" करने के लिए सेट करें।।"
@@ -3436,35 +4409,71 @@ msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is a
msgstr "इस सेटिंग को \"हाँ\" में सेट करने के लिए एक थ्रेडेड व्यू में जवाब दिखाने के लिए। यह एक प्रयोगात्मक विशेषता है।।"
#: src/view/screens/PreferencesHomeFeed.tsx:261
-msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
-msgstr "इस सेटिंग को अपने निम्नलिखित फ़ीड में अपने सहेजे गए फ़ीड के नमूने दिखाने के लिए \"हाँ\" पर सेट करें। यह एक प्रयोगात्मक विशेषता है।।"
+#~ msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
+#~ msgstr "इस सेटिंग को अपने निम्नलिखित फ़ीड में अपने सहेजे गए फ़ीड के नमूने दिखाने के लिए \"हाँ\" पर सेट करें। यह एक प्रयोगात्मक विशेषता है।।"
-#: src/screens/Onboarding/Layout.tsx:50
+#: src/view/screens/PreferencesFollowingFeed.tsx:261
+msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your Following feed. This is an experimental feature."
+msgstr ""
+
+#: src/screens/Onboarding/Layout.tsx:48
msgid "Set up your account"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:266
+#: src/view/com/modals/ChangeHandle.tsx:267
msgid "Sets Bluesky username"
msgstr ""
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:157
+#: src/view/screens/Settings/index.tsx:507
+msgid "Sets color theme to dark"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:500
+msgid "Sets color theme to light"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:494
+msgid "Sets color theme to system setting"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:533
+msgid "Sets dark theme to the dark theme"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:526
+msgid "Sets dark theme to the dim theme"
+msgstr ""
+
+#: src/screens/Login/ForgotPasswordForm.tsx:113
msgid "Sets email for password reset"
msgstr ""
#: src/view/com/auth/login/ForgotPasswordForm.tsx:122
-msgid "Sets hosting provider for password reset"
+#~ msgid "Sets hosting provider for password reset"
+#~ msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:124
+msgid "Sets image aspect ratio to square"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:114
+msgid "Sets image aspect ratio to tall"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:100
-#: src/view/com/auth/login/LoginForm.tsx:151
-msgid "Sets server for the Bluesky client"
+#: src/view/com/modals/crop-image/CropImage.web.tsx:104
+msgid "Sets image aspect ratio to wide"
msgstr ""
-#: src/Navigation.tsx:135
-#: src/view/screens/Settings/index.tsx:294
-#: src/view/shell/desktop/LeftNav.tsx:433
-#: src/view/shell/Drawer.tsx:567
-#: src/view/shell/Drawer.tsx:568
+#: src/view/com/auth/create/Step1.tsx:97
+#: src/view/com/auth/login/LoginForm.tsx:154
+#~ msgid "Sets server for the Bluesky client"
+#~ msgstr ""
+
+#: src/Navigation.tsx:139
+#: src/view/screens/Settings/index.tsx:313
+#: src/view/shell/desktop/LeftNav.tsx:437
+#: src/view/shell/Drawer.tsx:570
+#: src/view/shell/Drawer.tsx:571
msgid "Settings"
msgstr "सेटिंग्स"
@@ -3472,72 +4481,105 @@ msgstr "सेटिंग्स"
msgid "Sexual activity or erotic nudity."
msgstr "यौन गतिविधि या कामुक नग्नता।।"
+#: src/lib/moderation/useGlobalLabelStrings.ts:38
+msgid "Sexually Suggestive"
+msgstr ""
+
#: src/view/com/lightbox/Lightbox.tsx:141
msgctxt "action"
msgid "Share"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:294
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
-#: src/view/screens/ProfileList.tsx:417
+#: src/view/com/profile/ProfileMenu.tsx:215
+#: src/view/com/profile/ProfileMenu.tsx:224
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:235
+#: src/view/screens/ProfileList.tsx:388
msgid "Share"
msgstr "शेयर"
-#: src/view/screens/ProfileFeed.tsx:304
+#: src/view/com/profile/ProfileMenu.tsx:373
+#: src/view/com/util/forms/PostDropdownBtn.tsx:347
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:251
+msgid "Share anyway"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:362
+#: src/view/screens/ProfileFeed.tsx:364
msgid "Share feed"
msgstr ""
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:43
-#: src/view/com/modals/ContentFilteringSettings.tsx:266
-#: src/view/com/util/moderation/ContentHider.tsx:107
-#: src/view/com/util/moderation/PostHider.tsx:108
-#: src/view/screens/Settings/index.tsx:344
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
+msgid "Share Link"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:92
+msgid "Shares the linked website"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:136
+#: src/components/moderation/PostHider.tsx:107
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:54
+#: src/view/screens/Settings/index.tsx:363
msgid "Show"
msgstr "दिखाओ"
-#: src/view/screens/PreferencesHomeFeed.tsx:68
+#: src/view/screens/PreferencesFollowingFeed.tsx:68
msgid "Show all replies"
msgstr ""
-#: src/view/com/util/moderation/ScreenHider.tsx:132
+#: src/components/moderation/ScreenHider.tsx:169
+#: src/components/moderation/ScreenHider.tsx:172
msgid "Show anyway"
msgstr "दिखाओ"
-#: src/view/com/modals/EmbedConsent.tsx:87
-msgid "Show embeds from {0}"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:27
+#: src/lib/moderation/useLabelBehaviorDescription.ts:63
+msgid "Show badge"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:458
+#: src/lib/moderation/useLabelBehaviorDescription.ts:61
+msgid "Show badge and filter from feeds"
+msgstr ""
+
+#: src/view/com/modals/EmbedConsent.tsx:87
+#~ msgid "Show embeds from {0}"
+#~ msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:200
msgid "Show follows similar to {0}"
msgstr ""
-#: src/view/com/post-thread/PostThreadItem.tsx:539
-#: src/view/com/post/Post.tsx:197
-#: src/view/com/posts/FeedItem.tsx:363
+#: src/view/com/post-thread/PostThreadItem.tsx:507
+#: src/view/com/post/Post.tsx:201
+#: src/view/com/posts/FeedItem.tsx:355
msgid "Show More"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:258
+#: src/view/screens/PreferencesFollowingFeed.tsx:258
msgid "Show Posts from My Feeds"
msgstr "मेरी फीड से पोस्ट दिखाएं"
-#: src/view/screens/PreferencesHomeFeed.tsx:222
+#: src/view/screens/PreferencesFollowingFeed.tsx:222
msgid "Show Quote Posts"
msgstr "उद्धरण पोस्ट दिखाओ"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:118
+#: src/screens/Onboarding/StepFollowingFeed.tsx:119
msgid "Show quote-posts in Following feed"
msgstr ""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:134
+#: src/screens/Onboarding/StepFollowingFeed.tsx:135
msgid "Show quotes in Following"
msgstr ""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:94
+#: src/screens/Onboarding/StepFollowingFeed.tsx:95
msgid "Show re-posts in Following feed"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:119
+#: src/view/screens/PreferencesFollowingFeed.tsx:119
msgid "Show Replies"
msgstr "उत्तर दिखाएँ"
@@ -3545,87 +4587,98 @@ msgstr "उत्तर दिखाएँ"
msgid "Show replies by people you follow before all other replies."
msgstr "अन्य सभी उत्तरों से पहले उन लोगों के उत्तर दिखाएं जिन्हें आप फ़ॉलो करते हैं।"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:86
+#: src/screens/Onboarding/StepFollowingFeed.tsx:87
msgid "Show replies in Following"
msgstr ""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:70
+#: src/screens/Onboarding/StepFollowingFeed.tsx:71
msgid "Show replies in Following feed"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:70
+#: src/view/screens/PreferencesFollowingFeed.tsx:70
msgid "Show replies with at least {value} {0}"
msgstr ""
-#: src/view/screens/PreferencesHomeFeed.tsx:188
+#: src/view/screens/PreferencesFollowingFeed.tsx:188
msgid "Show Reposts"
msgstr "रीपोस्ट दिखाएँ"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:110
+#: src/screens/Onboarding/StepFollowingFeed.tsx:111
msgid "Show reposts in Following"
msgstr ""
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:68
+#: src/components/moderation/PostHider.tsx:64
msgid "Show the content"
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:346
+#: src/view/com/notifications/FeedItem.tsx:351
msgid "Show users"
msgstr "लोग दिखाएँ"
-#: src/view/com/profile/ProfileHeader.tsx:461
-msgid "Shows a list of users similar to this user."
+#: src/lib/moderation/useLabelBehaviorDescription.ts:58
+msgid "Show warning"
msgstr ""
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:124
-#: src/view/com/profile/ProfileHeader.tsx:505
+#: src/lib/moderation/useLabelBehaviorDescription.ts:56
+msgid "Show warning and filter from feeds"
+msgstr ""
+
+#: src/view/com/profile/ProfileHeader.tsx:462
+#~ msgid "Shows a list of users similar to this user."
+#~ msgstr ""
+
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:130
msgid "Shows posts from {0} in your feed"
msgstr ""
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:70
-#: src/view/com/auth/login/Login.tsx:98
-#: src/view/com/auth/SplashScreen.tsx:54
-#: src/view/shell/bottom-bar/BottomBar.tsx:285
-#: src/view/shell/bottom-bar/BottomBar.tsx:286
-#: src/view/shell/bottom-bar/BottomBar.tsx:288
+#: src/screens/Login/index.tsx:100
+#: src/screens/Login/index.tsx:119
+#: src/screens/Login/LoginForm.tsx:131
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:73
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:83
+#: src/view/com/auth/SplashScreen.tsx:81
+#: src/view/com/auth/SplashScreen.tsx:90
+#: src/view/com/auth/SplashScreen.web.tsx:110
+#: src/view/com/auth/SplashScreen.web.tsx:119
+#: src/view/shell/bottom-bar/BottomBar.tsx:300
+#: src/view/shell/bottom-bar/BottomBar.tsx:301
+#: src/view/shell/bottom-bar/BottomBar.tsx:303
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:178
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:179
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:181
#: src/view/shell/NavSignupCard.tsx:58
#: src/view/shell/NavSignupCard.tsx:59
+#: src/view/shell/NavSignupCard.tsx:61
msgid "Sign in"
msgstr "साइन इन करें"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:78
-#: src/view/com/auth/SplashScreen.tsx:57
-#: src/view/com/auth/SplashScreen.web.tsx:87
-msgid "Sign In"
-msgstr "साइन इन करें"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:82
+#: src/view/com/auth/SplashScreen.tsx:86
+#: src/view/com/auth/SplashScreen.web.tsx:91
+#~ msgid "Sign In"
+#~ msgstr "साइन इन करें"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:44
+#: src/components/AccountList.tsx:109
msgid "Sign in as {0}"
msgstr "{0} के रूप में साइन इन करें"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:118
-#: src/view/com/auth/login/Login.tsx:116
+#: src/screens/Login/ChooseAccountForm.tsx:64
msgid "Sign in as..."
msgstr "... के रूप में साइन इन करें"
-#: src/view/com/auth/login/LoginForm.tsx:137
-msgid "Sign into"
-msgstr "साइन इन करें"
+#: src/view/com/auth/login/LoginForm.tsx:140
+#~ msgid "Sign into"
+#~ msgstr "साइन इन करें"
-#: src/view/com/modals/SwitchAccount.tsx:64
-#: src/view/com/modals/SwitchAccount.tsx:69
-#: src/view/screens/Settings/index.tsx:100
-#: src/view/screens/Settings/index.tsx:103
+#: src/view/screens/Settings/index.tsx:107
+#: src/view/screens/Settings/index.tsx:110
msgid "Sign out"
msgstr "साइन आउट"
-#: src/view/shell/bottom-bar/BottomBar.tsx:275
-#: src/view/shell/bottom-bar/BottomBar.tsx:276
-#: src/view/shell/bottom-bar/BottomBar.tsx:278
+#: src/view/shell/bottom-bar/BottomBar.tsx:290
+#: src/view/shell/bottom-bar/BottomBar.tsx:291
+#: src/view/shell/bottom-bar/BottomBar.tsx:293
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:168
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:169
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:171
@@ -3639,35 +4692,36 @@ msgstr ""
msgid "Sign up or sign in to join the conversation"
msgstr ""
-#: src/view/com/util/moderation/ScreenHider.tsx:76
+#: src/components/moderation/ScreenHider.tsx:97
+#: src/lib/moderation/useGlobalLabelStrings.ts:28
msgid "Sign-in Required"
msgstr ""
-#: src/view/screens/Settings/index.tsx:355
+#: src/view/screens/Settings/index.tsx:374
msgid "Signed in as"
msgstr "आपने इस रूप में साइन इन करा है:"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:103
+#: src/screens/Login/ChooseAccountForm.tsx:48
msgid "Signed in as @{0}"
msgstr ""
-#: src/view/com/modals/SwitchAccount.tsx:66
-msgid "Signs {0} out of Bluesky"
-msgstr ""
+#: src/view/com/modals/SwitchAccount.tsx:70
+#~ msgid "Signs {0} out of Bluesky"
+#~ msgstr ""
-#: src/screens/Onboarding/StepInterests/index.tsx:235
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:195
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:33
+#: src/screens/Onboarding/StepInterests/index.tsx:239
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:203
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:35
msgid "Skip"
msgstr "स्किप"
-#: src/screens/Onboarding/StepInterests/index.tsx:232
+#: src/screens/Onboarding/StepInterests/index.tsx:236
msgid "Skip this flow"
msgstr ""
#: src/view/com/auth/create/Step2.tsx:82
-msgid "SMS verification"
-msgstr ""
+#~ msgid "SMS verification"
+#~ msgstr ""
#: src/screens/Onboarding/index.tsx:40
msgid "Software Dev"
@@ -3677,11 +4731,21 @@ msgstr ""
#~ msgid "Something went wrong and we're not sure what."
#~ msgstr ""
-#: src/view/com/modals/Waitlist.tsx:51
-msgid "Something went wrong. Check your email and try again."
+#: src/components/ReportDialog/index.tsx:59
+#: src/screens/Moderation/index.tsx:114
+#: src/screens/Profile/Sections/Labels.tsx:76
+msgid "Something went wrong, please try again."
msgstr ""
-#: src/App.native.tsx:61
+#: src/components/Lists.tsx:203
+#~ msgid "Something went wrong!"
+#~ msgstr ""
+
+#: src/view/com/modals/Waitlist.tsx:51
+#~ msgid "Something went wrong. Check your email and try again."
+#~ msgstr ""
+
+#: src/App.native.tsx:66
msgid "Sorry! Your session expired. Please log in again."
msgstr ""
@@ -3693,11 +4757,23 @@ msgstr "उत्तर क्रमबद्ध करें"
msgid "Sort replies to the same post by:"
msgstr "उसी पोस्ट के उत्तरों को इस प्रकार क्रमबद्ध करें:"
+#: src/components/moderation/LabelsOnMeDialog.tsx:146
+msgid "Source:"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:65
+msgid "Spam"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:53
+msgid "Spam; excessive mentions or replies"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:30
msgid "Sports"
msgstr ""
-#: src/view/com/modals/crop-image/CropImage.web.tsx:122
+#: src/view/com/modals/crop-image/CropImage.web.tsx:123
msgid "Square"
msgstr "स्क्वायर"
@@ -3705,45 +4781,62 @@ msgstr "स्क्वायर"
#~ msgid "Staging"
#~ msgstr "स्टेजिंग"
-#: src/view/screens/Settings/index.tsx:871
+#: src/view/screens/Settings/index.tsx:903
msgid "Status page"
msgstr "स्थिति पृष्ठ"
-#: src/view/com/auth/create/StepHeader.tsx:22
-msgid "Step {0} of {numSteps}"
+#: src/screens/Signup/index.tsx:142
+msgid "Step"
msgstr ""
-#: src/view/screens/Settings/index.tsx:274
+#: src/view/com/auth/create/StepHeader.tsx:22
+#~ msgid "Step {0} of {numSteps}"
+#~ msgstr ""
+
+#: src/view/screens/Settings/index.tsx:292
msgid "Storage cleared, you need to restart the app now."
msgstr ""
-#: src/Navigation.tsx:202
-#: src/view/screens/Settings/index.tsx:807
+#: src/Navigation.tsx:211
+#: src/view/screens/Settings/index.tsx:831
msgid "Storybook"
msgstr "Storybook"
-#: src/view/com/modals/AppealLabel.tsx:101
+#: src/components/moderation/LabelsOnMeDialog.tsx:255
+#: src/components/moderation/LabelsOnMeDialog.tsx:256
msgid "Submit"
msgstr ""
-#: src/view/screens/ProfileList.tsx:607
+#: src/view/screens/ProfileList.tsx:590
msgid "Subscribe"
msgstr "सब्सक्राइब"
-#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:173
+#: src/screens/Profile/Sections/Labels.tsx:180
+msgid "Subscribe to @{0} to use these labels:"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:221
+msgid "Subscribe to Labeler"
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:172
#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:307
msgid "Subscribe to the {0} feed"
msgstr ""
-#: src/view/screens/ProfileList.tsx:603
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:184
+msgid "Subscribe to this labeler"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:586
msgid "Subscribe to this list"
msgstr "इस सूची को सब्सक्राइब करें"
-#: src/view/screens/Search/Search.tsx:373
+#: src/view/screens/Search/Search.tsx:376
msgid "Suggested Follows"
msgstr "अनुशंसित लोग"
-#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:64
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:65
msgid "Suggested for you"
msgstr ""
@@ -3751,7 +4844,7 @@ msgstr ""
msgid "Suggestive"
msgstr ""
-#: src/Navigation.tsx:212
+#: src/Navigation.tsx:226
#: src/view/screens/Support.tsx:30
#: src/view/screens/Support.tsx:33
msgid "Support"
@@ -3761,29 +4854,40 @@ msgstr "सहायता"
#~ msgid "Swipe up to see more"
#~ msgstr ""
-#: src/view/com/modals/SwitchAccount.tsx:117
+#: src/components/dialogs/SwitchAccount.tsx:46
+#: src/components/dialogs/SwitchAccount.tsx:49
msgid "Switch Account"
msgstr "खाते बदलें"
-#: src/view/com/modals/SwitchAccount.tsx:97
-#: src/view/screens/Settings/index.tsx:130
+#: src/view/screens/Settings/index.tsx:139
msgid "Switch to {0}"
msgstr ""
-#: src/view/com/modals/SwitchAccount.tsx:98
-#: src/view/screens/Settings/index.tsx:131
+#: src/view/screens/Settings/index.tsx:140
msgid "Switches the account you are logged in to"
msgstr ""
-#: src/view/screens/Settings/index.tsx:472
+#: src/view/screens/Settings/index.tsx:491
msgid "System"
msgstr "प्रणाली"
-#: src/view/screens/Settings/index.tsx:795
+#: src/view/screens/Settings/index.tsx:819
msgid "System log"
msgstr "सिस्टम लॉग"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:112
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "tag"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:78
+msgid "Tag menu: {displayTag}"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:74
+#~ msgid "Tag menu: {tag}"
+#~ msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:113
msgid "Tall"
msgstr "लंबा"
@@ -3795,26 +4899,53 @@ msgstr ""
msgid "Tech"
msgstr ""
-#: src/view/shell/desktop/RightNav.tsx:89
+#: src/view/shell/desktop/RightNav.tsx:81
msgid "Terms"
msgstr "शर्तें"
-#: src/Navigation.tsx:222
-#: src/view/screens/Settings/index.tsx:885
+#: src/Navigation.tsx:236
+#: src/screens/Signup/StepInfo/Policies.tsx:49
+#: src/view/screens/Settings/index.tsx:917
#: src/view/screens/TermsOfService.tsx:29
-#: src/view/shell/Drawer.tsx:256
+#: src/view/shell/Drawer.tsx:259
msgid "Terms of Service"
msgstr "सेवा की शर्तें"
-#: src/view/com/modals/AppealLabel.tsx:70
-#: src/view/com/modals/report/InputIssueDetails.tsx:51
+#: src/lib/moderation/useReportOptions.ts:58
+#: src/lib/moderation/useReportOptions.ts:79
+#: src/lib/moderation/useReportOptions.ts:87
+msgid "Terms used violate community standards"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "text"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:219
msgid "Text input field"
msgstr "पाठ इनपुट फ़ील्ड"
-#: src/view/com/profile/ProfileHeader.tsx:262
+#: src/components/ReportDialog/SubmitView.tsx:78
+msgid "Thank you. Your report has been sent."
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:465
+msgid "That contains the following:"
+msgstr ""
+
+#: src/screens/Signup/index.tsx:84
+msgid "That handle is already taken."
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:283
+#: src/view/com/profile/ProfileMenu.tsx:349
msgid "The account will be able to interact with you after unblocking."
msgstr "अनब्लॉक करने के बाद अकाउंट आपसे इंटरैक्ट कर सकेगा।"
+#: src/components/moderation/ModerationDetailsDialog.tsx:127
+msgid "the author"
+msgstr ""
+
#: src/view/screens/CommunityGuidelines.tsx:36
msgid "The Community Guidelines have been moved to <0/>"
msgstr "सामुदायिक दिशानिर्देशों को <0/> पर स्थानांतरित कर दिया गया है"
@@ -3823,11 +4954,20 @@ msgstr "सामुदायिक दिशानिर्देशों क
msgid "The Copyright Policy has been moved to <0/>"
msgstr "कॉपीराइट नीति को <0/> पर स्थानांतरित कर दिया गया है"
-#: src/screens/Onboarding/Layout.tsx:60
+#: src/components/moderation/LabelsOnMeDialog.tsx:48
+msgid "The following labels were applied to your account."
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:49
+msgid "The following labels were applied to your content."
+msgstr ""
+
+#: src/screens/Onboarding/Layout.tsx:58
msgid "The following steps will help customize your Bluesky experience."
msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:453
+#: src/view/com/post-thread/PostThread.tsx:153
+#: src/view/com/post-thread/PostThread.tsx:165
msgid "The post may have been deleted."
msgstr "हो सकता है कि यह पोस्ट हटा दी गई हो।"
@@ -3843,24 +4983,25 @@ msgstr "समर्थन प्रपत्र स्थानांतरि
msgid "The Terms of Service have been moved to"
msgstr "सेवा की शर्तों को स्थानांतरित कर दिया गया है"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:150
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:141
msgid "There are many feeds to try:"
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:549
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:112
+#: src/view/screens/ProfileFeed.tsx:544
msgid "There was an an issue contacting the server, please check your internet connection and try again."
msgstr ""
-#: src/view/com/posts/FeedErrorMessage.tsx:139
+#: src/view/com/posts/FeedErrorMessage.tsx:138
msgid "There was an an issue removing this feed. Please check your internet connection and try again."
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:209
+#: src/view/screens/ProfileFeed.tsx:218
msgid "There was an an issue updating your feeds, please check your internet connection and try again."
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:236
-#: src/view/screens/ProfileList.tsx:266
+#: src/view/screens/ProfileFeed.tsx:245
+#: src/view/screens/ProfileList.tsx:275
#: src/view/screens/SavedFeeds.tsx:209
#: src/view/screens/SavedFeeds.tsx:231
#: src/view/screens/SavedFeeds.tsx:252
@@ -3869,9 +5010,8 @@ msgstr ""
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:57
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:66
-#: src/view/com/feeds/FeedSourceCard.tsx:113
-#: src/view/com/feeds/FeedSourceCard.tsx:127
-#: src/view/com/feeds/FeedSourceCard.tsx:181
+#: src/view/com/feeds/FeedSourceCard.tsx:110
+#: src/view/com/feeds/FeedSourceCard.tsx:123
msgid "There was an issue contacting your server"
msgstr ""
@@ -3879,7 +5019,7 @@ msgstr ""
msgid "There was an issue fetching notifications. Tap here to try again."
msgstr ""
-#: src/view/com/posts/Feed.tsx:263
+#: src/view/com/posts/Feed.tsx:287
msgid "There was an issue fetching posts. Tap here to try again."
msgstr ""
@@ -3892,34 +5032,40 @@ msgstr ""
msgid "There was an issue fetching your lists. Tap here to try again."
msgstr ""
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:63
-#: src/view/com/modals/ContentFilteringSettings.tsx:126
+#: src/components/ReportDialog/SubmitView.tsx:83
+msgid "There was an issue sending your report. Please check your internet connection."
+msgstr ""
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:65
msgid "There was an issue syncing your preferences with the server"
msgstr ""
-#: src/view/screens/AppPasswords.tsx:66
+#: src/view/screens/AppPasswords.tsx:68
msgid "There was an issue with fetching your app passwords"
msgstr ""
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:93
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:105
-#: src/view/com/profile/ProfileHeader.tsx:156
-#: src/view/com/profile/ProfileHeader.tsx:177
-#: src/view/com/profile/ProfileHeader.tsx:216
-#: src/view/com/profile/ProfileHeader.tsx:229
-#: src/view/com/profile/ProfileHeader.tsx:249
-#: src/view/com/profile/ProfileHeader.tsx:271
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:105
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:127
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:99
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:111
+#: src/view/com/profile/ProfileMenu.tsx:106
+#: src/view/com/profile/ProfileMenu.tsx:117
+#: src/view/com/profile/ProfileMenu.tsx:132
+#: src/view/com/profile/ProfileMenu.tsx:143
+#: src/view/com/profile/ProfileMenu.tsx:157
+#: src/view/com/profile/ProfileMenu.tsx:170
msgid "There was an issue! {0}"
msgstr ""
-#: src/view/screens/ProfileList.tsx:287
-#: src/view/screens/ProfileList.tsx:306
-#: src/view/screens/ProfileList.tsx:328
-#: src/view/screens/ProfileList.tsx:347
+#: src/view/screens/ProfileList.tsx:288
+#: src/view/screens/ProfileList.tsx:302
+#: src/view/screens/ProfileList.tsx:316
+#: src/view/screens/ProfileList.tsx:330
msgid "There was an issue. Please check your internet connection and try again."
msgstr ""
-#: src/view/com/util/ErrorBoundary.tsx:36
+#: src/view/com/util/ErrorBoundary.tsx:51
msgid "There was an unexpected issue in the application. Please let us know if this happened to you!"
msgstr "एप्लिकेशन में एक अप्रत्याशित समस्या थी. कृपया हमें बताएं कि क्या आपके साथ ऐसा हुआ है!"
@@ -3928,26 +5074,39 @@ msgid "There's been a rush of new users to Bluesky! We'll activate your account
msgstr ""
#: src/view/com/auth/create/Step2.tsx:55
-msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
-msgstr ""
+#~ msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
+#~ msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:138
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:146
msgid "These are popular accounts you might like:"
msgstr ""
-#: src/view/com/util/moderation/ScreenHider.tsx:88
+#: src/components/moderation/ScreenHider.tsx:116
msgid "This {screenDescription} has been flagged:"
msgstr "यह {screenDescription} फ्लैग किया गया है:"
-#: src/view/com/util/moderation/ScreenHider.tsx:83
+#: src/components/moderation/ScreenHider.tsx:111
msgid "This account has requested that users sign in to view their profile."
msgstr ""
-#: src/view/com/modals/EmbedConsent.tsx:68
+#: src/components/moderation/LabelsOnMeDialog.tsx:204
+msgid "This appeal will be sent to <0>{0}0>."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:19
+msgid "This content has been hidden by the moderators."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:24
+msgid "This content has received a general warning from moderators."
+msgstr ""
+
+#: src/components/dialogs/EmbedConsent.tsx:64
msgid "This content is hosted by {0}. Do you want to enable external media?"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:67
+#: src/components/moderation/ModerationDetailsDialog.tsx:77
+#: src/lib/moderation/useModerationCauseDescription.ts:77
msgid "This content is not available because one of the users involved has blocked the other."
msgstr ""
@@ -3956,16 +5115,20 @@ msgid "This content is not viewable without a Bluesky account."
msgstr ""
#: src/view/screens/Settings/ExportCarDialog.tsx:75
-msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
+#~ msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
+#~ msgstr ""
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:75
+msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost0>."
msgstr ""
#: src/view/com/posts/FeedErrorMessage.tsx:114
msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later."
msgstr ""
-#: src/view/screens/Profile.tsx:420
-#: src/view/screens/ProfileFeed.tsx:475
-#: src/view/screens/ProfileList.tsx:660
+#: src/screens/Profile/Sections/Feed.tsx:50
+#: src/view/screens/ProfileFeed.tsx:477
+#: src/view/screens/ProfileList.tsx:675
msgid "This feed is empty!"
msgstr ""
@@ -3973,7 +5136,7 @@ msgstr ""
msgid "This feed is empty! You may need to follow more users or tune your language settings."
msgstr ""
-#: src/view/com/modals/BirthDateSettings.tsx:61
+#: src/components/dialogs/BirthDateSettings.tsx:41
msgid "This information is not shared with other users."
msgstr "यह जानकारी अन्य उपयोगकर्ताओं के साथ साझा नहीं की जाती है।।"
@@ -3981,48 +5144,110 @@ msgstr "यह जानकारी अन्य उपयोगकर्ता
msgid "This is important in case you ever need to change your email or reset your password."
msgstr "अगर आपको कभी अपना ईमेल बदलने या पासवर्ड रीसेट करने की आवश्यकता है तो यह महत्वपूर्ण है।।"
-#: src/view/com/modals/LinkWarning.tsx:58
+#: src/components/moderation/ModerationDetailsDialog.tsx:124
+msgid "This label was applied by {0}."
+msgstr ""
+
+#: src/screens/Profile/Sections/Labels.tsx:167
+msgid "This labeler hasn't declared what labels it publishes, and may not be active."
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:72
msgid "This link is taking you to the following website:"
msgstr "यह लिंक आपको निम्नलिखित वेबसाइट पर ले जा रहा है:"
-#: src/view/screens/ProfileList.tsx:834
+#: src/view/screens/ProfileList.tsx:853
msgid "This list is empty!"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:106
+#: src/screens/Profile/ErrorState.tsx:40
+msgid "This moderation service is unavailable. See below for more details. If this issue persists, contact us."
+msgstr ""
+
+#: src/view/com/modals/AddAppPasswords.tsx:107
msgid "This name is already in use"
msgstr ""
-#: src/view/com/post-thread/PostThreadItem.tsx:122
+#: src/view/com/post-thread/PostThreadItem.tsx:125
msgid "This post has been deleted."
msgstr "इस पोस्ट को हटा दिया गया है।।"
-#: src/view/com/modals/ModerationDetails.tsx:62
+#: src/view/com/util/forms/PostDropdownBtn.tsx:344
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:248
+msgid "This post is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:326
+msgid "This post will be hidden from feeds."
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:370
+msgid "This profile is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/Policies.tsx:37
+msgid "This service has not provided terms of service or a privacy policy."
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:445
+msgid "This should create a domain record at:"
+msgstr ""
+
+#: src/view/com/profile/ProfileFollowers.tsx:87
+msgid "This user doesn't have any followers."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:72
+#: src/lib/moderation/useModerationCauseDescription.ts:68
msgid "This user has blocked you. You cannot view their content."
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:42
-msgid "This user is included in the <0/> list which you have blocked."
+#: src/lib/moderation/useGlobalLabelStrings.ts:30
+msgid "This user has requested that their content only be shown to signed-in users."
msgstr ""
+#: src/view/com/modals/ModerationDetails.tsx:42
+#~ msgid "This user is included in the <0/> list which you have blocked."
+#~ msgstr ""
+
#: src/view/com/modals/ModerationDetails.tsx:74
-msgid "This user is included in the <0/> list which you have muted."
+#~ msgid "This user is included in the <0/> list which you have muted."
+#~ msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:55
+msgid "This user is included in the <0>{0}0> list which you have blocked."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:84
+msgid "This user is included in the <0>{0}0> list which you have muted."
msgstr ""
#: src/view/com/modals/ModerationDetails.tsx:74
#~ msgid "This user is included the <0/> list which you have muted."
#~ msgstr ""
+#: src/view/com/profile/ProfileFollows.tsx:87
+msgid "This user isn't following anyone."
+msgstr ""
+
#: src/view/com/modals/SelfLabel.tsx:137
msgid "This warning is only available for posts with media attached."
msgstr "यह चेतावनी केवल मीडिया संलग्न पोस्ट के लिए उपलब्ध है।"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:192
-msgid "This will hide this post from your feeds."
+#: src/components/dialogs/MutedWords.tsx:283
+msgid "This will delete {0} from your muted words. You can always add it back later."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:282
+#~ msgid "This will hide this post from your feeds."
+#~ msgstr ""
+
+#: src/view/screens/Settings/index.tsx:574
+msgid "Thread preferences"
msgstr ""
#: src/view/screens/PreferencesThreads.tsx:53
-#: src/view/screens/Settings/index.tsx:565
+#: src/view/screens/Settings/index.tsx:584
msgid "Thread Preferences"
msgstr "थ्रेड प्राथमिकता"
@@ -4030,21 +5255,34 @@ msgstr "थ्रेड प्राथमिकता"
msgid "Threaded Mode"
msgstr "थ्रेड मोड"
-#: src/Navigation.tsx:252
+#: src/Navigation.tsx:269
msgid "Threads Preferences"
msgstr ""
+#: src/components/ReportDialog/SelectLabelerView.tsx:33
+msgid "To whom would you like to send this report?"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:112
+msgid "Toggle between muted word options."
+msgstr ""
+
#: src/view/com/util/forms/DropdownButton.tsx:246
msgid "Toggle dropdown"
msgstr "ड्रॉपडाउन टॉगल करें"
-#: src/view/com/modals/EditImage.tsx:271
+#: src/screens/Moderation/index.tsx:332
+msgid "Toggle to enable or disable adult content"
+msgstr ""
+
+#: src/view/com/modals/EditImage.tsx:272
msgid "Transformations"
msgstr "परिवर्तन"
-#: src/view/com/post-thread/PostThreadItem.tsx:686
-#: src/view/com/post-thread/PostThreadItem.tsx:688
-#: src/view/com/util/forms/PostDropdownBtn.tsx:125
+#: src/view/com/post-thread/PostThreadItem.tsx:644
+#: src/view/com/post-thread/PostThreadItem.tsx:646
+#: src/view/com/util/forms/PostDropdownBtn.tsx:212
+#: src/view/com/util/forms/PostDropdownBtn.tsx:214
msgid "Translate"
msgstr "अनुवाद"
@@ -4053,85 +5291,141 @@ msgctxt "action"
msgid "Try again"
msgstr "फिर से कोशिश करो"
-#: src/view/screens/ProfileList.tsx:505
+#: src/view/com/modals/ChangeHandle.tsx:428
+msgid "Type:"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:478
msgid "Un-block list"
msgstr ""
-#: src/view/screens/ProfileList.tsx:490
+#: src/view/screens/ProfileList.tsx:461
msgid "Un-mute list"
msgstr ""
-#: src/view/com/auth/create/CreateAccount.tsx:66
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:87
-#: src/view/com/auth/login/Login.tsx:76
-#: src/view/com/auth/login/LoginForm.tsx:118
+#: src/screens/Login/ForgotPasswordForm.tsx:74
+#: src/screens/Login/index.tsx:78
+#: src/screens/Login/LoginForm.tsx:119
+#: src/screens/Login/SetNewPasswordForm.tsx:77
+#: src/screens/Signup/index.tsx:63
#: src/view/com/modals/ChangePassword.tsx:70
msgid "Unable to contact your service. Please check your Internet connection."
msgstr "आपकी सेवा से संपर्क करने में असमर्थ। कृपया अपने इंटरनेट कनेक्शन की जांच करें।।"
-#: src/view/com/profile/ProfileHeader.tsx:432
-#: src/view/screens/ProfileList.tsx:589
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:181
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+#: src/view/screens/ProfileList.tsx:572
msgid "Unblock"
msgstr "अनब्लॉक"
-#: src/view/com/profile/ProfileHeader.tsx:435
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:186
msgctxt "action"
msgid "Unblock"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:260
-#: src/view/com/profile/ProfileHeader.tsx:344
+#: src/view/com/profile/ProfileMenu.tsx:299
+#: src/view/com/profile/ProfileMenu.tsx:305
msgid "Unblock Account"
msgstr "अनब्लॉक खाता"
-#: src/view/com/modals/Repost.tsx:42
-#: src/view/com/modals/Repost.tsx:55
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:281
+#: src/view/com/profile/ProfileMenu.tsx:343
+msgid "Unblock Account?"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:43
+#: src/view/com/modals/Repost.tsx:56
#: src/view/com/util/post-ctrls/RepostButton.tsx:60
#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
msgid "Undo repost"
msgstr "पुनः पोस्ट पूर्ववत करें"
-#: src/view/com/profile/FollowButton.tsx:55
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
+msgid "Unfollow"
+msgstr ""
+
+#: src/view/com/profile/FollowButton.tsx:60
msgctxt "action"
msgid "Unfollow"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:484
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:220
msgid "Unfollow {0}"
msgstr ""
-#: src/view/com/auth/create/state.ts:300
-msgid "Unfortunately, you do not meet the requirements to create an account."
+#: src/view/com/profile/ProfileMenu.tsx:241
+#: src/view/com/profile/ProfileMenu.tsx:251
+msgid "Unfollow Account"
msgstr ""
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/auth/create/state.ts:262
+#~ msgid "Unfortunately, you do not meet the requirements to create an account."
+#~ msgstr ""
+
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Unlike"
msgstr ""
-#: src/view/screens/ProfileList.tsx:596
+#: src/view/screens/ProfileFeed.tsx:573
+msgid "Unlike this feed"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:249
+#: src/view/screens/ProfileList.tsx:579
msgid "Unmute"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:325
+#: src/components/TagMenu/index.web.tsx:104
+msgid "Unmute {truncatedTag}"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:278
+#: src/view/com/profile/ProfileMenu.tsx:284
msgid "Unmute Account"
msgstr "अनम्यूट खाता"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/components/TagMenu/index.tsx:208
+msgid "Unmute all {displayTag} posts"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:210
+#~ msgid "Unmute all {tag} posts"
+#~ msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:256
msgid "Unmute thread"
msgstr "थ्रेड को अनम्यूट करें"
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:295
+#: src/view/screens/ProfileList.tsx:563
msgid "Unpin"
msgstr ""
-#: src/view/screens/ProfileList.tsx:473
+#: src/view/screens/ProfileFeed.tsx:292
+msgid "Unpin from home"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:444
msgid "Unpin moderation list"
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:345
-msgid "Unsave"
+#: src/view/screens/ProfileFeed.tsx:346
+#~ msgid "Unsave"
+#~ msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:219
+msgid "Unsubscribe"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:183
+msgid "Unsubscribe from this labeler"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:70
+msgid "Unwanted Sexual Content"
msgstr ""
#: src/view/com/modals/UserAddRemoveLists.tsx:70
@@ -4139,22 +5433,53 @@ msgid "Update {displayName} in Lists"
msgstr "सूची में {displayName} अद्यतन करें"
#: src/lib/hooks/useOTAUpdate.ts:15
-msgid "Update Available"
-msgstr "उपलब्ध अद्यतन"
+#~ msgid "Update Available"
+#~ msgstr "उपलब्ध अद्यतन"
+
+#: src/view/com/modals/ChangeHandle.tsx:508
+msgid "Update to {handle}"
+msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:204
+#: src/screens/Login/SetNewPasswordForm.tsx:186
msgid "Updating..."
msgstr "अद्यतन..।"
-#: src/view/com/modals/ChangeHandle.tsx:455
+#: src/view/com/modals/ChangeHandle.tsx:454
msgid "Upload a text file to:"
msgstr "एक पाठ फ़ाइल अपलोड करने के लिए:"
-#: src/view/screens/AppPasswords.tsx:195
+#: src/view/com/util/UserAvatar.tsx:326
+#: src/view/com/util/UserAvatar.tsx:329
+#: src/view/com/util/UserBanner.tsx:116
+#: src/view/com/util/UserBanner.tsx:119
+msgid "Upload from Camera"
+msgstr ""
+
+#: src/view/com/util/UserAvatar.tsx:343
+#: src/view/com/util/UserBanner.tsx:133
+msgid "Upload from Files"
+msgstr ""
+
+#: src/view/com/util/UserAvatar.tsx:337
+#: src/view/com/util/UserAvatar.tsx:341
+#: src/view/com/util/UserBanner.tsx:127
+#: src/view/com/util/UserBanner.tsx:131
+msgid "Upload from Library"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:408
+msgid "Use a file on your server"
+msgstr ""
+
+#: src/view/screens/AppPasswords.tsx:197
msgid "Use app passwords to login to other Bluesky clients without giving full access to your account or password."
msgstr "अपने खाते या पासवर्ड को पूर्ण एक्सेस देने के बिना अन्य ब्लूस्की ग्राहकों को लॉगिन करने के लिए ऐप पासवर्ड का उपयोग करें।।"
-#: src/view/com/modals/ChangeHandle.tsx:515
+#: src/view/com/modals/ChangeHandle.tsx:517
+msgid "Use bsky.social as hosting provider"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:516
msgid "Use default provider"
msgstr "डिफ़ॉल्ट प्रदाता का उपयोग करें"
@@ -4168,7 +5493,11 @@ msgstr ""
msgid "Use my default browser"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:155
+#: src/view/com/modals/ChangeHandle.tsx:400
+msgid "Use the DNS panel"
+msgstr ""
+
+#: src/view/com/modals/AddAppPasswords.tsx:156
msgid "Use this to sign into the other app along with your handle."
msgstr "अपने हैंडल के साथ दूसरे ऐप में साइन इन करने के लिए इसका उपयोग करें।"
@@ -4176,46 +5505,55 @@ msgstr "अपने हैंडल के साथ दूसरे ऐप म
#~ msgid "Use your domain as your Bluesky client service provider"
#~ msgstr ""
-#: src/view/com/modals/InviteCodes.tsx:200
+#: src/view/com/modals/InviteCodes.tsx:201
msgid "Used by:"
msgstr "के द्वारा उपयोग:"
-#: src/view/com/modals/ModerationDetails.tsx:54
+#: src/components/moderation/ModerationDetailsDialog.tsx:64
+#: src/lib/moderation/useModerationCauseDescription.ts:56
msgid "User Blocked"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:40
+#: src/lib/moderation/useModerationCauseDescription.ts:48
+msgid "User Blocked by \"{0}\""
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:53
msgid "User Blocked by List"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:60
+#: src/lib/moderation/useModerationCauseDescription.ts:66
+msgid "User Blocking You"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:70
msgid "User Blocks You"
msgstr ""
-#: src/view/com/auth/create/Step3.tsx:41
-msgid "User handle"
-msgstr "यूजर हैंडल"
+#: src/view/com/auth/create/Step2.tsx:79
+#~ msgid "User handle"
+#~ msgstr "यूजर हैंडल"
-#: src/view/com/lists/ListCard.tsx:84
+#: src/view/com/lists/ListCard.tsx:85
#: src/view/com/modals/UserAddRemoveLists.tsx:198
msgid "User list by {0}"
msgstr ""
-#: src/view/screens/ProfileList.tsx:762
+#: src/view/screens/ProfileList.tsx:777
msgid "User list by <0/>"
msgstr ""
-#: src/view/com/lists/ListCard.tsx:82
+#: src/view/com/lists/ListCard.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:196
-#: src/view/screens/ProfileList.tsx:760
+#: src/view/screens/ProfileList.tsx:775
msgid "User list by you"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:196
+#: src/view/com/modals/CreateOrEditList.tsx:197
msgid "User list created"
msgstr ""
-#: src/view/com/modals/CreateOrEditList.tsx:182
+#: src/view/com/modals/CreateOrEditList.tsx:183
msgid "User list updated"
msgstr ""
@@ -4223,12 +5561,11 @@ msgstr ""
msgid "User Lists"
msgstr "लोग सूचियाँ"
-#: src/view/com/auth/login/LoginForm.tsx:177
-#: src/view/com/auth/login/LoginForm.tsx:195
+#: src/screens/Login/LoginForm.tsx:151
msgid "Username or email address"
msgstr "यूजर नाम या ईमेल पता"
-#: src/view/screens/ProfileList.tsx:796
+#: src/view/screens/ProfileList.tsx:811
msgid "Users"
msgstr "यूजर लोग"
@@ -4240,19 +5577,31 @@ msgstr ""
msgid "Users in \"{0}\""
msgstr ""
+#: src/components/LikesDialog.tsx:85
+msgid "Users that have liked this content or profile"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:436
+msgid "Value:"
+msgstr ""
+
#: src/view/com/auth/create/Step2.tsx:243
-msgid "Verification code"
+#~ msgid "Verification code"
+#~ msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:509
+msgid "Verify {0}"
msgstr ""
-#: src/view/screens/Settings/index.tsx:910
+#: src/view/screens/Settings/index.tsx:942
msgid "Verify email"
msgstr "ईमेल सत्यापित करें"
-#: src/view/screens/Settings/index.tsx:935
+#: src/view/screens/Settings/index.tsx:967
msgid "Verify my email"
msgstr "मेरी ईमेल सत्यापित करें"
-#: src/view/screens/Settings/index.tsx:944
+#: src/view/screens/Settings/index.tsx:976
msgid "Verify My Email"
msgstr "मेरी ईमेल सत्यापित करें"
@@ -4265,11 +5614,15 @@ msgstr "नया ईमेल सत्यापित करें"
msgid "Verify Your Email"
msgstr ""
+#: src/view/screens/Settings/index.tsx:893
+msgid "Version {0}"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:42
msgid "Video Games"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:661
+#: src/screens/Profile/Header/Shell.tsx:107
msgid "View {0}'s avatar"
msgstr ""
@@ -4277,11 +5630,23 @@ msgstr ""
msgid "View debug entry"
msgstr "डीबग प्रविष्टि देखें"
-#: src/view/com/posts/FeedSlice.tsx:103
+#: src/components/ReportDialog/SelectReportOptionView.tsx:131
+msgid "View details"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:126
+msgid "View details for reporting a copyright violation"
+msgstr ""
+
+#: src/view/com/posts/FeedSlice.tsx:99
msgid "View full thread"
msgstr ""
-#: src/view/com/posts/FeedErrorMessage.tsx:172
+#: src/components/moderation/LabelsOnMe.tsx:51
+msgid "View information about these labels"
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:166
msgid "View profile"
msgstr ""
@@ -4289,24 +5654,47 @@ msgstr ""
msgid "View the avatar"
msgstr "अवतार देखें"
-#: src/view/com/modals/LinkWarning.tsx:75
+#: src/components/LabelingServiceCard/index.tsx:140
+msgid "View the labeling service provided by @{0}"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:585
+msgid "View users who like this feed"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
msgid "Visit Site"
msgstr "साइट पर जाएं"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:42
-#: src/view/com/modals/ContentFilteringSettings.tsx:259
+#: src/components/moderation/LabelPreference.tsx:135
+#: src/lib/moderation/useLabelBehaviorDescription.ts:17
+#: src/lib/moderation/useLabelBehaviorDescription.ts:22
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:53
msgid "Warn"
msgstr ""
+#: src/lib/moderation/useLabelBehaviorDescription.ts:48
+msgid "Warn content"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:46
+msgid "Warn content and filter from feeds"
+msgstr ""
+
#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:134
-msgid "We also think you'll like \"For You\" by Skygaze:"
+#~ msgid "We also think you'll like \"For You\" by Skygaze:"
+#~ msgstr ""
+
+#: src/screens/Hashtag.tsx:133
+msgid "We couldn't find any results for that hashtag."
msgstr ""
#: src/screens/Deactivated.tsx:133
msgid "We estimate {estimatedTime} until your account is ready."
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:93
+#: src/screens/Onboarding/StepFinished.tsx:97
msgid "We hope you have a wonderful time. Remember, Bluesky is:"
msgstr ""
@@ -4318,11 +5706,23 @@ msgstr ""
#~ msgid "We recommend \"For You\" by Skygaze:"
#~ msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:124
+#: src/components/dialogs/MutedWords.tsx:203
+msgid "We recommend avoiding common words that appear in many posts, since it can result in no posts being shown."
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:125
msgid "We recommend our \"Discover\" feed:"
msgstr ""
-#: src/screens/Onboarding/StepInterests/index.tsx:133
+#: src/components/dialogs/BirthDateSettings.tsx:52
+msgid "We were unable to load your birth date preferences. Please try again."
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:385
+msgid "We were unable to load your configured labelers at this time."
+msgstr ""
+
+#: src/screens/Onboarding/StepInterests/index.tsx:137
msgid "We weren't able to connect. Please try again to continue setting up your account. If it continues to fail, you can skip this flow."
msgstr ""
@@ -4331,43 +5731,53 @@ msgid "We will let you know when your account is ready."
msgstr ""
#: src/view/com/modals/AppealLabel.tsx:48
-msgid "We'll look into your appeal promptly."
-msgstr ""
+#~ msgid "We'll look into your appeal promptly."
+#~ msgstr ""
-#: src/screens/Onboarding/StepInterests/index.tsx:138
+#: src/screens/Onboarding/StepInterests/index.tsx:142
msgid "We'll use this to help customize your experience."
msgstr ""
-#: src/view/com/auth/create/CreateAccount.tsx:123
+#: src/screens/Signup/index.tsx:130
msgid "We're so excited to have you join us!"
msgstr "हम आपके हमारी सेवा में शामिल होने को लेकर बहुत उत्साहित हैं!"
-#: src/view/screens/ProfileList.tsx:85
+#: src/view/screens/ProfileList.tsx:89
msgid "We're sorry, but we were unable to resolve this list. If this persists, please contact the list creator, @{handleOrDid}."
msgstr ""
-#: src/view/screens/Search/Search.tsx:253
+#: src/components/dialogs/MutedWords.tsx:229
+msgid "We're sorry, but we weren't able to load your muted words at this time. Please try again."
+msgstr ""
+
+#: src/view/screens/Search/Search.tsx:256
msgid "We're sorry, but your search could not be completed. Please try again in a few minutes."
msgstr ""
+#: src/components/Lists.tsx:188
#: src/view/screens/NotFound.tsx:48
msgid "We're sorry! We can't find the page you were looking for."
msgstr "हम क्षमा चाहते हैं! हमें वह पेज नहीं मिल रहा जिसे आप ढूंढ रहे थे।"
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:46
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:321
+msgid "We're sorry! You can only subscribe to ten labelers, and you've reached your limit of ten."
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:48
msgid "Welcome to <0>Bluesky0>"
msgstr "<0>Bluesky0> में आपका स्वागत है"
-#: src/screens/Onboarding/StepInterests/index.tsx:130
+#: src/screens/Onboarding/StepInterests/index.tsx:134
msgid "What are your interests?"
msgstr ""
#: src/view/com/modals/report/Modal.tsx:169
-msgid "What is the issue with this {collectionName}?"
-msgstr "इस {collectionName} के साथ क्या मुद्दा है?"
+#~ msgid "What is the issue with this {collectionName}?"
+#~ msgstr "इस {collectionName} के साथ क्या मुद्दा है?"
-#: src/view/com/auth/SplashScreen.tsx:34
-#: src/view/com/composer/Composer.tsx:279
+#: src/view/com/auth/SplashScreen.tsx:58
+#: src/view/com/auth/SplashScreen.web.tsx:84
+#: src/view/com/composer/Composer.tsx:296
msgid "What's up?"
msgstr ""
@@ -4384,16 +5794,36 @@ msgstr "कौन से भाषाएं आपको अपने एल्
msgid "Who can reply"
msgstr ""
-#: src/view/com/modals/crop-image/CropImage.web.tsx:102
+#: src/components/ReportDialog/SelectReportOptionView.tsx:43
+msgid "Why should this content be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:56
+msgid "Why should this feed be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:53
+msgid "Why should this list be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:50
+msgid "Why should this post be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:47
+msgid "Why should this user be reviewed?"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:103
msgid "Wide"
msgstr "चौड़ा"
-#: src/view/com/composer/Composer.tsx:415
+#: src/view/com/composer/Composer.tsx:436
msgid "Write post"
msgstr "पोस्ट लिखो"
-#: src/view/com/composer/Composer.tsx:278
-#: src/view/com/composer/Prompt.tsx:33
+#: src/view/com/composer/Composer.tsx:295
+#: src/view/com/composer/Prompt.tsx:37
msgid "Write your reply"
msgstr "अपना जवाब दें"
@@ -4402,14 +5832,14 @@ msgid "Writers"
msgstr ""
#: src/view/com/auth/create/Step2.tsx:263
-msgid "XXXXXX"
-msgstr ""
+#~ msgid "XXXXXX"
+#~ msgstr ""
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:77
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:201
-#: src/view/screens/PreferencesHomeFeed.tsx:236
-#: src/view/screens/PreferencesHomeFeed.tsx:271
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:201
+#: src/view/screens/PreferencesFollowingFeed.tsx:236
+#: src/view/screens/PreferencesFollowingFeed.tsx:271
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "Yes"
@@ -4423,6 +5853,10 @@ msgstr "हाँ"
msgid "You are in line."
msgstr ""
+#: src/view/com/profile/ProfileFollows.tsx:86
+msgid "You are not following anyone."
+msgstr ""
+
#: src/view/com/posts/FollowingEmptyState.tsx:67
#: src/view/com/posts/FollowingEndOfFeed.tsx:68
msgid "You can also discover new Custom Feeds to follow."
@@ -4432,16 +5866,20 @@ msgstr ""
#~ msgid "You can also try our \"Discover\" algorithm:"
#~ msgstr ""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:142
+#: src/screens/Onboarding/StepFollowingFeed.tsx:143
msgid "You can change these settings later."
msgstr ""
-#: src/view/com/auth/login/Login.tsx:158
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:31
+#: src/screens/Login/index.tsx:158
+#: src/screens/Login/PasswordUpdatedForm.tsx:33
msgid "You can now sign in with your new password."
msgstr "अब आप अपने नए पासवर्ड के साथ साइन इन कर सकते हैं।।"
-#: src/view/com/modals/InviteCodes.tsx:66
+#: src/view/com/profile/ProfileFollowers.tsx:86
+msgid "You do not have any followers."
+msgstr ""
+
+#: src/view/com/modals/InviteCodes.tsx:67
msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer."
msgstr "आपके पास अभी तक कोई आमंत्रण कोड नहीं है! जब आप कुछ अधिक समय के लिए Bluesky पर रहेंगे तो हम आपको कुछ भेजेंगे।"
@@ -4449,7 +5887,7 @@ msgstr "आपके पास अभी तक कोई आमंत्रण
msgid "You don't have any pinned feeds."
msgstr "आपके पास कोई पिन किया हुआ फ़ीड नहीं है."
-#: src/view/screens/Feeds.tsx:451
+#: src/view/screens/Feeds.tsx:452
msgid "You don't have any saved feeds!"
msgstr ""
@@ -4457,25 +5895,44 @@ msgstr ""
msgid "You don't have any saved feeds."
msgstr "आपके पास कोई सहेजी गई फ़ीड नहीं है."
-#: src/view/com/post-thread/PostThread.tsx:401
+#: src/view/com/post-thread/PostThread.tsx:159
msgid "You have blocked the author or you have been blocked by the author."
msgstr "आपने लेखक को अवरुद्ध किया है या आपने लेखक द्वारा अवरुद्ध किया है।।"
-#: src/view/com/modals/ModerationDetails.tsx:56
+#: src/components/moderation/ModerationDetailsDialog.tsx:66
+#: src/lib/moderation/useModerationCauseDescription.ts:50
+#: src/lib/moderation/useModerationCauseDescription.ts:58
msgid "You have blocked this user. You cannot view their content."
msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:57
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:92
+#: src/screens/Login/SetNewPasswordForm.tsx:54
+#: src/screens/Login/SetNewPasswordForm.tsx:91
#: src/view/com/modals/ChangePassword.tsx:87
#: src/view/com/modals/ChangePassword.tsx:121
msgid "You have entered an invalid code. It should look like XXXXX-XXXXX."
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:87
-msgid "You have muted this user."
+#: src/lib/moderation/useModerationCauseDescription.ts:109
+msgid "You have hidden this post"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:101
+msgid "You have hidden this post."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:94
+#: src/lib/moderation/useModerationCauseDescription.ts:92
+msgid "You have muted this account."
msgstr ""
+#: src/lib/moderation/useModerationCauseDescription.ts:86
+msgid "You have muted this user"
+msgstr ""
+
+#: src/view/com/modals/ModerationDetails.tsx:87
+#~ msgid "You have muted this user."
+#~ msgstr ""
+
#: src/view/com/feeds/ProfileFeedgens.tsx:136
msgid "You have no feeds."
msgstr ""
@@ -4486,38 +5943,62 @@ msgid "You have no lists."
msgstr "आपके पास कोई सूची नहीं है।।"
#: src/view/screens/ModerationBlockedAccounts.tsx:132
-msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
-msgstr "आपने अभी तक कोई भी अकाउंट ब्लॉक नहीं किया है. किसी खाते को ब्लॉक करने के लिए, उनकी प्रोफ़ाइल पर जाएं और उनके खाते के मेनू से \"खाता ब्लॉक करें\" चुनें।"
+msgid "You have not blocked any accounts yet. To block an account, go to their profile and select \"Block account\" from the menu on their account."
+msgstr ""
-#: src/view/screens/AppPasswords.tsx:87
+#: src/view/screens/ModerationBlockedAccounts.tsx:132
+#~ msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
+#~ msgstr "आपने अभी तक कोई भी अकाउंट ब्लॉक नहीं किया है. किसी खाते को ब्लॉक करने के लिए, उनकी प्रोफ़ाइल पर जाएं और उनके खाते के मेनू से \"खाता ब्लॉक करें\" चुनें।"
+
+#: src/view/screens/AppPasswords.tsx:89
msgid "You have not created any app passwords yet. You can create one by pressing the button below."
msgstr "आपने अभी तक कोई ऐप पासवर्ड नहीं बनाया है। आप नीचे बटन दबाकर एक बना सकते हैं।।"
#: src/view/screens/ModerationMutedAccounts.tsx:131
-msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
-msgstr "आपने अभी तक कोई खाता म्यूट नहीं किया है. किसी खाते को म्यूट करने के लिए, उनकी प्रोफ़ाइल पर जाएं और उनके खाते के मेनू से \"खाता म्यूट करें\" चुनें।"
+msgid "You have not muted any accounts yet. To mute an account, go to their profile and select \"Mute account\" from the menu on their account."
+msgstr ""
-#: src/view/com/modals/ContentFilteringSettings.tsx:175
-msgid "You must be 18 or older to enable adult content."
+#: src/view/screens/ModerationMutedAccounts.tsx:131
+#~ msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
+#~ msgstr "आपने अभी तक कोई खाता म्यूट नहीं किया है. किसी खाते को म्यूट करने के लिए, उनकी प्रोफ़ाइल पर जाएं और उनके खाते के मेनू से \"खाता म्यूट करें\" चुनें।"
+
+#: src/components/dialogs/MutedWords.tsx:249
+msgid "You haven't muted any words or tags yet"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:68
+msgid "You may appeal these labels if you feel they were placed in error."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/Policies.tsx:79
+msgid "You must be 13 years of age or older to sign up."
msgstr ""
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:103
+#: src/view/com/modals/ContentFilteringSettings.tsx:175
+#~ msgid "You must be 18 or older to enable adult content."
+#~ msgstr ""
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:110
msgid "You must be 18 years or older to enable adult content"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:98
+#: src/components/ReportDialog/SubmitView.tsx:205
+msgid "You must select at least one labeler for a report"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:144
msgid "You will no longer receive notifications for this thread"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:147
msgid "You will now receive notifications for this thread"
msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:107
+#: src/screens/Login/SetNewPasswordForm.tsx:104
msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password."
msgstr "आपको \"reset code\" के साथ एक ईमेल प्राप्त होगा। उस कोड को यहाँ दर्ज करें, फिर अपना नया पासवर्ड दर्ज करें।।"
-#: src/screens/Onboarding/StepModeration/index.tsx:72
+#: src/screens/Onboarding/StepModeration/index.tsx:60
msgid "You're in control"
msgstr ""
@@ -4527,19 +6008,24 @@ msgstr ""
msgid "You're in line"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:90
+#: src/screens/Onboarding/StepFinished.tsx:94
msgid "You're ready to go!"
msgstr ""
+#: src/components/moderation/ModerationDetailsDialog.tsx:98
+#: src/lib/moderation/useModerationCauseDescription.ts:101
+msgid "You've chosen to hide a word or tag within this post."
+msgstr ""
+
#: src/view/com/posts/FollowingEndOfFeed.tsx:48
msgid "You've reached the end of your feed! Find some more accounts to follow."
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:74
+#: src/screens/Signup/index.tsx:150
msgid "Your account"
msgstr "आपका खाता"
-#: src/view/com/modals/DeleteAccount.tsx:67
+#: src/view/com/modals/DeleteAccount.tsx:68
msgid "Your account has been deleted"
msgstr ""
@@ -4547,7 +6033,7 @@ msgstr ""
msgid "Your account repository, containing all public data records, can be downloaded as a \"CAR\" file. This file does not include media embeds, such as images, or your private data, which must be fetched separately."
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:234
+#: src/screens/Signup/StepInfo/index.tsx:121
msgid "Your birth date"
msgstr "जन्म तिथि"
@@ -4555,19 +6041,19 @@ msgstr "जन्म तिथि"
msgid "Your choice will be saved, but can be changed later in settings."
msgstr ""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:61
+#: src/screens/Onboarding/StepFollowingFeed.tsx:62
msgid "Your default feed is \"Following\""
msgstr ""
-#: src/view/com/auth/create/state.ts:153
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:70
+#: src/screens/Login/ForgotPasswordForm.tsx:57
+#: src/screens/Signup/state.ts:227
#: src/view/com/modals/ChangePassword.tsx:54
msgid "Your email appears to be invalid."
msgstr ""
#: src/view/com/modals/Waitlist.tsx:109
-msgid "Your email has been saved! We'll be in touch soon."
-msgstr "आपका ईमेल बचाया गया है! हम जल्द ही संपर्क में रहेंगे।।"
+#~ msgid "Your email has been saved! We'll be in touch soon."
+#~ msgstr "आपका ईमेल बचाया गया है! हम जल्द ही संपर्क में रहेंगे।।"
#: src/view/com/modals/ChangeEmail.tsx:125
msgid "Your email has been updated but not verified. As a next step, please verify your new email."
@@ -4581,11 +6067,11 @@ msgstr "आपका ईमेल अभी तक सत्यापित न
msgid "Your following feed is empty! Follow more users to see what's happening."
msgstr ""
-#: src/view/com/auth/create/Step3.tsx:45
+#: src/screens/Signup/StepHandle.tsx:72
msgid "Your full handle will be"
msgstr "आपका पूरा हैंडल होगा"
-#: src/view/com/modals/ChangeHandle.tsx:270
+#: src/view/com/modals/ChangeHandle.tsx:271
msgid "Your full handle will be <0>@{0}0>"
msgstr ""
@@ -4595,29 +6081,32 @@ msgstr ""
#~ msgid "Your invite codes are hidden when logged in using an App Password"
#~ msgstr ""
-#: src/view/com/modals/ChangePassword.tsx:155
+#: src/components/dialogs/MutedWords.tsx:220
+msgid "Your muted words"
+msgstr ""
+
+#: src/view/com/modals/ChangePassword.tsx:157
msgid "Your password has been changed successfully!"
msgstr ""
-#: src/view/com/composer/Composer.tsx:267
+#: src/view/com/composer/Composer.tsx:284
msgid "Your post has been published"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:105
+#: src/screens/Onboarding/StepFinished.tsx:109
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:59
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:59
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:61
msgid "Your posts, likes, and blocks are public. Mutes are private."
msgstr "आपकी पोस्ट, पसंद और ब्लॉक सार्वजनिक हैं। म्यूट निजी हैं।।"
-#: src/view/com/modals/SwitchAccount.tsx:84
-#: src/view/screens/Settings/index.tsx:118
+#: src/view/screens/Settings/index.tsx:125
msgid "Your profile"
msgstr "आपकी प्रोफ़ाइल"
-#: src/view/com/composer/Composer.tsx:266
+#: src/view/com/composer/Composer.tsx:283
msgid "Your reply has been published"
msgstr ""
-#: src/view/com/auth/create/Step3.tsx:28
+#: src/screens/Signup/index.tsx:152
msgid "Your user handle"
msgstr "आपका यूजर हैंडल"
diff --git a/src/locale/locales/id/messages.po b/src/locale/locales/id/messages.po
index 3e23ef65ef..cc5327953c 100644
--- a/src/locale/locales/id/messages.po
+++ b/src/locale/locales/id/messages.po
@@ -4,8 +4,8 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-12-28 11:56+07000\n"
"PO-Revision-Date: \n"
-"Last-Translator: GID0317\n"
-"Language-Team: GID0317, danninov, thinkbyte1024, mary-ext\n"
+"Last-Translator: danninov\n"
+"Language-Team: GID0317, danninov, thinkbyte1024, mary-ext, kodebanget\n"
"Language: id\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
@@ -29,7 +29,7 @@ msgstr "(tidak ada email)"
#~ msgid "{0} {purposeLabel} List"
#~ msgstr "Daftar {purposeLabel} {0}"
-#: src/view/com/profile/ProfileHeader.tsx:592
+#: src/screens/Profile/Header/Metrics.tsx:44
msgid "{following} following"
msgstr "{following} mengikuti"
@@ -51,7 +51,7 @@ msgstr "{following} mengikuti"
#~ msgid "{message}"
#~ msgstr "{message}"
-#: src/view/shell/Drawer.tsx:440
+#: src/view/shell/Drawer.tsx:443
msgid "{numUnreadNotifications} unread"
msgstr "{numUnreadNotifications} belum dibaca"
@@ -63,7 +63,11 @@ msgstr "{numUnreadNotifications} belum dibaca"
msgid "<0/> members"
msgstr "<0/> anggota"
-#: src/view/com/profile/ProfileHeader.tsx:594
+#: src/view/shell/Drawer.tsx:97
+msgid "<0>{0}0> following"
+msgstr ""
+
+#: src/screens/Profile/Header/Metrics.tsx:45
msgid "<0>{following} 0><1>following1>"
msgstr "<0>{following} 0><1>mengikuti1>"
@@ -79,51 +83,60 @@ msgstr "<0>Ikuti0><1>Rekomendasi1><2>Pengguna2>"
msgid "<0>Welcome to0><1>Bluesky1>"
msgstr "<0>Selamat datang di0>Bluesky1>"
-#: src/view/com/profile/ProfileHeader.tsx:557
+#: src/screens/Profile/Header/Handle.tsx:42
msgid "⚠Invalid Handle"
msgstr "⚠Handle Tidak Valid"
#: src/view/com/util/moderation/LabelInfo.tsx:45
-msgid "A content warning has been applied to this {0}."
-msgstr "Peringatan konten telah diterapkan pada {0}"
+#~ msgid "A content warning has been applied to this {0}."
+#~ msgstr "Peringatan konten telah diterapkan pada {0}"
#: src/lib/hooks/useOTAUpdate.ts:16
-msgid "A new version of the app is available. Please update to continue using the app."
-msgstr "Versi baru dari aplikasi ini telah tersedia. Harap perbarui untuk terus menggunakan aplikasi."
+#~ msgid "A new version of the app is available. Please update to continue using the app."
+#~ msgstr "Versi baru dari aplikasi ini telah tersedia. Harap perbarui untuk terus menggunakan aplikasi."
-#: src/view/com/util/ViewHeader.tsx:83
-#: src/view/screens/Search/Search.tsx:624
+#: src/view/com/util/ViewHeader.tsx:89
+#: src/view/screens/Search/Search.tsx:649
msgid "Access navigation links and settings"
msgstr "Akses tautan navigasi dan pengaturan"
-#: src/view/com/pager/FeedsTabBarMobile.tsx:89
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:52
msgid "Access profile and other navigation links"
msgstr "Akses profil dan tautan navigasi lain"
-#: src/view/com/modals/EditImage.tsx:299
-#: src/view/screens/Settings/index.tsx:451
+#: src/view/com/modals/EditImage.tsx:300
+#: src/view/screens/Settings/index.tsx:470
msgid "Accessibility"
msgstr "Aksesibilitas"
-#: src/view/com/auth/login/LoginForm.tsx:166
-#: src/view/screens/Settings/index.tsx:308
-#: src/view/screens/Settings/index.tsx:721
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "account"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:144
+#: src/view/screens/Settings/index.tsx:327
+#: src/view/screens/Settings/index.tsx:743
msgid "Account"
msgstr "Akun"
-#: src/view/com/profile/ProfileHeader.tsx:245
+#: src/view/com/profile/ProfileMenu.tsx:139
msgid "Account blocked"
msgstr "Akun diblokir"
-#: src/view/com/profile/ProfileHeader.tsx:212
+#: src/view/com/profile/ProfileMenu.tsx:153
+msgid "Account followed"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:113
msgid "Account muted"
msgstr "Akun dibisukan"
-#: src/view/com/modals/ModerationDetails.tsx:86
+#: src/components/moderation/ModerationDetailsDialog.tsx:93
+#: src/lib/moderation/useModerationCauseDescription.ts:91
msgid "Account Muted"
msgstr "Akun Dibisukan"
-#: src/view/com/modals/ModerationDetails.tsx:72
+#: src/components/moderation/ModerationDetailsDialog.tsx:82
msgid "Account Muted by List"
msgstr "Akun Dibisukan Berdasarkan Daftar"
@@ -135,18 +148,24 @@ msgstr "Pengaturan akun"
msgid "Account removed from quick access"
msgstr "Akun dihapus dari akses cepat"
-#: src/view/com/profile/ProfileHeader.tsx:267
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:137
+#: src/view/com/profile/ProfileMenu.tsx:128
msgid "Account unblocked"
msgstr "Akun batal diblokir"
-#: src/view/com/profile/ProfileHeader.tsx:225
+#: src/view/com/profile/ProfileMenu.tsx:166
+msgid "Account unfollowed"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:102
msgid "Account unmuted"
msgstr "Akun batal dibisukan"
+#: src/components/dialogs/MutedWords.tsx:164
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:150
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/screens/ProfileList.tsx:812
+#: src/view/screens/ProfileList.tsx:827
msgid "Add"
msgstr "Tambah"
@@ -154,54 +173,63 @@ msgstr "Tambah"
msgid "Add a content warning"
msgstr "Tambahkan peringatan konten"
-#: src/view/screens/ProfileList.tsx:802
+#: src/view/screens/ProfileList.tsx:817
msgid "Add a user to this list"
msgstr "Tambahkan pengguna ke daftar ini"
-#: src/view/screens/Settings/index.tsx:383
-#: src/view/screens/Settings/index.tsx:392
+#: src/components/dialogs/SwitchAccount.tsx:55
+#: src/view/screens/Settings/index.tsx:402
+#: src/view/screens/Settings/index.tsx:411
msgid "Add account"
msgstr "Tambahkan akun"
#: src/view/com/composer/photos/Gallery.tsx:119
#: src/view/com/composer/photos/Gallery.tsx:180
-#: src/view/com/modals/AltImage.tsx:116
+#: src/view/com/modals/AltImage.tsx:117
msgid "Add alt text"
msgstr "Tambahkan teks alt"
-#: src/view/screens/AppPasswords.tsx:102
-#: src/view/screens/AppPasswords.tsx:143
-#: src/view/screens/AppPasswords.tsx:156
+#: src/view/screens/AppPasswords.tsx:104
+#: src/view/screens/AppPasswords.tsx:145
+#: src/view/screens/AppPasswords.tsx:158
msgid "Add App Password"
msgstr "Tambahkan Kata Sandi Aplikasi"
#: src/view/com/modals/report/InputIssueDetails.tsx:41
#: src/view/com/modals/report/Modal.tsx:191
-msgid "Add details"
-msgstr "Tambahkan detail"
+#~ msgid "Add details"
+#~ msgstr "Tambahkan detail"
#: src/view/com/modals/report/Modal.tsx:194
-msgid "Add details to report"
-msgstr "Tambahkan detail ke laporan"
+#~ msgid "Add details to report"
+#~ msgstr "Tambahkan detail ke laporan"
-#: src/view/com/composer/Composer.tsx:446
+#: src/view/com/composer/Composer.tsx:467
msgid "Add link card"
msgstr "Tambahkan kartu tautan"
-#: src/view/com/composer/Composer.tsx:451
+#: src/view/com/composer/Composer.tsx:472
msgid "Add link card:"
msgstr "Tambahkan kartu tautan:"
-#: src/view/com/modals/ChangeHandle.tsx:417
+#: src/components/dialogs/MutedWords.tsx:157
+msgid "Add mute word for configured settings"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:86
+msgid "Add muted words and tags"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:416
msgid "Add the following DNS record to your domain:"
msgstr "Tambahkan DNS record berikut ke domain Anda:"
-#: src/view/com/profile/ProfileHeader.tsx:309
+#: src/view/com/profile/ProfileMenu.tsx:263
+#: src/view/com/profile/ProfileMenu.tsx:266
msgid "Add to Lists"
msgstr "Tambahkan ke Daftar"
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/feeds/FeedSourceCard.tsx:234
msgid "Add to my feeds"
msgstr "Tambakan ke feed saya"
@@ -214,36 +242,47 @@ msgstr "Ditambahkan"
msgid "Added to list"
msgstr "Ditambahkan ke daftar"
-#: src/view/com/feeds/FeedSourceCard.tsx:125
+#: src/view/com/feeds/FeedSourceCard.tsx:108
msgid "Added to my feeds"
msgstr "Ditambahkan ke feed saya"
-#: src/view/screens/PreferencesHomeFeed.tsx:173
+#: src/view/screens/PreferencesFollowingFeed.tsx:173
msgid "Adjust the number of likes a reply must have to be shown in your feed."
msgstr "Atur jumlah suka dari balasan yang akan ditampilkan di feed Anda."
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:117
#: src/view/com/modals/SelfLabel.tsx:75
msgid "Adult Content"
msgstr "Konten Dewasa"
#: src/view/com/modals/ContentFilteringSettings.tsx:141
-msgid "Adult content can only be enabled via the Web at <0/>."
-msgstr "Konten dewasa hanya dapat diaktifkan melalui Web di <0/>."
+#~ msgid "Adult content can only be enabled via the Web at <0/>."
+#~ msgstr "Konten dewasa hanya dapat diaktifkan melalui Web di <0/>."
#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
#~ msgid "Adult content can only be enabled via the Web at <0>bsky.app0>."
-#~ msgstr ""
+#~ msgstr "Konten dewasa hanya dapat diaktifkan melalui Web di <0>bsky.app0>."
+
+#: src/components/moderation/LabelPreference.tsx:242
+msgid "Adult content is disabled."
+msgstr ""
-#: src/view/screens/Settings/index.tsx:664
+#: src/screens/Moderation/index.tsx:375
+#: src/view/screens/Settings/index.tsx:684
msgid "Advanced"
msgstr "Lanjutan"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:221
-#: src/view/com/modals/ChangePassword.tsx:168
-msgid "Already have a code?"
+#: src/view/screens/Feeds.tsx:666
+msgid "All the feeds you've saved, right in one place."
msgstr ""
-#: src/view/com/auth/login/ChooseAccountForm.tsx:98
+#: src/screens/Login/ForgotPasswordForm.tsx:178
+#: src/view/com/modals/ChangePassword.tsx:170
+msgid "Already have a code?"
+msgstr "Sudah memiliki kode?"
+
+#: src/screens/Login/ChooseAccountForm.tsx:39
msgid "Already signed in as @{0}"
msgstr "Sudah masuk sebagai @{0}"
@@ -251,7 +290,7 @@ msgstr "Sudah masuk sebagai @{0}"
msgid "ALT"
msgstr "ALT"
-#: src/view/com/modals/EditImage.tsx:315
+#: src/view/com/modals/EditImage.tsx:316
msgid "Alt text"
msgstr "Teks alt"
@@ -267,37 +306,47 @@ msgstr "Email telah dikirim ke {0}. Email tersebut berisi kode konfirmasi yang d
msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below."
msgstr "Email telah dikirim ke alamat Anda sebelumnya, {0}. Email tersebut berisi kode konfirmasi yang dapat Anda masukkan di bawah ini."
-#: src/view/com/profile/FollowButton.tsx:30
-#: src/view/com/profile/FollowButton.tsx:40
+#: src/lib/moderation/useReportOptions.ts:26
+msgid "An issue not included in these options"
+msgstr ""
+
+#: src/view/com/profile/FollowButton.tsx:35
+#: src/view/com/profile/FollowButton.tsx:45
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:188
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:198
msgid "An issue occurred, please try again."
msgstr "Terjadi masalah, silakan coba lagi."
-#: src/view/com/notifications/FeedItem.tsx:236
+#: src/view/com/notifications/FeedItem.tsx:240
#: src/view/com/threadgate/WhoCanReply.tsx:178
msgid "and"
msgstr "dan"
#: src/screens/Onboarding/index.tsx:32
msgid "Animals"
+msgstr "Hewan"
+
+#: src/lib/moderation/useReportOptions.ts:31
+msgid "Anti-Social Behavior"
msgstr ""
#: src/view/screens/LanguageSettings.tsx:95
msgid "App Language"
msgstr "Bahasa Aplikasi"
-#: src/view/screens/AppPasswords.tsx:228
+#: src/view/screens/AppPasswords.tsx:223
msgid "App password deleted"
msgstr "Kata sandi aplikasi dihapus"
-#: src/view/com/modals/AddAppPasswords.tsx:134
+#: src/view/com/modals/AddAppPasswords.tsx:135
msgid "App Password names can only contain letters, numbers, spaces, dashes, and underscores."
msgstr "Nama Kata Sandi Aplikasi hanya boleh terdiri dari huruf, angka, spasi, tanda hubung, dan garis bawah."
-#: src/view/com/modals/AddAppPasswords.tsx:99
+#: src/view/com/modals/AddAppPasswords.tsx:100
msgid "App Password names must be at least 4 characters long."
msgstr "Nama Kata Sandi Aplikasi harus terdiri dari minimal 4 karakter."
-#: src/view/screens/Settings/index.tsx:675
+#: src/view/screens/Settings/index.tsx:695
msgid "App password settings"
msgstr "Pengaturan kata sandi aplikasi"
@@ -305,50 +354,68 @@ msgstr "Pengaturan kata sandi aplikasi"
#~ msgid "App passwords"
#~ msgstr "Kata sandi aplikasi"
-#: src/Navigation.tsx:237
-#: src/view/screens/AppPasswords.tsx:187
-#: src/view/screens/Settings/index.tsx:684
+#: src/Navigation.tsx:251
+#: src/view/screens/AppPasswords.tsx:189
+#: src/view/screens/Settings/index.tsx:704
msgid "App Passwords"
msgstr "Kata sandi Aplikasi"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:250
-msgid "Appeal content warning"
-msgstr "Ajukan banding peringatan konten"
+#: src/components/moderation/LabelsOnMeDialog.tsx:133
+#: src/components/moderation/LabelsOnMeDialog.tsx:136
+msgid "Appeal"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:201
+msgid "Appeal \"{0}\" label"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:337
+#: src/view/com/util/forms/PostDropdownBtn.tsx:346
+#~ msgid "Appeal content warning"
+#~ msgstr "Ajukan banding peringatan konten"
#: src/view/com/modals/AppealLabel.tsx:65
-msgid "Appeal Content Warning"
-msgstr "Ajukan Banding Peringatan Konten"
+#~ msgid "Appeal Content Warning"
+#~ msgstr "Ajukan Banding Peringatan Konten"
#~ msgid "Appeal Decision"
#~ msgstr "Keputusan Banding"
+#: src/components/moderation/LabelsOnMeDialog.tsx:192
+msgid "Appeal submitted."
+msgstr ""
+
#: src/view/com/util/moderation/LabelInfo.tsx:52
-msgid "Appeal this decision"
-msgstr "Ajukan banding untuk keputusan ini"
+#~ msgid "Appeal this decision"
+#~ msgstr "Ajukan banding untuk keputusan ini"
#: src/view/com/util/moderation/LabelInfo.tsx:56
-msgid "Appeal this decision."
-msgstr "Ajukan banding untuk keputusan ini."
+#~ msgid "Appeal this decision."
+#~ msgstr "Ajukan banding untuk keputusan ini."
-#: src/view/screens/Settings/index.tsx:466
+#: src/view/screens/Settings/index.tsx:485
msgid "Appearance"
msgstr "Tampilan"
-#: src/view/screens/AppPasswords.tsx:224
+#: src/view/screens/AppPasswords.tsx:265
msgid "Are you sure you want to delete the app password \"{name}\"?"
msgstr "Anda yakin untuk menghapus kata sandi aplikasi \"{name}\"?"
-#: src/view/com/composer/Composer.tsx:143
+#: src/view/com/feeds/FeedSourceCard.tsx:280
+msgid "Are you sure you want to remove {0} from your feeds?"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:509
msgid "Are you sure you'd like to discard this draft?"
msgstr "Anda yakin untuk membuang draf ini?"
-#: src/view/screens/ProfileList.tsx:364
+#: src/components/dialogs/MutedWords.tsx:281
msgid "Are you sure?"
msgstr "Anda yakin?"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:233
-msgid "Are you sure? This cannot be undone."
-msgstr "Anda yakin? Ini tidak dapat dibatalkan."
+#: src/view/com/util/forms/PostDropdownBtn.tsx:322
+#~ msgid "Are you sure? This cannot be undone."
+#~ msgstr "Anda yakin? Ini tidak dapat dibatalkan."
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:60
msgid "Are you writing in <0>{0}0>?"
@@ -356,84 +423,99 @@ msgstr "Apakah Anda menulis dalam <0>{0}0>?"
#: src/screens/Onboarding/index.tsx:26
msgid "Art"
-msgstr ""
+msgstr "Seni"
#: src/view/com/modals/SelfLabel.tsx:123
msgid "Artistic or non-erotic nudity."
msgstr "Ketelanjangan artistik atau non-erotis."
-#: src/view/com/auth/create/CreateAccount.tsx:147
-#: src/view/com/auth/login/ChooseAccountForm.tsx:151
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:174
-#: src/view/com/auth/login/LoginForm.tsx:259
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:179
-#: src/view/com/modals/report/InputIssueDetails.tsx:46
-#: src/view/com/post-thread/PostThread.tsx:408
-#: src/view/com/post-thread/PostThread.tsx:458
-#: src/view/com/post-thread/PostThread.tsx:466
-#: src/view/com/profile/ProfileHeader.tsx:648
-#: src/view/com/util/ViewHeader.tsx:81
+#: src/screens/Signup/StepHandle.tsx:118
+msgid "At least 3 characters"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:246
+#: src/components/moderation/LabelsOnMeDialog.tsx:247
+#: src/screens/Login/ChooseAccountForm.tsx:73
+#: src/screens/Login/ChooseAccountForm.tsx:78
+#: src/screens/Login/ForgotPasswordForm.tsx:129
+#: src/screens/Login/ForgotPasswordForm.tsx:135
+#: src/screens/Login/LoginForm.tsx:221
+#: src/screens/Login/LoginForm.tsx:227
+#: src/screens/Login/SetNewPasswordForm.tsx:160
+#: src/screens/Login/SetNewPasswordForm.tsx:166
+#: src/screens/Profile/Header/Shell.tsx:96
+#: src/screens/Signup/index.tsx:179
+#: src/view/com/util/ViewHeader.tsx:87
msgid "Back"
msgstr "Kembali"
-#: src/view/com/post-thread/PostThread.tsx:416
-msgctxt "action"
-msgid "Back"
-msgstr "Kembali"
+#: src/view/com/post-thread/PostThread.tsx:480
+#~ msgctxt "action"
+#~ msgid "Back"
+#~ msgstr "Kembali"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:136
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:144
msgid "Based on your interest in {interestsText}"
-msgstr ""
+msgstr "Berdasarkan minat Anda pada {interestsText}"
-#: src/view/screens/Settings/index.tsx:523
+#: src/view/screens/Settings/index.tsx:542
msgid "Basics"
msgstr "Dasar"
-#: src/view/com/auth/create/Step1.tsx:246
-#: src/view/com/modals/BirthDateSettings.tsx:73
+#: src/components/dialogs/BirthDateSettings.tsx:107
msgid "Birthday"
msgstr "Tanggal lahir"
-#: src/view/screens/Settings/index.tsx:340
+#: src/view/screens/Settings/index.tsx:359
msgid "Birthday:"
msgstr "Tanggal lahir:"
-#: src/view/com/profile/ProfileHeader.tsx:238
-#: src/view/com/profile/ProfileHeader.tsx:345
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+msgid "Block"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:300
+#: src/view/com/profile/ProfileMenu.tsx:307
msgid "Block Account"
msgstr "Blokir Akun"
-#: src/view/screens/ProfileList.tsx:555
+#: src/view/com/profile/ProfileMenu.tsx:344
+msgid "Block Account?"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:530
msgid "Block accounts"
msgstr "Blokir akun"
-#: src/view/screens/ProfileList.tsx:505
+#: src/view/screens/ProfileList.tsx:478
+#: src/view/screens/ProfileList.tsx:634
msgid "Block list"
msgstr "Daftar blokir"
-#: src/view/screens/ProfileList.tsx:315
+#: src/view/screens/ProfileList.tsx:629
msgid "Block these accounts?"
msgstr "Blokir akun ini?"
-#: src/view/screens/ProfileList.tsx:319
-msgid "Block this List"
-msgstr "Blokir Daftar ini"
+#: src/view/screens/ProfileList.tsx:320
+#~ msgid "Block this List"
+#~ msgstr "Blokir Daftar ini"
-#: src/view/com/lists/ListCard.tsx:109
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:60
+#: src/view/com/lists/ListCard.tsx:110
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:55
msgid "Blocked"
msgstr "Diblokir"
-#: src/view/screens/Moderation.tsx:123
+#: src/screens/Moderation/index.tsx:267
msgid "Blocked accounts"
msgstr "Akun yang diblokir"
-#: src/Navigation.tsx:130
+#: src/Navigation.tsx:134
#: src/view/screens/ModerationBlockedAccounts.tsx:107
msgid "Blocked Accounts"
msgstr "Akun yang diblokir"
-#: src/view/com/profile/ProfileHeader.tsx:240
+#: src/view/com/profile/ProfileMenu.tsx:356
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
msgstr "Akun yang diblokir tidak dapat membalas di utas Anda, menyebut Anda, atau berinteraksi dengan Anda."
@@ -441,48 +523,57 @@ msgstr "Akun yang diblokir tidak dapat membalas di utas Anda, menyebut Anda, ata
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours."
msgstr "Akun yang diblokir tidak dapat membalas postingan Anda, menyebutkan Anda, dan interaksi lain dengan Anda. Anda tidak akan melihat konten mereka dan mereka akan dicegah melihat konten Anda."
-#: src/view/com/post-thread/PostThread.tsx:267
+#: src/view/com/post-thread/PostThread.tsx:313
msgid "Blocked post."
msgstr "Postingan yang diblokir."
-#: src/view/screens/ProfileList.tsx:317
+#: src/screens/Profile/Sections/Labels.tsx:152
+msgid "Blocking does not prevent this labeler from placing labels on your account."
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:631
msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
msgstr "Blokir bersifat publik. Akun yang diblokir tidak dapat membalas postingan Anda, menyebutkan Anda, dan interaksi lain dengan Anda."
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:93
+#: src/view/com/profile/ProfileMenu.tsx:353
+msgid "Blocking will not prevent labels from being applied on your account, but it will stop this account from replying in your threads or interacting with you."
+msgstr ""
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:98
+#: src/view/com/auth/SplashScreen.web.tsx:169
msgid "Blog"
msgstr "Blog"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:31
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:32
#: src/view/com/auth/server-input/index.tsx:89
-#: src/view/com/auth/server-input/index.tsx:90
+#: src/view/com/auth/server-input/index.tsx:91
msgid "Bluesky"
msgstr "Bluesky"
-#: src/view/com/auth/server-input/index.tsx:150
+#: src/view/com/auth/server-input/index.tsx:154
msgid "Bluesky is an open network where you can choose your hosting provider. Custom hosting is now available in beta for developers."
msgstr ""
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:80
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:80
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:82
msgid "Bluesky is flexible."
msgstr "Bluesky itu fleksibel."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:69
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:69
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:71
msgid "Bluesky is open."
msgstr "Bluesky itu terbuka."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:56
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:56
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:58
msgid "Bluesky is public."
msgstr "Bluesky bersifat publik."
#: src/view/com/modals/Waitlist.tsx:70
-msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
-msgstr "Bluesky menggunakan undangan untuk membangun komunitas yang sehat. Jika Anda tidak tahu orang lain yang memiliki undangan, Anda bisa mendaftar di daftar tunggu dan kami akan segera mengirimkan undangannya."
+#~ msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
+#~ msgstr "Bluesky menggunakan undangan untuk membangun komunitas yang sehat. Jika Anda tidak tahu orang lain yang memiliki undangan, Anda bisa mendaftar di daftar tunggu dan kami akan segera mengirimkan undangannya."
-#: src/view/screens/Moderation.tsx:226
+#: src/screens/Moderation/index.tsx:533
msgid "Bluesky will not show your profile and posts to logged-out users. Other apps may not honor this request. This does not make your account private."
msgstr "Bluesky tidak akan menampilkan profil dan postingan Anda ke pengguna yang tidak login. Aplikasi lain mungkin tidak menghormati permintaan ini. Ini tidak membuat akun Anda menjadi privat."
@@ -490,15 +581,24 @@ msgstr "Bluesky tidak akan menampilkan profil dan postingan Anda ke pengguna yan
#~ msgid "Bluesky.Social"
#~ msgstr "Bluesky.Social"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:53
+msgid "Blur images"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:51
+msgid "Blur images and filter from feeds"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:33
msgid "Books"
-msgstr ""
+msgstr "Buku"
-#: src/view/screens/Settings/index.tsx:859
-msgid "Build version {0} {1}"
-msgstr "Versi {0} {1}"
+#: src/view/screens/Settings/index.tsx:893
+#~ msgid "Build version {0} {1}"
+#~ msgstr "Versi {0} {1}"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:87
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:92
+#: src/view/com/auth/SplashScreen.web.tsx:166
msgid "Business"
msgstr "Bisnis"
@@ -514,101 +614,116 @@ msgstr "oleh —"
msgid "by {0}"
msgstr "oleh {0}"
+#: src/components/LabelingServiceCard/index.tsx:57
+msgid "By {0}"
+msgstr ""
+
#: src/view/com/profile/ProfileSubpageHeader.tsx:161
msgid "by <0/>"
msgstr "oleh <0/>"
+#: src/screens/Signup/StepInfo/Policies.tsx:74
+msgid "By creating an account you agree to the {els}."
+msgstr ""
+
#: src/view/com/profile/ProfileSubpageHeader.tsx:159
msgid "by you"
msgstr "oleh Anda"
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:60
-#: src/view/com/util/UserAvatar.tsx:224
-#: src/view/com/util/UserBanner.tsx:40
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:77
msgid "Camera"
msgstr "Kamera"
-#: src/view/com/modals/AddAppPasswords.tsx:216
+#: src/view/com/modals/AddAppPasswords.tsx:217
msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long."
msgstr "Hanya dapat terdiri dari huruf, angka, spasi, tanda hubung dan garis bawah. Minimal 4 karakter, namun tidak boleh lebih dari 32 karakter."
-#: src/components/Prompt.tsx:91
-#: src/view/com/composer/Composer.tsx:300
-#: src/view/com/composer/Composer.tsx:305
+#: src/components/Menu/index.tsx:213
+#: src/components/Prompt.tsx:113
+#: src/components/Prompt.tsx:115
+#: src/components/TagMenu/index.tsx:268
+#: src/view/com/composer/Composer.tsx:317
+#: src/view/com/composer/Composer.tsx:322
#: src/view/com/modals/ChangeEmail.tsx:218
#: src/view/com/modals/ChangeEmail.tsx:220
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
-#: src/view/com/modals/CreateOrEditList.tsx:355
-#: src/view/com/modals/EditImage.tsx:323
-#: src/view/com/modals/EditProfile.tsx:249
+#: src/view/com/modals/ChangeHandle.tsx:154
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
+#: src/view/com/modals/CreateOrEditList.tsx:356
+#: src/view/com/modals/crop-image/CropImage.web.tsx:138
+#: src/view/com/modals/EditImage.tsx:324
+#: src/view/com/modals/EditProfile.tsx:250
#: src/view/com/modals/InAppBrowserConsent.tsx:78
-#: src/view/com/modals/LinkWarning.tsx:87
-#: src/view/com/modals/Repost.tsx:87
+#: src/view/com/modals/InAppBrowserConsent.tsx:80
+#: src/view/com/modals/LinkWarning.tsx:105
+#: src/view/com/modals/LinkWarning.tsx:107
+#: src/view/com/modals/Repost.tsx:88
#: src/view/com/modals/VerifyEmail.tsx:247
#: src/view/com/modals/VerifyEmail.tsx:253
-#: src/view/com/modals/Waitlist.tsx:142
-#: src/view/screens/Search/Search.tsx:693
-#: src/view/shell/desktop/Search.tsx:238
+#: src/view/screens/Search/Search.tsx:718
+#: src/view/shell/desktop/Search.tsx:239
msgid "Cancel"
msgstr "Batal"
-#: src/view/com/modals/Confirm.tsx:88
-#: src/view/com/modals/Confirm.tsx:91
-#: src/view/com/modals/CreateOrEditList.tsx:360
-#: src/view/com/modals/DeleteAccount.tsx:156
-#: src/view/com/modals/DeleteAccount.tsx:234
+#: src/view/com/modals/CreateOrEditList.tsx:361
+#: src/view/com/modals/DeleteAccount.tsx:155
+#: src/view/com/modals/DeleteAccount.tsx:233
msgctxt "action"
msgid "Cancel"
msgstr "Batal"
-#: src/view/com/modals/DeleteAccount.tsx:152
-#: src/view/com/modals/DeleteAccount.tsx:230
+#: src/view/com/modals/DeleteAccount.tsx:151
+#: src/view/com/modals/DeleteAccount.tsx:229
msgid "Cancel account deletion"
msgstr "Batal menghapus akun"
#~ msgid "Cancel add image alt text"
#~ msgstr "Batal menambahkan teks alt gambar"
-#: src/view/com/modals/ChangeHandle.tsx:149
+#: src/view/com/modals/ChangeHandle.tsx:150
msgid "Cancel change handle"
msgstr "Batal mengubah handle"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:134
+#: src/view/com/modals/crop-image/CropImage.web.tsx:135
msgid "Cancel image crop"
msgstr "Batal memotong gambar"
-#: src/view/com/modals/EditProfile.tsx:244
+#: src/view/com/modals/EditProfile.tsx:245
msgid "Cancel profile editing"
msgstr "Batal mengedit profil"
-#: src/view/com/modals/Repost.tsx:78
+#: src/view/com/modals/Repost.tsx:79
msgid "Cancel quote post"
msgstr "Batal mengutip postingan"
#: src/view/com/modals/ListAddRemoveUsers.tsx:87
-#: src/view/shell/desktop/Search.tsx:234
+#: src/view/shell/desktop/Search.tsx:235
msgid "Cancel search"
msgstr "Batal mencari"
#: src/view/com/modals/Waitlist.tsx:136
-msgid "Cancel waitlist signup"
-msgstr "Batal mendaftar di daftar tunggu"
+#~ msgid "Cancel waitlist signup"
+#~ msgstr "Batal mendaftar di daftar tunggu"
-#: src/view/screens/Settings/index.tsx:334
-msgctxt "action"
+#: src/view/com/modals/LinkWarning.tsx:106
+msgid "Cancels opening the linked website"
+msgstr ""
+
+#: src/view/com/modals/VerifyEmail.tsx:152
msgid "Change"
msgstr "Ubah"
-#~ msgid "Change"
-#~ msgstr "Ubah"
+#: src/view/screens/Settings/index.tsx:353
+msgctxt "action"
+msgid "Change"
+msgstr "Ubah"
-#: src/view/screens/Settings/index.tsx:696
+#: src/view/screens/Settings/index.tsx:716
msgid "Change handle"
msgstr "Ubah handle"
-#: src/view/com/modals/ChangeHandle.tsx:161
-#: src/view/screens/Settings/index.tsx:705
+#: src/view/com/modals/ChangeHandle.tsx:162
+#: src/view/screens/Settings/index.tsx:727
msgid "Change Handle"
msgstr "Ubah Handle"
@@ -616,21 +731,22 @@ msgstr "Ubah Handle"
msgid "Change my email"
msgstr "Ubah email saya"
-#: src/view/screens/Settings/index.tsx:732
+#: src/view/screens/Settings/index.tsx:754
msgid "Change password"
-msgstr ""
+msgstr "Ubah kata sandi"
-#: src/view/screens/Settings/index.tsx:741
+#: src/view/com/modals/ChangePassword.tsx:141
+#: src/view/screens/Settings/index.tsx:765
msgid "Change Password"
-msgstr ""
+msgstr "Ubah Kata Sandi"
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:73
msgid "Change post language to {0}"
msgstr "Ubah bahasa postingan menjadi {0}"
#: src/view/screens/Settings/index.tsx:733
-msgid "Change your Bluesky password"
-msgstr ""
+#~ msgid "Change your Bluesky password"
+#~ msgstr "Ubah kata sandi Bluesky Anda"
#: src/view/com/modals/ChangeEmail.tsx:109
msgid "Change Your Email"
@@ -639,7 +755,7 @@ msgstr "Ubah Email Anda"
#: src/screens/Deactivated.tsx:72
#: src/screens/Deactivated.tsx:76
msgid "Check my status"
-msgstr ""
+msgstr "Periksa status saya"
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:121
msgid "Check out some recommended feeds. Tap + to add them to your list of pinned feeds."
@@ -649,7 +765,7 @@ msgstr "Lihat beberapa rekomendasi feed. Ketuk + untuk menambahkan ke daftar fee
msgid "Check out some recommended users. Follow them to see similar users."
msgstr "Lihat beberapa rekomendasi pengguna. Ikuti mereka untuk melihat pengguna serupa."
-#: src/view/com/modals/DeleteAccount.tsx:169
+#: src/view/com/modals/DeleteAccount.tsx:168
msgid "Check your inbox for an email with the confirmation code to enter below:"
msgstr "Periksa kotak masuk email Anda untuk kode konfirmasi dan masukkan di bawah ini:"
@@ -658,132 +774,156 @@ msgid "Choose \"Everybody\" or \"Nobody\""
msgstr "Pilih \"Semua Orang\" atau \"Tidak Ada\""
#: src/view/screens/Settings/index.tsx:697
-msgid "Choose a new Bluesky username or create"
-msgstr "Pilih nama pengguna Bluesky baru atau buat"
+#~ msgid "Choose a new Bluesky username or create"
+#~ msgstr "Pilih nama pengguna Bluesky baru atau buat"
#: src/view/com/auth/server-input/index.tsx:79
msgid "Choose Service"
msgstr "Pilih Layanan"
-#: src/screens/Onboarding/StepFinished.tsx:135
+#: src/screens/Onboarding/StepFinished.tsx:139
msgid "Choose the algorithms that power your custom feeds."
-msgstr ""
+msgstr "Pilih algoritma yang akan digunakan untuk feed khusus Anda."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:83
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:83
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:85
msgid "Choose the algorithms that power your experience with custom feeds."
-msgstr "Pilih algoritma yang akan digunakan untuk kustom feed Anda."
+msgstr "Pilih algoritma yang akan digunakan untuk feed khusus Anda."
#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:103
#~ msgid "Choose your algorithmic feeds"
-#~ msgstr ""
+#~ msgstr "Pilih feed algoritma Anda"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:103
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:104
msgid "Choose your main feeds"
-msgstr ""
+msgstr "Pilih feed utama Anda"
-#: src/view/com/auth/create/Step1.tsx:215
+#: src/screens/Signup/StepInfo/index.tsx:112
msgid "Choose your password"
msgstr "Pilih kata sandi Anda"
-#: src/view/screens/Settings/index.tsx:834
-#: src/view/screens/Settings/index.tsx:835
+#: src/view/screens/Settings/index.tsx:868
msgid "Clear all legacy storage data"
msgstr "Hapus semua data penyimpanan lama"
-#: src/view/screens/Settings/index.tsx:837
+#: src/view/screens/Settings/index.tsx:871
msgid "Clear all legacy storage data (restart after this)"
msgstr "Hapus semua data penyimpanan lama (mulai ulang setelah ini)"
-#: src/view/screens/Settings/index.tsx:846
-#: src/view/screens/Settings/index.tsx:847
+#: src/view/screens/Settings/index.tsx:880
msgid "Clear all storage data"
msgstr "Hapus semua data penyimpanan"
-#: src/view/screens/Settings/index.tsx:849
+#: src/view/screens/Settings/index.tsx:883
msgid "Clear all storage data (restart after this)"
msgstr "Hapus semua data penyimpanan (mulai ulang setelah ini)"
#: src/view/com/util/forms/SearchInput.tsx:88
-#: src/view/screens/Search/Search.tsx:674
+#: src/view/screens/Search/Search.tsx:699
msgid "Clear search query"
msgstr "Hapus kueri pencarian"
+#: src/view/screens/Settings/index.tsx:869
+msgid "Clears all legacy storage data"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:881
+msgid "Clears all storage data"
+msgstr ""
+
#: src/view/screens/Support.tsx:40
msgid "click here"
msgstr "klik di sini"
+#: src/components/TagMenu/index.web.tsx:138
+msgid "Click here to open tag menu for {tag}"
+msgstr ""
+
+#: src/components/RichText.tsx:192
+msgid "Click here to open tag menu for #{tag}"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:35
msgid "Climate"
-msgstr ""
+msgstr "Iklim"
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
msgid "Close"
-msgstr ""
+msgstr "Tutup"
-#: src/components/Dialog/index.web.tsx:78
+#: src/components/Dialog/index.web.tsx:106
+#: src/components/Dialog/index.web.tsx:218
msgid "Close active dialog"
-msgstr ""
+msgstr "Tutup dialog aktif"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:38
+#: src/screens/Login/PasswordUpdatedForm.tsx:38
msgid "Close alert"
msgstr "Tutup peringatan"
-#: src/view/com/util/BottomSheetCustomBackdrop.tsx:33
+#: src/view/com/util/BottomSheetCustomBackdrop.tsx:36
msgid "Close bottom drawer"
msgstr "Tutup kotak bawah"
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:26
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:36
msgid "Close image"
msgstr "Tutup gambar"
-#: src/view/com/lightbox/Lightbox.web.tsx:119
+#: src/view/com/lightbox/Lightbox.web.tsx:129
msgid "Close image viewer"
msgstr "Tutup penampil gambar"
-#: src/view/shell/index.web.tsx:49
+#: src/view/shell/index.web.tsx:55
msgid "Close navigation footer"
msgstr "Tutup footer navigasi"
-#: src/view/shell/index.web.tsx:50
+#: src/components/Menu/index.tsx:207
+#: src/components/TagMenu/index.tsx:262
+msgid "Close this dialog"
+msgstr ""
+
+#: src/view/shell/index.web.tsx:56
msgid "Closes bottom navigation bar"
msgstr "Menutup bilah navigasi bawah"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:39
+#: src/screens/Login/PasswordUpdatedForm.tsx:39
msgid "Closes password update alert"
msgstr "Menutup peringatan pembaruan kata sandi"
-#: src/view/com/composer/Composer.tsx:302
+#: src/view/com/composer/Composer.tsx:319
msgid "Closes post composer and discards post draft"
msgstr "Menutup penyusun postingan dan membuang draf"
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:27
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:37
msgid "Closes viewer for header image"
msgstr "Menutup penampil untuk gambar header"
-#: src/view/com/notifications/FeedItem.tsx:317
+#: src/view/com/notifications/FeedItem.tsx:321
msgid "Collapses list of users for a given notification"
msgstr "Menciutkan daftar pengguna untuk notifikasi tertentu"
#: src/screens/Onboarding/index.tsx:41
msgid "Comedy"
-msgstr ""
+msgstr "Komedi"
#: src/screens/Onboarding/index.tsx:27
msgid "Comics"
-msgstr ""
+msgstr "Komik"
-#: src/Navigation.tsx:227
+#: src/Navigation.tsx:241
#: src/view/screens/CommunityGuidelines.tsx:32
msgid "Community Guidelines"
msgstr "Panduan Komunitas"
-#: src/screens/Onboarding/StepFinished.tsx:148
+#: src/screens/Onboarding/StepFinished.tsx:152
msgid "Complete onboarding and start using your account"
+msgstr "Selesaikan onboarding dan mulai menggunakan akun Anda"
+
+#: src/screens/Signup/index.tsx:154
+msgid "Complete the challenge"
msgstr ""
-#: src/view/com/composer/Composer.tsx:417
+#: src/view/com/composer/Composer.tsx:438
msgid "Compose posts up to {MAX_GRAPHEME_LENGTH} characters in length"
msgstr "Buat postingan dengan panjang hingga {MAX_GRAPHEME_LENGTH} karakter"
@@ -791,81 +931,112 @@ msgstr "Buat postingan dengan panjang hingga {MAX_GRAPHEME_LENGTH} karakter"
msgid "Compose reply"
msgstr "Tulis balasan"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:67
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:81
msgid "Configure content filtering setting for category: {0}"
+msgstr "Konfigurasikan pengaturan penyaringan konten untuk kategori: {0}"
+
+#: src/components/moderation/LabelPreference.tsx:81
+msgid "Configure content filtering setting for category: {name}"
msgstr ""
-#: src/components/Prompt.tsx:113
-#: src/view/com/modals/AppealLabel.tsx:98
+#: src/components/moderation/LabelPreference.tsx:244
+msgid "Configured in <0>moderation settings0>."
+msgstr ""
+
+#: src/components/Prompt.tsx:153
+#: src/components/Prompt.tsx:156
#: src/view/com/modals/SelfLabel.tsx:154
#: src/view/com/modals/VerifyEmail.tsx:231
#: src/view/com/modals/VerifyEmail.tsx:233
-#: src/view/screens/PreferencesHomeFeed.tsx:308
+#: src/view/screens/PreferencesFollowingFeed.tsx:308
#: src/view/screens/PreferencesThreads.tsx:159
msgid "Confirm"
msgstr "Konfirmasi"
#: src/view/com/modals/Confirm.tsx:75
#: src/view/com/modals/Confirm.tsx:78
-msgctxt "action"
-msgid "Confirm"
-msgstr "Konfirmasi"
+#~ msgctxt "action"
+#~ msgid "Confirm"
+#~ msgstr "Konfirmasi"
#: src/view/com/modals/ChangeEmail.tsx:193
#: src/view/com/modals/ChangeEmail.tsx:195
msgid "Confirm Change"
msgstr "Konfirmasi Perubahan"
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:34
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:35
msgid "Confirm content language settings"
msgstr "Konfirmasi pengaturan bahasa konten"
-#: src/view/com/modals/DeleteAccount.tsx:220
+#: src/view/com/modals/DeleteAccount.tsx:219
msgid "Confirm delete account"
msgstr "Konfirmasi hapus akun"
#: src/view/com/modals/ContentFilteringSettings.tsx:156
-msgid "Confirm your age to enable adult content."
-msgstr "Konfirmasikan usia Anda untuk mengaktifkan konten dewasa."
+#~ msgid "Confirm your age to enable adult content."
+#~ msgstr "Konfirmasikan usia Anda untuk mengaktifkan konten dewasa."
+
+#: src/screens/Moderation/index.tsx:301
+msgid "Confirm your age:"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:292
+msgid "Confirm your birthdate"
+msgstr ""
#: src/view/com/modals/ChangeEmail.tsx:157
-#: src/view/com/modals/DeleteAccount.tsx:182
+#: src/view/com/modals/DeleteAccount.tsx:175
+#: src/view/com/modals/DeleteAccount.tsx:181
#: src/view/com/modals/VerifyEmail.tsx:165
msgid "Confirmation code"
msgstr "Kode konfirmasi"
#: src/view/com/modals/Waitlist.tsx:120
-msgid "Confirms signing up {email} to the waitlist"
-msgstr "Konfirmasi pendaftaran {email} ke daftar tunggu"
+#~ msgid "Confirms signing up {email} to the waitlist"
+#~ msgstr "Konfirmasi pendaftaran {email} ke daftar tunggu"
-#: src/view/com/auth/create/CreateAccount.tsx:182
-#: src/view/com/auth/login/LoginForm.tsx:278
+#: src/screens/Login/LoginForm.tsx:248
msgid "Connecting..."
msgstr "Menghubungkan..."
-#: src/view/com/auth/create/CreateAccount.tsx:202
+#: src/screens/Signup/index.tsx:219
msgid "Contact support"
+msgstr "Hubungi pusat bantuan"
+
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "content"
msgstr ""
-#: src/view/screens/Moderation.tsx:81
-msgid "Content filtering"
-msgstr "Penyaring Konten"
+#: src/lib/moderation/useGlobalLabelStrings.ts:18
+msgid "Content Blocked"
+msgstr ""
+
+#: src/view/screens/Moderation.tsx:83
+#~ msgid "Content filtering"
+#~ msgstr "Penyaring Konten"
#: src/view/com/modals/ContentFilteringSettings.tsx:44
-msgid "Content Filtering"
-msgstr "Penyaring Konten"
+#~ msgid "Content Filtering"
+#~ msgstr "Penyaring Konten"
+
+#: src/screens/Moderation/index.tsx:285
+msgid "Content filters"
+msgstr ""
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74
#: src/view/screens/LanguageSettings.tsx:278
msgid "Content Languages"
msgstr "Bahasa konten"
-#: src/view/com/modals/ModerationDetails.tsx:65
+#: src/components/moderation/ModerationDetailsDialog.tsx:75
+#: src/lib/moderation/useModerationCauseDescription.ts:75
msgid "Content Not Available"
msgstr "Konten Tidak Tersedia"
-#: src/view/com/modals/ModerationDetails.tsx:33
-#: src/view/com/util/moderation/ScreenHider.tsx:78
+#: src/components/moderation/ModerationDetailsDialog.tsx:46
+#: src/components/moderation/ScreenHider.tsx:99
+#: src/lib/moderation/useGlobalLabelStrings.ts:22
+#: src/lib/moderation/useModerationCauseDescription.ts:38
msgid "Content Warning"
msgstr "Peringatan Konten"
@@ -873,146 +1044,169 @@ msgstr "Peringatan Konten"
msgid "Content warnings"
msgstr "Peringatan konten"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:170
-#: src/screens/Onboarding/StepFollowingFeed.tsx:153
-#: src/screens/Onboarding/StepInterests/index.tsx:248
-#: src/screens/Onboarding/StepModeration/index.tsx:118
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:108
+#: src/components/Menu/index.web.tsx:84
+msgid "Context menu backdrop, click to close the menu."
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:161
+#: src/screens/Onboarding/StepFollowingFeed.tsx:154
+#: src/screens/Onboarding/StepInterests/index.tsx:252
+#: src/screens/Onboarding/StepModeration/index.tsx:103
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:118
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:96
msgid "Continue"
msgstr "Lanjutkan"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:150
-#: src/screens/Onboarding/StepInterests/index.tsx:245
-#: src/screens/Onboarding/StepModeration/index.tsx:115
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:105
-msgid "Continue to next step"
+#: src/components/AccountList.tsx:108
+msgid "Continue as {0} (currently signed in)"
msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:167
+#: src/screens/Onboarding/StepFollowingFeed.tsx:151
+#: src/screens/Onboarding/StepInterests/index.tsx:249
+#: src/screens/Onboarding/StepModeration/index.tsx:100
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:115
+#: src/screens/Signup/index.tsx:198
+msgid "Continue to next step"
+msgstr "Lanjutkan ke langkah berikutnya"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:158
msgid "Continue to the next step"
-msgstr ""
+msgstr "Lanjutkan ke langkah berikutnya"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:191
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:199
msgid "Continue to the next step without following any accounts"
-msgstr ""
+msgstr "Lanjutkan ke langkah berikutnya tanpa mengikuti akun apa pun"
#: src/screens/Onboarding/index.tsx:44
msgid "Cooking"
-msgstr ""
+msgstr "Memasak"
-#: src/view/com/modals/AddAppPasswords.tsx:195
-#: src/view/com/modals/InviteCodes.tsx:182
+#: src/view/com/modals/AddAppPasswords.tsx:196
+#: src/view/com/modals/InviteCodes.tsx:183
msgid "Copied"
msgstr "Disalin"
-#: src/view/screens/Settings/index.tsx:241
+#: src/view/screens/Settings/index.tsx:251
msgid "Copied build version to clipboard"
msgstr "Menyalin versi build ke papan klip"
-#: src/view/com/modals/AddAppPasswords.tsx:76
-#: src/view/com/modals/InviteCodes.tsx:152
-#: src/view/com/util/forms/PostDropdownBtn.tsx:112
+#: src/view/com/modals/AddAppPasswords.tsx:77
+#: src/view/com/modals/ChangeHandle.tsx:326
+#: src/view/com/modals/InviteCodes.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:158
msgid "Copied to clipboard"
msgstr "Disalin ke papan klip"
-#: src/view/com/modals/AddAppPasswords.tsx:189
+#: src/view/com/modals/AddAppPasswords.tsx:190
msgid "Copies app password"
msgstr "Menyalin kata sandi aplikasi"
-#: src/view/com/modals/AddAppPasswords.tsx:188
+#: src/view/com/modals/AddAppPasswords.tsx:189
msgid "Copy"
msgstr "Salin"
-#: src/view/screens/ProfileList.tsx:417
+#: src/view/com/modals/ChangeHandle.tsx:480
+msgid "Copy {0}"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:388
msgid "Copy link to list"
msgstr "Salin tautan ke daftar"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
msgid "Copy link to post"
msgstr "Salin tautan ke postingan"
-#: src/view/com/profile/ProfileHeader.tsx:294
-msgid "Copy link to profile"
-msgstr "Salin tautan ke profil"
+#: src/view/com/profile/ProfileHeader.tsx:295
+#~ msgid "Copy link to profile"
+#~ msgstr "Salin tautan ke profil"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:139
+#: src/view/com/util/forms/PostDropdownBtn.tsx:220
+#: src/view/com/util/forms/PostDropdownBtn.tsx:222
msgid "Copy post text"
msgstr "Salin teks postingan"
-#: src/Navigation.tsx:232
+#: src/Navigation.tsx:246
#: src/view/screens/CopyrightPolicy.tsx:29
msgid "Copyright Policy"
msgstr "Kebijakan Hak Cipta"
-#: src/view/screens/ProfileFeed.tsx:96
+#: src/view/screens/ProfileFeed.tsx:103
msgid "Could not load feed"
msgstr "Tidak dapat memuat feed"
-#: src/view/screens/ProfileList.tsx:888
+#: src/view/screens/ProfileList.tsx:907
msgid "Could not load list"
msgstr "Tidak dapat memuat daftar"
#: src/view/com/auth/create/Step2.tsx:91
-msgid "Country"
-msgstr ""
+#~ msgid "Country"
+#~ msgstr "Negara"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:62
-#: src/view/com/auth/SplashScreen.tsx:46
-#: src/view/com/auth/SplashScreen.web.tsx:77
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:65
+#: src/view/com/auth/SplashScreen.tsx:75
+#: src/view/com/auth/SplashScreen.web.tsx:104
msgid "Create a new account"
msgstr "Buat akun baru"
-#: src/view/screens/Settings/index.tsx:384
+#: src/view/screens/Settings/index.tsx:403
msgid "Create a new Bluesky account"
msgstr "Buat akun Bluesky baru"
-#: src/view/com/auth/create/CreateAccount.tsx:122
+#: src/screens/Signup/index.tsx:129
msgid "Create Account"
msgstr "Buat Akun"
-#: src/view/com/modals/AddAppPasswords.tsx:226
+#: src/view/com/modals/AddAppPasswords.tsx:227
msgid "Create App Password"
msgstr "Buat Kata Sandi Aplikasi"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:54
-#: src/view/com/auth/SplashScreen.tsx:43
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:55
+#: src/view/com/auth/SplashScreen.tsx:66
+#: src/view/com/auth/SplashScreen.web.tsx:95
msgid "Create new account"
msgstr "Buat akun baru"
-#: src/view/screens/AppPasswords.tsx:249
+#: src/components/ReportDialog/SelectReportOptionView.tsx:93
+msgid "Create report for {0}"
+msgstr ""
+
+#: src/view/screens/AppPasswords.tsx:246
msgid "Created {0}"
msgstr "Dibuat {0}"
#: src/view/screens/ProfileFeed.tsx:616
-msgid "Created by <0/>"
-msgstr "Dibuat oleh <0/>"
+#~ msgid "Created by <0/>"
+#~ msgstr "Dibuat oleh <0/>"
#: src/view/screens/ProfileFeed.tsx:614
-msgid "Created by you"
-msgstr "Dibuat oleh Anda"
+#~ msgid "Created by you"
+#~ msgstr "Dibuat oleh Anda"
-#: src/view/com/composer/Composer.tsx:448
+#: src/view/com/composer/Composer.tsx:469
msgid "Creates a card with a thumbnail. The card links to {url}"
msgstr "Buat kartu dengan gambar kecil. Tautan kartu ke {url}"
#: src/screens/Onboarding/index.tsx:29
msgid "Culture"
-msgstr ""
+msgstr "Budaya"
-#: src/view/com/auth/server-input/index.tsx:95
-#: src/view/com/auth/server-input/index.tsx:96
+#: src/view/com/auth/server-input/index.tsx:97
+#: src/view/com/auth/server-input/index.tsx:99
msgid "Custom"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:389
+#: src/view/com/modals/ChangeHandle.tsx:388
msgid "Custom domain"
msgstr "Domain kustom"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:107
+#: src/view/screens/Feeds.tsx:692
msgid "Custom feeds built by the community bring you new experiences and help you find the content you love."
-msgstr ""
+msgstr "Feed khusus yang dibuat oleh komunitas memberikan pengalaman baru dan membantu Anda menemukan konten yang Anda sukai."
#: src/view/screens/PreferencesExternalEmbeds.tsx:55
msgid "Customize media from external sites."
@@ -1022,8 +1216,8 @@ msgstr "Sesuaikan media dari situs eksternal."
#~ msgid "Danger Zone"
#~ msgstr "Zona Berbahaya"
-#: src/view/screens/Settings/index.tsx:485
-#: src/view/screens/Settings/index.tsx:511
+#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:530
msgid "Dark"
msgstr "Gelap"
@@ -1031,37 +1225,53 @@ msgstr "Gelap"
msgid "Dark mode"
msgstr "Mode gelap"
-#: src/view/screens/Settings/index.tsx:498
+#: src/view/screens/Settings/index.tsx:517
msgid "Dark Theme"
+msgstr "Tema Gelap"
+
+#: src/screens/Signup/StepInfo/index.tsx:132
+msgid "Date of birth"
msgstr ""
#: src/Navigation.tsx:204
#~ msgid "Debug"
#~ msgstr "Debug"
+#: src/view/screens/Settings/index.tsx:841
+msgid "Debug Moderation"
+msgstr ""
+
#: src/view/screens/Debug.tsx:83
msgid "Debug panel"
msgstr "Panel debug"
-#: src/view/screens/Settings/index.tsx:772
+#: src/view/com/util/forms/PostDropdownBtn.tsx:319
+#: src/view/screens/AppPasswords.tsx:268
+#: src/view/screens/ProfileList.tsx:613
+msgid "Delete"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:796
msgid "Delete account"
msgstr "Hapus akun"
-#: src/view/com/modals/DeleteAccount.tsx:87
+#: src/view/com/modals/DeleteAccount.tsx:86
msgid "Delete Account"
msgstr "Hapus Akun"
-#: src/view/screens/AppPasswords.tsx:222
-#: src/view/screens/AppPasswords.tsx:242
+#: src/view/screens/AppPasswords.tsx:239
msgid "Delete app password"
msgstr "Hapus kata sandi aplikasi"
-#: src/view/screens/ProfileList.tsx:363
-#: src/view/screens/ProfileList.tsx:444
+#: src/view/screens/AppPasswords.tsx:263
+msgid "Delete app password?"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:415
msgid "Delete List"
msgstr "Hapus Daftar"
-#: src/view/com/modals/DeleteAccount.tsx:223
+#: src/view/com/modals/DeleteAccount.tsx:222
msgid "Delete my account"
msgstr "Hapus akun saya"
@@ -1069,30 +1279,35 @@ msgstr "Hapus akun saya"
#~ msgid "Delete my account…"
#~ msgstr "Hapus akun saya…"
-#: src/view/screens/Settings/index.tsx:784
+#: src/view/screens/Settings/index.tsx:808
msgid "Delete My Account…"
-msgstr ""
+msgstr "Hapus Akun Saya…"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:302
+#: src/view/com/util/forms/PostDropdownBtn.tsx:304
msgid "Delete post"
msgstr "Hapus postingan"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:232
+#: src/view/screens/ProfileList.tsx:608
+msgid "Delete this list?"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:314
msgid "Delete this post?"
msgstr "Hapus postingan ini?"
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:69
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:64
msgid "Deleted"
msgstr "Dihapus"
-#: src/view/com/post-thread/PostThread.tsx:259
+#: src/view/com/post-thread/PostThread.tsx:305
msgid "Deleted post."
msgstr "Postingan dihapus."
-#: src/view/com/modals/CreateOrEditList.tsx:300
-#: src/view/com/modals/CreateOrEditList.tsx:321
-#: src/view/com/modals/EditProfile.tsx:198
-#: src/view/com/modals/EditProfile.tsx:210
+#: src/view/com/modals/CreateOrEditList.tsx:301
+#: src/view/com/modals/CreateOrEditList.tsx:322
+#: src/view/com/modals/EditProfile.tsx:199
+#: src/view/com/modals/EditProfile.tsx:211
msgid "Description"
msgstr "Deskripsi"
@@ -1104,23 +1319,35 @@ msgstr "Deskripsi"
#~ msgid "Developer Tools"
#~ msgstr "Alat Pengembang"
-#: src/view/com/composer/Composer.tsx:211
+#: src/view/com/composer/Composer.tsx:218
msgid "Did you want to say anything?"
msgstr "Apakah Anda ingin mengatakan sesuatu?"
-#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:523
msgid "Dim"
+msgstr "Redup"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:32
+#: src/lib/moderation/useLabelBehaviorDescription.ts:42
+#: src/lib/moderation/useLabelBehaviorDescription.ts:68
+#: src/screens/Moderation/index.tsx:341
+msgid "Disabled"
msgstr ""
-#: src/view/com/composer/Composer.tsx:144
+#: src/view/com/composer/Composer.tsx:511
msgid "Discard"
msgstr "Buang"
-#: src/view/com/composer/Composer.tsx:138
-msgid "Discard draft"
-msgstr "Buang draf"
+#: src/view/com/composer/Composer.tsx:145
+#~ msgid "Discard draft"
+#~ msgstr "Buang draf"
+
+#: src/view/com/composer/Composer.tsx:508
+msgid "Discard draft?"
+msgstr ""
-#: src/view/screens/Moderation.tsx:207
+#: src/screens/Moderation/index.tsx:518
+#: src/screens/Moderation/index.tsx:522
msgid "Discourage apps from showing my account to logged-out users"
msgstr "Cegah aplikasi untuk menampilkan akun saya ke pengguna yang tidak login"
@@ -1130,27 +1357,65 @@ msgid "Discover new custom feeds"
msgstr "Temukan feed khusus baru"
#: src/view/screens/Feeds.tsx:473
-msgid "Discover new feeds"
-msgstr "Temukan feed baru"
+#~ msgid "Discover new feeds"
+#~ msgstr "Temukan feed baru"
+
+#: src/view/screens/Feeds.tsx:689
+msgid "Discover New Feeds"
+msgstr ""
-#: src/view/com/modals/EditProfile.tsx:192
+#: src/view/com/modals/EditProfile.tsx:193
msgid "Display name"
msgstr "Nama tampilan"
-#: src/view/com/modals/EditProfile.tsx:180
+#: src/view/com/modals/EditProfile.tsx:181
msgid "Display Name"
msgstr "Nama Tampilan"
-#: src/view/com/modals/ChangeHandle.tsx:487
+#: src/view/com/modals/ChangeHandle.tsx:397
+msgid "DNS Panel"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:39
+msgid "Does not include nudity."
+msgstr ""
+
+#: src/screens/Signup/StepHandle.tsx:104
+msgid "Doesn't begin or end with a hyphen"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "Domain Value"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:488
msgid "Domain verified!"
msgstr "Domain terverifikasi!"
-#: src/view/com/auth/create/Step1.tsx:166
-msgid "Don't have an invite code?"
-msgstr "Tidak punya kode undangan?"
+#: src/view/com/auth/create/Step1.tsx:170
+#~ msgid "Don't have an invite code?"
+#~ msgstr "Tidak punya kode undangan?"
+
+#: src/components/dialogs/BirthDateSettings.tsx:119
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/components/forms/DateField/index.tsx:74
+#: src/components/forms/DateField/index.tsx:80
+#: src/view/com/auth/server-input/index.tsx:169
+#: src/view/com/auth/server-input/index.tsx:170
+#: src/view/com/modals/AddAppPasswords.tsx:227
+#: src/view/com/modals/AltImage.tsx:140
+#: src/view/com/modals/crop-image/CropImage.web.tsx:153
+#: src/view/com/modals/InviteCodes.tsx:81
+#: src/view/com/modals/InviteCodes.tsx:124
+#: src/view/com/modals/ListAddRemoveUsers.tsx:142
+#: src/view/screens/PreferencesFollowingFeed.tsx:311
+#: src/view/screens/Settings/ExportCarDialog.tsx:94
+#: src/view/screens/Settings/ExportCarDialog.tsx:96
+msgid "Done"
+msgstr "Selesai"
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86
-#: src/view/com/modals/EditImage.tsx:333
+#: src/view/com/modals/EditImage.tsx:334
#: src/view/com/modals/ListAddRemoveUsers.tsx:144
#: src/view/com/modals/SelfLabel.tsx:157
#: src/view/com/modals/Threadgate.tsx:129
@@ -1162,72 +1427,68 @@ msgctxt "action"
msgid "Done"
msgstr "Selesai"
-#: src/view/com/auth/server-input/index.tsx:165
-#: src/view/com/auth/server-input/index.tsx:166
-#: src/view/com/modals/AddAppPasswords.tsx:226
-#: src/view/com/modals/AltImage.tsx:139
-#: src/view/com/modals/ContentFilteringSettings.tsx:88
-#: src/view/com/modals/ContentFilteringSettings.tsx:96
-#: src/view/com/modals/crop-image/CropImage.web.tsx:152
-#: src/view/com/modals/InviteCodes.tsx:80
-#: src/view/com/modals/InviteCodes.tsx:123
-#: src/view/com/modals/ListAddRemoveUsers.tsx:142
-#: src/view/screens/PreferencesHomeFeed.tsx:311
-#: src/view/screens/Settings/ExportCarDialog.tsx:93
-#: src/view/screens/Settings/ExportCarDialog.tsx:94
-msgid "Done"
-msgstr "Selesai"
-
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:42
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:43
msgid "Done{extraText}"
msgstr "Selesai{extraText}"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:45
-msgid "Double tap to sign in"
-msgstr "Ketuk dua kali untuk masuk"
+#: src/view/com/auth/login/ChooseAccountForm.tsx:46
+#~ msgid "Double tap to sign in"
+#~ msgstr "Ketuk dua kali untuk masuk"
#: src/view/screens/Settings/index.tsx:755
-msgid "Download Bluesky account data (repository)"
-msgstr ""
+#~ msgid "Download Bluesky account data (repository)"
+#~ msgstr ""
#: src/view/screens/Settings/ExportCarDialog.tsx:59
#: src/view/screens/Settings/ExportCarDialog.tsx:63
msgid "Download CAR file"
msgstr ""
-#: src/view/com/composer/text-input/TextInput.web.tsx:247
+#: src/view/com/composer/text-input/TextInput.web.tsx:249
msgid "Drop to add images"
-msgstr ""
+msgstr "Lepaskan untuk menambahkan gambar"
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:111
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:120
msgid "Due to Apple policies, adult content can only be enabled on the web after completing sign up."
+msgstr "Sesuai dengan kebijakan Apple, konten dewasa hanya dapat diaktifkan di web setelah menyelesaikan pendaftaran."
+
+#: src/view/com/modals/ChangeHandle.tsx:258
+msgid "e.g. alice"
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:185
+#: src/view/com/modals/EditProfile.tsx:186
msgid "e.g. Alice Roberts"
msgstr "contoh: Alice Roberts"
-#: src/view/com/modals/EditProfile.tsx:203
+#: src/view/com/modals/ChangeHandle.tsx:380
+msgid "e.g. alice.com"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:204
msgid "e.g. Artist, dog-lover, and avid reader."
msgstr "contoh: Seniman, penyayang anjing, dan pembaca setia."
-#: src/view/com/modals/CreateOrEditList.tsx:283
+#: src/lib/moderation/useGlobalLabelStrings.ts:43
+msgid "E.g. artistic nudes."
+msgstr ""
+
+#: src/view/com/modals/CreateOrEditList.tsx:284
msgid "e.g. Great Posters"
msgstr "contoh: Pemosting Keren"
-#: src/view/com/modals/CreateOrEditList.tsx:284
+#: src/view/com/modals/CreateOrEditList.tsx:285
msgid "e.g. Spammers"
msgstr "contoh: Spammer"
-#: src/view/com/modals/CreateOrEditList.tsx:312
+#: src/view/com/modals/CreateOrEditList.tsx:313
msgid "e.g. The posters who never miss."
msgstr "contoh: Pemosting yang selalu tepat sasaran."
-#: src/view/com/modals/CreateOrEditList.tsx:313
+#: src/view/com/modals/CreateOrEditList.tsx:314
msgid "e.g. Users that repeatedly reply with ads."
msgstr "contoh: Pengguna yang membalas dengan iklan secara berulang."
-#: src/view/com/modals/InviteCodes.tsx:96
+#: src/view/com/modals/InviteCodes.tsx:97
msgid "Each code works once. You'll receive more invite codes periodically."
msgstr "Tiap kode hanya berlaku sekali. Anda akan mendapatkan tambahan kode undangan secara berkala."
@@ -1236,68 +1497,71 @@ msgctxt "action"
msgid "Edit"
msgstr "Ubah"
+#: src/view/com/util/UserAvatar.tsx:299
+#: src/view/com/util/UserBanner.tsx:85
+msgid "Edit avatar"
+msgstr ""
+
#: src/view/com/composer/photos/Gallery.tsx:144
-#: src/view/com/modals/EditImage.tsx:207
+#: src/view/com/modals/EditImage.tsx:208
msgid "Edit image"
msgstr "Edit gambar"
-#: src/view/screens/ProfileList.tsx:432
+#: src/view/screens/ProfileList.tsx:403
msgid "Edit list details"
msgstr "Edit detail daftar"
-#: src/view/com/modals/CreateOrEditList.tsx:250
+#: src/view/com/modals/CreateOrEditList.tsx:251
msgid "Edit Moderation List"
msgstr "Ubah Daftar Moderasi"
-#: src/Navigation.tsx:242
+#: src/Navigation.tsx:256
#: src/view/screens/Feeds.tsx:434
#: src/view/screens/SavedFeeds.tsx:84
msgid "Edit My Feeds"
msgstr "Edit Feed Saya"
-#: src/view/com/modals/EditProfile.tsx:152
+#: src/view/com/modals/EditProfile.tsx:153
msgid "Edit my profile"
msgstr "Edit profil saya"
-#: src/view/com/profile/ProfileHeader.tsx:417
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:171
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:168
msgid "Edit profile"
msgstr "Edit profil"
-#: src/view/com/profile/ProfileHeader.tsx:422
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:174
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:171
msgid "Edit Profile"
msgstr "Edit Profil"
-#: src/view/screens/Feeds.tsx:356
+#: src/view/com/home/HomeHeaderLayout.web.tsx:62
+#: src/view/screens/Feeds.tsx:355
msgid "Edit Saved Feeds"
msgstr "Edit Feed Tersimpan"
-#: src/view/com/modals/CreateOrEditList.tsx:245
+#: src/view/com/modals/CreateOrEditList.tsx:246
msgid "Edit User List"
msgstr "Edit Daftar Pengguna"
-#: src/view/com/modals/EditProfile.tsx:193
+#: src/view/com/modals/EditProfile.tsx:194
msgid "Edit your display name"
msgstr "Ubah nama tampilan Anda"
-#: src/view/com/modals/EditProfile.tsx:211
+#: src/view/com/modals/EditProfile.tsx:212
msgid "Edit your profile description"
msgstr "Ubah deskripsi profil Anda"
#: src/screens/Onboarding/index.tsx:34
msgid "Education"
-msgstr ""
+msgstr "Pendidikan"
-#: src/view/com/auth/create/Step1.tsx:195
-#: src/view/com/auth/create/Step2.tsx:194
-#: src/view/com/auth/create/Step2.tsx:269
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:156
+#: src/screens/Signup/StepInfo/index.tsx:80
#: src/view/com/modals/ChangeEmail.tsx:141
-#: src/view/com/modals/Waitlist.tsx:88
msgid "Email"
msgstr "Email"
-#: src/view/com/auth/create/Step1.tsx:186
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:147
+#: src/screens/Login/ForgotPasswordForm.tsx:99
msgid "Email address"
msgstr "Alamat email"
@@ -1314,43 +1578,69 @@ msgstr "Email Diupdate"
msgid "Email verified"
msgstr "Email terverifikasi"
-#: src/view/screens/Settings/index.tsx:312
+#: src/view/screens/Settings/index.tsx:331
msgid "Email:"
msgstr "Email:"
-#: src/view/com/modals/EmbedConsent.tsx:113
+#: src/components/dialogs/EmbedConsent.tsx:101
msgid "Enable {0} only"
msgstr "Aktifkan {0} saja"
-#: src/view/com/modals/ContentFilteringSettings.tsx:167
+#: src/screens/Moderation/index.tsx:329
+msgid "Enable adult content"
+msgstr ""
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:94
msgid "Enable Adult Content"
msgstr "Aktifkan Konten Dewasa"
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:76
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:77
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:79
msgid "Enable adult content in your feeds"
+msgstr "Aktifkan konten dewasa di feed Anda"
+
+#: src/components/dialogs/EmbedConsent.tsx:82
+#: src/components/dialogs/EmbedConsent.tsx:89
+msgid "Enable external media"
msgstr ""
#: src/view/com/modals/EmbedConsent.tsx:97
-msgid "Enable External Media"
-msgstr "Aktifkan Media Eksternal"
+#~ msgid "Enable External Media"
+#~ msgstr "Aktifkan Media Eksternal"
#: src/view/screens/PreferencesExternalEmbeds.tsx:75
msgid "Enable media players for"
msgstr "Aktifkan pemutar media untuk"
-#: src/view/screens/PreferencesHomeFeed.tsx:147
+#: src/view/screens/PreferencesFollowingFeed.tsx:147
msgid "Enable this setting to only see replies between people you follow."
msgstr "Aktifkan opsi ini untuk hanya menampilkan balasan dari akun yang Anda ikuti."
-#: src/view/screens/Profile.tsx:455
+#: src/components/dialogs/EmbedConsent.tsx:94
+msgid "Enable this source only"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:339
+msgid "Enabled"
+msgstr ""
+
+#: src/screens/Profile/Sections/Feed.tsx:84
msgid "End of feed"
msgstr "Akhir feed"
-#: src/view/com/modals/AddAppPasswords.tsx:166
+#: src/view/com/modals/AddAppPasswords.tsx:167
msgid "Enter a name for this App Password"
msgstr "Masukkan nama untuk Sandi Aplikasi ini"
+#: src/screens/Login/SetNewPasswordForm.tsx:139
+msgid "Enter a password"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:99
+#: src/components/dialogs/MutedWords.tsx:100
+msgid "Enter a word or tag"
+msgstr ""
+
#: src/view/com/modals/VerifyEmail.tsx:105
msgid "Enter Confirmation Code"
msgstr "Masukkan Kode Konfirmasi"
@@ -1359,28 +1649,28 @@ msgstr "Masukkan Kode Konfirmasi"
#~ msgid "Enter the address of your provider:"
#~ msgstr "Masukkan alamat provider Anda:"
-#: src/view/com/modals/ChangePassword.tsx:151
+#: src/view/com/modals/ChangePassword.tsx:153
msgid "Enter the code you received to change your password."
-msgstr ""
+msgstr "Masukkan kode yang Anda terima untuk mengubah kata sandi Anda."
-#: src/view/com/modals/ChangeHandle.tsx:371
+#: src/view/com/modals/ChangeHandle.tsx:370
msgid "Enter the domain you want to use"
msgstr "Masukkan domain yang ingin Anda gunakan"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:107
+#: src/screens/Login/ForgotPasswordForm.tsx:119
msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password."
msgstr "Masukkan email yang Anda gunakan untuk membuat akun. Kami akan mengirimkan \"kode reset\" untuk mengatur kata sandi baru."
-#: src/view/com/auth/create/Step1.tsx:247
-#: src/view/com/modals/BirthDateSettings.tsx:74
+#: src/components/dialogs/BirthDateSettings.tsx:108
msgid "Enter your birth date"
msgstr "Masukkan tanggal lahir Anda"
#: src/view/com/modals/Waitlist.tsx:78
-msgid "Enter your email"
-msgstr "Masukkan email Anda"
+#~ msgid "Enter your email"
+#~ msgstr "Masukkan email Anda"
-#: src/view/com/auth/create/Step1.tsx:191
+#: src/screens/Login/ForgotPasswordForm.tsx:105
+#: src/screens/Signup/StepInfo/index.tsx:91
msgid "Enter your email address"
msgstr "Masukkan alamat email Anda"
@@ -1393,14 +1683,18 @@ msgid "Enter your new email address below."
msgstr "Masukkan alamat email baru Anda di bawah ini."
#: src/view/com/auth/create/Step2.tsx:188
-msgid "Enter your phone number"
-msgstr ""
+#~ msgid "Enter your phone number"
+#~ msgstr "Masukkan nomor telepon Anda"
-#: src/view/com/auth/login/Login.tsx:99
+#: src/screens/Login/index.tsx:101
msgid "Enter your username and password"
msgstr "Masukkan nama pengguna dan kata sandi Anda"
-#: src/view/screens/Search/Search.tsx:109
+#: src/screens/Signup/StepCaptcha/index.tsx:49
+msgid "Error receiving captcha response."
+msgstr ""
+
+#: src/view/screens/Search/Search.tsx:111
msgid "Error:"
msgstr "Eror:"
@@ -1408,24 +1702,36 @@ msgstr "Eror:"
msgid "Everybody"
msgstr "Semua orang"
-#: src/view/com/modals/ChangeHandle.tsx:150
+#: src/lib/moderation/useReportOptions.ts:66
+msgid "Excessive mentions or replies"
+msgstr ""
+
+#: src/view/com/modals/DeleteAccount.tsx:230
+msgid "Exits account deletion process"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:151
msgid "Exits handle change process"
msgstr "Keluar dari proses perubahan handle"
-#: src/view/com/lightbox/Lightbox.web.tsx:120
+#: src/view/com/modals/crop-image/CropImage.web.tsx:136
+msgid "Exits image cropping process"
+msgstr ""
+
+#: src/view/com/lightbox/Lightbox.web.tsx:130
msgid "Exits image view"
msgstr "Keluar dari tampilan gambar"
#: src/view/com/modals/ListAddRemoveUsers.tsx:88
-#: src/view/shell/desktop/Search.tsx:235
+#: src/view/shell/desktop/Search.tsx:236
msgid "Exits inputting search query"
msgstr "Keluar dari memasukkan permintaan pencarian"
#: src/view/com/modals/Waitlist.tsx:138
-msgid "Exits signing up for waitlist with {email}"
-msgstr "Keluar dari pendaftaran untuk daftar tunggu dengan {email}"
+#~ msgid "Exits signing up for waitlist with {email}"
+#~ msgstr "Keluar dari pendaftaran untuk daftar tunggu dengan {email}"
-#: src/view/com/lightbox/Lightbox.web.tsx:163
+#: src/view/com/lightbox/Lightbox.web.tsx:183
msgid "Expand alt text"
msgstr "Tampilkan teks alt"
@@ -1434,44 +1740,53 @@ msgstr "Tampilkan teks alt"
msgid "Expand or collapse the full post you are replying to"
msgstr "Bentangkan atau ciutkan postingan lengkap yang Anda balas"
-#: src/view/screens/Settings/index.tsx:753
+#: src/lib/moderation/useGlobalLabelStrings.ts:47
+msgid "Explicit or potentially disturbing media."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:35
+msgid "Explicit sexual images."
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:777
msgid "Export my data"
msgstr ""
#: src/view/screens/Settings/ExportCarDialog.tsx:44
-#: src/view/screens/Settings/index.tsx:764
+#: src/view/screens/Settings/index.tsx:788
msgid "Export My Data"
msgstr ""
-#: src/view/com/modals/EmbedConsent.tsx:64
+#: src/components/dialogs/EmbedConsent.tsx:55
+#: src/components/dialogs/EmbedConsent.tsx:59
msgid "External Media"
msgstr "Media Eksternal"
-#: src/view/com/modals/EmbedConsent.tsx:75
+#: src/components/dialogs/EmbedConsent.tsx:71
#: src/view/screens/PreferencesExternalEmbeds.tsx:66
msgid "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."
msgstr "Media eksternal memungkinkan situs web untuk mengumpulkan informasi tentang Anda dan perangkat Anda. Tidak ada informasi yang dikirim atau diminta hingga Anda menekan tombol \"play\"."
-#: src/Navigation.tsx:258
+#: src/Navigation.tsx:275
#: src/view/screens/PreferencesExternalEmbeds.tsx:52
-#: src/view/screens/Settings/index.tsx:657
+#: src/view/screens/Settings/index.tsx:677
msgid "External Media Preferences"
msgstr "Preferensi Media Eksternal"
-#: src/view/screens/Settings/index.tsx:648
+#: src/view/screens/Settings/index.tsx:668
msgid "External media settings"
msgstr "Pengaturan media eksternal"
-#: src/view/com/modals/AddAppPasswords.tsx:115
-#: src/view/com/modals/AddAppPasswords.tsx:119
+#: src/view/com/modals/AddAppPasswords.tsx:116
+#: src/view/com/modals/AddAppPasswords.tsx:120
msgid "Failed to create app password."
msgstr "Gagal membuat kata sandi aplikasi."
-#: src/view/com/modals/CreateOrEditList.tsx:206
+#: src/view/com/modals/CreateOrEditList.tsx:207
msgid "Failed to create the list. Check your internet connection and try again."
msgstr "Gagal membuat daftar. Periksa koneksi internet Anda dan coba lagi."
-#: src/view/com/util/forms/PostDropdownBtn.tsx:88
+#: src/view/com/util/forms/PostDropdownBtn.tsx:125
msgid "Failed to delete post, please try again"
msgstr "Gagal menghapus postingan, silakan coba lagi"
@@ -1480,44 +1795,49 @@ msgstr "Gagal menghapus postingan, silakan coba lagi"
msgid "Failed to load recommended feeds"
msgstr "Gagal memuat rekomendasi feed"
-#: src/Navigation.tsx:192
+#: src/view/com/lightbox/Lightbox.tsx:83
+msgid "Failed to save image: {0}"
+msgstr ""
+
+#: src/Navigation.tsx:196
msgid "Feed"
msgstr "Feed"
-#: src/view/com/feeds/FeedSourceCard.tsx:229
+#: src/view/com/feeds/FeedSourceCard.tsx:218
msgid "Feed by {0}"
msgstr "Feed oleh {0}"
-#: src/view/screens/Feeds.tsx:631
+#: src/view/screens/Feeds.tsx:605
msgid "Feed offline"
msgstr "Feed offline"
#: src/view/com/feeds/FeedPage.tsx:143
-msgid "Feed Preferences"
-msgstr "Preferensi Feed"
+#~ msgid "Feed Preferences"
+#~ msgstr "Preferensi Feed"
-#: src/view/shell/desktop/RightNav.tsx:69
-#: src/view/shell/Drawer.tsx:311
+#: src/view/shell/desktop/RightNav.tsx:61
+#: src/view/shell/Drawer.tsx:314
msgid "Feedback"
msgstr "Masukan"
-#: src/Navigation.tsx:442
-#: src/view/screens/Feeds.tsx:548
-#: src/view/screens/Profile.tsx:184
-#: src/view/shell/bottom-bar/BottomBar.tsx:181
-#: src/view/shell/desktop/LeftNav.tsx:342
-#: src/view/shell/Drawer.tsx:476
-#: src/view/shell/Drawer.tsx:477
+#: src/Navigation.tsx:464
+#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:524
+#: src/view/screens/Profile.tsx:194
+#: src/view/shell/bottom-bar/BottomBar.tsx:191
+#: src/view/shell/desktop/LeftNav.tsx:346
+#: src/view/shell/Drawer.tsx:479
+#: src/view/shell/Drawer.tsx:480
msgid "Feeds"
msgstr "Feed"
#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
#~ msgid "Feeds are created by users and can give you entirely new experiences."
-#~ msgstr ""
+#~ msgstr "Feed dibuat oleh pengguna dan dapat memberikan Anda pengalaman yang benar-benar baru."
#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
#~ msgid "Feeds are created by users and organizations. They offer you varied experiences and suggest content you may like using algorithms."
-#~ msgstr ""
+#~ msgstr "Feed dibuat oleh pengguna dan organisasi. Mereka menawarkan Anda pengalaman yang beragam dan menyarankan konten yang mungkin Anda sukai menggunakan algoritma."
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:57
msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting."
@@ -1527,35 +1847,47 @@ msgstr "Feed dibuat oleh pengguna untuk mengkurasi konten. Pilih beberapa feed y
msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information."
msgstr "Feed adalah algoritma khusus yang dibuat oleh pengguna dengan sedikit keahlian pengkodean. <0/> untuk informasi lebih lanjut."
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:70
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:80
msgid "Feeds can be topical as well!"
+msgstr "Feed juga bisa tentang tren terkini!"
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "File Contents"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:151
-msgid "Finalizing"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:66
+msgid "Filter from feeds"
msgstr ""
+#: src/screens/Onboarding/StepFinished.tsx:155
+msgid "Finalizing"
+msgstr "Menyelesaikan"
+
#: src/view/com/posts/CustomFeedEmptyState.tsx:47
#: src/view/com/posts/FollowingEmptyState.tsx:57
#: src/view/com/posts/FollowingEndOfFeed.tsx:58
msgid "Find accounts to follow"
msgstr "Temukan akun untuk diikuti"
-#: src/view/screens/Search/Search.tsx:439
+#: src/view/screens/Search/Search.tsx:442
msgid "Find users on Bluesky"
msgstr "Temukan pengguna di Bluesky"
-#: src/view/screens/Search/Search.tsx:437
+#: src/view/screens/Search/Search.tsx:440
msgid "Find users with the search tool on the right"
msgstr "Temukan pengguna dengan alat pencarian di sebelah kanan"
-#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:155
msgid "Finding similar accounts..."
msgstr "Mencari akun serupa..."
+#: src/view/screens/PreferencesFollowingFeed.tsx:111
+msgid "Fine-tune the content you see on your Following feed."
+msgstr ""
+
#: src/view/screens/PreferencesHomeFeed.tsx:111
-msgid "Fine-tune the content you see on your home screen."
-msgstr "Atur konten yang Anda lihat di beranda."
+#~ msgid "Fine-tune the content you see on your home screen."
+#~ msgstr "Atur konten yang Anda lihat di beranda."
#: src/view/screens/PreferencesThreads.tsx:60
msgid "Fine-tune the discussion threads."
@@ -1563,55 +1895,66 @@ msgstr "Atur utasan diskusi."
#: src/screens/Onboarding/index.tsx:38
msgid "Fitness"
-msgstr ""
+msgstr "Kebugaran"
-#: src/screens/Onboarding/StepFinished.tsx:131
+#: src/screens/Onboarding/StepFinished.tsx:135
msgid "Flexible"
-msgstr ""
+msgstr "Fleksibel"
-#: src/view/com/modals/EditImage.tsx:115
+#: src/view/com/modals/EditImage.tsx:116
msgid "Flip horizontal"
msgstr "Balik secara horizontal"
-#: src/view/com/modals/EditImage.tsx:120
-#: src/view/com/modals/EditImage.tsx:287
+#: src/view/com/modals/EditImage.tsx:121
+#: src/view/com/modals/EditImage.tsx:288
msgid "Flip vertically"
msgstr "Balik secara vertikal"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:181
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:512
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:189
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:236
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:146
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
msgid "Follow"
msgstr "Ikuti"
-#: src/view/com/profile/FollowButton.tsx:64
+#: src/view/com/profile/FollowButton.tsx:69
msgctxt "action"
msgid "Follow"
msgstr "Ikuti"
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:58
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:122
-#: src/view/com/profile/ProfileHeader.tsx:503
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:221
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:128
msgid "Follow {0}"
msgstr "Ikuti {0}"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:179
+#: src/view/com/profile/ProfileMenu.tsx:242
+#: src/view/com/profile/ProfileMenu.tsx:253
+msgid "Follow Account"
+msgstr ""
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:187
msgid "Follow All"
+msgstr "Ikuti Semua"
+
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:144
+msgid "Follow Back"
msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:174
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:182
msgid "Follow selected accounts and continue to the next step"
-msgstr ""
+msgstr "Ikuti akun yang dipilih dan lanjutkan ke langkah berikutnya"
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:174
#~ msgid "Follow selected accounts and continue to then next step"
-#~ msgstr ""
+#~ msgstr "Ikuti akun yang dipilih dan lanjutkan ke langkah berikutnya"
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:64
msgid "Follow some users to get started. We can recommend you more users based on who you find interesting."
msgstr "Ikuti beberapa pengguna untuk memulai. Kami dapat merekomendasikan lebih banyak pengguna yang mungkin menarik Anda."
-#: src/view/com/profile/ProfileCard.tsx:194
+#: src/view/com/profile/ProfileCard.tsx:216
msgid "Followed by {0}"
msgstr "Diikuti oleh {0}"
@@ -1619,14 +1962,15 @@ msgstr "Diikuti oleh {0}"
msgid "Followed users"
msgstr "Pengguna yang diikuti"
-#: src/view/screens/PreferencesHomeFeed.tsx:154
+#: src/view/screens/PreferencesFollowingFeed.tsx:154
msgid "Followed users only"
msgstr "Hanya pengguna yang diikuti"
-#: src/view/com/notifications/FeedItem.tsx:166
+#: src/view/com/notifications/FeedItem.tsx:170
msgid "followed you"
msgstr "mengikuti Anda"
+#: src/view/com/profile/ProfileFollowers.tsx:104
#: src/view/screens/ProfileFollowers.tsx:25
msgid "Followers"
msgstr "Pengikut"
@@ -1634,17 +1978,30 @@ msgstr "Pengikut"
#~ msgid "following"
#~ msgstr "mengikuti"
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:494
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:234
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:149
+#: src/view/com/profile/ProfileFollows.tsx:104
#: src/view/screens/ProfileFollows.tsx:25
msgid "Following"
msgstr "Mengikuti"
-#: src/view/com/profile/ProfileHeader.tsx:148
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:93
msgid "Following {0}"
msgstr "Mengikuti {0}"
-#: src/view/com/profile/ProfileHeader.tsx:545
+#: src/view/screens/Settings/index.tsx:553
+msgid "Following feed preferences"
+msgstr ""
+
+#: src/Navigation.tsx:262
+#: src/view/com/home/HomeHeaderLayout.web.tsx:50
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:84
+#: src/view/screens/PreferencesFollowingFeed.tsx:104
+#: src/view/screens/Settings/index.tsx:562
+msgid "Following Feed Preferences"
+msgstr ""
+
+#: src/screens/Profile/Header/Handle.tsx:24
msgid "Follows you"
msgstr "Mengikuti Anda"
@@ -1654,33 +2011,50 @@ msgstr "Mengikuti Anda"
#: src/screens/Onboarding/index.tsx:43
msgid "Food"
-msgstr ""
+msgstr "Makanan"
-#: src/view/com/modals/DeleteAccount.tsx:111
+#: src/view/com/modals/DeleteAccount.tsx:110
msgid "For security reasons, we'll need to send a confirmation code to your email address."
msgstr "Untuk alasan keamanan, kami akan mengirimkan kode konfirmasi ke alamat email Anda."
-#: src/view/com/modals/AddAppPasswords.tsx:209
+#: src/view/com/modals/AddAppPasswords.tsx:210
msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one."
msgstr "Untuk alasan keamanan, Anda tidak akan dapat melihat ini lagi. Jika Anda lupa kata sandi ini, Anda harus membuat yang baru."
-#: src/view/com/auth/login/LoginForm.tsx:241
-msgid "Forgot"
-msgstr "Lupa"
+#: src/view/com/auth/login/LoginForm.tsx:244
+#~ msgid "Forgot"
+#~ msgstr "Lupa"
-#: src/view/com/auth/login/LoginForm.tsx:238
-msgid "Forgot password"
-msgstr "Lupa kata sandi"
+#: src/view/com/auth/login/LoginForm.tsx:241
+#~ msgid "Forgot password"
+#~ msgstr "Lupa kata sandi"
-#: src/view/com/auth/login/Login.tsx:127
-#: src/view/com/auth/login/Login.tsx:143
+#: src/screens/Login/index.tsx:129
+#: src/screens/Login/index.tsx:144
msgid "Forgot Password"
msgstr "Lupa Kata Sandi"
-#: src/view/com/posts/FeedItem.tsx:189
-msgctxt "from-feed"
-msgid "From <0/>"
-msgstr "Dari <0/>"
+#: src/screens/Login/LoginForm.tsx:201
+msgid "Forgot password?"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:212
+msgid "Forgot?"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:52
+msgid "Frequently Posts Unwanted Content"
+msgstr ""
+
+#: src/screens/Hashtag.tsx:109
+#: src/screens/Hashtag.tsx:149
+msgid "From @{sanitizedAuthor}"
+msgstr ""
+
+#: src/view/com/posts/FeedItem.tsx:179
+msgctxt "from-feed"
+msgid "From <0/>"
+msgstr "Dari <0/>"
#: src/view/com/composer/photos/SelectPhotoBtn.tsx:43
msgid "Gallery"
@@ -1691,104 +2065,148 @@ msgstr "Galeri"
msgid "Get Started"
msgstr "Memulai"
-#: src/view/com/auth/LoggedOut.tsx:81
+#: src/lib/moderation/useReportOptions.ts:37
+msgid "Glaring violations of law or terms of service"
+msgstr ""
+
+#: src/components/moderation/ScreenHider.tsx:151
+#: src/components/moderation/ScreenHider.tsx:160
#: src/view/com/auth/LoggedOut.tsx:82
-#: src/view/com/util/moderation/ScreenHider.tsx:123
-#: src/view/shell/desktop/LeftNav.tsx:104
+#: src/view/com/auth/LoggedOut.tsx:83
+#: src/view/screens/NotFound.tsx:55
+#: src/view/screens/ProfileFeed.tsx:112
+#: src/view/screens/ProfileList.tsx:916
+#: src/view/shell/desktop/LeftNav.tsx:108
msgid "Go back"
msgstr "Kembali"
-#: src/view/screens/ProfileFeed.tsx:105
-#: src/view/screens/ProfileFeed.tsx:110
-#: src/view/screens/ProfileList.tsx:897
-#: src/view/screens/ProfileList.tsx:902
+#: src/components/Error.tsx:91
+#: src/screens/Profile/ErrorState.tsx:62
+#: src/screens/Profile/ErrorState.tsx:66
+#: src/view/screens/NotFound.tsx:54
+#: src/view/screens/ProfileFeed.tsx:117
+#: src/view/screens/ProfileList.tsx:921
msgid "Go Back"
msgstr "Kembali"
-#: src/screens/Onboarding/Layout.tsx:104
-#: src/screens/Onboarding/Layout.tsx:193
+#: src/components/ReportDialog/SelectReportOptionView.tsx:73
+#: src/components/ReportDialog/SubmitView.tsx:104
+#: src/screens/Onboarding/Layout.tsx:102
+#: src/screens/Onboarding/Layout.tsx:191
+#: src/screens/Signup/index.tsx:173
msgid "Go back to previous step"
+msgstr "Kembali ke langkah sebelumnya"
+
+#: src/view/screens/NotFound.tsx:55
+msgid "Go home"
msgstr ""
-#: src/view/screens/Search/Search.tsx:724
-#: src/view/shell/desktop/Search.tsx:262
-msgid "Go to @{queryMaybeHandle}"
+#: src/view/screens/NotFound.tsx:54
+msgid "Go Home"
msgstr ""
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:189
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:218
-#: src/view/com/auth/login/LoginForm.tsx:288
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:195
-#: src/view/com/modals/ChangePassword.tsx:165
+#: src/view/screens/Search/Search.tsx:749
+#: src/view/shell/desktop/Search.tsx:263
+msgid "Go to @{queryMaybeHandle}"
+msgstr "Kembali ke @{queryMaybeHandle}"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:172
+#: src/view/com/modals/ChangePassword.tsx:167
msgid "Go to next"
msgstr "Berikutnya"
-#: src/view/com/modals/ChangeHandle.tsx:265
+#: src/lib/moderation/useGlobalLabelStrings.ts:46
+msgid "Graphic Media"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:266
msgid "Handle"
msgstr "Handle"
-#: src/view/com/auth/create/CreateAccount.tsx:197
-msgid "Having trouble?"
+#: src/lib/moderation/useReportOptions.ts:32
+msgid "Harassment, trolling, or intolerance"
+msgstr ""
+
+#: src/Navigation.tsx:282
+msgid "Hashtag"
+msgstr ""
+
+#: src/components/RichText.tsx:188
+#~ msgid "Hashtag: {tag}"
+#~ msgstr ""
+
+#: src/components/RichText.tsx:191
+msgid "Hashtag: #{tag}"
msgstr ""
-#: src/view/shell/desktop/RightNav.tsx:98
-#: src/view/shell/Drawer.tsx:321
+#: src/screens/Signup/index.tsx:217
+msgid "Having trouble?"
+msgstr "Mengalami masalah?"
+
+#: src/view/shell/desktop/RightNav.tsx:90
+#: src/view/shell/Drawer.tsx:324
msgid "Help"
msgstr "Bantuan"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:132
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:140
msgid "Here are some accounts for you to follow"
-msgstr ""
+msgstr "Berikut beberapa akun untuk Anda ikuti"
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:132
#~ msgid "Here are some accounts for your to follow"
-#~ msgstr ""
+#~ msgstr "Berikut beberapa akun untuk Anda ikuti"
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:79
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:89
msgid "Here are some popular topical feeds. You can choose to follow as many as you like."
-msgstr ""
+msgstr "Berikut beberapa feed topik terkini yang populer. Anda dapat memilih untuk mengikuti sebanyak yang Anda suka."
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:74
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:84
msgid "Here are some topical feeds based on your interests: {interestsText}. You can choose to follow as many as you like."
-msgstr ""
+msgstr "Berikut beberapa feed topik terkini terdasarkan minat Anda: {interestsText}. Anda dapat memilih untuk mengikuti sebanyak yang Anda suka."
-#: src/view/com/modals/AddAppPasswords.tsx:153
+#: src/view/com/modals/AddAppPasswords.tsx:154
msgid "Here is your app password."
msgstr "Berikut kata sandi aplikasi Anda."
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:41
-#: src/view/com/modals/ContentFilteringSettings.tsx:251
-#: src/view/com/util/moderation/ContentHider.tsx:105
-#: src/view/com/util/moderation/PostHider.tsx:108
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:134
+#: src/components/moderation/PostHider.tsx:107
+#: src/lib/moderation/useLabelBehaviorDescription.ts:15
+#: src/lib/moderation/useLabelBehaviorDescription.ts:20
+#: src/lib/moderation/useLabelBehaviorDescription.ts:25
+#: src/lib/moderation/useLabelBehaviorDescription.ts:30
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:52
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:76
+#: src/view/com/util/forms/PostDropdownBtn.tsx:328
msgid "Hide"
msgstr "Sembunyikan"
-#: src/view/com/modals/ContentFilteringSettings.tsx:224
-#: src/view/com/notifications/FeedItem.tsx:325
+#: src/view/com/notifications/FeedItem.tsx:329
msgctxt "action"
msgid "Hide"
msgstr "Sembunyikan"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:187
+#: src/view/com/util/forms/PostDropdownBtn.tsx:276
+#: src/view/com/util/forms/PostDropdownBtn.tsx:278
msgid "Hide post"
msgstr "Sembunyikan postingan"
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:67
+#: src/components/moderation/PostHider.tsx:64
msgid "Hide the content"
msgstr "Sembunyikan konten"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:191
+#: src/view/com/util/forms/PostDropdownBtn.tsx:325
msgid "Hide this post?"
msgstr "Sembunyikan postingan ini?"
-#: src/view/com/notifications/FeedItem.tsx:315
+#: src/view/com/notifications/FeedItem.tsx:319
msgid "Hide user list"
msgstr "Sembunyikan daftar pengguna"
-#: src/view/com/profile/ProfileHeader.tsx:486
-msgid "Hides posts from {0} in your feed"
-msgstr "Menyembunyikan postingan dari {0} di feed Anda"
+#: src/view/com/profile/ProfileHeader.tsx:487
+#~ msgid "Hides posts from {0} in your feed"
+#~ msgstr "Menyembunyikan postingan dari {0} di feed Anda"
#: src/view/com/posts/FeedErrorMessage.tsx:111
msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue."
@@ -1810,11 +2228,19 @@ msgstr "Hmm, server feed memberikan respons yang buruk. Harap beri tahu pemilik
msgid "Hmm, we're having trouble finding this feed. It may have been deleted."
msgstr "Hmm, kami kesulitan menemukan feed ini. Mungkin sudah dihapus."
-#: src/Navigation.tsx:432
-#: src/view/shell/bottom-bar/BottomBar.tsx:137
-#: src/view/shell/desktop/LeftNav.tsx:306
-#: src/view/shell/Drawer.tsx:398
-#: src/view/shell/Drawer.tsx:399
+#: src/screens/Moderation/index.tsx:59
+msgid "Hmmmm, it seems we're having trouble loading this data. See below for more details. If this issue persists, please contact us."
+msgstr ""
+
+#: src/screens/Profile/ErrorState.tsx:31
+msgid "Hmmmm, we couldn't load that moderation service."
+msgstr ""
+
+#: src/Navigation.tsx:454
+#: src/view/shell/bottom-bar/BottomBar.tsx:147
+#: src/view/shell/desktop/LeftNav.tsx:310
+#: src/view/shell/Drawer.tsx:401
+#: src/view/shell/Drawer.tsx:402
msgid "Home"
msgstr "Beranda"
@@ -1822,11 +2248,17 @@ msgstr "Beranda"
#: src/view/com/pager/FeedsTabBarMobile.tsx:123
#: src/view/screens/PreferencesHomeFeed.tsx:104
#: src/view/screens/Settings/index.tsx:543
-msgid "Home Feed Preferences"
-msgstr "Preferensi Feed Beranda"
+#~ msgid "Home Feed Preferences"
+#~ msgstr "Preferensi Feed Beranda"
+
+#: src/view/com/modals/ChangeHandle.tsx:420
+msgid "Host:"
+msgstr ""
-#: src/view/com/auth/create/Step1.tsx:78
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:120
+#: src/screens/Login/ForgotPasswordForm.tsx:89
+#: src/screens/Login/LoginForm.tsx:134
+#: src/screens/Signup/StepInfo/index.tsx:40
+#: src/view/com/modals/ChangeHandle.tsx:281
msgid "Hosting provider"
msgstr "Provider hosting"
@@ -1846,11 +2278,11 @@ msgstr "Saya punya kode"
msgid "I have a confirmation code"
msgstr "Saya punya kode konfirmasi"
-#: src/view/com/modals/ChangeHandle.tsx:283
+#: src/view/com/modals/ChangeHandle.tsx:284
msgid "I have my own domain"
msgstr "Saya punya domain sendiri"
-#: src/view/com/lightbox/Lightbox.web.tsx:165
+#: src/view/com/lightbox/Lightbox.web.tsx:185
msgid "If alt text is long, toggles alt text expanded state"
msgstr "Jika teks alt panjang, alihkan status teks alt yang diperluas"
@@ -1858,34 +2290,54 @@ msgstr "Jika teks alt panjang, alihkan status teks alt yang diperluas"
msgid "If none are selected, suitable for all ages."
msgstr "Jika tidak ada yang dipilih, cocok untuk semua umur."
-#: src/view/com/modals/ChangePassword.tsx:146
+#: src/screens/Signup/StepInfo/Policies.tsx:83
+msgid "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."
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:610
+msgid "If you delete this list, you won't be able to recover it."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:316
+msgid "If you remove this post, you won't be able to recover it."
+msgstr ""
+
+#: src/view/com/modals/ChangePassword.tsx:148
msgid "If you want to change your password, we will send you a code to verify that this is your account."
+msgstr "Jika Anda ingin mengubah kata sandi, kami akan mengirimkan kode untuk memverifikasi bahwa ini adalah akun Anda."
+
+#: src/lib/moderation/useReportOptions.ts:36
+msgid "Illegal and Urgent"
msgstr ""
#: src/view/com/util/images/Gallery.tsx:38
msgid "Image"
msgstr "Gambar"
-#: src/view/com/modals/AltImage.tsx:120
+#: src/view/com/modals/AltImage.tsx:121
msgid "Image alt text"
msgstr "Teks alt gambar"
#: src/view/com/util/UserAvatar.tsx:311
#: src/view/com/util/UserBanner.tsx:118
-msgid "Image options"
-msgstr "Pilihan gambar"
+#~ msgid "Image options"
+#~ msgstr "Pilihan gambar"
+
+#: src/lib/moderation/useReportOptions.ts:47
+msgid "Impersonation or false claims about identity or affiliation"
+msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:138
+#: src/screens/Login/SetNewPasswordForm.tsx:127
msgid "Input code sent to your email for password reset"
msgstr "Masukkan kode yang dikirim ke email Anda untuk pengaturan ulang kata sandi"
-#: src/view/com/modals/DeleteAccount.tsx:184
+#: src/view/com/modals/DeleteAccount.tsx:183
msgid "Input confirmation code for account deletion"
msgstr "Masukkan kode konfirmasi untuk penghapusan akun"
-#: src/view/com/auth/create/Step1.tsx:196
-msgid "Input email for Bluesky account"
-msgstr ""
+#: src/view/com/auth/create/Step1.tsx:177
+#~ msgid "Input email for Bluesky account"
+#~ msgstr "Masukkan email untuk akun Bluesky"
#: src/view/com/auth/create/Step2.tsx:109
#~ msgid "Input email for Bluesky waitlist"
@@ -1895,55 +2347,59 @@ msgstr ""
#~ msgid "Input hosting provider address"
#~ msgstr "Masukkan alamat penyedia hosting"
-#: src/view/com/auth/create/Step1.tsx:154
-msgid "Input invite code to proceed"
-msgstr "Masukkan kode undangan untuk melanjutkan"
+#: src/view/com/auth/create/Step1.tsx:151
+#~ msgid "Input invite code to proceed"
+#~ msgstr "Masukkan kode undangan untuk melanjutkan"
-#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/AddAppPasswords.tsx:181
msgid "Input name for app password"
msgstr "Masukkan nama untuk kata sandi aplikasi"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:162
+#: src/screens/Login/SetNewPasswordForm.tsx:151
msgid "Input new password"
msgstr "Masukkan kata sandi baru"
-#: src/view/com/modals/DeleteAccount.tsx:203
+#: src/view/com/modals/DeleteAccount.tsx:202
msgid "Input password for account deletion"
msgstr "Masukkan kata sandi untuk penghapusan akun"
#: src/view/com/auth/create/Step2.tsx:196
-msgid "Input phone number for SMS verification"
-msgstr ""
+#~ msgid "Input phone number for SMS verification"
+#~ msgstr "Masukkan nomor telepon untuk verifikasi SMS"
-#: src/view/com/auth/login/LoginForm.tsx:230
+#: src/screens/Login/LoginForm.tsx:195
msgid "Input the password tied to {identifier}"
msgstr "Masukkan kata sandi yang terkait dengan {identifier}"
-#: src/view/com/auth/login/LoginForm.tsx:197
+#: src/screens/Login/LoginForm.tsx:168
msgid "Input the username or email address you used at signup"
msgstr "Masukkan nama pengguna atau alamat email yang Anda gunakan saat mendaftar"
#: src/view/com/auth/create/Step2.tsx:271
-msgid "Input the verification code we have texted to you"
-msgstr ""
+#~ msgid "Input the verification code we have texted to you"
+#~ msgstr "Masukkan kode verifikasi yang telah kami kirimkan melalui SMS"
#: src/view/com/modals/Waitlist.tsx:90
-msgid "Input your email to get on the Bluesky waitlist"
-msgstr "Masukkan email Anda untuk masuk ke daftar tunggu Bluesky"
+#~ msgid "Input your email to get on the Bluesky waitlist"
+#~ msgstr "Masukkan email Anda untuk masuk ke daftar tunggu Bluesky"
-#: src/view/com/auth/login/LoginForm.tsx:229
+#: src/screens/Login/LoginForm.tsx:194
msgid "Input your password"
msgstr "Masukkan kata sandi Anda"
-#: src/view/com/auth/create/Step3.tsx:42
+#: src/view/com/modals/ChangeHandle.tsx:389
+msgid "Input your preferred hosting provider"
+msgstr ""
+
+#: src/screens/Signup/StepHandle.tsx:62
msgid "Input your user handle"
msgstr "Masukkan handle pengguna Anda"
-#: src/view/com/post-thread/PostThreadItem.tsx:225
+#: src/view/com/post-thread/PostThreadItem.tsx:221
msgid "Invalid or unsupported post record"
msgstr "Catatan posting tidak valid atau tidak didukung"
-#: src/view/com/auth/login/LoginForm.tsx:113
+#: src/screens/Login/LoginForm.tsx:114
msgid "Invalid username or password"
msgstr "Username atau kata sandi salah"
@@ -1951,20 +2407,19 @@ msgstr "Username atau kata sandi salah"
#~ msgid "Invite"
#~ msgstr "Undang"
-#: src/view/com/modals/InviteCodes.tsx:93
+#: src/view/com/modals/InviteCodes.tsx:94
msgid "Invite a Friend"
msgstr "Undang Teman"
-#: src/view/com/auth/create/Step1.tsx:144
-#: src/view/com/auth/create/Step1.tsx:153
+#: src/screens/Signup/StepInfo/index.tsx:58
msgid "Invite code"
msgstr "Kode Undangan"
-#: src/view/com/auth/create/state.ts:199
+#: src/screens/Signup/state.ts:278
msgid "Invite code not accepted. Check that you input it correctly and try again."
msgstr "Kode undangan salah. Periksa bahwa Anda memasukkannya dengan benar dan coba lagi."
-#: src/view/com/modals/InviteCodes.tsx:170
+#: src/view/com/modals/InviteCodes.tsx:171
msgid "Invite codes: {0} available"
msgstr "Kode undangan: {0} tersedia"
@@ -1972,155 +2427,201 @@ msgstr "Kode undangan: {0} tersedia"
#~ msgid "Invite codes: {invitesAvailable} available"
#~ msgstr "Kode undangan: {invitesAvailable} tersedia"
-#: src/view/com/modals/InviteCodes.tsx:169
+#: src/view/com/modals/InviteCodes.tsx:170
msgid "Invite codes: 1 available"
msgstr "Kode undangan: 1 tersedia"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:64
+#: src/screens/Onboarding/StepFollowingFeed.tsx:65
msgid "It shows posts from the people you follow as they happen."
-msgstr ""
+msgstr "Feed ini menampilkan postingan secara langsung dari orang yang Anda ikuti."
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:99
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:104
+#: src/view/com/auth/SplashScreen.web.tsx:172
msgid "Jobs"
msgstr "Karir"
#: src/view/com/modals/Waitlist.tsx:67
-msgid "Join the waitlist"
-msgstr "Gabung ke daftar tunggu"
+#~ msgid "Join the waitlist"
+#~ msgstr "Gabung ke daftar tunggu"
-#: src/view/com/auth/create/Step1.tsx:170
#: src/view/com/auth/create/Step1.tsx:174
-msgid "Join the waitlist."
-msgstr "Gabung ke daftar tunggu."
+#: src/view/com/auth/create/Step1.tsx:178
+#~ msgid "Join the waitlist."
+#~ msgstr "Gabung ke daftar tunggu."
#: src/view/com/modals/Waitlist.tsx:128
-msgid "Join Waitlist"
-msgstr "Gabung ke Daftar Tunggu"
+#~ msgid "Join Waitlist"
+#~ msgstr "Gabung ke Daftar Tunggu"
#: src/screens/Onboarding/index.tsx:24
msgid "Journalism"
+msgstr "Jurnalisme"
+
+#: src/components/moderation/LabelsOnMe.tsx:59
+msgid "label has been placed on this {labelTarget}"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:144
+msgid "Labeled by {0}."
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:142
+msgid "Labeled by the author."
+msgstr ""
+
+#: src/view/screens/Profile.tsx:188
+msgid "Labels"
+msgstr ""
+
+#: src/screens/Profile/Sections/Labels.tsx:142
+msgid "Labels are annotations on users and content. They can be used to hide, warn, and categorize the network."
+msgstr ""
+
+#: src/components/moderation/LabelsOnMe.tsx:61
+msgid "labels have been placed on this {labelTarget}"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:62
+msgid "Labels on your account"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:64
+msgid "Labels on your content"
msgstr ""
#: src/view/com/composer/select-language/SelectLangBtn.tsx:104
msgid "Language selection"
msgstr "Pilih bahasa"
-#: src/view/screens/Settings/index.tsx:594
+#: src/view/screens/Settings/index.tsx:614
msgid "Language settings"
msgstr "Pengaturan bahasa"
-#: src/Navigation.tsx:140
+#: src/Navigation.tsx:144
#: src/view/screens/LanguageSettings.tsx:89
msgid "Language Settings"
msgstr "Pengaturan Bahasa"
-#: src/view/screens/Settings/index.tsx:603
+#: src/view/screens/Settings/index.tsx:623
msgid "Languages"
msgstr "Bahasa"
#: src/view/com/auth/create/StepHeader.tsx:20
-msgid "Last step!"
-msgstr "Langkah terakhir!"
+#~ msgid "Last step!"
+#~ msgstr "Langkah terakhir!"
#: src/view/com/util/moderation/ContentHider.tsx:103
-msgid "Learn more"
-msgstr "Pelajari lebih lanjut"
+#~ msgid "Learn more"
+#~ msgstr "Pelajari lebih lanjut"
-#: src/view/com/util/moderation/PostAlerts.tsx:47
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:65
-#: src/view/com/util/moderation/ScreenHider.tsx:104
+#: src/components/moderation/ScreenHider.tsx:136
msgid "Learn More"
msgstr "Pelajari Lebih Lanjut"
-#: src/view/com/util/moderation/ContentHider.tsx:85
-#: src/view/com/util/moderation/PostAlerts.tsx:40
-#: src/view/com/util/moderation/PostHider.tsx:78
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:49
-#: src/view/com/util/moderation/ScreenHider.tsx:101
+#: src/components/moderation/ContentHider.tsx:65
+#: src/components/moderation/ContentHider.tsx:128
+msgid "Learn more about the moderation applied to this content."
+msgstr ""
+
+#: src/components/moderation/PostHider.tsx:85
+#: src/components/moderation/ScreenHider.tsx:125
msgid "Learn more about this warning"
msgstr "Pelajari lebih lanjut tentang peringatan ini"
-#: src/view/screens/Moderation.tsx:243
+#: src/screens/Moderation/index.tsx:549
msgid "Learn more about what is public on Bluesky."
msgstr "Pelajari lebih lanjut tentang apa yang publik di Bluesky."
+#: src/components/moderation/ContentHider.tsx:152
+msgid "Learn more."
+msgstr ""
+
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82
msgid "Leave them all unchecked to see any language."
msgstr "Biarkan semua tidak tercentang untuk melihat bahasa apa pun."
-#: src/view/com/modals/LinkWarning.tsx:51
+#: src/view/com/modals/LinkWarning.tsx:65
msgid "Leaving Bluesky"
msgstr "Meninggalkan Bluesky"
#: src/screens/Deactivated.tsx:128
msgid "left to go."
-msgstr ""
+msgstr "yang tersisa"
-#: src/view/screens/Settings/index.tsx:278
+#: src/view/screens/Settings/index.tsx:296
msgid "Legacy storage cleared, you need to restart the app now."
msgstr "Penyimpanan lama dihapus, Anda perlu memulai ulang aplikasi sekarang."
-#: src/view/com/auth/login/Login.tsx:128
-#: src/view/com/auth/login/Login.tsx:144
+#: src/screens/Login/index.tsx:130
+#: src/screens/Login/index.tsx:145
msgid "Let's get your password reset!"
msgstr "Reset kata sandi Anda!"
-#: src/screens/Onboarding/StepFinished.tsx:151
+#: src/screens/Onboarding/StepFinished.tsx:155
msgid "Let's go!"
-msgstr ""
+msgstr "Ayo!"
#: src/view/com/util/UserAvatar.tsx:248
#: src/view/com/util/UserBanner.tsx:62
-msgid "Library"
-msgstr "Pustaka"
+#~ msgid "Library"
+#~ msgstr "Pustaka"
-#: src/view/screens/Settings/index.tsx:479
+#: src/view/screens/Settings/index.tsx:498
msgid "Light"
msgstr "Terang"
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Like"
msgstr "Suka"
-#: src/view/screens/ProfileFeed.tsx:591
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:258
+#: src/view/screens/ProfileFeed.tsx:573
msgid "Like this feed"
msgstr "Suka feed ini"
-#: src/Navigation.tsx:197
+#: src/components/LikesDialog.tsx:87
+#: src/Navigation.tsx:201
+#: src/Navigation.tsx:206
msgid "Liked by"
msgstr "Disukai oleh"
+#: src/screens/Profile/ProfileLabelerLikedBy.tsx:29
#: src/view/screens/PostLikedBy.tsx:27
#: src/view/screens/ProfileFeedLikedBy.tsx:27
msgid "Liked By"
-msgstr ""
+msgstr "Disukai Oleh"
-#: src/view/com/feeds/FeedSourceCard.tsx:277
+#: src/view/com/feeds/FeedSourceCard.tsx:268
msgid "Liked by {0} {1}"
msgstr "Disukai oleh {0} {1}"
-#: src/view/screens/ProfileFeed.tsx:606
+#: src/components/LabelingServiceCard/index.tsx:72
+msgid "Liked by {count} {0}"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:278
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:292
+#: src/view/screens/ProfileFeed.tsx:588
msgid "Liked by {likeCount} {0}"
msgstr "Disukai oleh {likeCount} {0}"
-#: src/view/com/notifications/FeedItem.tsx:170
+#: src/view/com/notifications/FeedItem.tsx:174
msgid "liked your custom feed"
-msgstr ""
+msgstr "menyukai feed khusus Anda"
#: src/view/com/notifications/FeedItem.tsx:171
#~ msgid "liked your custom feed '{0}'"
-#~ msgstr ""
+#~ msgstr "menyukai feed khusus Anda '{0}'"
#: src/view/com/notifications/FeedItem.tsx:171
#~ msgid "liked your custom feed{0}"
-#~ msgstr "menyukai feed Anda{0}"
+#~ msgstr "menyukai feed khusus Anda{0}"
-#: src/view/com/notifications/FeedItem.tsx:155
+#: src/view/com/notifications/FeedItem.tsx:159
msgid "liked your post"
msgstr "menyukai postingan Anda"
-#: src/view/screens/Profile.tsx:183
+#: src/view/screens/Profile.tsx:193
msgid "Likes"
msgstr "Suka"
@@ -2128,67 +2629,68 @@ msgstr "Suka"
msgid "Likes on this post"
msgstr "Suka pada postingan ini"
-#: src/Navigation.tsx:166
+#: src/Navigation.tsx:170
msgid "List"
msgstr "Daftar"
-#: src/view/com/modals/CreateOrEditList.tsx:261
+#: src/view/com/modals/CreateOrEditList.tsx:262
msgid "List Avatar"
msgstr "Avatar Daftar"
-#: src/view/screens/ProfileList.tsx:323
+#: src/view/screens/ProfileList.tsx:311
msgid "List blocked"
msgstr "Daftar diblokir"
-#: src/view/com/feeds/FeedSourceCard.tsx:231
+#: src/view/com/feeds/FeedSourceCard.tsx:220
msgid "List by {0}"
msgstr "Daftar oleh {0}"
-#: src/view/screens/ProfileList.tsx:377
+#: src/view/screens/ProfileList.tsx:355
msgid "List deleted"
msgstr "Daftar dihapus"
-#: src/view/screens/ProfileList.tsx:282
+#: src/view/screens/ProfileList.tsx:283
msgid "List muted"
msgstr "Daftar dibisukan"
-#: src/view/com/modals/CreateOrEditList.tsx:275
+#: src/view/com/modals/CreateOrEditList.tsx:276
msgid "List Name"
msgstr "Nama Daftar"
-#: src/view/screens/ProfileList.tsx:342
+#: src/view/screens/ProfileList.tsx:325
msgid "List unblocked"
msgstr "Daftar tidak diblokir"
-#: src/view/screens/ProfileList.tsx:301
+#: src/view/screens/ProfileList.tsx:297
msgid "List unmuted"
msgstr "Daftar tidak dibisukan"
-#: src/Navigation.tsx:110
-#: src/view/screens/Profile.tsx:185
-#: src/view/shell/desktop/LeftNav.tsx:379
-#: src/view/shell/Drawer.tsx:492
-#: src/view/shell/Drawer.tsx:493
+#: src/Navigation.tsx:114
+#: src/view/screens/Profile.tsx:189
+#: src/view/screens/Profile.tsx:195
+#: src/view/shell/desktop/LeftNav.tsx:383
+#: src/view/shell/Drawer.tsx:495
+#: src/view/shell/Drawer.tsx:496
msgid "Lists"
msgstr "Daftar"
-#: src/view/com/post-thread/PostThread.tsx:276
-#: src/view/com/post-thread/PostThread.tsx:284
-msgid "Load more posts"
-msgstr "Muat postingan lainnya"
+#: src/view/com/post-thread/PostThread.tsx:333
+#: src/view/com/post-thread/PostThread.tsx:341
+#~ msgid "Load more posts"
+#~ msgstr "Muat postingan lainnya"
#: src/view/screens/Notifications.tsx:159
msgid "Load new notifications"
msgstr "Muat notifikasi baru"
-#: src/view/com/feeds/FeedPage.tsx:190
-#: src/view/screens/Profile.tsx:440
-#: src/view/screens/ProfileFeed.tsx:494
-#: src/view/screens/ProfileList.tsx:680
+#: src/screens/Profile/Sections/Feed.tsx:70
+#: src/view/com/feeds/FeedPage.tsx:138
+#: src/view/screens/ProfileFeed.tsx:496
+#: src/view/screens/ProfileList.tsx:695
msgid "Load new posts"
msgstr "Muat postingan baru"
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:99
msgid "Loading..."
msgstr "Memuat..."
@@ -2196,7 +2698,7 @@ msgstr "Memuat..."
#~ msgid "Local dev server"
#~ msgstr "Server dev lokal"
-#: src/Navigation.tsx:207
+#: src/Navigation.tsx:221
msgid "Log"
msgstr "Catatan"
@@ -2205,24 +2707,40 @@ msgstr "Catatan"
#: src/screens/Deactivated.tsx:178
#: src/screens/Deactivated.tsx:181
msgid "Log out"
-msgstr ""
+msgstr "Keluar"
-#: src/view/screens/Moderation.tsx:136
+#: src/screens/Moderation/index.tsx:442
msgid "Logged-out visibility"
msgstr "Visibilitas pengguna yang tidak login"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:133
+#: src/components/AccountList.tsx:54
msgid "Login to account that is not listed"
msgstr "Masuk ke akun yang tidak ada di daftar"
#~ msgid "Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!"
#~ msgstr "Sepertinya feed ini hanya tersedia untuk pengguna dengan akun Bluesky. Silakan daftar atau masuk untuk melihat feed ini!"
-#: src/view/com/modals/LinkWarning.tsx:65
+#: src/screens/Login/SetNewPasswordForm.tsx:116
+msgid "Looks like XXXXX-XXXXX"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:79
msgid "Make sure this is where you intend to go!"
msgstr "Pastikan ini adalah website yang Anda tuju!"
-#: src/view/screens/Profile.tsx:182
+#: src/components/dialogs/MutedWords.tsx:82
+msgid "Manage your muted words and tags"
+msgstr ""
+
+#: src/view/com/auth/create/Step2.tsx:118
+#~ msgid "May not be longer than 253 characters"
+#~ msgstr ""
+
+#: src/view/com/auth/create/Step2.tsx:109
+#~ msgid "May only contain letters and numbers"
+#~ msgstr ""
+
+#: src/view/screens/Profile.tsx:192
msgid "Media"
msgstr "Media"
@@ -2234,118 +2752,181 @@ msgstr "pengguna yang disebutkan"
msgid "Mentioned users"
msgstr "Pengguna yang disebutkan"
-#: src/view/com/util/ViewHeader.tsx:81
-#: src/view/screens/Search/Search.tsx:623
+#: src/view/com/util/ViewHeader.tsx:87
+#: src/view/screens/Search/Search.tsx:648
msgid "Menu"
msgstr "Menu"
#~ msgid "Message from server"
#~ msgstr "Pesan dari server"
-#: src/view/com/posts/FeedErrorMessage.tsx:197
+#: src/view/com/posts/FeedErrorMessage.tsx:192
msgid "Message from server: {0}"
msgstr "Pesan dari server: {0}"
-#: src/Navigation.tsx:115
-#: src/view/screens/Moderation.tsx:64
-#: src/view/screens/Settings/index.tsx:625
-#: src/view/shell/desktop/LeftNav.tsx:397
-#: src/view/shell/Drawer.tsx:511
-#: src/view/shell/Drawer.tsx:512
+#: src/lib/moderation/useReportOptions.ts:45
+msgid "Misleading Account"
+msgstr ""
+
+#: src/Navigation.tsx:119
+#: src/screens/Moderation/index.tsx:104
+#: src/view/screens/Settings/index.tsx:645
+#: src/view/shell/desktop/LeftNav.tsx:401
+#: src/view/shell/Drawer.tsx:514
+#: src/view/shell/Drawer.tsx:515
msgid "Moderation"
msgstr "Moderasi"
-#: src/view/com/lists/ListCard.tsx:92
+#: src/components/moderation/ModerationDetailsDialog.tsx:112
+msgid "Moderation details"
+msgstr ""
+
+#: src/view/com/lists/ListCard.tsx:93
#: src/view/com/modals/UserAddRemoveLists.tsx:206
msgid "Moderation list by {0}"
msgstr "Daftar moderasi oleh {0}"
-#: src/view/screens/ProfileList.tsx:774
+#: src/view/screens/ProfileList.tsx:789
msgid "Moderation list by <0/>"
msgstr "Daftar moderasi oleh <0/>"
-#: src/view/com/lists/ListCard.tsx:90
+#: src/view/com/lists/ListCard.tsx:91
#: src/view/com/modals/UserAddRemoveLists.tsx:204
-#: src/view/screens/ProfileList.tsx:772
+#: src/view/screens/ProfileList.tsx:787
msgid "Moderation list by you"
msgstr "Daftar moderasi oleh Anda"
-#: src/view/com/modals/CreateOrEditList.tsx:197
+#: src/view/com/modals/CreateOrEditList.tsx:198
msgid "Moderation list created"
msgstr "Daftar moderasi dibuat"
-#: src/view/com/modals/CreateOrEditList.tsx:183
+#: src/view/com/modals/CreateOrEditList.tsx:184
msgid "Moderation list updated"
msgstr "Daftar moderasi diperbarui"
-#: src/view/screens/Moderation.tsx:95
+#: src/screens/Moderation/index.tsx:243
msgid "Moderation lists"
msgstr "Daftar moderasi"
-#: src/Navigation.tsx:120
+#: src/Navigation.tsx:124
#: src/view/screens/ModerationModlists.tsx:58
msgid "Moderation Lists"
msgstr "Daftar Moderasi"
-#: src/view/screens/Settings/index.tsx:619
+#: src/view/screens/Settings/index.tsx:639
msgid "Moderation settings"
msgstr "Pengaturan moderasi"
-#: src/view/com/modals/ModerationDetails.tsx:35
+#: src/Navigation.tsx:216
+msgid "Moderation states"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:215
+msgid "Moderation tools"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:48
+#: src/lib/moderation/useModerationCauseDescription.ts:40
msgid "Moderator has chosen to set a general warning on the content."
msgstr "Moderator telah memilih untuk menetapkan peringatan umum pada konten."
-#: src/view/shell/desktop/Feeds.tsx:63
+#: src/view/com/post-thread/PostThreadItem.tsx:541
+msgid "More"
+msgstr ""
+
+#: src/view/shell/desktop/Feeds.tsx:65
msgid "More feeds"
msgstr "Feed lainnya"
-#: src/view/com/profile/ProfileHeader.tsx:522
-#: src/view/screens/ProfileFeed.tsx:362
-#: src/view/screens/ProfileList.tsx:616
+#: src/view/screens/ProfileList.tsx:599
msgid "More options"
msgstr "Pilihan lainnya"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:270
-msgid "More post options"
-msgstr "Opsi posting lainnya"
+#: src/view/com/util/forms/PostDropdownBtn.tsx:315
+#~ msgid "More post options"
+#~ msgstr "Opsi posting lainnya"
#: src/view/screens/PreferencesThreads.tsx:82
msgid "Most-liked replies first"
msgstr "Balasan yang paling disukai lebih dulu"
-#: src/view/com/profile/ProfileHeader.tsx:326
+#: src/view/com/auth/create/Step2.tsx:122
+#~ msgid "Must be at least 3 characters"
+#~ msgstr ""
+
+#: src/components/TagMenu/index.tsx:249
+msgid "Mute"
+msgstr ""
+
+#: src/components/TagMenu/index.web.tsx:105
+msgid "Mute {truncatedTag}"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:279
+#: src/view/com/profile/ProfileMenu.tsx:286
msgid "Mute Account"
msgstr "Bisukan Akun"
-#: src/view/screens/ProfileList.tsx:543
+#: src/view/screens/ProfileList.tsx:518
msgid "Mute accounts"
msgstr "Bisukan akun"
-#: src/view/screens/ProfileList.tsx:490
+#: src/components/TagMenu/index.tsx:209
+msgid "Mute all {displayTag} posts"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:211
+#~ msgid "Mute all {tag} posts"
+#~ msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:148
+msgid "Mute in tags only"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:133
+msgid "Mute in text & tags"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:461
+#: src/view/screens/ProfileList.tsx:624
msgid "Mute list"
msgstr "Daftar akun yang dibisukan"
-#: src/view/screens/ProfileList.tsx:274
+#: src/view/screens/ProfileList.tsx:619
msgid "Mute these accounts?"
msgstr "Bisukan akun ini?"
-#: src/view/screens/ProfileList.tsx:278
-msgid "Mute this List"
-msgstr "Bisukan Daftar ini"
+#: src/view/screens/ProfileList.tsx:279
+#~ msgid "Mute this List"
+#~ msgstr "Bisukan Daftar ini"
+
+#: src/components/dialogs/MutedWords.tsx:126
+msgid "Mute this word in post text and tags"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:141
+msgid "Mute this word in tags only"
+msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:257
msgid "Mute thread"
msgstr "Bisukan utasan"
-#: src/view/com/lists/ListCard.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:267
+#: src/view/com/util/forms/PostDropdownBtn.tsx:269
+msgid "Mute words & tags"
+msgstr ""
+
+#: src/view/com/lists/ListCard.tsx:102
msgid "Muted"
msgstr "Dibisukan"
-#: src/view/screens/Moderation.tsx:109
+#: src/screens/Moderation/index.tsx:255
msgid "Muted accounts"
msgstr "Akun yang dibisukan"
-#: src/Navigation.tsx:125
+#: src/Navigation.tsx:129
#: src/view/screens/ModerationMutedAccounts.tsx:107
msgid "Muted Accounts"
msgstr "Akun yang Dibisukan"
@@ -2354,15 +2935,24 @@ msgstr "Akun yang Dibisukan"
msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private."
msgstr "Postingan dari akun yang dibisukan akan dihilangkan dari feed dan notifikasi Anda. Pembisuan ini bersifat privat."
-#: src/view/screens/ProfileList.tsx:276
+#: src/lib/moderation/useModerationCauseDescription.ts:85
+msgid "Muted by \"{0}\""
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:231
+msgid "Muted words & tags"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:621
msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them."
msgstr "Pembisuan akun bersifat privat. Akun yang dibisukan tetap dapat berinteraksi dengan Anda, namun Anda tidak akan melihat postingan atau notifikasi dari mereka."
-#: src/view/com/modals/BirthDateSettings.tsx:56
+#: src/components/dialogs/BirthDateSettings.tsx:35
+#: src/components/dialogs/BirthDateSettings.tsx:38
msgid "My Birthday"
msgstr "Tanggal Lahir Saya"
-#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:663
msgid "My Feeds"
msgstr "Feed Saya"
@@ -2370,32 +2960,40 @@ msgstr "Feed Saya"
msgid "My Profile"
msgstr "Profil Saya"
-#: src/view/screens/Settings/index.tsx:582
+#: src/view/screens/Settings/index.tsx:596
+msgid "My saved feeds"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:602
msgid "My Saved Feeds"
msgstr "Feed Tersimpan Saya"
#: src/view/com/auth/server-input/index.tsx:118
-msgid "my-server.com"
-msgstr ""
+#~ msgid "my-server.com"
+#~ msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:179
-#: src/view/com/modals/CreateOrEditList.tsx:290
+#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/CreateOrEditList.tsx:291
msgid "Name"
msgstr "Nama"
-#: src/view/com/modals/CreateOrEditList.tsx:145
+#: src/view/com/modals/CreateOrEditList.tsx:146
msgid "Name is required"
msgstr "Nama harus diisi"
+#: src/lib/moderation/useReportOptions.ts:57
+#: src/lib/moderation/useReportOptions.ts:78
+#: src/lib/moderation/useReportOptions.ts:86
+msgid "Name or Description Violates Community Standards"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:25
msgid "Nature"
-msgstr ""
+msgstr "Alam"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:190
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:219
-#: src/view/com/auth/login/LoginForm.tsx:289
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:196
-#: src/view/com/modals/ChangePassword.tsx:166
+#: src/screens/Login/ForgotPasswordForm.tsx:173
+#: src/screens/Login/LoginForm.tsx:254
+#: src/view/com/modals/ChangePassword.tsx:168
msgid "Navigates to the next screen"
msgstr "Menuju ke layar berikutnya"
@@ -2403,18 +3001,30 @@ msgstr "Menuju ke layar berikutnya"
msgid "Navigates to your profile"
msgstr "Menuju ke profil Anda"
+#: src/components/ReportDialog/SelectReportOptionView.tsx:122
+msgid "Need to report a copyright violation?"
+msgstr ""
+
#: src/view/com/modals/EmbedConsent.tsx:107
#: src/view/com/modals/EmbedConsent.tsx:123
-msgid "Never load embeds from {0}"
-msgstr "Jangan pernah memuat embed dari {0}"
+#~ msgid "Never load embeds from {0}"
+#~ msgstr "Jangan pernah memuat embed dari {0}"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:72
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:72
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:74
msgid "Never lose access to your followers and data."
msgstr "Tidak akan lagi kehilangan akses ke data dan pengikut Anda."
-#: src/screens/Onboarding/StepFinished.tsx:119
+#: src/screens/Onboarding/StepFinished.tsx:123
msgid "Never lose access to your followers or data."
+msgstr "Tidak akan lagi kehilangan akses ke data dan pengikut Anda."
+
+#: src/components/dialogs/MutedWords.tsx:293
+#~ msgid "Nevermind"
+#~ msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:519
+msgid "Nevermind, create a handle for me"
msgstr ""
#: src/view/screens/Lists.tsx:76
@@ -2426,34 +3036,34 @@ msgstr "Baru"
msgid "New"
msgstr "Baru"
-#: src/view/com/modals/CreateOrEditList.tsx:252
+#: src/view/com/modals/CreateOrEditList.tsx:253
msgid "New Moderation List"
msgstr "Daftar Moderasi Baru"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:150
+#: src/view/com/modals/ChangePassword.tsx:212
msgid "New password"
msgstr "Kata sandi baru"
-#: src/view/com/modals/ChangePassword.tsx:215
+#: src/view/com/modals/ChangePassword.tsx:217
msgid "New Password"
-msgstr ""
+msgstr "Kata Sandi Baru"
-#: src/view/com/feeds/FeedPage.tsx:201
+#: src/view/com/feeds/FeedPage.tsx:149
msgctxt "action"
msgid "New post"
msgstr "Postingan baru"
-#: src/view/screens/Feeds.tsx:581
+#: src/view/screens/Feeds.tsx:555
#: src/view/screens/Notifications.tsx:168
-#: src/view/screens/Profile.tsx:382
-#: src/view/screens/ProfileFeed.tsx:432
-#: src/view/screens/ProfileList.tsx:195
-#: src/view/screens/ProfileList.tsx:223
-#: src/view/shell/desktop/LeftNav.tsx:248
+#: src/view/screens/Profile.tsx:452
+#: src/view/screens/ProfileFeed.tsx:434
+#: src/view/screens/ProfileList.tsx:199
+#: src/view/screens/ProfileList.tsx:227
+#: src/view/shell/desktop/LeftNav.tsx:252
msgid "New post"
msgstr "Postingan baru"
-#: src/view/shell/desktop/LeftNav.tsx:258
+#: src/view/shell/desktop/LeftNav.tsx:262
msgctxt "action"
msgid "New Post"
msgstr "Postingan baru"
@@ -2461,7 +3071,7 @@ msgstr "Postingan baru"
#~ msgid "New Post"
#~ msgstr "Postingan Baru"
-#: src/view/com/modals/CreateOrEditList.tsx:247
+#: src/view/com/modals/CreateOrEditList.tsx:248
msgid "New User List"
msgstr "Daftar Pengguna Baru"
@@ -2471,17 +3081,18 @@ msgstr "Balasan terbaru terlebih dahulu"
#: src/screens/Onboarding/index.tsx:23
msgid "News"
-msgstr ""
-
-#: src/view/com/auth/create/CreateAccount.tsx:161
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:182
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:192
-#: src/view/com/auth/login/LoginForm.tsx:291
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:187
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:198
+msgstr "Berita"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:143
+#: src/screens/Login/ForgotPasswordForm.tsx:150
+#: src/screens/Login/LoginForm.tsx:253
+#: src/screens/Login/LoginForm.tsx:260
+#: src/screens/Login/SetNewPasswordForm.tsx:174
+#: src/screens/Login/SetNewPasswordForm.tsx:180
+#: src/screens/Signup/index.tsx:205
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79
-#: src/view/com/modals/ChangePassword.tsx:251
#: src/view/com/modals/ChangePassword.tsx:253
+#: src/view/com/modals/ChangePassword.tsx:255
msgid "Next"
msgstr "Berikutnya"
@@ -2490,48 +3101,61 @@ msgctxt "action"
msgid "Next"
msgstr "Selanjutnya"
-#: src/view/com/lightbox/Lightbox.web.tsx:149
+#: src/view/com/lightbox/Lightbox.web.tsx:169
msgid "Next image"
msgstr "Gambar berikutnya"
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:200
-#: src/view/screens/PreferencesHomeFeed.tsx:235
-#: src/view/screens/PreferencesHomeFeed.tsx:272
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:200
+#: src/view/screens/PreferencesFollowingFeed.tsx:235
+#: src/view/screens/PreferencesFollowingFeed.tsx:272
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "No"
msgstr "Tidak"
-#: src/view/screens/ProfileFeed.tsx:584
-#: src/view/screens/ProfileList.tsx:754
+#: src/view/screens/ProfileFeed.tsx:562
+#: src/view/screens/ProfileList.tsx:769
msgid "No description"
msgstr "Tidak ada deskripsi"
-#: src/view/com/profile/ProfileHeader.tsx:169
+#: src/view/com/modals/ChangeHandle.tsx:405
+msgid "No DNS Panel"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:118
msgid "No longer following {0}"
msgstr "Tidak lagi mengikuti {0}"
+#: src/screens/Signup/StepHandle.tsx:114
+msgid "No longer than 253 characters"
+msgstr ""
+
#: src/view/com/notifications/Feed.tsx:109
msgid "No notifications yet!"
msgstr "Belum ada notifikasi!"
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:97
-#: src/view/com/composer/text-input/web/Autocomplete.tsx:191
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:101
+#: src/view/com/composer/text-input/web/Autocomplete.tsx:195
msgid "No result"
msgstr "Tidak ada hasil"
-#: src/view/screens/Feeds.tsx:524
+#: src/components/Lists.tsx:183
+msgid "No results found"
+msgstr ""
+
+#: src/view/screens/Feeds.tsx:495
msgid "No results found for \"{query}\""
msgstr "Tidak ada hasil ditemukan untuk \"{query}\""
#: src/view/com/modals/ListAddRemoveUsers.tsx:127
-#: src/view/screens/Search/Search.tsx:280
-#: src/view/screens/Search/Search.tsx:308
+#: src/view/screens/Search/Search.tsx:283
+#: src/view/screens/Search/Search.tsx:311
msgid "No results found for {query}"
msgstr "Tidak ada hasil ditemukan untuk {query}"
-#: src/view/com/modals/EmbedConsent.tsx:129
+#: src/components/dialogs/EmbedConsent.tsx:105
+#: src/components/dialogs/EmbedConsent.tsx:112
msgid "No thanks"
msgstr "Tidak terima kasih"
@@ -2539,12 +3163,21 @@ msgstr "Tidak terima kasih"
msgid "Nobody"
msgstr "Tak seorang pun"
+#: src/components/LikedByList.tsx:79
+#: src/components/LikesDialog.tsx:99
+msgid "Nobody has liked this yet. Maybe you should be the first!"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:42
+msgid "Non-sexual Nudity"
+msgstr ""
+
#: src/view/com/modals/SelfLabel.tsx:135
msgid "Not Applicable."
msgstr "Tidak Berlaku."
-#: src/Navigation.tsx:105
-#: src/view/screens/Profile.tsx:106
+#: src/Navigation.tsx:109
+#: src/view/screens/Profile.tsx:99
msgid "Not Found"
msgstr "Tidak ditemukan"
@@ -2553,17 +3186,23 @@ msgstr "Tidak ditemukan"
msgid "Not right now"
msgstr "Jangan sekarang"
-#: src/view/screens/Moderation.tsx:233
+#: src/view/com/profile/ProfileMenu.tsx:368
+#: src/view/com/util/forms/PostDropdownBtn.tsx:342
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:246
+msgid "Note about sharing"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:540
msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites."
msgstr "Catatan: Bluesky merupakan jaringan terbuka dan publik. Pengaturan ini hanya akan membatasi visibilitas konten Anda pada aplikasi dan website Bluesky, dan aplikasi lain mungkin tidak mengindahkan pengaturan ini. Konten Anda mungkin tetap ditampilkan kepada pengguna yang tidak login oleh aplikasi dan website lain."
-#: src/Navigation.tsx:447
+#: src/Navigation.tsx:469
#: src/view/screens/Notifications.tsx:124
#: src/view/screens/Notifications.tsx:148
-#: src/view/shell/bottom-bar/BottomBar.tsx:205
-#: src/view/shell/desktop/LeftNav.tsx:361
-#: src/view/shell/Drawer.tsx:435
-#: src/view/shell/Drawer.tsx:436
+#: src/view/shell/bottom-bar/BottomBar.tsx:215
+#: src/view/shell/desktop/LeftNav.tsx:365
+#: src/view/shell/Drawer.tsx:438
+#: src/view/shell/Drawer.tsx:439
msgid "Notifications"
msgstr "Notifikasi"
@@ -2571,15 +3210,36 @@ msgstr "Notifikasi"
msgid "Nudity"
msgstr "Ketelanjangan"
-#: src/view/com/util/ErrorBoundary.tsx:35
+#: src/lib/moderation/useReportOptions.ts:71
+msgid "Nudity or adult content not labeled as such"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:71
+#~ msgid "Nudity or pornography not labeled as such"
+#~ msgstr ""
+
+#: src/screens/Signup/index.tsx:142
+msgid "of"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:11
+msgid "Off"
+msgstr ""
+
+#: src/view/com/util/ErrorBoundary.tsx:49
msgid "Oh no!"
msgstr "Oh tidak!"
-#: src/screens/Onboarding/StepInterests/index.tsx:128
+#: src/screens/Onboarding/StepInterests/index.tsx:132
msgid "Oh no! Something went wrong."
+msgstr "Oh tidak! Sepertinya ada yang salah."
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:126
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:327
+msgid "OK"
msgstr ""
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:41
+#: src/screens/Login/PasswordUpdatedForm.tsx:44
msgid "Okay"
msgstr "Baiklah"
@@ -2587,11 +3247,11 @@ msgstr "Baiklah"
msgid "Oldest replies first"
msgstr "Balasan terlama terlebih dahulu"
-#: src/view/screens/Settings/index.tsx:234
+#: src/view/screens/Settings/index.tsx:244
msgid "Onboarding reset"
msgstr "Atur ulang orientasi"
-#: src/view/com/composer/Composer.tsx:375
+#: src/view/com/composer/Composer.tsx:392
msgid "One or more images is missing alt text."
msgstr "Satu atau lebih gambar belum ada teks alt."
@@ -2599,32 +3259,66 @@ msgstr "Satu atau lebih gambar belum ada teks alt."
msgid "Only {0} can reply."
msgstr "Hanya {0} dapat membalas."
-#: src/view/screens/AppPasswords.tsx:65
-#: src/view/screens/Profile.tsx:106
+#: src/screens/Signup/StepHandle.tsx:97
+msgid "Only contains letters, numbers, and hyphens"
+msgstr ""
+
+#: src/components/Lists.tsx:75
+msgid "Oops, something went wrong!"
+msgstr ""
+
+#: src/components/Lists.tsx:170
+#: src/view/screens/AppPasswords.tsx:67
+#: src/view/screens/Profile.tsx:99
msgid "Oops!"
msgstr "Uups!"
-#: src/screens/Onboarding/StepFinished.tsx:115
+#: src/screens/Onboarding/StepFinished.tsx:119
msgid "Open"
-msgstr ""
+msgstr "Buka"
-#: src/view/com/composer/Composer.tsx:470
-#: src/view/com/composer/Composer.tsx:471
+#: src/view/screens/Moderation.tsx:75
+#~ msgid "Open content filtering settings"
+#~ msgstr ""
+
+#: src/view/com/composer/Composer.tsx:491
+#: src/view/com/composer/Composer.tsx:492
msgid "Open emoji picker"
msgstr "Buka pemilih emoji"
-#: src/view/screens/Settings/index.tsx:712
+#: src/view/screens/ProfileFeed.tsx:300
+msgid "Open feed options menu"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:734
msgid "Open links with in-app browser"
msgstr "Buka tautan dengan browser dalam aplikasi"
-#: src/view/com/pager/FeedsTabBarMobile.tsx:87
+#: src/screens/Moderation/index.tsx:227
+msgid "Open muted words and tags settings"
+msgstr ""
+
+#: src/view/screens/Moderation.tsx:92
+#~ msgid "Open muted words settings"
+#~ msgstr ""
+
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:50
msgid "Open navigation"
msgstr "Buka navigasi"
-#: src/view/screens/Settings/index.tsx:804
+#: src/view/com/util/forms/PostDropdownBtn.tsx:183
+msgid "Open post options menu"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:828
+#: src/view/screens/Settings/index.tsx:838
msgid "Open storybook page"
msgstr "Buka halaman buku cerita"
+#: src/view/screens/Settings/index.tsx:816
+msgid "Open system log"
+msgstr ""
+
#: src/view/com/util/forms/DropdownButton.tsx:154
msgid "Opens {numItems} options"
msgstr "Membuka opsi {numItems}"
@@ -2633,11 +3327,11 @@ msgstr "Membuka opsi {numItems}"
msgid "Opens additional details for a debug entry"
msgstr "Membuka detail tambahan untuk entri debug"
-#: src/view/com/notifications/FeedItem.tsx:348
+#: src/view/com/notifications/FeedItem.tsx:353
msgid "Opens an expanded list of users in this notification"
msgstr "Membuka daftar pengguna yang diperluas dalam notifikasi ini"
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:61
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:78
msgid "Opens camera on device"
msgstr "Membuka kamera pada perangkat"
@@ -2645,7 +3339,7 @@ msgstr "Membuka kamera pada perangkat"
msgid "Opens composer"
msgstr "Membuka penyusun postingan"
-#: src/view/screens/Settings/index.tsx:595
+#: src/view/screens/Settings/index.tsx:615
msgid "Opens configurable language settings"
msgstr "Membuka pengaturan bahasa yang dapat dikonfigurasi"
@@ -2653,71 +3347,117 @@ msgstr "Membuka pengaturan bahasa yang dapat dikonfigurasi"
msgid "Opens device photo gallery"
msgstr "Membuka galeri foto perangkat"
-#: src/view/com/profile/ProfileHeader.tsx:419
-msgid "Opens editor for profile display name, avatar, background image, and description"
-msgstr "Membuka editor untuk nama tampilan profil, avatar, gambar latar belakang, dan deskripsi"
+#: src/view/com/profile/ProfileHeader.tsx:420
+#~ msgid "Opens editor for profile display name, avatar, background image, and description"
+#~ msgstr "Membuka editor untuk nama tampilan profil, avatar, gambar latar belakang, dan deskripsi"
-#: src/view/screens/Settings/index.tsx:649
+#: src/view/screens/Settings/index.tsx:669
msgid "Opens external embeds settings"
msgstr "Membuka pengaturan penyematan eksternal"
-#: src/view/com/profile/ProfileHeader.tsx:574
-msgid "Opens followers list"
-msgstr "Membuka daftar pengikut"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:57
+#: src/view/com/auth/SplashScreen.tsx:68
+#: src/view/com/auth/SplashScreen.web.tsx:97
+msgid "Opens flow to create a new Bluesky account"
+msgstr ""
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:75
+#: src/view/com/auth/SplashScreen.tsx:83
+#: src/view/com/auth/SplashScreen.web.tsx:112
+msgid "Opens flow to sign into your existing Bluesky account"
+msgstr ""
+
+#: src/view/com/profile/ProfileHeader.tsx:575
+#~ msgid "Opens followers list"
+#~ msgstr "Membuka daftar pengikut"
-#: src/view/com/profile/ProfileHeader.tsx:593
-msgid "Opens following list"
-msgstr "Membuka daftar mengikuti"
+#: src/view/com/profile/ProfileHeader.tsx:594
+#~ msgid "Opens following list"
+#~ msgstr "Membuka daftar mengikuti"
#: src/view/screens/Settings.tsx:412
#~ msgid "Opens invite code list"
#~ msgstr "Membuka daftar kode undangan"
-#: src/view/com/modals/InviteCodes.tsx:172
+#: src/view/com/modals/InviteCodes.tsx:173
msgid "Opens list of invite codes"
msgstr "Membuka daftar kode undangan"
+#: src/view/screens/Settings/index.tsx:798
+msgid "Opens modal for account deletion confirmation. Requires email code"
+msgstr ""
+
#: src/view/screens/Settings/index.tsx:774
-msgid "Opens modal for account deletion confirmation. Requires email code."
-msgstr "Membuka modal untuk konfirmasi penghapusan akun. Membutuhkan kode email."
+#~ msgid "Opens modal for account deletion confirmation. Requires email code."
+#~ msgstr "Membuka modal untuk konfirmasi penghapusan akun. Membutuhkan kode email."
-#: src/view/com/modals/ChangeHandle.tsx:281
+#: src/view/screens/Settings/index.tsx:756
+msgid "Opens modal for changing your Bluesky password"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:718
+msgid "Opens modal for choosing a new Bluesky handle"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:779
+msgid "Opens modal for downloading your Bluesky account data (repository)"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:968
+msgid "Opens modal for email verification"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:282
msgid "Opens modal for using custom domain"
msgstr "Buka modal untuk menggunakan domain kustom"
-#: src/view/screens/Settings/index.tsx:620
+#: src/view/screens/Settings/index.tsx:640
msgid "Opens moderation settings"
msgstr "Buka pengaturan moderasi"
-#: src/view/com/auth/login/LoginForm.tsx:239
+#: src/screens/Login/LoginForm.tsx:202
msgid "Opens password reset form"
msgstr "Membuka formulir pengaturan ulang kata sandi"
-#: src/view/screens/Feeds.tsx:357
+#: src/view/com/home/HomeHeaderLayout.web.tsx:63
+#: src/view/screens/Feeds.tsx:356
msgid "Opens screen to edit Saved Feeds"
-msgstr "Membuka layar untuk mengedit Umpan Tersimpan"
+msgstr "Membuka layar untuk mengedit Feed Tersimpan"
-#: src/view/screens/Settings/index.tsx:576
+#: src/view/screens/Settings/index.tsx:597
msgid "Opens screen with all saved feeds"
msgstr "Buka halaman dengan semua feed tersimpan"
+#: src/view/screens/Settings/index.tsx:696
+msgid "Opens the app password settings"
+msgstr ""
+
#: src/view/screens/Settings/index.tsx:676
-msgid "Opens the app password settings page"
-msgstr "Buka halaman pengaturan kata sandi aplikasi"
+#~ msgid "Opens the app password settings page"
+#~ msgstr "Buka halaman pengaturan kata sandi aplikasi"
+
+#: src/view/screens/Settings/index.tsx:554
+msgid "Opens the Following feed preferences"
+msgstr ""
#: src/view/screens/Settings/index.tsx:535
-msgid "Opens the home feed preferences"
-msgstr "Buka preferensi feed beranda"
+#~ msgid "Opens the home feed preferences"
+#~ msgstr "Buka preferensi feed beranda"
+
+#: src/view/com/modals/LinkWarning.tsx:93
+msgid "Opens the linked website"
+msgstr ""
-#: src/view/screens/Settings/index.tsx:805
+#: src/view/screens/Settings/index.tsx:829
+#: src/view/screens/Settings/index.tsx:839
msgid "Opens the storybook page"
msgstr "Buka halaman storybook"
-#: src/view/screens/Settings/index.tsx:793
+#: src/view/screens/Settings/index.tsx:817
msgid "Opens the system log page"
msgstr "Buka halaman log sistem"
-#: src/view/screens/Settings/index.tsx:556
+#: src/view/screens/Settings/index.tsx:575
msgid "Opens the threads preferences"
msgstr "Buka preferensi utasan"
@@ -2725,15 +3465,23 @@ msgstr "Buka preferensi utasan"
msgid "Option {0} of {numItems}"
msgstr "Opsi {0} dari {numItems}"
+#: src/components/ReportDialog/SubmitView.tsx:162
+msgid "Optionally provide additional information below:"
+msgstr ""
+
#: src/view/com/modals/Threadgate.tsx:89
msgid "Or combine these options:"
msgstr "Atau gabungkan opsi-opsi berikut:"
#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:122
#~ msgid "Or you can try our \"Discover\" algorithm:"
-#~ msgstr ""
+#~ msgstr "Atau Anda dapat mencoba algoritma \"Temukan\" kami:"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:138
+#: src/lib/moderation/useReportOptions.ts:25
+msgid "Other"
+msgstr ""
+
+#: src/components/AccountList.tsx:73
msgid "Other account"
msgstr "Akun lainnya"
@@ -2745,35 +3493,39 @@ msgstr "Akun lainnya"
msgid "Other..."
msgstr "Lainnya..."
+#: src/components/Lists.tsx:184
#: src/view/screens/NotFound.tsx:45
msgid "Page not found"
msgstr "Halaman tidak ditemukan"
#: src/view/screens/NotFound.tsx:42
msgid "Page Not Found"
-msgstr ""
+msgstr "Halaman Tidak Ditemukan"
-#: src/view/com/auth/create/Step1.tsx:210
-#: src/view/com/auth/create/Step1.tsx:220
-#: src/view/com/auth/login/LoginForm.tsx:226
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:161
-#: src/view/com/modals/DeleteAccount.tsx:202
+#: src/screens/Login/LoginForm.tsx:178
+#: src/screens/Signup/StepInfo/index.tsx:101
+#: src/view/com/modals/DeleteAccount.tsx:194
+#: src/view/com/modals/DeleteAccount.tsx:201
msgid "Password"
msgstr "Kata sandi"
-#: src/view/com/auth/login/Login.tsx:157
+#: src/view/com/modals/ChangePassword.tsx:142
+msgid "Password Changed"
+msgstr ""
+
+#: src/screens/Login/index.tsx:157
msgid "Password updated"
msgstr "Kata sandi diganti"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:28
+#: src/screens/Login/PasswordUpdatedForm.tsx:30
msgid "Password updated!"
msgstr "Kata sandi diganti!"
-#: src/Navigation.tsx:160
+#: src/Navigation.tsx:164
msgid "People followed by @{0}"
msgstr "Orang yang diikuti oleh @{0}"
-#: src/Navigation.tsx:153
+#: src/Navigation.tsx:157
msgid "People following @{0}"
msgstr "Orang yang mengikuti @{0}"
@@ -2787,82 +3539,98 @@ msgstr "Izin untuk mengakses rol kamera ditolak. Silakan aktifkan di pengaturan
#: src/screens/Onboarding/index.tsx:31
msgid "Pets"
-msgstr ""
+msgstr "Hewan Peliharaan"
#: src/view/com/auth/create/Step2.tsx:183
-msgid "Phone number"
-msgstr ""
+#~ msgid "Phone number"
+#~ msgstr "Nomor telepon"
#: src/view/com/modals/SelfLabel.tsx:121
msgid "Pictures meant for adults."
msgstr "Gambar yang ditujukan untuk orang dewasa."
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:292
+#: src/view/screens/ProfileList.tsx:563
msgid "Pin to home"
msgstr "Sematkan ke beranda"
+#: src/view/screens/ProfileFeed.tsx:295
+msgid "Pin to Home"
+msgstr ""
+
#: src/view/screens/SavedFeeds.tsx:88
msgid "Pinned Feeds"
msgstr "Feed Tersemat"
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:111
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:123
msgid "Play {0}"
msgstr "Putar {0}"
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:54
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:55
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:57
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:58
msgid "Play Video"
msgstr "Putar Video"
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:110
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:122
msgid "Plays the GIF"
msgstr "Putar GIF"
-#: src/view/com/auth/create/state.ts:177
+#: src/screens/Signup/state.ts:241
msgid "Please choose your handle."
msgstr "Silakan pilih handle Anda."
-#: src/view/com/auth/create/state.ts:160
+#: src/screens/Signup/state.ts:234
msgid "Please choose your password."
msgstr "Masukkan kata sandi Anda."
+#: src/screens/Signup/state.ts:251
+msgid "Please complete the verification captcha."
+msgstr ""
+
#: src/view/com/modals/ChangeEmail.tsx:67
msgid "Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed."
msgstr "Harap konfirmasi email Anda sebelum mengubahnya. Ini adalah persyaratan sementara selama alat pembaruan email ditambahkan, dan akan segera dihapus."
-#: src/view/com/modals/AddAppPasswords.tsx:90
+#: src/view/com/modals/AddAppPasswords.tsx:91
msgid "Please enter a name for your app password. All spaces is not allowed."
msgstr "Masukkan nama untuk kata sandi aplikasi Anda. Semua spasi tidak diperbolehkan."
#: src/view/com/auth/create/Step2.tsx:206
-msgid "Please enter a phone number that can receive SMS text messages."
-msgstr ""
+#~ msgid "Please enter a phone number that can receive SMS text messages."
+#~ msgstr "Masukkan nomor telepon yang dapat menerima pesan teks SMS."
-#: src/view/com/modals/AddAppPasswords.tsx:145
+#: src/view/com/modals/AddAppPasswords.tsx:146
msgid "Please enter a unique name for this App Password or use our randomly generated one."
msgstr "Masukkan nama unik untuk Kata Sandi Aplikasi ini atau gunakan nama yang dibuat secara acak."
-#: src/view/com/auth/create/state.ts:170
-msgid "Please enter the code you received by SMS."
+#: src/components/dialogs/MutedWords.tsx:67
+msgid "Please enter a valid word, tag, or phrase to mute"
msgstr ""
+#: src/view/com/auth/create/state.ts:170
+#~ msgid "Please enter the code you received by SMS."
+#~ msgstr "Masukkan kode yang Anda terima melalui SMS."
+
#: src/view/com/auth/create/Step2.tsx:282
-msgid "Please enter the verification code sent to {phoneNumberFormatted}."
-msgstr ""
+#~ msgid "Please enter the verification code sent to {phoneNumberFormatted}."
+#~ msgstr "Masukkan kode verifikasi yang dikirim ke {phoneNumberFormatted}."
-#: src/view/com/auth/create/state.ts:146
+#: src/screens/Signup/state.ts:220
msgid "Please enter your email."
msgstr "Masukkan email Anda."
-#: src/view/com/modals/DeleteAccount.tsx:191
+#: src/view/com/modals/DeleteAccount.tsx:190
msgid "Please enter your password as well:"
msgstr "Masukkan juga kata sandi Anda:"
+#: src/components/moderation/LabelsOnMeDialog.tsx:221
+msgid "Please explain why you think this label was incorrectly applied by {0}"
+msgstr ""
+
#: src/view/com/modals/AppealLabel.tsx:72
#: src/view/com/modals/AppealLabel.tsx:75
-msgid "Please tell us why you think this content warning was incorrectly applied!"
-msgstr "Mohon beri tahu kami mengapa menurut Anda peringatan konten ini salah diterapkan!"
+#~ msgid "Please tell us why you think this content warning was incorrectly applied!"
+#~ msgstr "Mohon beri tahu kami mengapa menurut Anda peringatan konten ini salah diterapkan!"
#~ msgid "Please tell us why you think this decision was incorrect."
#~ msgstr "Mohon beritahu kami mengapa menurut Anda keputusan ini salah."
@@ -2871,25 +3639,29 @@ msgstr "Mohon beri tahu kami mengapa menurut Anda peringatan konten ini salah di
msgid "Please Verify Your Email"
msgstr "Mohon Verifikasi Email Anda"
-#: src/view/com/composer/Composer.tsx:215
+#: src/view/com/composer/Composer.tsx:222
msgid "Please wait for your link card to finish loading"
msgstr "Harap tunggu hingga kartu tautan Anda selesai dimuat"
#: src/screens/Onboarding/index.tsx:37
msgid "Politics"
-msgstr ""
+msgstr "Politik"
#: src/view/com/modals/SelfLabel.tsx:111
msgid "Porn"
msgstr "Pornografi"
-#: src/view/com/composer/Composer.tsx:350
-#: src/view/com/composer/Composer.tsx:358
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#~ msgid "Pornography"
+#~ msgstr ""
+
+#: src/view/com/composer/Composer.tsx:367
+#: src/view/com/composer/Composer.tsx:375
msgctxt "action"
msgid "Post"
msgstr "Posting"
-#: src/view/com/post-thread/PostThread.tsx:246
+#: src/view/com/post-thread/PostThread.tsx:292
msgctxt "description"
msgid "Post"
msgstr "Posting"
@@ -2897,24 +3669,34 @@ msgstr "Posting"
#~ msgid "Post"
#~ msgstr "Posting"
-#: src/view/com/post-thread/PostThreadItem.tsx:174
+#: src/view/com/post-thread/PostThreadItem.tsx:175
msgid "Post by {0}"
msgstr "Postingan oleh {0}"
-#: src/Navigation.tsx:172
-#: src/Navigation.tsx:179
-#: src/Navigation.tsx:186
+#: src/Navigation.tsx:176
+#: src/Navigation.tsx:183
+#: src/Navigation.tsx:190
msgid "Post by @{0}"
msgstr "Postingan oleh @{0}"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:84
+#: src/view/com/util/forms/PostDropdownBtn.tsx:105
msgid "Post deleted"
msgstr "Postingan dihapus"
-#: src/view/com/post-thread/PostThread.tsx:398
+#: src/view/com/post-thread/PostThread.tsx:157
msgid "Post hidden"
msgstr "Postingan disembunyikan"
+#: src/components/moderation/ModerationDetailsDialog.tsx:97
+#: src/lib/moderation/useModerationCauseDescription.ts:99
+msgid "Post Hidden by Muted Word"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:100
+#: src/lib/moderation/useModerationCauseDescription.ts:108
+msgid "Post Hidden by You"
+msgstr ""
+
#: src/view/com/composer/select-language/SelectLangBtn.tsx:87
msgid "Post language"
msgstr "Bahasa postingan"
@@ -2923,23 +3705,42 @@ msgstr "Bahasa postingan"
msgid "Post Languages"
msgstr "Bahasa Postingan"
-#: src/view/com/post-thread/PostThread.tsx:450
+#: src/view/com/post-thread/PostThread.tsx:152
+#: src/view/com/post-thread/PostThread.tsx:164
msgid "Post not found"
msgstr "Postingan tidak ditemukan"
-#: src/view/screens/Profile.tsx:180
+#: src/components/TagMenu/index.tsx:253
+msgid "posts"
+msgstr ""
+
+#: src/view/screens/Profile.tsx:190
msgid "Posts"
msgstr "Postingan"
+#: src/components/dialogs/MutedWords.tsx:89
+msgid "Posts can be muted based on their text, their tags, or both."
+msgstr ""
+
#: src/view/com/posts/FeedErrorMessage.tsx:64
msgid "Posts hidden"
msgstr "Postingan disembunyikan"
-#: src/view/com/modals/LinkWarning.tsx:46
+#: src/view/com/modals/LinkWarning.tsx:60
msgid "Potentially Misleading Link"
msgstr "Tautan yang Mungkin Menyesatkan"
-#: src/view/com/lightbox/Lightbox.web.tsx:135
+#: src/components/forms/HostingProvider.tsx:45
+msgid "Press to change hosting provider"
+msgstr ""
+
+#: src/components/Error.tsx:74
+#: src/components/Lists.tsx:80
+#: src/screens/Signup/index.tsx:186
+msgid "Press to retry"
+msgstr ""
+
+#: src/view/com/lightbox/Lightbox.web.tsx:150
msgid "Previous image"
msgstr "Gambar sebelumnya"
@@ -2951,41 +3752,47 @@ msgstr "Bahasa Utama"
msgid "Prioritize Your Follows"
msgstr "Prioritaskan Pengikut Anda"
-#: src/view/screens/Settings/index.tsx:632
-#: src/view/shell/desktop/RightNav.tsx:80
+#: src/view/screens/Settings/index.tsx:652
+#: src/view/shell/desktop/RightNav.tsx:72
msgid "Privacy"
msgstr "Privasi"
-#: src/Navigation.tsx:217
+#: src/Navigation.tsx:231
+#: src/screens/Signup/StepInfo/Policies.tsx:56
#: src/view/screens/PrivacyPolicy.tsx:29
-#: src/view/screens/Settings/index.tsx:891
-#: src/view/shell/Drawer.tsx:262
+#: src/view/screens/Settings/index.tsx:923
+#: src/view/shell/Drawer.tsx:265
msgid "Privacy Policy"
msgstr "Kebijakan Privasi"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:198
+#: src/screens/Login/ForgotPasswordForm.tsx:156
msgid "Processing..."
msgstr "Memproses..."
-#: src/view/shell/bottom-bar/BottomBar.tsx:247
-#: src/view/shell/desktop/LeftNav.tsx:415
+#: src/view/screens/DebugMod.tsx:888
+#: src/view/screens/Profile.tsx:342
+msgid "profile"
+msgstr ""
+
+#: src/view/shell/bottom-bar/BottomBar.tsx:260
+#: src/view/shell/desktop/LeftNav.tsx:419
#: src/view/shell/Drawer.tsx:70
-#: src/view/shell/Drawer.tsx:546
-#: src/view/shell/Drawer.tsx:547
+#: src/view/shell/Drawer.tsx:549
+#: src/view/shell/Drawer.tsx:550
msgid "Profile"
msgstr "Profil"
-#: src/view/com/modals/EditProfile.tsx:128
+#: src/view/com/modals/EditProfile.tsx:129
msgid "Profile updated"
msgstr "Profil diperbarui"
-#: src/view/screens/Settings/index.tsx:949
+#: src/view/screens/Settings/index.tsx:981
msgid "Protect your account by verifying your email."
msgstr "Amankan akun Anda dengan memverifikasi email Anda."
-#: src/screens/Onboarding/StepFinished.tsx:101
+#: src/screens/Onboarding/StepFinished.tsx:105
msgid "Public"
-msgstr ""
+msgstr "Publik"
#: src/view/screens/ModerationModlists.tsx:61
msgid "Public, shareable lists of users to mute or block in bulk."
@@ -2995,15 +3802,15 @@ msgstr "Daftar publik yang dapat dibagikan oleh pengguna untuk dibisukan atau di
msgid "Public, shareable lists which can drive feeds."
msgstr "Publik, daftar yang dapat dibagikan dan dapat berimbas ke feed."
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish post"
msgstr "Publikasikan postingan"
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish reply"
msgstr "Publikasikan balasan"
-#: src/view/com/modals/Repost.tsx:65
+#: src/view/com/modals/Repost.tsx:66
msgctxt "action"
msgid "Quote post"
msgstr "Kutip postingan"
@@ -3012,7 +3819,7 @@ msgstr "Kutip postingan"
msgid "Quote post"
msgstr "Kutip postingan"
-#: src/view/com/modals/Repost.tsx:70
+#: src/view/com/modals/Repost.tsx:71
msgctxt "action"
msgid "Quote Post"
msgstr "Kutip Postingan"
@@ -3024,10 +3831,14 @@ msgstr "Kutip Postingan"
msgid "Random (aka \"Poster's Roulette\")"
msgstr "Acak (alias \"Rolet Poster\")"
-#: src/view/com/modals/EditImage.tsx:236
+#: src/view/com/modals/EditImage.tsx:237
msgid "Ratios"
msgstr "Rasio"
+#: src/view/screens/Search/Search.tsx:777
+msgid "Recent Searches"
+msgstr ""
+
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116
msgid "Recommended Feeds"
msgstr "Feed Direkomendasikan"
@@ -3036,35 +3847,50 @@ msgstr "Feed Direkomendasikan"
msgid "Recommended Users"
msgstr "Pengguna Direkomendasikan"
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/components/dialogs/MutedWords.tsx:286
+#: src/view/com/feeds/FeedSourceCard.tsx:283
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/SelfLabel.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/com/util/UserAvatar.tsx:285
-#: src/view/com/util/UserBanner.tsx:91
+#: src/view/com/posts/FeedErrorMessage.tsx:204
msgid "Remove"
msgstr "Hapus"
-#: src/view/com/feeds/FeedSourceCard.tsx:106
-msgid "Remove {0} from my feeds?"
-msgstr "Hapus {0} dari daftar feed saya?"
+#: src/view/com/feeds/FeedSourceCard.tsx:108
+#~ msgid "Remove {0} from my feeds?"
+#~ msgstr "Hapus {0} dari daftar feed saya?"
#: src/view/com/util/AccountDropdownBtn.tsx:22
msgid "Remove account"
msgstr "Hapus akun"
-#: src/view/com/posts/FeedErrorMessage.tsx:131
-#: src/view/com/posts/FeedErrorMessage.tsx:166
+#: src/view/com/util/UserAvatar.tsx:358
+msgid "Remove Avatar"
+msgstr ""
+
+#: src/view/com/util/UserBanner.tsx:148
+msgid "Remove Banner"
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:160
msgid "Remove feed"
msgstr "Hapus feed"
-#: src/view/com/feeds/FeedSourceCard.tsx:105
-#: src/view/com/feeds/FeedSourceCard.tsx:167
-#: src/view/com/feeds/FeedSourceCard.tsx:172
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/posts/FeedErrorMessage.tsx:201
+msgid "Remove feed?"
+msgstr ""
+
+#: src/view/com/feeds/FeedSourceCard.tsx:173
+#: src/view/com/feeds/FeedSourceCard.tsx:233
+#: src/view/screens/ProfileFeed.tsx:335
+#: src/view/screens/ProfileFeed.tsx:341
msgid "Remove from my feeds"
msgstr "Hapus dari feed saya"
+#: src/view/com/feeds/FeedSourceCard.tsx:278
+msgid "Remove from my feeds?"
+msgstr ""
+
#: src/view/com/composer/photos/Gallery.tsx:167
msgid "Remove image"
msgstr "Hapus gambar"
@@ -3073,33 +3899,44 @@ msgstr "Hapus gambar"
msgid "Remove image preview"
msgstr "Hapus pratinjau gambar"
-#: src/view/com/modals/Repost.tsx:47
+#: src/components/dialogs/MutedWords.tsx:329
+msgid "Remove mute word from your list"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:48
msgid "Remove repost"
msgstr "Hapus postingan ulang"
-#: src/view/com/feeds/FeedSourceCard.tsx:173
-msgid "Remove this feed from my feeds?"
-msgstr "Hapus feed ini dari feed saya?"
+#: src/view/com/feeds/FeedSourceCard.tsx:175
+#~ msgid "Remove this feed from my feeds?"
+#~ msgstr "Hapus feed ini dari feed saya?"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:202
+msgid "Remove this feed from your saved feeds"
+msgstr ""
#: src/view/com/posts/FeedErrorMessage.tsx:132
-msgid "Remove this feed from your saved feeds?"
-msgstr "Hapus feed ini dari feed tersimpan Anda?"
+#~ msgid "Remove this feed from your saved feeds?"
+#~ msgstr "Hapus feed ini dari feed tersimpan Anda?"
#: src/view/com/modals/ListAddRemoveUsers.tsx:199
#: src/view/com/modals/UserAddRemoveLists.tsx:152
msgid "Removed from list"
msgstr "Dihapus dari daftar"
-#: src/view/com/feeds/FeedSourceCard.tsx:111
-#: src/view/com/feeds/FeedSourceCard.tsx:178
+#: src/view/com/feeds/FeedSourceCard.tsx:121
msgid "Removed from my feeds"
msgstr "Dihapus dari feed saya"
+#: src/view/screens/ProfileFeed.tsx:209
+msgid "Removed from your feeds"
+msgstr ""
+
#: src/view/com/composer/ExternalEmbed.tsx:71
msgid "Removes default thumbnail from {0}"
msgstr "Menghapus gambar pra tinjau bawaan dari {0}"
-#: src/view/screens/Profile.tsx:181
+#: src/view/screens/Profile.tsx:191
msgid "Replies"
msgstr "Balasan"
@@ -3107,45 +3944,71 @@ msgstr "Balasan"
msgid "Replies to this thread are disabled"
msgstr "Balasan ke utas ini dinonaktifkan"
-#: src/view/com/composer/Composer.tsx:348
+#: src/view/com/composer/Composer.tsx:365
msgctxt "action"
msgid "Reply"
msgstr "Balas"
-#: src/view/screens/PreferencesHomeFeed.tsx:144
+#: src/view/screens/PreferencesFollowingFeed.tsx:144
msgid "Reply Filters"
msgstr "Penyaring Balasan"
#: src/view/com/post/Post.tsx:166
-#: src/view/com/posts/FeedItem.tsx:287
+#: src/view/com/posts/FeedItem.tsx:280
msgctxt "description"
msgid "Reply to <0/>"
msgstr "Balas ke <0/>"
#: src/view/com/modals/report/Modal.tsx:166
-msgid "Report {collectionName}"
-msgstr "Laporkan {collectionName}"
+#~ msgid "Report {collectionName}"
+#~ msgstr "Laporkan {collectionName}"
-#: src/view/com/profile/ProfileHeader.tsx:360
+#: src/view/com/profile/ProfileMenu.tsx:319
+#: src/view/com/profile/ProfileMenu.tsx:322
msgid "Report Account"
msgstr "Laporkan Akun"
-#: src/view/screens/ProfileFeed.tsx:292
+#: src/components/ReportDialog/index.tsx:49
+msgid "Report dialog"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:352
+#: src/view/screens/ProfileFeed.tsx:354
msgid "Report feed"
msgstr "Laporkan feed"
-#: src/view/screens/ProfileList.tsx:458
+#: src/view/screens/ProfileList.tsx:429
msgid "Report List"
msgstr "Laporkan Daftar"
-#: src/view/com/modals/report/SendReportButton.tsx:37
-#: src/view/com/util/forms/PostDropdownBtn.tsx:210
+#: src/view/com/util/forms/PostDropdownBtn.tsx:292
+#: src/view/com/util/forms/PostDropdownBtn.tsx:294
msgid "Report post"
msgstr "Laporkan postingan"
-#: src/view/com/modals/Repost.tsx:43
-#: src/view/com/modals/Repost.tsx:48
-#: src/view/com/modals/Repost.tsx:53
+#: src/components/ReportDialog/SelectReportOptionView.tsx:42
+msgid "Report this content"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:55
+msgid "Report this feed"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:52
+msgid "Report this list"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:49
+msgid "Report this post"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:46
+msgid "Report this user"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:44
+#: src/view/com/modals/Repost.tsx:49
+#: src/view/com/modals/Repost.tsx:54
#: src/view/com/util/post-ctrls/RepostButton.tsx:61
msgctxt "action"
msgid "Repost"
@@ -3166,21 +4029,21 @@ msgstr "Posting ulang atau kutip postingan"
#: src/view/screens/PostRepostedBy.tsx:27
msgid "Reposted By"
-msgstr ""
+msgstr "Diposting Ulang Oleh"
-#: src/view/com/posts/FeedItem.tsx:207
+#: src/view/com/posts/FeedItem.tsx:197
msgid "Reposted by {0}"
-msgstr ""
+msgstr "Diposting ulang oleh {0}"
#: src/view/com/posts/FeedItem.tsx:206
#~ msgid "Reposted by {0})"
#~ msgstr "Diposting ulang oleh {0})"
-#: src/view/com/posts/FeedItem.tsx:224
+#: src/view/com/posts/FeedItem.tsx:214
msgid "Reposted by <0/>"
msgstr "Diposting ulang oleh <0/>"
-#: src/view/com/notifications/FeedItem.tsx:162
+#: src/view/com/notifications/FeedItem.tsx:166
msgid "reposted your post"
msgstr "posting ulang posting Anda"
@@ -3194,60 +4057,61 @@ msgid "Request Change"
msgstr "Ajukan Perubahan"
#: src/view/com/auth/create/Step2.tsx:219
-msgid "Request code"
-msgstr ""
+#~ msgid "Request code"
+#~ msgstr "Minta kode"
-#: src/view/com/modals/ChangePassword.tsx:239
#: src/view/com/modals/ChangePassword.tsx:241
+#: src/view/com/modals/ChangePassword.tsx:243
msgid "Request Code"
-msgstr ""
+msgstr "Minta Kode"
-#: src/view/screens/Settings/index.tsx:456
+#: src/view/screens/Settings/index.tsx:475
msgid "Require alt text before posting"
msgstr "Memerlukan teks alt sebelum memposting"
-#: src/view/com/auth/create/Step1.tsx:149
+#: src/screens/Signup/StepInfo/index.tsx:69
msgid "Required for this provider"
msgstr "Diwajibkan untuk provider ini"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:124
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:136
+#: src/view/com/modals/ChangePassword.tsx:185
msgid "Reset code"
msgstr "Kode reset"
-#: src/view/com/modals/ChangePassword.tsx:190
+#: src/view/com/modals/ChangePassword.tsx:192
msgid "Reset Code"
-msgstr ""
+msgstr "Kode Reset"
#: src/view/screens/Settings/index.tsx:824
-msgid "Reset onboarding"
-msgstr "Atur ulang onboarding"
+#~ msgid "Reset onboarding"
+#~ msgstr "Atur ulang onboarding"
-#: src/view/screens/Settings/index.tsx:827
+#: src/view/screens/Settings/index.tsx:858
+#: src/view/screens/Settings/index.tsx:861
msgid "Reset onboarding state"
msgstr "Reset status onboarding"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:104
+#: src/screens/Login/ForgotPasswordForm.tsx:86
msgid "Reset password"
msgstr "Reset kata sandi"
#: src/view/screens/Settings/index.tsx:814
-msgid "Reset preferences"
-msgstr "Atur ulang preferensi"
+#~ msgid "Reset preferences"
+#~ msgstr "Atur ulang preferensi"
-#: src/view/screens/Settings/index.tsx:817
+#: src/view/screens/Settings/index.tsx:848
+#: src/view/screens/Settings/index.tsx:851
msgid "Reset preferences state"
msgstr "Atur ulang status preferensi"
-#: src/view/screens/Settings/index.tsx:825
+#: src/view/screens/Settings/index.tsx:859
msgid "Resets the onboarding state"
msgstr "Reset status onboarding"
-#: src/view/screens/Settings/index.tsx:815
+#: src/view/screens/Settings/index.tsx:849
msgid "Resets the preferences state"
msgstr "Reset status preferensi"
-#: src/view/com/auth/login/LoginForm.tsx:269
+#: src/screens/Login/LoginForm.tsx:235
msgid "Retries login"
msgstr "Mencoba masuk kembali"
@@ -3256,105 +4120,150 @@ msgstr "Mencoba masuk kembali"
msgid "Retries the last action, which errored out"
msgstr "Coba kembali tindakan terakhir, yang gagal"
-#: src/screens/Onboarding/StepInterests/index.tsx:221
-#: src/screens/Onboarding/StepInterests/index.tsx:224
-#: src/view/com/auth/create/CreateAccount.tsx:170
-#: src/view/com/auth/create/CreateAccount.tsx:175
-#: src/view/com/auth/create/Step2.tsx:255
-#: src/view/com/auth/login/LoginForm.tsx:268
-#: src/view/com/auth/login/LoginForm.tsx:271
+#: src/components/Error.tsx:79
+#: src/components/Lists.tsx:91
+#: src/screens/Login/LoginForm.tsx:234
+#: src/screens/Login/LoginForm.tsx:241
+#: src/screens/Onboarding/StepInterests/index.tsx:225
+#: src/screens/Onboarding/StepInterests/index.tsx:228
+#: src/screens/Signup/index.tsx:193
#: src/view/com/util/error/ErrorMessage.tsx:55
#: src/view/com/util/error/ErrorScreen.tsx:72
msgid "Retry"
msgstr "Ulangi"
#: src/view/com/auth/create/Step2.tsx:247
-msgid "Retry."
-msgstr ""
+#~ msgid "Retry."
+#~ msgstr "Ulangi"
-#: src/view/screens/ProfileList.tsx:898
+#: src/components/Error.tsx:86
+#: src/view/screens/ProfileList.tsx:917
msgid "Return to previous page"
msgstr "Kembali ke halaman sebelumnya"
+#: src/view/screens/NotFound.tsx:59
+msgid "Returns to home page"
+msgstr ""
+
+#: src/view/screens/NotFound.tsx:58
+#: src/view/screens/ProfileFeed.tsx:113
+msgid "Returns to previous page"
+msgstr ""
+
#: src/view/shell/desktop/RightNav.tsx:55
-msgid "SANDBOX. Posts and accounts are not permanent."
-msgstr "SANDBOX. Postingan dan akun tidak bersifat permanen."
+#~ msgid "SANDBOX. Posts and accounts are not permanent."
+#~ msgstr "SANDBOX. Postingan dan akun tidak bersifat permanen."
-#: src/view/com/lightbox/Lightbox.tsx:132
-#: src/view/com/modals/CreateOrEditList.tsx:345
-msgctxt "action"
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/view/com/modals/ChangeHandle.tsx:174
+#: src/view/com/modals/CreateOrEditList.tsx:338
+#: src/view/com/modals/EditProfile.tsx:225
msgid "Save"
msgstr "Simpan"
-#: src/view/com/modals/BirthDateSettings.tsx:94
-#: src/view/com/modals/BirthDateSettings.tsx:97
-#: src/view/com/modals/ChangeHandle.tsx:173
-#: src/view/com/modals/CreateOrEditList.tsx:337
-#: src/view/com/modals/EditProfile.tsx:224
-#: src/view/screens/ProfileFeed.tsx:345
+#: src/view/com/lightbox/Lightbox.tsx:132
+#: src/view/com/modals/CreateOrEditList.tsx:346
+msgctxt "action"
msgid "Save"
msgstr "Simpan"
-#: src/view/com/modals/AltImage.tsx:130
+#: src/view/com/modals/AltImage.tsx:131
msgid "Save alt text"
msgstr "Simpan teks alt"
-#: src/view/com/modals/EditProfile.tsx:232
+#: src/components/dialogs/BirthDateSettings.tsx:119
+msgid "Save birthday"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:233
msgid "Save Changes"
msgstr "Simpan Perubahan"
-#: src/view/com/modals/ChangeHandle.tsx:170
+#: src/view/com/modals/ChangeHandle.tsx:171
msgid "Save handle change"
msgstr "Simpan perubahan handle"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:144
+#: src/view/com/modals/crop-image/CropImage.web.tsx:145
msgid "Save image crop"
msgstr "Simpan potongan gambar"
+#: src/view/screens/ProfileFeed.tsx:336
+#: src/view/screens/ProfileFeed.tsx:342
+msgid "Save to my feeds"
+msgstr ""
+
#: src/view/screens/SavedFeeds.tsx:122
msgid "Saved Feeds"
msgstr "Simpan Feed"
-#: src/view/com/modals/EditProfile.tsx:225
+#: src/view/com/lightbox/Lightbox.tsx:81
+msgid "Saved to your camera roll."
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:213
+msgid "Saved to your feeds"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:226
msgid "Saves any changes to your profile"
msgstr "Simpan setiap perubahan pada profil Anda"
-#: src/view/com/modals/ChangeHandle.tsx:171
+#: src/view/com/modals/ChangeHandle.tsx:172
msgid "Saves handle change to {handle}"
msgstr "Simpan perubahan handle ke {handle}"
+#: src/view/com/modals/crop-image/CropImage.web.tsx:146
+msgid "Saves image crop settings"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:36
msgid "Science"
-msgstr ""
+msgstr "Sains"
-#: src/view/screens/ProfileList.tsx:854
+#: src/view/screens/ProfileList.tsx:873
msgid "Scroll to top"
msgstr "Gulir ke atas"
-#: src/Navigation.tsx:437
-#: src/view/com/auth/LoggedOut.tsx:122
+#: src/Navigation.tsx:459
+#: src/view/com/auth/LoggedOut.tsx:123
#: src/view/com/modals/ListAddRemoveUsers.tsx:75
#: src/view/com/util/forms/SearchInput.tsx:67
#: src/view/com/util/forms/SearchInput.tsx:79
-#: src/view/screens/Search/Search.tsx:418
-#: src/view/screens/Search/Search.tsx:645
-#: src/view/screens/Search/Search.tsx:663
-#: src/view/shell/bottom-bar/BottomBar.tsx:159
-#: src/view/shell/desktop/LeftNav.tsx:324
-#: src/view/shell/desktop/Search.tsx:214
-#: src/view/shell/desktop/Search.tsx:223
-#: src/view/shell/Drawer.tsx:362
-#: src/view/shell/Drawer.tsx:363
+#: src/view/screens/Search/Search.tsx:421
+#: src/view/screens/Search/Search.tsx:670
+#: src/view/screens/Search/Search.tsx:688
+#: src/view/shell/bottom-bar/BottomBar.tsx:169
+#: src/view/shell/desktop/LeftNav.tsx:328
+#: src/view/shell/desktop/Search.tsx:215
+#: src/view/shell/desktop/Search.tsx:224
+#: src/view/shell/Drawer.tsx:365
+#: src/view/shell/Drawer.tsx:366
msgid "Search"
msgstr "Cari"
-#: src/view/screens/Search/Search.tsx:712
-#: src/view/shell/desktop/Search.tsx:255
+#: src/view/screens/Search/Search.tsx:737
+#: src/view/shell/desktop/Search.tsx:256
msgid "Search for \"{query}\""
+msgstr "Cari \"{query}\""
+
+#: src/components/TagMenu/index.tsx:145
+msgid "Search for all posts by @{authorHandle} with tag {displayTag}"
msgstr ""
-#: src/view/com/auth/LoggedOut.tsx:104
+#: src/components/TagMenu/index.tsx:145
+#~ msgid "Search for all posts by @{authorHandle} with tag {tag}"
+#~ msgstr ""
+
+#: src/components/TagMenu/index.tsx:94
+msgid "Search for all posts with tag {displayTag}"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:90
+#~ msgid "Search for all posts with tag {tag}"
+#~ msgstr ""
+
#: src/view/com/auth/LoggedOut.tsx:105
+#: src/view/com/auth/LoggedOut.tsx:106
#: src/view/com/modals/ListAddRemoveUsers.tsx:70
msgid "Search for users"
msgstr "Cari pengguna"
@@ -3363,11 +4272,35 @@ msgstr "Cari pengguna"
msgid "Security Step Required"
msgstr "Langkah Keamanan Diperlukan"
+#: src/components/TagMenu/index.web.tsx:66
+msgid "See {truncatedTag} posts"
+msgstr ""
+
+#: src/components/TagMenu/index.web.tsx:83
+msgid "See {truncatedTag} posts by user"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:128
+msgid "See <0>{displayTag}0> posts"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:187
+msgid "See <0>{displayTag}0> posts by this user"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:128
+#~ msgid "See <0>{tag}0> posts"
+#~ msgstr ""
+
+#: src/components/TagMenu/index.tsx:189
+#~ msgid "See <0>{tag}0> posts by this user"
+#~ msgstr ""
+
#: src/view/screens/SavedFeeds.tsx:163
msgid "See this guide"
msgstr "Lihat panduan ini"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:39
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:40
msgid "See what's next"
msgstr "Lihat apa yang akan datang"
@@ -3375,25 +4308,41 @@ msgstr "Lihat apa yang akan datang"
msgid "Select {item}"
msgstr "Pilih {item}"
+#: src/screens/Login/ChooseAccountForm.tsx:61
+msgid "Select account"
+msgstr ""
+
#: src/view/com/modals/ServerInput.tsx:75
#~ msgid "Select Bluesky Social"
#~ msgstr "Pilih Bluesky Social"
-#: src/view/com/auth/login/Login.tsx:117
+#: src/screens/Login/index.tsx:120
msgid "Select from an existing account"
msgstr "Pilih dari akun yang sudah ada"
+#: src/view/screens/LanguageSettings.tsx:299
+msgid "Select languages"
+msgstr ""
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:30
+msgid "Select moderator"
+msgstr ""
+
#: src/view/com/util/Selector.tsx:107
msgid "Select option {i} of {numItems}"
msgstr "Pilih opsi {i} dari {numItems}"
-#: src/view/com/auth/create/Step1.tsx:99
-#: src/view/com/auth/login/LoginForm.tsx:150
-msgid "Select service"
-msgstr "Pilih layanan"
+#: src/view/com/auth/create/Step1.tsx:96
+#: src/view/com/auth/login/LoginForm.tsx:153
+#~ msgid "Select service"
+#~ msgstr "Pilih layanan"
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:52
msgid "Select some accounts below to follow"
+msgstr "Pilih beberapa akun di bawah ini untuk diikuti"
+
+#: src/components/ReportDialog/SubmitView.tsx:135
+msgid "Select the moderation service(s) to report to"
msgstr ""
#: src/view/com/auth/server-input/index.tsx:82
@@ -3402,54 +4351,62 @@ msgstr ""
#: src/screens/Onboarding/StepModeration/index.tsx:49
#~ msgid "Select the types of content that you want to see (or not see), and we'll handle the rest."
-#~ msgstr ""
+#~ msgstr "Pilih jenis konten yang ingin Anda lihat (atau tidak lihat), dan kami akan menangani sisanya."
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:90
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:100
msgid "Select topical feeds to follow from the list below"
-msgstr ""
+msgstr "Pilih feed terkini untuk diikuti dari daftar di bawah ini"
-#: src/screens/Onboarding/StepModeration/index.tsx:75
+#: src/screens/Onboarding/StepModeration/index.tsx:63
msgid "Select what you want to see (or not see), and we’ll handle the rest."
-msgstr ""
+msgstr "Pilih apa yang ingin Anda lihat (atau tidak lihat), dan kami akan menangani sisanya."
#: src/view/screens/LanguageSettings.tsx:281
msgid "Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown."
msgstr "Pilih bahasa yang ingin Anda langgani di feed Anda. Jika tidak memilih, maka semua bahasa akan ditampilkan."
#: src/view/screens/LanguageSettings.tsx:98
-msgid "Select your app language for the default text to display in the app"
-msgstr "Pilih bahasa aplikasi Anda untuk tampilan teks bawaan dalam aplikasi"
+#~ msgid "Select your app language for the default text to display in the app"
+#~ msgstr "Pilih bahasa aplikasi Anda untuk tampilan teks bawaan dalam aplikasi"
-#: src/screens/Onboarding/StepInterests/index.tsx:196
-msgid "Select your interests from the options below"
+#: src/view/screens/LanguageSettings.tsx:98
+msgid "Select your app language for the default text to display in the app."
msgstr ""
-#: src/view/com/auth/create/Step2.tsx:155
-msgid "Select your phone's country"
+#: src/screens/Signup/StepInfo/index.tsx:133
+msgid "Select your date of birth"
msgstr ""
+#: src/screens/Onboarding/StepInterests/index.tsx:200
+msgid "Select your interests from the options below"
+msgstr "Pilih minat Anda dari opsi di bawah ini"
+
+#: src/view/com/auth/create/Step2.tsx:155
+#~ msgid "Select your phone's country"
+#~ msgstr "Pilih negara telepon Anda"
+
#: src/view/screens/LanguageSettings.tsx:190
msgid "Select your preferred language for translations in your feed."
msgstr "Pilih bahasa yang disukai untuk penerjemahaan feed Anda."
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:116
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:117
msgid "Select your primary algorithmic feeds"
-msgstr ""
+msgstr "Pilih feed algoritma utama Anda"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:142
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:133
msgid "Select your secondary algorithmic feeds"
-msgstr ""
+msgstr "Pilih feed algoritma sekunder Anda"
#: src/view/com/modals/VerifyEmail.tsx:202
#: src/view/com/modals/VerifyEmail.tsx:204
msgid "Send Confirmation Email"
msgstr "Kirim Email Konfirmasi"
-#: src/view/com/modals/DeleteAccount.tsx:131
+#: src/view/com/modals/DeleteAccount.tsx:130
msgid "Send email"
msgstr "Kirim email"
-#: src/view/com/modals/DeleteAccount.tsx:144
+#: src/view/com/modals/DeleteAccount.tsx:143
msgctxt "action"
msgid "Send Email"
msgstr "Kirim Email"
@@ -3457,70 +4414,83 @@ msgstr "Kirim Email"
#~ msgid "Send Email"
#~ msgstr "Kirim Email"
-#: src/view/shell/Drawer.tsx:295
-#: src/view/shell/Drawer.tsx:316
+#: src/view/shell/Drawer.tsx:298
+#: src/view/shell/Drawer.tsx:319
msgid "Send feedback"
msgstr "Kirim masukan"
+#: src/components/ReportDialog/SubmitView.tsx:214
+#: src/components/ReportDialog/SubmitView.tsx:218
+msgid "Send report"
+msgstr ""
+
#: src/view/com/modals/report/SendReportButton.tsx:45
-msgid "Send Report"
-msgstr "Kirim Laporan"
+#~ msgid "Send Report"
+#~ msgstr "Kirim Laporan"
-#: src/view/com/modals/DeleteAccount.tsx:133
+#: src/components/ReportDialog/SelectLabelerView.tsx:44
+msgid "Send report to {0}"
+msgstr ""
+
+#: src/view/com/modals/DeleteAccount.tsx:132
msgid "Sends email with confirmation code for account deletion"
msgstr "Kirim email dengan kode konfirmasi untuk penghapusan akun"
-#: src/view/com/auth/server-input/index.tsx:110
+#: src/view/com/auth/server-input/index.tsx:114
msgid "Server address"
msgstr ""
#: src/view/com/modals/ContentFilteringSettings.tsx:311
-msgid "Set {value} for {labelGroup} content moderation policy"
-msgstr "Tetapkan {value} untuk kebijakan moderasi konten {labelGroup}"
+#~ msgid "Set {value} for {labelGroup} content moderation policy"
+#~ msgstr "Tetapkan {value} untuk kebijakan moderasi konten {labelGroup}"
#: src/view/com/modals/ContentFilteringSettings.tsx:160
#: src/view/com/modals/ContentFilteringSettings.tsx:179
-msgctxt "action"
-msgid "Set Age"
-msgstr "Tetapkan Usia"
+#~ msgctxt "action"
+#~ msgid "Set Age"
+#~ msgstr "Tetapkan Usia"
+
+#: src/screens/Moderation/index.tsx:304
+msgid "Set birthdate"
+msgstr ""
#: src/view/screens/Settings/index.tsx:488
-msgid "Set color theme to dark"
-msgstr "Atur tema menjadi gelap"
+#~ msgid "Set color theme to dark"
+#~ msgstr "Atur tema menjadi gelap"
#: src/view/screens/Settings/index.tsx:481
-msgid "Set color theme to light"
-msgstr "Atur tema menjadi terang"
+#~ msgid "Set color theme to light"
+#~ msgstr "Atur tema menjadi terang"
#: src/view/screens/Settings/index.tsx:475
-msgid "Set color theme to system setting"
-msgstr "Atur tema warna ke pengaturan sistem"
+#~ msgid "Set color theme to system setting"
+#~ msgstr "Atur tema warna ke pengaturan sistem"
#: src/view/screens/Settings/index.tsx:514
-msgid "Set dark theme to the dark theme"
-msgstr ""
+#~ msgid "Set dark theme to the dark theme"
+#~ msgstr "Atur tema gelap ke tema gelap"
#: src/view/screens/Settings/index.tsx:507
-msgid "Set dark theme to the dim theme"
-msgstr ""
+#~ msgid "Set dark theme to the dim theme"
+#~ msgstr "Atur tema gelap ke tema redup"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:104
+#: src/screens/Login/SetNewPasswordForm.tsx:102
msgid "Set new password"
msgstr "Buat kata sandi baru"
-#: src/view/com/auth/create/Step1.tsx:221
-msgid "Set password"
-msgstr "Atur kata sandi"
+#: src/view/com/auth/create/Step1.tsx:202
+#~ msgid "Set password"
+#~ msgstr "Atur kata sandi"
-#: src/view/screens/PreferencesHomeFeed.tsx:225
+#: src/view/screens/PreferencesFollowingFeed.tsx:225
msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible."
msgstr "Pilih \"Tidak\" untuk menyembunyikan semua kutipan postingan dari feed Anda. Posting ulang tetap akan terlihat."
-#: src/view/screens/PreferencesHomeFeed.tsx:122
+#: src/view/screens/PreferencesFollowingFeed.tsx:122
msgid "Set this setting to \"No\" to hide all replies from your feed."
msgstr "Pilih \"Tidak\" untuk menyembunyikan semua balasan dari feed Anda."
-#: src/view/screens/PreferencesHomeFeed.tsx:191
+#: src/view/screens/PreferencesFollowingFeed.tsx:191
msgid "Set this setting to \"No\" to hide all reposts from your feed."
msgstr "Pilih \"Tidak\" untuk menyembunyikan semua posting ulang dari feed Anda."
@@ -3529,39 +4499,75 @@ msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is a
msgstr "Pilih \"Ya\" untuk menampilkan balasan dalam bentuk utasan. Ini merupakan fitur eksperimental."
#: src/view/screens/PreferencesHomeFeed.tsx:261
-msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
-msgstr "Pilih \"Ya\" untuk menampilkan beberapa sampel dari feed tersimpan Anda pada feed mengikuti. Ini merupakan fitur eksperimental."
+#~ msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
+#~ msgstr "Pilih \"Ya\" untuk menampilkan beberapa sampel dari feed tersimpan di feed mengikuti Anda. Ini merupakan fitur eksperimental."
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:261
+msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your Following feed. This is an experimental feature."
+msgstr "Pilih \"Ya\" untuk menampilkan beberapa sampel dari feed tersimpan di feed Mengikuti Anda. Ini merupakan fitur eksperimental"
-#: src/screens/Onboarding/Layout.tsx:50
+#: src/screens/Onboarding/Layout.tsx:48
msgid "Set up your account"
-msgstr ""
+msgstr "Atur akun Anda"
-#: src/view/com/modals/ChangeHandle.tsx:266
+#: src/view/com/modals/ChangeHandle.tsx:267
msgid "Sets Bluesky username"
msgstr "Atur nama pengguna Bluesky"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:157
+#: src/view/screens/Settings/index.tsx:507
+msgid "Sets color theme to dark"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:500
+msgid "Sets color theme to light"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:494
+msgid "Sets color theme to system setting"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:533
+msgid "Sets dark theme to the dark theme"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:526
+msgid "Sets dark theme to the dim theme"
+msgstr ""
+
+#: src/screens/Login/ForgotPasswordForm.tsx:113
msgid "Sets email for password reset"
msgstr "Atur email untuk pengaturan ulang kata sandi"
#: src/view/com/auth/login/ForgotPasswordForm.tsx:122
-msgid "Sets hosting provider for password reset"
-msgstr "Atur penyedia hosting untuk pengaturan ulang kata sandi"
+#~ msgid "Sets hosting provider for password reset"
+#~ msgstr "Atur penyedia hosting untuk pengaturan ulang kata sandi"
#: src/view/com/auth/create/Step1.tsx:143
#~ msgid "Sets hosting provider to {label}"
#~ msgstr "Atur penyedia hosting ke {label}"
-#: src/view/com/auth/create/Step1.tsx:100
-#: src/view/com/auth/login/LoginForm.tsx:151
-msgid "Sets server for the Bluesky client"
-msgstr "Atur server untuk klien Bluesky"
+#: src/view/com/modals/crop-image/CropImage.web.tsx:124
+msgid "Sets image aspect ratio to square"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:114
+msgid "Sets image aspect ratio to tall"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:104
+msgid "Sets image aspect ratio to wide"
+msgstr ""
-#: src/Navigation.tsx:135
-#: src/view/screens/Settings/index.tsx:294
-#: src/view/shell/desktop/LeftNav.tsx:433
-#: src/view/shell/Drawer.tsx:567
-#: src/view/shell/Drawer.tsx:568
+#: src/view/com/auth/create/Step1.tsx:97
+#: src/view/com/auth/login/LoginForm.tsx:154
+#~ msgid "Sets server for the Bluesky client"
+#~ msgstr "Atur server untuk klien Bluesky"
+
+#: src/Navigation.tsx:139
+#: src/view/screens/Settings/index.tsx:313
+#: src/view/shell/desktop/LeftNav.tsx:437
+#: src/view/shell/Drawer.tsx:570
+#: src/view/shell/Drawer.tsx:571
msgid "Settings"
msgstr "Pengaturan"
@@ -3569,72 +4575,105 @@ msgstr "Pengaturan"
msgid "Sexual activity or erotic nudity."
msgstr "Aktivitas seksual atau ketelanjangan erotis."
+#: src/lib/moderation/useGlobalLabelStrings.ts:38
+msgid "Sexually Suggestive"
+msgstr ""
+
#: src/view/com/lightbox/Lightbox.tsx:141
msgctxt "action"
msgid "Share"
msgstr "Bagikan"
-#: src/view/com/profile/ProfileHeader.tsx:294
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
-#: src/view/screens/ProfileList.tsx:417
+#: src/view/com/profile/ProfileMenu.tsx:215
+#: src/view/com/profile/ProfileMenu.tsx:224
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:235
+#: src/view/screens/ProfileList.tsx:388
msgid "Share"
msgstr "Bagikan"
-#: src/view/screens/ProfileFeed.tsx:304
+#: src/view/com/profile/ProfileMenu.tsx:373
+#: src/view/com/util/forms/PostDropdownBtn.tsx:347
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:251
+msgid "Share anyway"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:362
+#: src/view/screens/ProfileFeed.tsx:364
msgid "Share feed"
msgstr "Bagikan feed"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:43
-#: src/view/com/modals/ContentFilteringSettings.tsx:266
-#: src/view/com/util/moderation/ContentHider.tsx:107
-#: src/view/com/util/moderation/PostHider.tsx:108
-#: src/view/screens/Settings/index.tsx:344
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
+msgid "Share Link"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:92
+msgid "Shares the linked website"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:136
+#: src/components/moderation/PostHider.tsx:107
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:54
+#: src/view/screens/Settings/index.tsx:363
msgid "Show"
msgstr "Tampilkan"
-#: src/view/screens/PreferencesHomeFeed.tsx:68
+#: src/view/screens/PreferencesFollowingFeed.tsx:68
msgid "Show all replies"
msgstr "Tampilkan semua balasan"
-#: src/view/com/util/moderation/ScreenHider.tsx:132
+#: src/components/moderation/ScreenHider.tsx:169
+#: src/components/moderation/ScreenHider.tsx:172
msgid "Show anyway"
msgstr "Tetap tampilkan"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:27
+#: src/lib/moderation/useLabelBehaviorDescription.ts:63
+msgid "Show badge"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:61
+msgid "Show badge and filter from feeds"
+msgstr ""
+
#: src/view/com/modals/EmbedConsent.tsx:87
-msgid "Show embeds from {0}"
-msgstr "Tampilkan embed dari {0}"
+#~ msgid "Show embeds from {0}"
+#~ msgstr "Tampilkan embed dari {0}"
-#: src/view/com/profile/ProfileHeader.tsx:458
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:200
msgid "Show follows similar to {0}"
msgstr "Tampilkan berikut ini mirip dengan {0}"
-#: src/view/com/post-thread/PostThreadItem.tsx:539
-#: src/view/com/post/Post.tsx:197
-#: src/view/com/posts/FeedItem.tsx:363
+#: src/view/com/post-thread/PostThreadItem.tsx:507
+#: src/view/com/post/Post.tsx:201
+#: src/view/com/posts/FeedItem.tsx:355
msgid "Show More"
msgstr "Tampilkan Lebih Lanjut"
-#: src/view/screens/PreferencesHomeFeed.tsx:258
+#: src/view/screens/PreferencesFollowingFeed.tsx:258
msgid "Show Posts from My Feeds"
msgstr "Tampilkan Postingan dari Feed Saya"
-#: src/view/screens/PreferencesHomeFeed.tsx:222
+#: src/view/screens/PreferencesFollowingFeed.tsx:222
msgid "Show Quote Posts"
msgstr "Tampilkan Kutipan Postingan"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:118
+#: src/screens/Onboarding/StepFollowingFeed.tsx:119
msgid "Show quote-posts in Following feed"
-msgstr ""
+msgstr "Tampilkan kutipan postingan di feed Mengikuti"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:134
+#: src/screens/Onboarding/StepFollowingFeed.tsx:135
msgid "Show quotes in Following"
-msgstr ""
+msgstr "Tampilkan kutipan di Mengikuti"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:94
+#: src/screens/Onboarding/StepFollowingFeed.tsx:95
msgid "Show re-posts in Following feed"
-msgstr ""
+msgstr "Tampilkan posting ulang di feed Mengikuti"
-#: src/view/screens/PreferencesHomeFeed.tsx:119
+#: src/view/screens/PreferencesFollowingFeed.tsx:119
msgid "Show Replies"
msgstr "Tampilkan Balasan"
@@ -3642,87 +4681,98 @@ msgstr "Tampilkan Balasan"
msgid "Show replies by people you follow before all other replies."
msgstr "Tampilkan balasan dari orang yang Anda ikuti sebelum balasan lainnya."
-#: src/screens/Onboarding/StepFollowingFeed.tsx:86
+#: src/screens/Onboarding/StepFollowingFeed.tsx:87
msgid "Show replies in Following"
-msgstr ""
+msgstr "Tampilkan balasan di Mengikuti"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:70
+#: src/screens/Onboarding/StepFollowingFeed.tsx:71
msgid "Show replies in Following feed"
-msgstr ""
+msgstr "Tampilkan balasan di feed Mengikuti"
-#: src/view/screens/PreferencesHomeFeed.tsx:70
+#: src/view/screens/PreferencesFollowingFeed.tsx:70
msgid "Show replies with at least {value} {0}"
msgstr "Tampilkan balasan dengan setidaknya {value} {0}"
-#: src/view/screens/PreferencesHomeFeed.tsx:188
+#: src/view/screens/PreferencesFollowingFeed.tsx:188
msgid "Show Reposts"
msgstr "Tampilkan Posting Ulang"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:110
+#: src/screens/Onboarding/StepFollowingFeed.tsx:111
msgid "Show reposts in Following"
-msgstr ""
+msgstr "Tampilkan posting ulang di Mengikuti"
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:68
+#: src/components/moderation/PostHider.tsx:64
msgid "Show the content"
msgstr "Tampilkan konten"
-#: src/view/com/notifications/FeedItem.tsx:346
+#: src/view/com/notifications/FeedItem.tsx:351
msgid "Show users"
msgstr "Tampilkan pengguna"
-#: src/view/com/profile/ProfileHeader.tsx:461
-msgid "Shows a list of users similar to this user."
-msgstr "Tampilkan daftar pengguna yang mirip dengan pengguna ini."
+#: src/lib/moderation/useLabelBehaviorDescription.ts:58
+msgid "Show warning"
+msgstr ""
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:124
-#: src/view/com/profile/ProfileHeader.tsx:505
+#: src/lib/moderation/useLabelBehaviorDescription.ts:56
+msgid "Show warning and filter from feeds"
+msgstr ""
+
+#: src/view/com/profile/ProfileHeader.tsx:462
+#~ msgid "Shows a list of users similar to this user."
+#~ msgstr "Tampilkan daftar pengguna yang mirip dengan pengguna ini."
+
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:130
msgid "Shows posts from {0} in your feed"
msgstr "Tampilkan postingan dari {0} di feed Anda"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:70
-#: src/view/com/auth/login/Login.tsx:98
-#: src/view/com/auth/SplashScreen.tsx:54
-#: src/view/shell/bottom-bar/BottomBar.tsx:285
-#: src/view/shell/bottom-bar/BottomBar.tsx:286
-#: src/view/shell/bottom-bar/BottomBar.tsx:288
+#: src/screens/Login/index.tsx:100
+#: src/screens/Login/index.tsx:119
+#: src/screens/Login/LoginForm.tsx:131
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:73
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:83
+#: src/view/com/auth/SplashScreen.tsx:81
+#: src/view/com/auth/SplashScreen.tsx:90
+#: src/view/com/auth/SplashScreen.web.tsx:110
+#: src/view/com/auth/SplashScreen.web.tsx:119
+#: src/view/shell/bottom-bar/BottomBar.tsx:300
+#: src/view/shell/bottom-bar/BottomBar.tsx:301
+#: src/view/shell/bottom-bar/BottomBar.tsx:303
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:178
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:179
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:181
#: src/view/shell/NavSignupCard.tsx:58
#: src/view/shell/NavSignupCard.tsx:59
+#: src/view/shell/NavSignupCard.tsx:61
msgid "Sign in"
msgstr "Masuk"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:78
-#: src/view/com/auth/SplashScreen.tsx:57
-#: src/view/com/auth/SplashScreen.web.tsx:87
-msgid "Sign In"
-msgstr "Masuk"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:82
+#: src/view/com/auth/SplashScreen.tsx:86
+#: src/view/com/auth/SplashScreen.web.tsx:91
+#~ msgid "Sign In"
+#~ msgstr "Masuk"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:44
+#: src/components/AccountList.tsx:109
msgid "Sign in as {0}"
msgstr "Masuk sebagai {0}"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:118
-#: src/view/com/auth/login/Login.tsx:116
+#: src/screens/Login/ChooseAccountForm.tsx:64
msgid "Sign in as..."
msgstr "Masuk sebagai..."
-#: src/view/com/auth/login/LoginForm.tsx:137
-msgid "Sign into"
-msgstr "Masuk ke"
+#: src/view/com/auth/login/LoginForm.tsx:140
+#~ msgid "Sign into"
+#~ msgstr "Masuk ke"
-#: src/view/com/modals/SwitchAccount.tsx:64
-#: src/view/com/modals/SwitchAccount.tsx:69
-#: src/view/screens/Settings/index.tsx:100
-#: src/view/screens/Settings/index.tsx:103
+#: src/view/screens/Settings/index.tsx:107
+#: src/view/screens/Settings/index.tsx:110
msgid "Sign out"
msgstr "Keluar"
-#: src/view/shell/bottom-bar/BottomBar.tsx:275
-#: src/view/shell/bottom-bar/BottomBar.tsx:276
-#: src/view/shell/bottom-bar/BottomBar.tsx:278
+#: src/view/shell/bottom-bar/BottomBar.tsx:290
+#: src/view/shell/bottom-bar/BottomBar.tsx:291
+#: src/view/shell/bottom-bar/BottomBar.tsx:293
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:168
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:169
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:171
@@ -3736,49 +4786,60 @@ msgstr "Daftar"
msgid "Sign up or sign in to join the conversation"
msgstr "Daftar atau masuk untuk bergabung dalam obrolan"
-#: src/view/com/util/moderation/ScreenHider.tsx:76
+#: src/components/moderation/ScreenHider.tsx:97
+#: src/lib/moderation/useGlobalLabelStrings.ts:28
msgid "Sign-in Required"
msgstr "Dibutuhkan Masuk"
-#: src/view/screens/Settings/index.tsx:355
+#: src/view/screens/Settings/index.tsx:374
msgid "Signed in as"
msgstr "Masuk sebagai"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:103
+#: src/screens/Login/ChooseAccountForm.tsx:48
msgid "Signed in as @{0}"
msgstr "Masuk sebagai @{0}"
-#: src/view/com/modals/SwitchAccount.tsx:66
-msgid "Signs {0} out of Bluesky"
-msgstr "Mengeluarkan {0} dari Bluesky"
+#: src/view/com/modals/SwitchAccount.tsx:70
+#~ msgid "Signs {0} out of Bluesky"
+#~ msgstr "Mengeluarkan {0} dari Bluesky"
-#: src/screens/Onboarding/StepInterests/index.tsx:235
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:195
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:33
+#: src/screens/Onboarding/StepInterests/index.tsx:239
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:203
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:35
msgid "Skip"
msgstr "Lewati"
-#: src/screens/Onboarding/StepInterests/index.tsx:232
+#: src/screens/Onboarding/StepInterests/index.tsx:236
msgid "Skip this flow"
-msgstr ""
+msgstr "Lewati tahap ini"
#: src/view/com/auth/create/Step2.tsx:82
-msgid "SMS verification"
-msgstr ""
+#~ msgid "SMS verification"
+#~ msgstr "Verifikasi SMS"
#: src/screens/Onboarding/index.tsx:40
msgid "Software Dev"
-msgstr ""
+msgstr "Pengembang Perangkat Lunak"
#: src/view/com/modals/ProfilePreview.tsx:62
#~ msgid "Something went wrong and we're not sure what."
#~ msgstr "Ada yang tidak beres dan kami tidak yakin apa itu."
+#: src/components/ReportDialog/index.tsx:59
+#: src/screens/Moderation/index.tsx:114
+#: src/screens/Profile/Sections/Labels.tsx:76
+msgid "Something went wrong, please try again."
+msgstr ""
+
+#: src/components/Lists.tsx:203
+#~ msgid "Something went wrong!"
+#~ msgstr ""
+
#: src/view/com/modals/Waitlist.tsx:51
-msgid "Something went wrong. Check your email and try again."
-msgstr "Ada yang tidak beres. Periksa email Anda dan coba lagi."
+#~ msgid "Something went wrong. Check your email and try again."
+#~ msgstr "Ada yang tidak beres. Periksa email Anda dan coba lagi."
-#: src/App.native.tsx:61
+#: src/App.native.tsx:66
msgid "Sorry! Your session expired. Please log in again."
msgstr "Maaf! Sesi Anda telah berakhir. Silakan masuk lagi."
@@ -3790,11 +4851,23 @@ msgstr "Urutkan Balasan"
msgid "Sort replies to the same post by:"
msgstr "Urutkan balasan ke postingan yang sama berdasarkan:"
+#: src/components/moderation/LabelsOnMeDialog.tsx:146
+msgid "Source:"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:65
+msgid "Spam"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:53
+msgid "Spam; excessive mentions or replies"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:30
msgid "Sports"
-msgstr ""
+msgstr "Olahraga"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:122
+#: src/view/com/modals/crop-image/CropImage.web.tsx:123
msgid "Square"
msgstr "Persegi"
@@ -3802,49 +4875,66 @@ msgstr "Persegi"
#~ msgid "Staging"
#~ msgstr "Staging"
-#: src/view/screens/Settings/index.tsx:871
+#: src/view/screens/Settings/index.tsx:903
msgid "Status page"
msgstr "Halaman status"
-#: src/view/com/auth/create/StepHeader.tsx:22
-msgid "Step {0} of {numSteps}"
+#: src/screens/Signup/index.tsx:142
+msgid "Step"
msgstr ""
+#: src/view/com/auth/create/StepHeader.tsx:22
+#~ msgid "Step {0} of {numSteps}"
+#~ msgstr "Langkah {0} dari {numSteps}"
+
#: src/view/com/auth/create/StepHeader.tsx:15
#~ msgid "Step {step} of 3"
#~ msgstr "Langkah {step} dari 3"
-#: src/view/screens/Settings/index.tsx:274
+#: src/view/screens/Settings/index.tsx:292
msgid "Storage cleared, you need to restart the app now."
msgstr "Penyimpanan dihapus, Anda perlu memulai ulang aplikasi sekarang."
-#: src/Navigation.tsx:202
-#: src/view/screens/Settings/index.tsx:807
+#: src/Navigation.tsx:211
+#: src/view/screens/Settings/index.tsx:831
msgid "Storybook"
msgstr "Storybook"
-#: src/view/com/modals/AppealLabel.tsx:101
+#: src/components/moderation/LabelsOnMeDialog.tsx:255
+#: src/components/moderation/LabelsOnMeDialog.tsx:256
msgid "Submit"
msgstr "Kirim"
-#: src/view/screens/ProfileList.tsx:607
+#: src/view/screens/ProfileList.tsx:590
msgid "Subscribe"
msgstr "Langganan"
-#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:173
+#: src/screens/Profile/Sections/Labels.tsx:180
+msgid "Subscribe to @{0} to use these labels:"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:221
+msgid "Subscribe to Labeler"
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:172
#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:307
msgid "Subscribe to the {0} feed"
+msgstr "Langganan ke feed {0}"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:184
+msgid "Subscribe to this labeler"
msgstr ""
-#: src/view/screens/ProfileList.tsx:603
+#: src/view/screens/ProfileList.tsx:586
msgid "Subscribe to this list"
msgstr "Langganan ke daftar ini"
-#: src/view/screens/Search/Search.tsx:373
+#: src/view/screens/Search/Search.tsx:376
msgid "Suggested Follows"
msgstr "Saran untuk Diikuti"
-#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:64
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:65
msgid "Suggested for you"
msgstr "Disarankan untuk Anda"
@@ -3852,7 +4942,7 @@ msgstr "Disarankan untuk Anda"
msgid "Suggestive"
msgstr "Sugestif"
-#: src/Navigation.tsx:212
+#: src/Navigation.tsx:226
#: src/view/screens/Support.tsx:30
#: src/view/screens/Support.tsx:33
msgid "Support"
@@ -3862,29 +4952,40 @@ msgstr "Dukungan"
#~ msgid "Swipe up to see more"
#~ msgstr "Geser ke atas untuk melihat lebih banyak"
-#: src/view/com/modals/SwitchAccount.tsx:117
+#: src/components/dialogs/SwitchAccount.tsx:46
+#: src/components/dialogs/SwitchAccount.tsx:49
msgid "Switch Account"
msgstr "Pindah Akun"
-#: src/view/com/modals/SwitchAccount.tsx:97
-#: src/view/screens/Settings/index.tsx:130
+#: src/view/screens/Settings/index.tsx:139
msgid "Switch to {0}"
msgstr "Beralih ke {0}"
-#: src/view/com/modals/SwitchAccount.tsx:98
-#: src/view/screens/Settings/index.tsx:131
+#: src/view/screens/Settings/index.tsx:140
msgid "Switches the account you are logged in to"
msgstr "Mengganti akun yang Anda masuki"
-#: src/view/screens/Settings/index.tsx:472
+#: src/view/screens/Settings/index.tsx:491
msgid "System"
msgstr "Sistem"
-#: src/view/screens/Settings/index.tsx:795
+#: src/view/screens/Settings/index.tsx:819
msgid "System log"
msgstr "Log sistem"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:112
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "tag"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:78
+msgid "Tag menu: {displayTag}"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:74
+#~ msgid "Tag menu: {tag}"
+#~ msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:113
msgid "Tall"
msgstr "Tinggi"
@@ -3894,28 +4995,55 @@ msgstr "Ketuk untuk melihat sepenuhnya"
#: src/screens/Onboarding/index.tsx:39
msgid "Tech"
-msgstr ""
+msgstr "Teknologi"
-#: src/view/shell/desktop/RightNav.tsx:89
+#: src/view/shell/desktop/RightNav.tsx:81
msgid "Terms"
msgstr "Ketentuan"
-#: src/Navigation.tsx:222
-#: src/view/screens/Settings/index.tsx:885
+#: src/Navigation.tsx:236
+#: src/screens/Signup/StepInfo/Policies.tsx:49
+#: src/view/screens/Settings/index.tsx:917
#: src/view/screens/TermsOfService.tsx:29
-#: src/view/shell/Drawer.tsx:256
+#: src/view/shell/Drawer.tsx:259
msgid "Terms of Service"
msgstr "Ketentuan Layanan"
-#: src/view/com/modals/AppealLabel.tsx:70
-#: src/view/com/modals/report/InputIssueDetails.tsx:51
+#: src/lib/moderation/useReportOptions.ts:58
+#: src/lib/moderation/useReportOptions.ts:79
+#: src/lib/moderation/useReportOptions.ts:87
+msgid "Terms used violate community standards"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "text"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:219
msgid "Text input field"
msgstr "Area input teks"
-#: src/view/com/profile/ProfileHeader.tsx:262
+#: src/components/ReportDialog/SubmitView.tsx:78
+msgid "Thank you. Your report has been sent."
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:465
+msgid "That contains the following:"
+msgstr ""
+
+#: src/screens/Signup/index.tsx:84
+msgid "That handle is already taken."
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:283
+#: src/view/com/profile/ProfileMenu.tsx:349
msgid "The account will be able to interact with you after unblocking."
msgstr "Akun ini akan dapat berinteraksi dengan Anda setelah blokir dibuka."
+#: src/components/moderation/ModerationDetailsDialog.tsx:127
+msgid "the author"
+msgstr ""
+
#: src/view/screens/CommunityGuidelines.tsx:36
msgid "The Community Guidelines have been moved to <0/>"
msgstr "Panduan Komunitas telah dipindahkan ke <0/>"
@@ -3924,11 +5052,20 @@ msgstr "Panduan Komunitas telah dipindahkan ke <0/>"
msgid "The Copyright Policy has been moved to <0/>"
msgstr "Kebijakan Hak Cipta telah dipindahkan ke <0/>"
-#: src/screens/Onboarding/Layout.tsx:60
-msgid "The following steps will help customize your Bluesky experience."
+#: src/components/moderation/LabelsOnMeDialog.tsx:48
+msgid "The following labels were applied to your account."
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:49
+msgid "The following labels were applied to your content."
msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:453
+#: src/screens/Onboarding/Layout.tsx:58
+msgid "The following steps will help customize your Bluesky experience."
+msgstr "Langkah berikut akan membantu menyesuaikan pengalaman Bluesky Anda."
+
+#: src/view/com/post-thread/PostThread.tsx:153
+#: src/view/com/post-thread/PostThread.tsx:165
msgid "The post may have been deleted."
msgstr "Postingan mungkin telah dihapus."
@@ -3947,24 +5084,25 @@ msgstr "Formulir dukungan telah dipindahkan. Jika Anda memerlukan bantuan, silak
msgid "The Terms of Service have been moved to"
msgstr "Ketentuan Layanan telah dipindahkan ke"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:150
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:141
msgid "There are many feeds to try:"
-msgstr ""
+msgstr "Ada banyak feed untuk dicoba:"
-#: src/view/screens/ProfileFeed.tsx:549
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:112
+#: src/view/screens/ProfileFeed.tsx:544
msgid "There was an an issue contacting the server, please check your internet connection and try again."
msgstr "Ada masalah saat menghubungi server, silakan periksa koneksi internet Anda dan coba lagi."
-#: src/view/com/posts/FeedErrorMessage.tsx:139
+#: src/view/com/posts/FeedErrorMessage.tsx:138
msgid "There was an an issue removing this feed. Please check your internet connection and try again."
msgstr "Ada masalah saat menghapus feed ini. Periksa koneksi internet Anda dan coba lagi."
-#: src/view/screens/ProfileFeed.tsx:209
+#: src/view/screens/ProfileFeed.tsx:218
msgid "There was an an issue updating your feeds, please check your internet connection and try again."
msgstr "Ada masalah saat memperbarui feed Anda, periksa koneksi internet Anda dan coba lagi."
-#: src/view/screens/ProfileFeed.tsx:236
-#: src/view/screens/ProfileList.tsx:266
+#: src/view/screens/ProfileFeed.tsx:245
+#: src/view/screens/ProfileList.tsx:275
#: src/view/screens/SavedFeeds.tsx:209
#: src/view/screens/SavedFeeds.tsx:231
#: src/view/screens/SavedFeeds.tsx:252
@@ -3973,9 +5111,8 @@ msgstr "Ada masalah saat menghubungi server"
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:57
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:66
-#: src/view/com/feeds/FeedSourceCard.tsx:113
-#: src/view/com/feeds/FeedSourceCard.tsx:127
-#: src/view/com/feeds/FeedSourceCard.tsx:181
+#: src/view/com/feeds/FeedSourceCard.tsx:110
+#: src/view/com/feeds/FeedSourceCard.tsx:123
msgid "There was an issue contacting your server"
msgstr "Ada masalah saat menghubungi server Anda"
@@ -3983,7 +5120,7 @@ msgstr "Ada masalah saat menghubungi server Anda"
msgid "There was an issue fetching notifications. Tap here to try again."
msgstr "Ada masalah saat mengambil notifikasi. Ketuk di sini untuk mencoba lagi."
-#: src/view/com/posts/Feed.tsx:263
+#: src/view/com/posts/Feed.tsx:287
msgid "There was an issue fetching posts. Tap here to try again."
msgstr "Ada masalah saat mengambil postingan. Ketuk di sini untuk mencoba lagi."
@@ -3996,69 +5133,88 @@ msgstr "Ada masalah saat mengambil daftar. Ketuk di sini untuk mencoba lagi."
msgid "There was an issue fetching your lists. Tap here to try again."
msgstr "Ada masalah saat mengambil daftar Anda. Ketuk di sini untuk mencoba lagi."
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:63
-#: src/view/com/modals/ContentFilteringSettings.tsx:126
+#: src/components/ReportDialog/SubmitView.tsx:83
+msgid "There was an issue sending your report. Please check your internet connection."
+msgstr ""
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:65
msgid "There was an issue syncing your preferences with the server"
msgstr "Ada masalah saat mensinkronkan preferensi Anda dengan server"
-#: src/view/screens/AppPasswords.tsx:66
+#: src/view/screens/AppPasswords.tsx:68
msgid "There was an issue with fetching your app passwords"
msgstr "Ada masalah dengan pengambilan kata sandi aplikasi Anda"
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:93
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:105
-#: src/view/com/profile/ProfileHeader.tsx:156
-#: src/view/com/profile/ProfileHeader.tsx:177
-#: src/view/com/profile/ProfileHeader.tsx:216
-#: src/view/com/profile/ProfileHeader.tsx:229
-#: src/view/com/profile/ProfileHeader.tsx:249
-#: src/view/com/profile/ProfileHeader.tsx:271
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:105
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:127
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:99
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:111
+#: src/view/com/profile/ProfileMenu.tsx:106
+#: src/view/com/profile/ProfileMenu.tsx:117
+#: src/view/com/profile/ProfileMenu.tsx:132
+#: src/view/com/profile/ProfileMenu.tsx:143
+#: src/view/com/profile/ProfileMenu.tsx:157
+#: src/view/com/profile/ProfileMenu.tsx:170
msgid "There was an issue! {0}"
msgstr "Ada masalah! {0}"
-#: src/view/screens/ProfileList.tsx:287
-#: src/view/screens/ProfileList.tsx:306
-#: src/view/screens/ProfileList.tsx:328
-#: src/view/screens/ProfileList.tsx:347
+#: src/view/screens/ProfileList.tsx:288
+#: src/view/screens/ProfileList.tsx:302
+#: src/view/screens/ProfileList.tsx:316
+#: src/view/screens/ProfileList.tsx:330
msgid "There was an issue. Please check your internet connection and try again."
msgstr "Ada masalah. Periksa koneksi internet Anda dan coba lagi."
-#: src/view/com/util/ErrorBoundary.tsx:36
+#: src/view/com/util/ErrorBoundary.tsx:51
msgid "There was an unexpected issue in the application. Please let us know if this happened to you!"
msgstr "Sepertinya ada masalah pada aplikasi. Harap beri tahu kami jika Anda mengalaminya!"
#: src/screens/Deactivated.tsx:106
msgid "There's been a rush of new users to Bluesky! We'll activate your account as soon as we can."
-msgstr ""
+msgstr "Sedang ada lonjakan pengguna baru di Bluesky! Kami akan mengaktifkan akun Anda secepat mungkin."
#: src/view/com/auth/create/Step2.tsx:55
-msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
-msgstr ""
+#~ msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
+#~ msgstr "Ada kesalahan pada nomor ini. Mohon pilih negara dan masukkan nomor telepon lengkap Anda!"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:138
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:146
msgid "These are popular accounts you might like:"
-msgstr ""
+msgstr "Berikut adalah akun populer yang mungkin Anda sukai:"
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:138
#~ msgid "These are popular accounts you might like."
-#~ msgstr ""
+#~ msgstr "Berikut adalah akun populer yang mungkin Anda sukai."
#~ msgid "This {0} has been labeled."
#~ msgstr "Ini {0} telah diberi label."
-#: src/view/com/util/moderation/ScreenHider.tsx:88
+#: src/components/moderation/ScreenHider.tsx:116
msgid "This {screenDescription} has been flagged:"
msgstr "Ini {screenDescription} telah ditandai:"
-#: src/view/com/util/moderation/ScreenHider.tsx:83
+#: src/components/moderation/ScreenHider.tsx:111
msgid "This account has requested that users sign in to view their profile."
msgstr "Akun ini mewajibkan pengguna untuk masuk agar bisa melihat profilnya."
-#: src/view/com/modals/EmbedConsent.tsx:68
+#: src/components/moderation/LabelsOnMeDialog.tsx:204
+msgid "This appeal will be sent to <0>{0}0>."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:19
+msgid "This content has been hidden by the moderators."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:24
+msgid "This content has received a general warning from moderators."
+msgstr ""
+
+#: src/components/dialogs/EmbedConsent.tsx:64
msgid "This content is hosted by {0}. Do you want to enable external media?"
msgstr "Konten ini disediakan oleh {0}. Apakah Anda ingin mengaktifkan media eksternal?"
-#: src/view/com/modals/ModerationDetails.tsx:67
+#: src/components/moderation/ModerationDetailsDialog.tsx:77
+#: src/lib/moderation/useModerationCauseDescription.ts:77
msgid "This content is not available because one of the users involved has blocked the other."
msgstr "Konten ini tidak tersedia karena salah satu pengguna yang terlibat telah memblokir pengguna lainnya."
@@ -4067,16 +5223,20 @@ msgid "This content is not viewable without a Bluesky account."
msgstr "Konten ini tidak dapat dilihat tanpa akun Bluesky."
#: src/view/screens/Settings/ExportCarDialog.tsx:75
-msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
+#~ msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
+#~ msgstr ""
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:75
+msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost0>."
msgstr ""
#: src/view/com/posts/FeedErrorMessage.tsx:114
msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later."
msgstr "Feed ini sedang menerima terlalu banyak trafik dan sementara tidak tersedia. Silakan coba lagi nanti."
-#: src/view/screens/Profile.tsx:420
-#: src/view/screens/ProfileFeed.tsx:475
-#: src/view/screens/ProfileList.tsx:660
+#: src/screens/Profile/Sections/Feed.tsx:50
+#: src/view/screens/ProfileFeed.tsx:477
+#: src/view/screens/ProfileList.tsx:675
msgid "This feed is empty!"
msgstr "Feed ini kosong!"
@@ -4084,7 +5244,7 @@ msgstr "Feed ini kosong!"
msgid "This feed is empty! You may need to follow more users or tune your language settings."
msgstr "Feed ini kosong! Anda mungkin perlu mengikuti lebih banyak pengguna atau menyesuaikan pengaturan bahasa Anda."
-#: src/view/com/modals/BirthDateSettings.tsx:61
+#: src/components/dialogs/BirthDateSettings.tsx:41
msgid "This information is not shared with other users."
msgstr "Informasi ini tidak akan dibagikan ke pengguna lainnya."
@@ -4096,48 +5256,110 @@ msgstr "Ini penting jika Anda butuh untuk mengganti email atau reset kata sandi
#~ msgid "This is the service that keeps you online."
#~ msgstr "Ini adalah layanan yang menjaga Anda tetap online."
-#: src/view/com/modals/LinkWarning.tsx:58
+#: src/components/moderation/ModerationDetailsDialog.tsx:124
+msgid "This label was applied by {0}."
+msgstr ""
+
+#: src/screens/Profile/Sections/Labels.tsx:167
+msgid "This labeler hasn't declared what labels it publishes, and may not be active."
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:72
msgid "This link is taking you to the following website:"
msgstr "Tautan ini akan membawa Anda ke website:"
-#: src/view/screens/ProfileList.tsx:834
+#: src/view/screens/ProfileList.tsx:853
msgid "This list is empty!"
msgstr "Daftar ini kosong!"
-#: src/view/com/modals/AddAppPasswords.tsx:106
+#: src/screens/Profile/ErrorState.tsx:40
+msgid "This moderation service is unavailable. See below for more details. If this issue persists, contact us."
+msgstr ""
+
+#: src/view/com/modals/AddAppPasswords.tsx:107
msgid "This name is already in use"
msgstr "Nama ini sudah digunakan"
-#: src/view/com/post-thread/PostThreadItem.tsx:122
+#: src/view/com/post-thread/PostThreadItem.tsx:125
msgid "This post has been deleted."
msgstr "Postingan ini telah dihapus."
-#: src/view/com/modals/ModerationDetails.tsx:62
+#: src/view/com/util/forms/PostDropdownBtn.tsx:344
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:248
+msgid "This post is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:326
+msgid "This post will be hidden from feeds."
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:370
+msgid "This profile is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/Policies.tsx:37
+msgid "This service has not provided terms of service or a privacy policy."
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:445
+msgid "This should create a domain record at:"
+msgstr ""
+
+#: src/view/com/profile/ProfileFollowers.tsx:87
+msgid "This user doesn't have any followers."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:72
+#: src/lib/moderation/useModerationCauseDescription.ts:68
msgid "This user has blocked you. You cannot view their content."
msgstr "Pengguna ini telah memblokir Anda. Anda tidak dapat melihat konten mereka."
+#: src/lib/moderation/useGlobalLabelStrings.ts:30
+msgid "This user has requested that their content only be shown to signed-in users."
+msgstr ""
+
#: src/view/com/modals/ModerationDetails.tsx:42
-msgid "This user is included in the <0/> list which you have blocked."
-msgstr "Pengguna ini termasuk dalam daftar <0/> yang telah Anda blokir."
+#~ msgid "This user is included in the <0/> list which you have blocked."
+#~ msgstr "Pengguna ini termasuk dalam daftar <0/> yang telah Anda blokir."
#: src/view/com/modals/ModerationDetails.tsx:74
-msgid "This user is included in the <0/> list which you have muted."
-msgstr ""
+#~ msgid "This user is included in the <0/> list which you have muted."
+#~ msgstr "Pengguna ini termasuk dalam daftar <0/> yang telah Anda bisukan."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:55
+msgid "This user is included in the <0>{0}0> list which you have blocked."
+msgstr "Pengguna ini termasuk dalam daftar <0>{0}0> yang telah Anda blokir"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:84
+msgid "This user is included in the <0>{0}0> list which you have muted."
+msgstr "Pengguna ini termasuk dalam daftar <0>{0}0> yang telah Anda bisukan"
#: src/view/com/modals/ModerationDetails.tsx:74
#~ msgid "This user is included the <0/> list which you have muted."
#~ msgstr "Pengguna ini termasuk dalam daftar <0/> yang telah Anda bisukan."
+#: src/view/com/profile/ProfileFollows.tsx:87
+msgid "This user isn't following anyone."
+msgstr ""
+
#: src/view/com/modals/SelfLabel.tsx:137
msgid "This warning is only available for posts with media attached."
msgstr "Peringatan ini hanya tersedia untuk postingan dengan lampiran media."
-#: src/view/com/util/forms/PostDropdownBtn.tsx:192
-msgid "This will hide this post from your feeds."
-msgstr "Ini akan menyembunyikan postingan ini dari feed Anda."
+#: src/components/dialogs/MutedWords.tsx:283
+msgid "This will delete {0} from your muted words. You can always add it back later."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:282
+#~ msgid "This will hide this post from your feeds."
+#~ msgstr "Ini akan menyembunyikan postingan ini dari feed Anda."
+
+#: src/view/screens/Settings/index.tsx:574
+msgid "Thread preferences"
+msgstr ""
#: src/view/screens/PreferencesThreads.tsx:53
-#: src/view/screens/Settings/index.tsx:565
+#: src/view/screens/Settings/index.tsx:584
msgid "Thread Preferences"
msgstr "Preferensi Utasan"
@@ -4145,21 +5367,34 @@ msgstr "Preferensi Utasan"
msgid "Threaded Mode"
msgstr "Mode Utasan"
-#: src/Navigation.tsx:252
+#: src/Navigation.tsx:269
msgid "Threads Preferences"
msgstr "Preferensi Utas"
+#: src/components/ReportDialog/SelectLabelerView.tsx:33
+msgid "To whom would you like to send this report?"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:112
+msgid "Toggle between muted word options."
+msgstr ""
+
#: src/view/com/util/forms/DropdownButton.tsx:246
msgid "Toggle dropdown"
msgstr "Beralih dropdown"
-#: src/view/com/modals/EditImage.tsx:271
+#: src/screens/Moderation/index.tsx:332
+msgid "Toggle to enable or disable adult content"
+msgstr ""
+
+#: src/view/com/modals/EditImage.tsx:272
msgid "Transformations"
msgstr "Transformasi"
-#: src/view/com/post-thread/PostThreadItem.tsx:686
-#: src/view/com/post-thread/PostThreadItem.tsx:688
-#: src/view/com/util/forms/PostDropdownBtn.tsx:125
+#: src/view/com/post-thread/PostThreadItem.tsx:644
+#: src/view/com/post-thread/PostThreadItem.tsx:646
+#: src/view/com/util/forms/PostDropdownBtn.tsx:212
+#: src/view/com/util/forms/PostDropdownBtn.tsx:214
msgid "Translate"
msgstr "Terjemahkan"
@@ -4171,108 +5406,195 @@ msgstr "Coba lagi"
#~ msgid "Try again"
#~ msgstr "Ulangi"
-#: src/view/screens/ProfileList.tsx:505
+#: src/view/com/modals/ChangeHandle.tsx:428
+msgid "Type:"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:478
msgid "Un-block list"
msgstr "Buka blokir daftar"
-#: src/view/screens/ProfileList.tsx:490
+#: src/view/screens/ProfileList.tsx:461
msgid "Un-mute list"
msgstr "Bunyikan daftar"
-#: src/view/com/auth/create/CreateAccount.tsx:66
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:87
-#: src/view/com/auth/login/Login.tsx:76
-#: src/view/com/auth/login/LoginForm.tsx:118
+#: src/screens/Login/ForgotPasswordForm.tsx:74
+#: src/screens/Login/index.tsx:78
+#: src/screens/Login/LoginForm.tsx:119
+#: src/screens/Login/SetNewPasswordForm.tsx:77
+#: src/screens/Signup/index.tsx:63
#: src/view/com/modals/ChangePassword.tsx:70
msgid "Unable to contact your service. Please check your Internet connection."
msgstr "Tidak dapat terhubung ke layanan. Mohon periksa koneksi internet Anda."
-#: src/view/com/profile/ProfileHeader.tsx:432
-#: src/view/screens/ProfileList.tsx:589
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:181
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+#: src/view/screens/ProfileList.tsx:572
msgid "Unblock"
msgstr "Buka blokir"
-#: src/view/com/profile/ProfileHeader.tsx:435
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:186
msgctxt "action"
msgid "Unblock"
msgstr "Buka blokir"
-#: src/view/com/profile/ProfileHeader.tsx:260
-#: src/view/com/profile/ProfileHeader.tsx:344
+#: src/view/com/profile/ProfileMenu.tsx:299
+#: src/view/com/profile/ProfileMenu.tsx:305
msgid "Unblock Account"
msgstr "Buka blokir Akun"
-#: src/view/com/modals/Repost.tsx:42
-#: src/view/com/modals/Repost.tsx:55
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:281
+#: src/view/com/profile/ProfileMenu.tsx:343
+msgid "Unblock Account?"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:43
+#: src/view/com/modals/Repost.tsx:56
#: src/view/com/util/post-ctrls/RepostButton.tsx:60
#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
msgid "Undo repost"
msgstr "Batalkan posting ulang"
-#: src/view/com/profile/FollowButton.tsx:55
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
+msgid "Unfollow"
+msgstr ""
+
+#: src/view/com/profile/FollowButton.tsx:60
msgctxt "action"
msgid "Unfollow"
msgstr "Berhenti mengikuti"
-#: src/view/com/profile/ProfileHeader.tsx:484
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:220
msgid "Unfollow {0}"
msgstr "Berhenti mengikuti {0}"
-#: src/view/com/auth/create/state.ts:300
-msgid "Unfortunately, you do not meet the requirements to create an account."
-msgstr "Sayangnya, Anda tidak memenuhi syarat untuk membuat akun."
+#: src/view/com/profile/ProfileMenu.tsx:241
+#: src/view/com/profile/ProfileMenu.tsx:251
+msgid "Unfollow Account"
+msgstr ""
+
+#: src/view/com/auth/create/state.ts:262
+#~ msgid "Unfortunately, you do not meet the requirements to create an account."
+#~ msgstr "Sayangnya, Anda tidak memenuhi syarat untuk membuat akun."
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Unlike"
msgstr "Tidak suka"
-#: src/view/screens/ProfileList.tsx:596
+#: src/view/screens/ProfileFeed.tsx:573
+msgid "Unlike this feed"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:249
+#: src/view/screens/ProfileList.tsx:579
msgid "Unmute"
msgstr "Bunyikan"
-#: src/view/com/profile/ProfileHeader.tsx:325
+#: src/components/TagMenu/index.web.tsx:104
+msgid "Unmute {truncatedTag}"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:278
+#: src/view/com/profile/ProfileMenu.tsx:284
msgid "Unmute Account"
msgstr "Bunyikan Akun"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/components/TagMenu/index.tsx:208
+msgid "Unmute all {displayTag} posts"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:210
+#~ msgid "Unmute all {tag} posts"
+#~ msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:256
msgid "Unmute thread"
msgstr "Bunyikan utasan"
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:295
+#: src/view/screens/ProfileList.tsx:563
msgid "Unpin"
msgstr "Lepas sematan"
-#: src/view/screens/ProfileList.tsx:473
+#: src/view/screens/ProfileFeed.tsx:292
+msgid "Unpin from home"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:444
msgid "Unpin moderation list"
msgstr "Lepas sematan daftar moderasi"
-#: src/view/screens/ProfileFeed.tsx:345
-msgid "Unsave"
-msgstr "Batal simpan"
+#: src/view/screens/ProfileFeed.tsx:346
+#~ msgid "Unsave"
+#~ msgstr "Batal simpan"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:219
+msgid "Unsubscribe"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:183
+msgid "Unsubscribe from this labeler"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:70
+msgid "Unwanted Sexual Content"
+msgstr ""
#: src/view/com/modals/UserAddRemoveLists.tsx:70
msgid "Update {displayName} in Lists"
msgstr "Memperbarui {displayName} di Daftar"
#: src/lib/hooks/useOTAUpdate.ts:15
-msgid "Update Available"
-msgstr "Pembaruan Tersedia"
+#~ msgid "Update Available"
+#~ msgstr "Pembaruan Tersedia"
+
+#: src/view/com/modals/ChangeHandle.tsx:508
+msgid "Update to {handle}"
+msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:204
+#: src/screens/Login/SetNewPasswordForm.tsx:186
msgid "Updating..."
msgstr "Memperbarui..."
-#: src/view/com/modals/ChangeHandle.tsx:455
+#: src/view/com/modals/ChangeHandle.tsx:454
msgid "Upload a text file to:"
msgstr "Unggah berkas teks ke:"
-#: src/view/screens/AppPasswords.tsx:195
+#: src/view/com/util/UserAvatar.tsx:326
+#: src/view/com/util/UserAvatar.tsx:329
+#: src/view/com/util/UserBanner.tsx:116
+#: src/view/com/util/UserBanner.tsx:119
+msgid "Upload from Camera"
+msgstr ""
+
+#: src/view/com/util/UserAvatar.tsx:343
+#: src/view/com/util/UserBanner.tsx:133
+msgid "Upload from Files"
+msgstr ""
+
+#: src/view/com/util/UserAvatar.tsx:337
+#: src/view/com/util/UserAvatar.tsx:341
+#: src/view/com/util/UserBanner.tsx:127
+#: src/view/com/util/UserBanner.tsx:131
+msgid "Upload from Library"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:408
+msgid "Use a file on your server"
+msgstr ""
+
+#: src/view/screens/AppPasswords.tsx:197
msgid "Use app passwords to login to other Bluesky clients without giving full access to your account or password."
msgstr "Gunakan kata sandi aplikasi untuk masuk ke klien Bluesky lainnya tanpa memberikan akses penuh ke akun atau kata sandi Anda."
-#: src/view/com/modals/ChangeHandle.tsx:515
+#: src/view/com/modals/ChangeHandle.tsx:517
+msgid "Use bsky.social as hosting provider"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:516
msgid "Use default provider"
msgstr "Gunakan layanan bawaan"
@@ -4286,7 +5608,11 @@ msgstr "Gunakan peramban dalam aplikasi"
msgid "Use my default browser"
msgstr "Gunakan peramban bawaan saya"
-#: src/view/com/modals/AddAppPasswords.tsx:155
+#: src/view/com/modals/ChangeHandle.tsx:400
+msgid "Use the DNS panel"
+msgstr ""
+
+#: src/view/com/modals/AddAppPasswords.tsx:156
msgid "Use this to sign into the other app along with your handle."
msgstr "Gunakan ini untuk masuk ke aplikasi lain dengan handle Anda."
@@ -4294,46 +5620,55 @@ msgstr "Gunakan ini untuk masuk ke aplikasi lain dengan handle Anda."
#~ msgid "Use your domain as your Bluesky client service provider"
#~ msgstr "Gunakan domain Anda sebagai penyedia layanan klien Bluesky Anda"
-#: src/view/com/modals/InviteCodes.tsx:200
+#: src/view/com/modals/InviteCodes.tsx:201
msgid "Used by:"
msgstr "Digunakan oleh:"
-#: src/view/com/modals/ModerationDetails.tsx:54
+#: src/components/moderation/ModerationDetailsDialog.tsx:64
+#: src/lib/moderation/useModerationCauseDescription.ts:56
msgid "User Blocked"
msgstr "Pengguna Diblokir"
-#: src/view/com/modals/ModerationDetails.tsx:40
+#: src/lib/moderation/useModerationCauseDescription.ts:48
+msgid "User Blocked by \"{0}\""
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:53
msgid "User Blocked by List"
msgstr "Pengguna Diblokir oleh Daftar"
-#: src/view/com/modals/ModerationDetails.tsx:60
+#: src/lib/moderation/useModerationCauseDescription.ts:66
+msgid "User Blocking You"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:70
msgid "User Blocks You"
msgstr "Pengguna Memblokir Anda"
-#: src/view/com/auth/create/Step3.tsx:41
-msgid "User handle"
-msgstr "Handle pengguna"
+#: src/view/com/auth/create/Step2.tsx:79
+#~ msgid "User handle"
+#~ msgstr "Handle pengguna"
-#: src/view/com/lists/ListCard.tsx:84
+#: src/view/com/lists/ListCard.tsx:85
#: src/view/com/modals/UserAddRemoveLists.tsx:198
msgid "User list by {0}"
msgstr "Daftar pengguna oleh {0}"
-#: src/view/screens/ProfileList.tsx:762
+#: src/view/screens/ProfileList.tsx:777
msgid "User list by <0/>"
msgstr "Daftar pengguna oleh<0/>"
-#: src/view/com/lists/ListCard.tsx:82
+#: src/view/com/lists/ListCard.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:196
-#: src/view/screens/ProfileList.tsx:760
+#: src/view/screens/ProfileList.tsx:775
msgid "User list by you"
msgstr "Daftar pengguna oleh Anda"
-#: src/view/com/modals/CreateOrEditList.tsx:196
+#: src/view/com/modals/CreateOrEditList.tsx:197
msgid "User list created"
msgstr "Daftar pengguna dibuat"
-#: src/view/com/modals/CreateOrEditList.tsx:182
+#: src/view/com/modals/CreateOrEditList.tsx:183
msgid "User list updated"
msgstr "Daftar pengguna diperbarui"
@@ -4341,12 +5676,11 @@ msgstr "Daftar pengguna diperbarui"
msgid "User Lists"
msgstr "Daftar Pengguna"
-#: src/view/com/auth/login/LoginForm.tsx:177
-#: src/view/com/auth/login/LoginForm.tsx:195
+#: src/screens/Login/LoginForm.tsx:151
msgid "Username or email address"
msgstr "Nama pengguna atau alamat email"
-#: src/view/screens/ProfileList.tsx:796
+#: src/view/screens/ProfileList.tsx:811
msgid "Users"
msgstr "Pengguna"
@@ -4358,19 +5692,31 @@ msgstr "pengguna yang diikuti <0/>"
msgid "Users in \"{0}\""
msgstr "Pengguna di \"{0}\""
+#: src/components/LikesDialog.tsx:85
+msgid "Users that have liked this content or profile"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:436
+msgid "Value:"
+msgstr ""
+
#: src/view/com/auth/create/Step2.tsx:243
-msgid "Verification code"
+#~ msgid "Verification code"
+#~ msgstr "Kode verifikasi"
+
+#: src/view/com/modals/ChangeHandle.tsx:509
+msgid "Verify {0}"
msgstr ""
-#: src/view/screens/Settings/index.tsx:910
+#: src/view/screens/Settings/index.tsx:942
msgid "Verify email"
msgstr "Verifikasi email"
-#: src/view/screens/Settings/index.tsx:935
+#: src/view/screens/Settings/index.tsx:967
msgid "Verify my email"
msgstr "Verifikasi email saya"
-#: src/view/screens/Settings/index.tsx:944
+#: src/view/screens/Settings/index.tsx:976
msgid "Verify My Email"
msgstr "Verifikasi Email Saya"
@@ -4383,11 +5729,15 @@ msgstr "Verifikasi Email Baru"
msgid "Verify Your Email"
msgstr "Verifikasi Email Anda"
+#: src/view/screens/Settings/index.tsx:893
+msgid "Version {0}"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:42
msgid "Video Games"
-msgstr ""
+msgstr "Permainan Video"
-#: src/view/com/profile/ProfileHeader.tsx:661
+#: src/screens/Profile/Header/Shell.tsx:107
msgid "View {0}'s avatar"
msgstr "Lihat avatar {0}"
@@ -4395,11 +5745,23 @@ msgstr "Lihat avatar {0}"
msgid "View debug entry"
msgstr "Lihat entri debug"
-#: src/view/com/posts/FeedSlice.tsx:103
+#: src/components/ReportDialog/SelectReportOptionView.tsx:131
+msgid "View details"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:126
+msgid "View details for reporting a copyright violation"
+msgstr ""
+
+#: src/view/com/posts/FeedSlice.tsx:99
msgid "View full thread"
msgstr "Lihat utas lengkap"
-#: src/view/com/posts/FeedErrorMessage.tsx:172
+#: src/components/moderation/LabelsOnMe.tsx:51
+msgid "View information about these labels"
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:166
msgid "View profile"
msgstr "Lihat profil"
@@ -4407,26 +5769,49 @@ msgstr "Lihat profil"
msgid "View the avatar"
msgstr "Lihat avatar"
-#: src/view/com/modals/LinkWarning.tsx:75
+#: src/components/LabelingServiceCard/index.tsx:140
+msgid "View the labeling service provided by @{0}"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:585
+msgid "View users who like this feed"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
msgid "Visit Site"
msgstr "Kunjungi Halaman"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:42
-#: src/view/com/modals/ContentFilteringSettings.tsx:259
+#: src/components/moderation/LabelPreference.tsx:135
+#: src/lib/moderation/useLabelBehaviorDescription.ts:17
+#: src/lib/moderation/useLabelBehaviorDescription.ts:22
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:53
msgid "Warn"
msgstr "Peringatkan"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:48
+msgid "Warn content"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:46
+msgid "Warn content and filter from feeds"
+msgstr ""
+
#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:134
-msgid "We also think you'll like \"For You\" by Skygaze:"
+#~ msgid "We also think you'll like \"For You\" by Skygaze:"
+#~ msgstr "Sepertinya Anda juga akan menyukai \"For You\" oleh Skygaze:"
+
+#: src/screens/Hashtag.tsx:133
+msgid "We couldn't find any results for that hashtag."
msgstr ""
#: src/screens/Deactivated.tsx:133
msgid "We estimate {estimatedTime} until your account is ready."
-msgstr ""
+msgstr "Kami perkirakan {estimatedTime} hingga akun Anda siap."
-#: src/screens/Onboarding/StepFinished.tsx:93
+#: src/screens/Onboarding/StepFinished.tsx:97
msgid "We hope you have a wonderful time. Remember, Bluesky is:"
-msgstr ""
+msgstr "Semoga Anda senang dan betah di sini. Ingat, Bluesky adalah:"
#: src/view/com/posts/DiscoverFallbackHeader.tsx:29
#~ msgid "We ran out of posts from your follows. Here's the latest from"
@@ -4434,65 +5819,87 @@ msgstr ""
#: src/view/com/posts/DiscoverFallbackHeader.tsx:29
msgid "We ran out of posts from your follows. Here's the latest from <0/>."
-msgstr ""
+msgstr "Kami kehabisan postingan dari akun yang Anda ikuti. Inilah yang terbaru dari <0/>."
#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:118
#~ msgid "We recommend \"For You\" by Skygaze:"
-#~ msgstr ""
+#~ msgstr "Kami merekomendasikan \"For You\" oleh Skygaze:"
+
+#: src/components/dialogs/MutedWords.tsx:203
+msgid "We recommend avoiding common words that appear in many posts, since it can result in no posts being shown."
+msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:124
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:125
msgid "We recommend our \"Discover\" feed:"
+msgstr "Kami merekomendasikan feed \"Discover\" kami:"
+
+#: src/components/dialogs/BirthDateSettings.tsx:52
+msgid "We were unable to load your birth date preferences. Please try again."
msgstr ""
-#: src/screens/Onboarding/StepInterests/index.tsx:133
-msgid "We weren't able to connect. Please try again to continue setting up your account. If it continues to fail, you can skip this flow."
+#: src/screens/Moderation/index.tsx:385
+msgid "We were unable to load your configured labelers at this time."
msgstr ""
+#: src/screens/Onboarding/StepInterests/index.tsx:137
+msgid "We weren't able to connect. Please try again to continue setting up your account. If it continues to fail, you can skip this flow."
+msgstr "Sepertinya ada masalah koneksi. Mohon coba lagi untuk melanjutkan pengaturan akun Anda. Jika terus gagal, Anda dapat melewati langkah ini."
+
#: src/screens/Deactivated.tsx:137
msgid "We will let you know when your account is ready."
-msgstr ""
+msgstr "Kami akan memberi tahu Anda ketika akun Anda siap."
#: src/view/com/modals/AppealLabel.tsx:48
-msgid "We'll look into your appeal promptly."
-msgstr "Kami akan segera memeriksa permohonan banding Anda."
+#~ msgid "We'll look into your appeal promptly."
+#~ msgstr "Kami akan segera memeriksa permohonan banding Anda."
-#: src/screens/Onboarding/StepInterests/index.tsx:138
+#: src/screens/Onboarding/StepInterests/index.tsx:142
msgid "We'll use this to help customize your experience."
-msgstr ""
+msgstr "Kami akan menggunakan ini untuk menyesuaikan pengalaman Anda."
-#: src/view/com/auth/create/CreateAccount.tsx:123
+#: src/screens/Signup/index.tsx:130
msgid "We're so excited to have you join us!"
msgstr "Kami sangat senang Anda bergabung dengan kami!"
-#: src/view/screens/ProfileList.tsx:85
+#: src/view/screens/ProfileList.tsx:89
msgid "We're sorry, but we were unable to resolve this list. If this persists, please contact the list creator, @{handleOrDid}."
msgstr "Mohon maaf, kami tidak dapat menyelesaikan daftar ini. Jika hal ini terus berlanjut, silakan hubungi pembuat daftar, @{handleOrDid}."
-#: src/view/screens/Search/Search.tsx:253
+#: src/components/dialogs/MutedWords.tsx:229
+msgid "We're sorry, but we weren't able to load your muted words at this time. Please try again."
+msgstr ""
+
+#: src/view/screens/Search/Search.tsx:256
msgid "We're sorry, but your search could not be completed. Please try again in a few minutes."
msgstr "Maaf, pencarian Anda tidak dapat dilakukan. Mohon coba lagi dalam beberapa menit."
+#: src/components/Lists.tsx:188
#: src/view/screens/NotFound.tsx:48
msgid "We're sorry! We can't find the page you were looking for."
msgstr "Maaf! Kami tidak dapat menemukan halaman yang Anda cari."
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:46
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:321
+msgid "We're sorry! You can only subscribe to ten labelers, and you've reached your limit of ten."
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:48
msgid "Welcome to <0>Bluesky0>"
msgstr "Selamat Datang di <0>Bluesky0>"
-#: src/screens/Onboarding/StepInterests/index.tsx:130
+#: src/screens/Onboarding/StepInterests/index.tsx:134
msgid "What are your interests?"
-msgstr ""
+msgstr "Apa saja minat Anda?"
#: src/view/com/modals/report/Modal.tsx:169
-msgid "What is the issue with this {collectionName}?"
-msgstr "Apa yang bermasalah dengan {collectionName}?"
+#~ msgid "What is the issue with this {collectionName}?"
+#~ msgstr "Apa yang bermasalah dengan {collectionName}?"
#~ msgid "What's next?"
#~ msgstr "Apa selanjutnya?"
-#: src/view/com/auth/SplashScreen.tsx:34
-#: src/view/com/composer/Composer.tsx:279
+#: src/view/com/auth/SplashScreen.tsx:58
+#: src/view/com/auth/SplashScreen.web.tsx:84
+#: src/view/com/composer/Composer.tsx:296
msgid "What's up?"
msgstr "Apa kabar?"
@@ -4509,32 +5916,52 @@ msgstr "Bahasa apa yang ingin Anda lihat di feed Anda?"
msgid "Who can reply"
msgstr "Siapa yang dapat membalas"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:102
+#: src/components/ReportDialog/SelectReportOptionView.tsx:43
+msgid "Why should this content be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:56
+msgid "Why should this feed be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:53
+msgid "Why should this list be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:50
+msgid "Why should this post be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:47
+msgid "Why should this user be reviewed?"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:103
msgid "Wide"
msgstr "Lebar"
-#: src/view/com/composer/Composer.tsx:415
+#: src/view/com/composer/Composer.tsx:436
msgid "Write post"
msgstr "Tulis postingan"
-#: src/view/com/composer/Composer.tsx:278
-#: src/view/com/composer/Prompt.tsx:33
+#: src/view/com/composer/Composer.tsx:295
+#: src/view/com/composer/Prompt.tsx:37
msgid "Write your reply"
msgstr "Tulis balasan Anda"
#: src/screens/Onboarding/index.tsx:28
msgid "Writers"
-msgstr ""
+msgstr "Penulis"
#: src/view/com/auth/create/Step2.tsx:263
-msgid "XXXXXX"
-msgstr ""
+#~ msgid "XXXXXX"
+#~ msgstr "XXXXXX"
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:77
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:201
-#: src/view/screens/PreferencesHomeFeed.tsx:236
-#: src/view/screens/PreferencesHomeFeed.tsx:271
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:201
+#: src/view/screens/PreferencesFollowingFeed.tsx:236
+#: src/view/screens/PreferencesFollowingFeed.tsx:271
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "Yes"
@@ -4542,10 +5969,14 @@ msgstr "Ya"
#: src/screens/Onboarding/StepModeration/index.tsx:46
#~ msgid "You are in control"
-#~ msgstr ""
+#~ msgstr "Anda memiliki kendali"
#: src/screens/Deactivated.tsx:130
msgid "You are in line."
+msgstr "Anda sedang dalam antrian."
+
+#: src/view/com/profile/ProfileFollows.tsx:86
+msgid "You are not following anyone."
msgstr ""
#: src/view/com/posts/FollowingEmptyState.tsx:67
@@ -4555,22 +5986,26 @@ msgstr "Anda juga dapat menemukan Feed Khusus baru untuk diikuti."
#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:123
#~ msgid "You can also try our \"Discover\" algorithm:"
-#~ msgstr ""
+#~ msgstr "Anda juga dapat mencoba algoritma \"Discover\" kami:"
#: src/view/com/auth/create/Step1.tsx:106
#~ msgid "You can change hosting providers at any time."
#~ msgstr "Anda dapat mengganti layanan hosting kapan pun."
-#: src/screens/Onboarding/StepFollowingFeed.tsx:142
+#: src/screens/Onboarding/StepFollowingFeed.tsx:143
msgid "You can change these settings later."
-msgstr ""
+msgstr "Anda dapat mengubah pengaturan ini nanti."
-#: src/view/com/auth/login/Login.tsx:158
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:31
+#: src/screens/Login/index.tsx:158
+#: src/screens/Login/PasswordUpdatedForm.tsx:33
msgid "You can now sign in with your new password."
msgstr "Sekarang Anda dapat masuk dengan kata sandi baru."
-#: src/view/com/modals/InviteCodes.tsx:66
+#: src/view/com/profile/ProfileFollowers.tsx:86
+msgid "You do not have any followers."
+msgstr ""
+
+#: src/view/com/modals/InviteCodes.tsx:67
msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer."
msgstr "Anda belum memiliki kode undangan! Kami akan mengirimkan kode saat Anda sudah sedikit lama di Bluesky."
@@ -4578,7 +6013,7 @@ msgstr "Anda belum memiliki kode undangan! Kami akan mengirimkan kode saat Anda
msgid "You don't have any pinned feeds."
msgstr "Anda tidak memiliki feed yang disematkan."
-#: src/view/screens/Feeds.tsx:451
+#: src/view/screens/Feeds.tsx:452
msgid "You don't have any saved feeds!"
msgstr "Anda tidak memiliki feed yang disimpan!"
@@ -4586,24 +6021,43 @@ msgstr "Anda tidak memiliki feed yang disimpan!"
msgid "You don't have any saved feeds."
msgstr "Anda tidak memiliki feed yang disimpan."
-#: src/view/com/post-thread/PostThread.tsx:401
+#: src/view/com/post-thread/PostThread.tsx:159
msgid "You have blocked the author or you have been blocked by the author."
msgstr "Anda telah memblokir atau diblokir oleh penulis ini."
-#: src/view/com/modals/ModerationDetails.tsx:56
+#: src/components/moderation/ModerationDetailsDialog.tsx:66
+#: src/lib/moderation/useModerationCauseDescription.ts:50
+#: src/lib/moderation/useModerationCauseDescription.ts:58
msgid "You have blocked this user. You cannot view their content."
msgstr "Anda telah memblokir pengguna ini. Anda tidak dapat melihat konten mereka."
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:57
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:92
+#: src/screens/Login/SetNewPasswordForm.tsx:54
+#: src/screens/Login/SetNewPasswordForm.tsx:91
#: src/view/com/modals/ChangePassword.tsx:87
#: src/view/com/modals/ChangePassword.tsx:121
msgid "You have entered an invalid code. It should look like XXXXX-XXXXX."
+msgstr "Anda telah memasukkan kode yang tidak valid. Seharusnya terlihat seperti XXXXX-XXXXX."
+
+#: src/lib/moderation/useModerationCauseDescription.ts:109
+msgid "You have hidden this post"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:101
+msgid "You have hidden this post."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:94
+#: src/lib/moderation/useModerationCauseDescription.ts:92
+msgid "You have muted this account."
+msgstr ""
+
+#: src/lib/moderation/useModerationCauseDescription.ts:86
+msgid "You have muted this user"
msgstr ""
#: src/view/com/modals/ModerationDetails.tsx:87
-msgid "You have muted this user."
-msgstr "Anda telah membisukan pengguna ini."
+#~ msgid "You have muted this user."
+#~ msgstr "Anda telah membisukan pengguna ini."
#: src/view/com/feeds/ProfileFeedgens.tsx:136
msgid "You have no feeds."
@@ -4615,60 +6069,89 @@ msgid "You have no lists."
msgstr "Anda tidak punya daftar."
#: src/view/screens/ModerationBlockedAccounts.tsx:132
-msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
-msgstr "Anda belum memblokir akun lain. Untuk memblokir akun, kunjungi profil mereka dan pilih \"Blokir akun\" pada menu di akun mereka."
+msgid "You have not blocked any accounts yet. To block an account, go to their profile and select \"Block account\" from the menu on their account."
+msgstr ""
+
+#: src/view/screens/ModerationBlockedAccounts.tsx:132
+#~ msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
+#~ msgstr "Anda belum memblokir akun lain. Untuk memblokir akun, kunjungi profil mereka dan pilih \"Blokir akun\" pada menu di akun mereka."
-#: src/view/screens/AppPasswords.tsx:87
+#: src/view/screens/AppPasswords.tsx:89
msgid "You have not created any app passwords yet. You can create one by pressing the button below."
msgstr "Anda belum membuat kata sandi aplikasi. Anda dapat membuatnya dengan menekan tombol di bawah ini."
#: src/view/screens/ModerationMutedAccounts.tsx:131
-msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
-msgstr "Anda belum membisukan akun lain. Untuk membisukan akun, kunjungi profil mereka dan pilih \"Bisukan akun\" pada menu di akun mereka."
+msgid "You have not muted any accounts yet. To mute an account, go to their profile and select \"Mute account\" from the menu on their account."
+msgstr ""
+
+#: src/view/screens/ModerationMutedAccounts.tsx:131
+#~ msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
+#~ msgstr "Anda belum membisukan akun lain. Untuk membisukan akun, kunjungi profil mereka dan pilih \"Bisukan akun\" pada menu di akun mereka."
+
+#: src/components/dialogs/MutedWords.tsx:249
+msgid "You haven't muted any words or tags yet"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:68
+msgid "You may appeal these labels if you feel they were placed in error."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/Policies.tsx:79
+msgid "You must be 13 years of age or older to sign up."
+msgstr ""
#: src/view/com/modals/ContentFilteringSettings.tsx:175
-msgid "You must be 18 or older to enable adult content."
-msgstr "Anda harus berusia 18 tahun atau lebih untuk mengaktifkan konten dewasa."
+#~ msgid "You must be 18 or older to enable adult content."
+#~ msgstr "Anda harus berusia 18 tahun atau lebih untuk mengaktifkan konten dewasa."
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:103
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:110
msgid "You must be 18 years or older to enable adult content"
+msgstr "Anda harus berusia 18 tahun atau lebih untuk mengaktifkan konten dewasa"
+
+#: src/components/ReportDialog/SubmitView.tsx:205
+msgid "You must select at least one labeler for a report"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:98
+#: src/view/com/util/forms/PostDropdownBtn.tsx:144
msgid "You will no longer receive notifications for this thread"
msgstr "Anda tidak akan lagi menerima notifikasi untuk utas ini"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:147
msgid "You will now receive notifications for this thread"
msgstr "Anda sekarang akan menerima notifikasi untuk utas ini"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:107
+#: src/screens/Login/SetNewPasswordForm.tsx:104
msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password."
msgstr "Anda akan menerima email berisikan \"kode reset\". Masukkan kode tersebut di sini, lalu masukkan kata sandi baru."
-#: src/screens/Onboarding/StepModeration/index.tsx:72
+#: src/screens/Onboarding/StepModeration/index.tsx:60
msgid "You're in control"
-msgstr ""
+msgstr "Anda memiliki kendali"
#: src/screens/Deactivated.tsx:87
#: src/screens/Deactivated.tsx:88
#: src/screens/Deactivated.tsx:103
msgid "You're in line"
-msgstr ""
+msgstr "Anda sedang dalam antrian"
-#: src/screens/Onboarding/StepFinished.tsx:90
+#: src/screens/Onboarding/StepFinished.tsx:94
msgid "You're ready to go!"
+msgstr "Anda siap untuk mulai!"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:98
+#: src/lib/moderation/useModerationCauseDescription.ts:101
+msgid "You've chosen to hide a word or tag within this post."
msgstr ""
#: src/view/com/posts/FollowingEndOfFeed.tsx:48
msgid "You've reached the end of your feed! Find some more accounts to follow."
msgstr "Anda telah mencapai akhir feed Anda! Temukan beberapa akun lain untuk diikuti."
-#: src/view/com/auth/create/Step1.tsx:74
+#: src/screens/Signup/index.tsx:150
msgid "Your account"
msgstr "Akun Anda"
-#: src/view/com/modals/DeleteAccount.tsx:67
+#: src/view/com/modals/DeleteAccount.tsx:68
msgid "Your account has been deleted"
msgstr "Akun Anda telah dihapus"
@@ -4676,7 +6159,7 @@ msgstr "Akun Anda telah dihapus"
msgid "Your account repository, containing all public data records, can be downloaded as a \"CAR\" file. This file does not include media embeds, such as images, or your private data, which must be fetched separately."
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:234
+#: src/screens/Signup/StepInfo/index.tsx:121
msgid "Your birth date"
msgstr "Tanggal lahir Anda"
@@ -4684,19 +6167,19 @@ msgstr "Tanggal lahir Anda"
msgid "Your choice will be saved, but can be changed later in settings."
msgstr "Pilihan Anda akan disimpan, tetapi dapat diubah nanti di pengaturan."
-#: src/screens/Onboarding/StepFollowingFeed.tsx:61
+#: src/screens/Onboarding/StepFollowingFeed.tsx:62
msgid "Your default feed is \"Following\""
-msgstr ""
+msgstr "Feed bawaan Anda adalah \"Mengikuti\""
-#: src/view/com/auth/create/state.ts:153
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:70
+#: src/screens/Login/ForgotPasswordForm.tsx:57
+#: src/screens/Signup/state.ts:227
#: src/view/com/modals/ChangePassword.tsx:54
msgid "Your email appears to be invalid."
msgstr "Email Anda tidak valid."
#: src/view/com/modals/Waitlist.tsx:109
-msgid "Your email has been saved! We'll be in touch soon."
-msgstr "Email Anda telah disimpan. Kami akan segera menghubungi Anda."
+#~ msgid "Your email has been saved! We'll be in touch soon."
+#~ msgstr "Email Anda telah disimpan. Kami akan segera menghubungi Anda."
#: src/view/com/modals/ChangeEmail.tsx:125
msgid "Your email has been updated but not verified. As a next step, please verify your new email."
@@ -4710,11 +6193,11 @@ msgstr "Alamat email Anda belum diverifikasi. Ini merupakan langkah keamanan pen
msgid "Your following feed is empty! Follow more users to see what's happening."
msgstr "Feed mengikuti Anda kosong! Ikuti lebih banyak pengguna untuk melihat apa yang terjadi."
-#: src/view/com/auth/create/Step3.tsx:45
+#: src/screens/Signup/StepHandle.tsx:72
msgid "Your full handle will be"
msgstr "Handle lengkap Anda akan menjadi"
-#: src/view/com/modals/ChangeHandle.tsx:270
+#: src/view/com/modals/ChangeHandle.tsx:271
msgid "Your full handle will be <0>@{0}0>"
msgstr "Handle lengkap Anda akan menjadi <0>@{0}0>"
@@ -4728,29 +6211,32 @@ msgstr "Handle lengkap Anda akan menjadi <0>@{0}0>"
#~ msgid "Your invite codes are hidden when logged in using an App Password"
#~ msgstr "Kode undangan Anda disembunyikan saat masuk menggunakan Kata Sandi Aplikasi"
-#: src/view/com/modals/ChangePassword.tsx:155
-msgid "Your password has been changed successfully!"
+#: src/components/dialogs/MutedWords.tsx:220
+msgid "Your muted words"
msgstr ""
-#: src/view/com/composer/Composer.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:157
+msgid "Your password has been changed successfully!"
+msgstr "Kata sandi Anda telah berhasil diubah!"
+
+#: src/view/com/composer/Composer.tsx:284
msgid "Your post has been published"
msgstr "Postingan Anda telah dipublikasikan"
-#: src/screens/Onboarding/StepFinished.tsx:105
+#: src/screens/Onboarding/StepFinished.tsx:109
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:59
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:59
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:61
msgid "Your posts, likes, and blocks are public. Mutes are private."
msgstr "Postingan, suka, dan blokir Anda bersifat publik. Bisukan bersifat privat."
-#: src/view/com/modals/SwitchAccount.tsx:84
-#: src/view/screens/Settings/index.tsx:118
+#: src/view/screens/Settings/index.tsx:125
msgid "Your profile"
msgstr "Profil Anda"
-#: src/view/com/composer/Composer.tsx:266
+#: src/view/com/composer/Composer.tsx:283
msgid "Your reply has been published"
msgstr "Balasan Anda telah dipublikasikan"
-#: src/view/com/auth/create/Step3.tsx:28
+#: src/screens/Signup/index.tsx:152
msgid "Your user handle"
msgstr "Handle Anda"
diff --git a/src/locale/locales/it/messages.po b/src/locale/locales/it/messages.po
index 1b89e5d46b..c8eda439d2 100644
--- a/src/locale/locales/it/messages.po
+++ b/src/locale/locales/it/messages.po
@@ -1,11 +1,11 @@
msgid ""
msgstr ""
-"Project-Id-Version: \n"
+"Project-Id-Version: Italian localization\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-05 11:44+0530\n"
-"PO-Revision-Date: \n"
+"PO-Revision-Date: 2024-04-03 17:58+0200\n"
"Last-Translator: Gabriella Nonino \n"
-"Language-Team: \n"
+"Language-Team: Gabriella Nonino sandswimmer@gmail.com\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,25 +18,30 @@ msgstr ""
msgid "(no email)"
msgstr "(no email)"
-#: src/view/shell/desktop/RightNav.tsx:168
-msgid "{0, plural, one {# invite code available} other {# invite codes available}}"
-msgstr "{0, plural, one {# codice d'invito disponibile} other {# codici d'inviti disponibili}}"
+#~ msgid "{0, plural, one {# invite code available} other {# invite codes available}}"
+#~ msgstr "{0, plural, one {# codice d'invito disponibile} other {# codici d'inviti disponibili}}"
-#: src/view/com/profile/ProfileHeader.tsx:632
+#~ msgid "{0}"
+#~ msgstr "{0}"
+
+#~ msgid "{0} {purposeLabel} List"
+#~ msgstr "Lista {purposeLabel} {0}"
+
+#: src/screens/Profile/Header/Metrics.tsx:44
msgid "{following} following"
msgstr "{following} seguendo"
-#: src/view/shell/desktop/RightNav.tsx:151
-msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}"
-msgstr "{invitesAvailable, plural, one {Codici d'invito: # available} other {Codici d'invito: # available}}"
+#~ msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}"
+#~ msgstr "{invitesAvailable, plural, one {Codici d'invito: # available} other {Codici d'invito: # available}}"
+
+#~ msgid "{invitesAvailable} invite code available"
+#~ msgstr "{invitesAvailable} codice d'invito disponibile"
-#: src/view/screens/Settings.tsx:435 src/view/shell/Drawer.tsx:664
-msgid "{invitesAvailable} invite code available"
-msgstr "{invitesAvailable} codice d'invito disponibile"
+#~ msgid "{invitesAvailable} invite codes available"
+#~ msgstr "{invitesAvailable} codici d'invito disponibili"
-#: src/view/screens/Settings.tsx:437 src/view/shell/Drawer.tsx:666
-msgid "{invitesAvailable} invite codes available"
-msgstr "{invitesAvailable} codici d'invito disponibili"
+#~ msgid "{message}"
+#~ msgstr "{message}"
#: src/view/shell/Drawer.tsx:443
msgid "{numUnreadNotifications} unread"
@@ -46,9 +51,13 @@ msgstr "{numUnreadNotifications} non letto"
msgid "<0/> members"
msgstr "<0/> membri"
-#: src/view/com/profile/ProfileHeader.tsx:634
+#: src/view/shell/Drawer.tsx:97
+msgid "<0>{0}0> following"
+msgstr "<0>{0}0> following"
+
+#: src/screens/Profile/Header/Metrics.tsx:45
msgid "<0>{following} 0><1>following1>"
-msgstr "<0>{following} 0><1>seguiti1>"
+msgstr "<0>{following} 0><1>following1>"
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:30
msgid "<0>Choose your0><1>Recommended1><2>Feeds2>"
@@ -60,49 +69,60 @@ msgstr "<0>Segui alcuni0><1>utenti1><2>consigliati2>"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:21
msgid "<0>Welcome to0><1>Bluesky1>"
-msgstr "<0>Ti diamo il benvenuto a0><1>Bluesky1>"
+msgstr "<0>Ti diamo il benvenuto su0><1>Bluesky1>"
-#: src/view/com/profile/ProfileHeader.tsx:597
+#: src/screens/Profile/Header/Handle.tsx:42
msgid "⚠Invalid Handle"
msgstr "⚠Nome utente non valido"
-#: src/view/com/util/moderation/LabelInfo.tsx:45
-msgid "A content warning has been applied to this {0}."
-msgstr "A questo post è stato applicato un avviso di contenuto {0}."
+#~ msgid "A content warning has been applied to this {0}."
+#~ msgstr "A questo post è stato applicato un avviso di contenuto {0}."
-#: src/lib/hooks/useOTAUpdate.ts:16
-msgid "A new version of the app is available. Please update to continue using the app."
-msgstr "È disponibile una nuova versione dell'app. Aggiorna per continuare a utilizzarla."
+#~ msgid "A new version of the app is available. Please update to continue using the app."
+#~ msgstr "È disponibile una nuova versione dell'app. Aggiorna per continuare a utilizzarla."
-#: src/view/com/util/ViewHeader.tsx:83 src/view/screens/Search/Search.tsx:545
+#: src/view/com/util/ViewHeader.tsx:89
+#: src/view/screens/Search/Search.tsx:649
msgid "Access navigation links and settings"
msgstr "Accedi alle impostazioni di navigazione"
-#: src/view/com/pager/FeedsTabBarMobile.tsx:83
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:52
msgid "Access profile and other navigation links"
msgstr "Accedi al profilo e altre impostazioni di navigazione"
-#: src/view/com/modals/EditImage.tsx:299 src/view/screens/Settings.tsx:445
+#: src/view/com/modals/EditImage.tsx:300
+#: src/view/screens/Settings/index.tsx:470
msgid "Accessibility"
msgstr "Accessibilità"
-#: src/view/com/auth/login/LoginForm.tsx:163 src/view/screens/Settings.tsx:308
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "account"
+msgstr "account"
+
+#: src/screens/Login/LoginForm.tsx:144
+#: src/view/screens/Settings/index.tsx:327
+#: src/view/screens/Settings/index.tsx:743
msgid "Account"
msgstr "Account"
-#: src/view/com/profile/ProfileHeader.tsx:293
+#: src/view/com/profile/ProfileMenu.tsx:139
msgid "Account blocked"
msgstr "Account bloccato"
-#: src/view/com/profile/ProfileHeader.tsx:260
+#: src/view/com/profile/ProfileMenu.tsx:153
+msgid "Account followed"
+msgstr "Account seguito"
+
+#: src/view/com/profile/ProfileMenu.tsx:113
msgid "Account muted"
msgstr "Account silenziato"
-#: src/view/com/modals/ModerationDetails.tsx:86
+#: src/components/moderation/ModerationDetailsDialog.tsx:93
+#: src/lib/moderation/useModerationCauseDescription.ts:91
msgid "Account Muted"
msgstr "Account Silenziato"
-#: src/view/com/modals/ModerationDetails.tsx:72
+#: src/components/moderation/ModerationDetailsDialog.tsx:82
msgid "Account Muted by List"
msgstr "Account silenziato dalla Lista"
@@ -114,18 +134,24 @@ msgstr "Opzioni dell'account"
msgid "Account removed from quick access"
msgstr "Account rimosso dall'accesso immediato"
-#: src/view/com/profile/ProfileHeader.tsx:315
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:137
+#: src/view/com/profile/ProfileMenu.tsx:128
msgid "Account unblocked"
msgstr "Account sbloccato"
-#: src/view/com/profile/ProfileHeader.tsx:273
+#: src/view/com/profile/ProfileMenu.tsx:166
+msgid "Account unfollowed"
+msgstr "Account non seguito"
+
+#: src/view/com/profile/ProfileMenu.tsx:102
msgid "Account unmuted"
msgstr "Account non silenziato"
+#: src/components/dialogs/MutedWords.tsx:164
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:150
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
-#: src/view/com/modals/UserAddRemoveLists.tsx:203
-#: src/view/screens/ProfileList.tsx:791
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
+#: src/view/com/modals/UserAddRemoveLists.tsx:219
+#: src/view/screens/ProfileList.tsx:827
msgid "Add"
msgstr "Aggiungi"
@@ -133,52 +159,60 @@ msgstr "Aggiungi"
msgid "Add a content warning"
msgstr "Aggiungi un avviso sul contenuto"
-#: src/view/screens/ProfileList.tsx:781
+#: src/view/screens/ProfileList.tsx:817
msgid "Add a user to this list"
msgstr "Aggiungi un utente a questo elenco"
-#: src/view/screens/Settings.tsx:383 src/view/screens/Settings.tsx:392
+#: src/components/dialogs/SwitchAccount.tsx:55
+#: src/view/screens/Settings/index.tsx:402
+#: src/view/screens/Settings/index.tsx:411
msgid "Add account"
msgstr "Aggiungi account"
#: src/view/com/composer/photos/Gallery.tsx:119
#: src/view/com/composer/photos/Gallery.tsx:180
-#: src/view/com/modals/AltImage.tsx:93
+#: src/view/com/modals/AltImage.tsx:117
msgid "Add alt text"
msgstr "Aggiungi testo alternativo"
-#: src/view/screens/AppPasswords.tsx:102 src/view/screens/AppPasswords.tsx:143
-#: src/view/screens/AppPasswords.tsx:156
+#: src/view/screens/AppPasswords.tsx:104
+#: src/view/screens/AppPasswords.tsx:145
+#: src/view/screens/AppPasswords.tsx:158
msgid "Add App Password"
msgstr "Aggiungi la Password per l'App"
-#: src/view/com/modals/report/InputIssueDetails.tsx:41
-#: src/view/com/modals/report/Modal.tsx:191
-msgid "Add details"
-msgstr "Aggiungi i dettagli"
+#~ msgid "Add details"
+#~ msgstr "Aggiungi i dettagli"
-#: src/view/com/modals/report/Modal.tsx:194
-msgid "Add details to report"
-msgstr "Aggiungi dettagli da segnalare"
+#~ msgid "Add details to report"
+#~ msgstr "Aggiungi dettagli da segnalare"
-#: src/view/com/composer/Composer.tsx:446
+#: src/view/com/composer/Composer.tsx:467
msgid "Add link card"
-msgstr "Aggiungi la scheda collegata al link"
+msgstr "Aggiungi anteprima del link"
-#: src/view/com/composer/Composer.tsx:451
+#: src/view/com/composer/Composer.tsx:472
msgid "Add link card:"
-msgstr "Aggiungi la scheda relazionata al link:"
+msgstr "Aggiungi anteprima del link:"
-#: src/view/com/modals/ChangeHandle.tsx:417
+#: src/components/dialogs/MutedWords.tsx:157
+msgid "Add mute word for configured settings"
+msgstr "Aggiungi parola silenziata alle impostazioni configurate"
+
+#: src/components/dialogs/MutedWords.tsx:86
+msgid "Add muted words and tags"
+msgstr "Aggiungi parole silenziate e tags"
+
+#: src/view/com/modals/ChangeHandle.tsx:416
msgid "Add the following DNS record to your domain:"
msgstr "Aggiungi il seguente record DNS al tuo dominio:"
-#: src/view/com/profile/ProfileHeader.tsx:357
+#: src/view/com/profile/ProfileMenu.tsx:263
+#: src/view/com/profile/ProfileMenu.tsx:266
msgid "Add to Lists"
msgstr "Aggiungi alle liste"
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:281
+#: src/view/com/feeds/FeedSourceCard.tsx:234
msgid "Add to my feeds"
msgstr "Aggiungi ai miei feed"
@@ -187,39 +221,54 @@ msgid "Added"
msgstr "Aggiunto"
#: src/view/com/modals/ListAddRemoveUsers.tsx:191
-#: src/view/com/modals/UserAddRemoveLists.tsx:128
+#: src/view/com/modals/UserAddRemoveLists.tsx:144
msgid "Added to list"
msgstr "Aggiunto alla lista"
-#: src/view/com/feeds/FeedSourceCard.tsx:125
+#: src/view/com/feeds/FeedSourceCard.tsx:108
msgid "Added to my feeds"
msgstr "Aggiunto ai miei feeds"
-#: src/view/screens/PreferencesHomeFeed.tsx:173
+#: src/view/screens/PreferencesFollowingFeed.tsx:173
msgid "Adjust the number of likes a reply must have to be shown in your feed."
msgstr "Modifica il numero Mi Piace che una risposta deve avere per essere mostrata nel tuo feed."
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:117
#: src/view/com/modals/SelfLabel.tsx:75
msgid "Adult Content"
msgstr "Contenuto per adulti"
-#: src/view/com/modals/ContentFilteringSettings.tsx:137
-msgid "Adult content can only be enabled via the Web at <0/>."
-msgstr "I contenuti per adulti possono essere abilitati solo dal sito Web a <0/>."
+#~ msgid "Adult content can only be enabled via the Web at <0/>."
+#~ msgstr "I contenuti per adulti possono essere abilitati solo dal sito Web a <0/>."
-#: src/view/screens/Settings.tsx:630
+#: src/components/moderation/LabelPreference.tsx:242
+msgid "Adult content is disabled."
+msgstr "Il contenuto per adulti è disattivato."
+
+#: src/screens/Moderation/index.tsx:375
+#: src/view/screens/Settings/index.tsx:684
msgid "Advanced"
msgstr "Avanzato"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:98
+#: src/view/screens/Feeds.tsx:666
+msgid "All the feeds you've saved, right in one place."
+msgstr "Tutti i feed che hai salvato, in un unico posto."
+
+#: src/screens/Login/ForgotPasswordForm.tsx:178
+#: src/view/com/modals/ChangePassword.tsx:170
+msgid "Already have a code?"
+msgstr "Hai già un codice?"
+
+#: src/screens/Login/ChooseAccountForm.tsx:39
msgid "Already signed in as @{0}"
-msgstr "Già effettuato l'accesso come @{0}"
+msgstr "Hai già effettuato l'accesso come @{0}"
#: src/view/com/composer/photos/Gallery.tsx:130
msgid "ALT"
msgstr "ALT"
-#: src/view/com/modals/EditImage.tsx:315
+#: src/view/com/modals/EditImage.tsx:316
msgid "Alt text"
msgstr "Testo alternativo"
@@ -235,8 +284,14 @@ msgstr "È stata inviata un'e-mail a {0}. Include un codice di conferma che puoi
msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below."
msgstr "Una email è stata inviata al tuo indirizzo precedente, {0}. Include un codice di conferma che puoi inserire di seguito."
-#: src/view/com/profile/FollowButton.tsx:30
-#: src/view/com/profile/FollowButton.tsx:40
+#: src/lib/moderation/useReportOptions.ts:26
+msgid "An issue not included in these options"
+msgstr "Un problema non incluso in queste opzioni"
+
+#: src/view/com/profile/FollowButton.tsx:35
+#: src/view/com/profile/FollowButton.tsx:45
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:188
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:198
msgid "An issue occurred, please try again."
msgstr "Si è verificato un problema, riprova un'altra volta."
@@ -245,295 +300,395 @@ msgstr "Si è verificato un problema, riprova un'altra volta."
msgid "and"
msgstr "e"
+#: src/screens/Onboarding/index.tsx:32
+msgid "Animals"
+msgstr "Animali"
+
+#: src/lib/moderation/useReportOptions.ts:31
+msgid "Anti-Social Behavior"
+msgstr "Comportamento antisociale"
+
#: src/view/screens/LanguageSettings.tsx:95
msgid "App Language"
msgstr "Lingua dell'app"
-#: src/view/screens/AppPasswords.tsx:228
+#: src/view/screens/AppPasswords.tsx:223
msgid "App password deleted"
msgstr "Password dell'app eliminata"
-#: src/view/com/modals/AddAppPasswords.tsx:133
+#: src/view/com/modals/AddAppPasswords.tsx:135
msgid "App Password names can only contain letters, numbers, spaces, dashes, and underscores."
msgstr "Le password per le app possono contenere solo lettere, numeri, spazi, trattini e trattini bassi."
-#: src/view/com/modals/AddAppPasswords.tsx:98
+#: src/view/com/modals/AddAppPasswords.tsx:100
msgid "App Password names must be at least 4 characters long."
msgstr "I nomi delle password delle app devono contenere almeno 4 caratteri."
-#: src/view/screens/Settings.tsx:641
+#: src/view/screens/Settings/index.tsx:695
msgid "App password settings"
msgstr "Impostazioni della password dell'app"
-#: src/view/screens/Settings.tsx:650
-msgid "App passwords"
-msgstr "Passwords dell'app"
+#~ msgid "App passwords"
+#~ msgstr "Passwords dell'app"
-#: src/Navigation.tsx:237 src/view/screens/AppPasswords.tsx:187
+#: src/Navigation.tsx:251
+#: src/view/screens/AppPasswords.tsx:189
+#: src/view/screens/Settings/index.tsx:704
msgid "App Passwords"
msgstr "Passwords dell'App"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:248
-msgid "Appeal content warning"
-msgstr "Ricorso contro l'avviso sui contenuti"
+#: src/components/moderation/LabelsOnMeDialog.tsx:133
+#: src/components/moderation/LabelsOnMeDialog.tsx:136
+msgid "Appeal"
+msgstr "Ricorso"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:201
+msgid "Appeal \"{0}\" label"
+msgstr "Etichetta \"{0}\" del ricorso"
+
+#~ msgid "Appeal content warning"
+#~ msgstr "Ricorso contro l'avviso sui contenuti"
+
+#~ msgid "Appeal Content Warning"
+#~ msgstr "Ricorso contro l'Avviso sui Contenuti"
+
+#~ msgid "Appeal Decision"
+#~ msgstr "Decisión de apelación"
-#: src/view/com/modals/AppealLabel.tsx:65
-msgid "Appeal Content Warning"
-msgstr "Ricorso contro l'Avviso sui Contenuti"
+#: src/components/moderation/LabelsOnMeDialog.tsx:192
+msgid "Appeal submitted."
+msgstr "Ricorso presentato."
-#: src/view/com/util/moderation/LabelInfo.tsx:52
-msgid "Appeal this decision"
-msgstr "Appella contro questa decisione"
+#~ msgid "Appeal this decision"
+#~ msgstr "Appella contro questa decisione"
-#: src/view/com/util/moderation/LabelInfo.tsx:56
-msgid "Appeal this decision."
-msgstr "Appella contro questa decisione."
+#~ msgid "Appeal this decision."
+#~ msgstr "Appella contro questa decisione."
-#: src/view/screens/Settings.tsx:460
+#: src/view/screens/Settings/index.tsx:485
msgid "Appearance"
msgstr "Aspetto"
-#: src/view/screens/AppPasswords.tsx:224
+#: src/view/screens/AppPasswords.tsx:265
msgid "Are you sure you want to delete the app password \"{name}\"?"
msgstr "Conferma di voler eliminare la password dell'app \"{name}\"?"
-#: src/view/com/composer/Composer.tsx:143
+#: src/view/com/feeds/FeedSourceCard.tsx:280
+msgid "Are you sure you want to remove {0} from your feeds?"
+msgstr "Vuoi rimuovere {0} dai tuoi feed?"
+
+#: src/view/com/composer/Composer.tsx:509
msgid "Are you sure you'd like to discard this draft?"
msgstr "Conferma di voler eliminare questa bozza?"
-#: src/view/screens/ProfileList.tsx:364
+#: src/components/dialogs/MutedWords.tsx:281
msgid "Are you sure?"
msgstr "Confermi?"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:231
-msgid "Are you sure? This cannot be undone."
-msgstr "Vuoi proseguire? Questa operazione non può essere annullata."
+#~ msgid "Are you sure? This cannot be undone."
+#~ msgstr "Vuoi proseguire? Questa operazione non può essere annullata."
-#: src/view/com/composer/select-language/SuggestedLanguage.tsx:65
+#: src/view/com/composer/select-language/SuggestedLanguage.tsx:60
msgid "Are you writing in <0>{0}0>?"
msgstr "Stai scrivendo in <0>{0}0>?"
+#: src/screens/Onboarding/index.tsx:26
+msgid "Art"
+msgstr "Arte"
+
#: src/view/com/modals/SelfLabel.tsx:123
msgid "Artistic or non-erotic nudity."
msgstr "Nudità artistica o non erotica."
-#: src/view/com/post-thread/PostThread.tsx:400
-msgctxt "action"
-msgid "Back"
-msgstr "Indietro"
+#: src/screens/Signup/StepHandle.tsx:118
+msgid "At least 3 characters"
+msgstr ""
-#: src/view/com/auth/create/CreateAccount.tsx:142
-#: src/view/com/auth/login/ChooseAccountForm.tsx:151
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:170
-#: src/view/com/auth/login/LoginForm.tsx:256
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:150
-#: src/view/com/modals/report/InputIssueDetails.tsx:46
-#: src/view/com/post-thread/PostThread.tsx:392
-#: src/view/com/post-thread/PostThread.tsx:442
-#: src/view/com/post-thread/PostThread.tsx:450
-#: src/view/com/profile/ProfileHeader.tsx:688
-#: src/view/com/util/ViewHeader.tsx:81
+#: src/components/moderation/LabelsOnMeDialog.tsx:246
+#: src/components/moderation/LabelsOnMeDialog.tsx:247
+#: src/screens/Login/ChooseAccountForm.tsx:73
+#: src/screens/Login/ChooseAccountForm.tsx:78
+#: src/screens/Login/ForgotPasswordForm.tsx:129
+#: src/screens/Login/ForgotPasswordForm.tsx:135
+#: src/screens/Login/LoginForm.tsx:221
+#: src/screens/Login/LoginForm.tsx:227
+#: src/screens/Login/SetNewPasswordForm.tsx:160
+#: src/screens/Login/SetNewPasswordForm.tsx:166
+#: src/screens/Profile/Header/Shell.tsx:96
+#: src/screens/Signup/index.tsx:179
+#: src/view/com/util/ViewHeader.tsx:87
msgid "Back"
msgstr "Indietro"
-#: src/view/screens/Settings.tsx:489
+#~ msgctxt "action"
+#~ msgid "Back"
+#~ msgstr "Indietro"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:144
+msgid "Based on your interest in {interestsText}"
+msgstr "Basato sui tuoi interessi {interestsText}"
+
+#: src/view/screens/Settings/index.tsx:542
msgid "Basics"
-msgstr "Nozioni di base"
+msgstr "Preferenze"
-#: src/view/com/auth/create/Step1.tsx:194
-#: src/view/com/modals/BirthDateSettings.tsx:73
+#: src/components/dialogs/BirthDateSettings.tsx:107
msgid "Birthday"
msgstr "Compleanno"
-#: src/view/screens/Settings.tsx:340
+#: src/view/screens/Settings/index.tsx:359
msgid "Birthday:"
msgstr "Compleanno:"
-#: src/view/com/profile/ProfileHeader.tsx:286
-#: src/view/com/profile/ProfileHeader.tsx:393
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+msgid "Block"
+msgstr "Blocca"
+
+#: src/view/com/profile/ProfileMenu.tsx:300
+#: src/view/com/profile/ProfileMenu.tsx:307
msgid "Block Account"
-msgstr "Blocca l'account"
+msgstr "Blocca Account"
+
+#: src/view/com/profile/ProfileMenu.tsx:344
+msgid "Block Account?"
+msgstr "Blocca Account?"
-#: src/view/screens/ProfileList.tsx:534
+#: src/view/screens/ProfileList.tsx:530
msgid "Block accounts"
msgstr "Blocca gli accounts"
-#: src/view/screens/ProfileList.tsx:484
+#: src/view/screens/ProfileList.tsx:478
+#: src/view/screens/ProfileList.tsx:634
msgid "Block list"
msgstr "Lista di blocchi"
-#: src/view/screens/ProfileList.tsx:315
+#: src/view/screens/ProfileList.tsx:629
msgid "Block these accounts?"
msgstr "Vuoi bloccare questi accounts?"
-#: src/view/screens/ProfileList.tsx:319
-msgid "Block this List"
-msgstr "Blocca questa Lista"
+#~ msgid "Block this List"
+#~ msgstr "Blocca questa Lista"
-#: src/view/com/lists/ListCard.tsx:109
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:60
+#: src/view/com/lists/ListCard.tsx:110
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:55
msgid "Blocked"
msgstr "Bloccato"
-#: src/view/screens/Moderation.tsx:123
+#: src/screens/Moderation/index.tsx:267
msgid "Blocked accounts"
msgstr "Accounts bloccati"
-#: src/Navigation.tsx:129 src/view/screens/ModerationBlockedAccounts.tsx:107
+#: src/Navigation.tsx:134
+#: src/view/screens/ModerationBlockedAccounts.tsx:107
msgid "Blocked Accounts"
msgstr "Accounts bloccati"
-#: src/view/com/profile/ProfileHeader.tsx:288
+#: src/view/com/profile/ProfileMenu.tsx:356
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
-msgstr "Gli account bloccati non possono rispondere nelle tue discussioni, menzionarti o interagire in nessun altro modo con te."
+msgstr "Gli account bloccati non possono rispondere alle tue discussioni, menzionarti o interagire in nessun altro modo con te."
#: src/view/screens/ModerationBlockedAccounts.tsx:115
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours."
-msgstr "Gli account bloccati non possono rispondere nelle tue discussioni, menzionarti in nessun altro modo con te. Non vedrai il loro contenuto e non vedranno il tuo.."
+msgstr "Gli account bloccati non possono rispondere alle tue discussioni, menzionarti, o interagire in nessun altro modo con te. Non vedrai il loro contenuto e non vedranno il tuo."
-#: src/view/com/post-thread/PostThread.tsx:254
+#: src/view/com/post-thread/PostThread.tsx:313
msgid "Blocked post."
msgstr "Post bloccato."
-#: src/view/screens/ProfileList.tsx:317
+#: src/screens/Profile/Sections/Labels.tsx:152
+msgid "Blocking does not prevent this labeler from placing labels on your account."
+msgstr "Il blocco non impedisce al labeler di inserire etichette nel tuo account."
+
+#: src/view/screens/ProfileList.tsx:631
msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
-msgstr "Il blocco è pubblico. Gli accounts bloccati non possono rispondere nelle tue discussioni, menzionarti o interagire con te in nessun altro modo."
+msgstr "l blocco è pubblico. Gli account bloccati non possono rispondere alle tue discussioni, menzionarti, o interagire con te in nessun altro modo."
+
+#: src/view/com/profile/ProfileMenu.tsx:353
+msgid "Blocking will not prevent labels from being applied on your account, but it will stop this account from replying in your threads or interacting with you."
+msgstr "Il blocco non impedirà l'applicazione delle etichette al tuo account, ma impedirà a questo account di rispondere alle tue discussioni o di interagire con te."
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:93
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:98
+#: src/view/com/auth/SplashScreen.web.tsx:169
msgid "Blog"
msgstr "Blog"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:31
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:32
+#: src/view/com/auth/server-input/index.tsx:89
+#: src/view/com/auth/server-input/index.tsx:91
msgid "Bluesky"
msgstr "Bluesky"
+#: src/view/com/auth/server-input/index.tsx:154
+msgid "Bluesky is an open network where you can choose your hosting provider. Custom hosting is now available in beta for developers."
+msgstr "Bluesky è un network aperto in cui puoi scegliere il tuo provider di hosting. L'hosting personalizzato è adesso disponibile in versione beta per gli sviluppatori."
+
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:80
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:80
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:82
msgid "Bluesky is flexible."
msgstr "Bluesky è flessibile."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:69
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:69
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:71
msgid "Bluesky is open."
msgstr "Bluesky è aperto."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:56
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:56
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:58
msgid "Bluesky is public."
msgstr "Bluesky è pubblico."
-#: src/view/com/modals/Waitlist.tsx:70
-msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
-msgstr "Bluesky utilizza gli inviti per costruire una comunità più sana. Se non conosci nessuno con un invito, puoi iscriverti alla lista d'attesa e te ne invieremo uno al più presto."
+#~ msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
+#~ msgstr "Bluesky utilizza gli inviti per costruire una comunità più sana. Se non conosci nessuno con un invito, puoi iscriverti alla lista d'attesa e te ne invieremo uno al più presto."
-#: src/view/screens/Moderation.tsx:225
+#: src/screens/Moderation/index.tsx:533
msgid "Bluesky will not show your profile and posts to logged-out users. Other apps may not honor this request. This does not make your account private."
-msgstr "Bluesky non mostrerà il tuo profilo e i tuoi post agli utenti disconnessi. Altre app potrebbero non rispettare questa richiesta. Questo non rende il tuo account privato."
+msgstr "Bluesky non mostrerà il tuo profilo e i tuoi post agli utenti non loggati. Altre applicazioni potrebbero non rispettare questa istruzione. Ciò non rende il tuo account privato."
+
+#~ msgid "Bluesky.Social"
+#~ msgstr "Bluesky.Social"
-#: src/view/com/modals/ServerInput.tsx:78
-msgid "Bluesky.Social"
-msgstr "Bluesky.Social"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:53
+msgid "Blur images"
+msgstr "Sfoca le immagini"
-#: src/view/screens/Settings.tsx:792
-msgid "Build version {0} {1}"
-msgstr "Versione {0} {1}"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:51
+msgid "Blur images and filter from feeds"
+msgstr "Sfoca le immagini e filtra dai feed"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:87
+#: src/screens/Onboarding/index.tsx:33
+msgid "Books"
+msgstr "Libri"
+
+#: src/view/screens/Settings/index.tsx:893
+#~ msgid "Build version {0} {1}"
+#~ msgstr "Versione {0} {1}"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:92
+#: src/view/com/auth/SplashScreen.web.tsx:166
msgid "Business"
msgstr "Attività commerciale"
-#: src/view/com/modals/ServerInput.tsx:115
-msgid "Button disabled. Input custom domain to proceed."
-msgstr "Pulsante disabilitato. Inserisci il dominio personalizzato per procedere."
+#~ msgid "Button disabled. Input custom domain to proceed."
+#~ msgstr "Pulsante disabilitato. Inserisci il dominio personalizzato per procedere."
#: src/view/com/profile/ProfileSubpageHeader.tsx:157
msgid "by —"
-msgstr "da—"
+msgstr "da —"
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:100
msgid "by {0}"
-msgstr "da {0}"
+msgstr "di {0}"
+
+#: src/components/LabelingServiceCard/index.tsx:57
+msgid "By {0}"
+msgstr "Di {0}"
#: src/view/com/profile/ProfileSubpageHeader.tsx:161
msgid "by <0/>"
-msgstr "da <0/>"
+msgstr "di <0/>"
+
+#: src/screens/Signup/StepInfo/Policies.tsx:74
+msgid "By creating an account you agree to the {els}."
+msgstr "Creando un account accetti i {els}."
#: src/view/com/profile/ProfileSubpageHeader.tsx:159
msgid "by you"
msgstr "da te"
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:60
-#: src/view/com/util/UserAvatar.tsx:221 src/view/com/util/UserBanner.tsx:38
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:77
msgid "Camera"
msgstr "Fotocamera"
-#: src/view/com/modals/AddAppPasswords.tsx:218
+#: src/view/com/modals/AddAppPasswords.tsx:217
msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long."
msgstr "Può contenere solo lettere, numeri, spazi, trattini e trattini bassi. Deve contenere almeno 4 caratteri, ma non più di 32 caratteri."
-#: src/view/com/modals/Confirm.tsx:88 src/view/com/modals/Confirm.tsx:91
-#: src/view/com/modals/CreateOrEditList.tsx:291
-#: src/view/com/modals/DeleteAccount.tsx:152
-#: src/view/com/modals/DeleteAccount.tsx:230
-msgctxt "action"
-msgid "Cancel"
-msgstr "Cancella"
-
-#: src/components/Prompt.tsx:92 src/view/com/composer/Composer.tsx:300
-#: src/view/com/composer/Composer.tsx:305
+#: src/components/Menu/index.tsx:213
+#: src/components/Prompt.tsx:113
+#: src/components/Prompt.tsx:115
+#: src/components/TagMenu/index.tsx:268
+#: src/view/com/composer/Composer.tsx:317
+#: src/view/com/composer/Composer.tsx:322
#: src/view/com/modals/ChangeEmail.tsx:218
#: src/view/com/modals/ChangeEmail.tsx:220
-#: src/view/com/modals/CreateOrEditList.tsx:286
-#: src/view/com/modals/EditImage.tsx:323
-#: src/view/com/modals/EditProfile.tsx:249
+#: src/view/com/modals/ChangeHandle.tsx:154
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
+#: src/view/com/modals/CreateOrEditList.tsx:356
+#: src/view/com/modals/crop-image/CropImage.web.tsx:138
+#: src/view/com/modals/EditImage.tsx:324
+#: src/view/com/modals/EditProfile.tsx:250
#: src/view/com/modals/InAppBrowserConsent.tsx:78
-#: src/view/com/modals/LinkWarning.tsx:87 src/view/com/modals/Repost.tsx:87
+#: src/view/com/modals/InAppBrowserConsent.tsx:80
+#: src/view/com/modals/LinkWarning.tsx:105
+#: src/view/com/modals/LinkWarning.tsx:107
+#: src/view/com/modals/Repost.tsx:88
#: src/view/com/modals/VerifyEmail.tsx:247
-#: src/view/com/modals/VerifyEmail.tsx:253 src/view/com/modals/Waitlist.tsx:142
-#: src/view/screens/Search/Search.tsx:609 src/view/shell/desktop/Search.tsx:238
+#: src/view/com/modals/VerifyEmail.tsx:253
+#: src/view/screens/Search/Search.tsx:718
+#: src/view/shell/desktop/Search.tsx:239
+msgid "Cancel"
+msgstr "Cancella"
+
+#: src/view/com/modals/CreateOrEditList.tsx:361
+#: src/view/com/modals/DeleteAccount.tsx:155
+#: src/view/com/modals/DeleteAccount.tsx:233
+msgctxt "action"
msgid "Cancel"
msgstr "Cancella"
-#: src/view/com/modals/DeleteAccount.tsx:148
-#: src/view/com/modals/DeleteAccount.tsx:226
+#: src/view/com/modals/DeleteAccount.tsx:151
+#: src/view/com/modals/DeleteAccount.tsx:229
msgid "Cancel account deletion"
msgstr "Annulla la cancellazione dell'account"
-#: src/view/com/modals/ChangeHandle.tsx:149
+#~ msgid "Cancel add image alt text"
+#~ msgstr "Cancel·la afegir text a la imatge"
+
+#: src/view/com/modals/ChangeHandle.tsx:150
msgid "Cancel change handle"
msgstr "Annulla il cambio del tuo nome utente"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:134
+#: src/view/com/modals/crop-image/CropImage.web.tsx:135
msgid "Cancel image crop"
msgstr "Annulla il ritaglio dell'immagine"
-#: src/view/com/modals/EditProfile.tsx:244
+#: src/view/com/modals/EditProfile.tsx:245
msgid "Cancel profile editing"
msgstr "Annulla la modifica del profilo"
-#: src/view/com/modals/Repost.tsx:78
+#: src/view/com/modals/Repost.tsx:79
msgid "Cancel quote post"
msgstr "Annnulla la citazione del post"
#: src/view/com/modals/ListAddRemoveUsers.tsx:87
-#: src/view/shell/desktop/Search.tsx:234
+#: src/view/shell/desktop/Search.tsx:235
msgid "Cancel search"
msgstr "Annulla la ricerca"
-#: src/view/com/modals/Waitlist.tsx:136
-msgid "Cancel waitlist signup"
-msgstr "Annulla l'iscrizione alla lista d'attesa"
+#~ msgid "Cancel waitlist signup"
+#~ msgstr "Annulla l'iscrizione alla lista d'attesa"
+
+#: src/view/com/modals/LinkWarning.tsx:106
+msgid "Cancels opening the linked website"
+msgstr "Annulla l'apertura del sito collegato"
-#: src/view/screens/Settings.tsx:334
+#: src/view/com/modals/VerifyEmail.tsx:152
+msgid "Change"
+msgstr "Cambia"
+
+#: src/view/screens/Settings/index.tsx:353
msgctxt "action"
msgid "Change"
msgstr "Cambia"
-#: src/view/screens/Settings.tsx:662 src/view/screens/Settings.tsx:671
+#: src/view/screens/Settings/index.tsx:716
msgid "Change handle"
msgstr "Cambia il nome utente"
-#: src/view/com/modals/ChangeHandle.tsx:161
+#: src/view/com/modals/ChangeHandle.tsx:162
+#: src/view/screens/Settings/index.tsx:727
msgid "Change Handle"
msgstr "Cambia il Nome Utente"
@@ -541,23 +696,40 @@ msgstr "Cambia il Nome Utente"
msgid "Change my email"
msgstr "Cambia la mia email"
-#: src/view/com/composer/select-language/SuggestedLanguage.tsx:78
+#: src/view/screens/Settings/index.tsx:754
+msgid "Change password"
+msgstr "Cambia la password"
+
+#: src/view/com/modals/ChangePassword.tsx:141
+#: src/view/screens/Settings/index.tsx:765
+msgid "Change Password"
+msgstr "Cambia la Password"
+
+#: src/view/com/composer/select-language/SuggestedLanguage.tsx:73
msgid "Change post language to {0}"
msgstr "Cambia la lingua del post a {0}"
+#~ msgid "Change your Bluesky password"
+#~ msgstr "Cambia la tua password di Bluesky"
+
#: src/view/com/modals/ChangeEmail.tsx:109
msgid "Change Your Email"
msgstr "Cambia la tua email"
+#: src/screens/Deactivated.tsx:72
+#: src/screens/Deactivated.tsx:76
+msgid "Check my status"
+msgstr "Verifica il mio stato"
+
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:121
msgid "Check out some recommended feeds. Tap + to add them to your list of pinned feeds."
-msgstr "Dai un'occhiata ad alcuni feed consigliati. Clicca + per aggiungerli al tuo elenco dei feeds."
+msgstr "Dai un'occhiata ad alcuni feed consigliati. Clicca + per aggiungerli al tuo elenco dei feed."
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:185
msgid "Check out some recommended users. Follow them to see similar users."
msgstr "Scopri alcuni utenti consigliati. Seguili per vedere utenti simili."
-#: src/view/com/modals/DeleteAccount.tsx:165
+#: src/view/com/modals/DeleteAccount.tsx:168
msgid "Check your inbox for an email with the confirmation code to enter below:"
msgstr "Controlla la tua posta in arrivo, dovrebbe contenere un'e-mail con il codice di conferma da inserire di seguito:"
@@ -565,85 +737,123 @@ msgstr "Controlla la tua posta in arrivo, dovrebbe contenere un'e-mail con il co
msgid "Choose \"Everybody\" or \"Nobody\""
msgstr "Scegli \"Tutti\" o \"Nessuno\""
-#: src/view/screens/Settings.tsx:663
-msgid "Choose a new Bluesky username or create"
-msgstr "Scegli un nuovo nome utente Bluesky o creane uno"
+#~ msgid "Choose a new Bluesky username or create"
+#~ msgstr "Scegli un nuovo nome utente Bluesky o creane uno"
-#: src/view/com/modals/ServerInput.tsx:38
+#: src/view/com/auth/server-input/index.tsx:79
msgid "Choose Service"
msgstr "Scegli il servizio"
+#: src/screens/Onboarding/StepFinished.tsx:139
+msgid "Choose the algorithms that power your custom feeds."
+msgstr "Scegli gli algoritmi che compilano i tuoi feed personalizzati."
+
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:83
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:83
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:85
msgid "Choose the algorithms that power your experience with custom feeds."
-msgstr "Scegli gli algoritmi che alimentano la tua esperienza con feed personalizzati."
+msgstr "Scegli gli algoritmi che migliorano la tua esperienza con i feed personalizzati."
-#: src/view/com/auth/create/Step1.tsx:163
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:104
+msgid "Choose your main feeds"
+msgstr "Scegli i tuoi feed principali"
+
+#: src/screens/Signup/StepInfo/index.tsx:112
msgid "Choose your password"
msgstr "Scegli la tua password"
-#: src/view/screens/Settings.tsx:767 src/view/screens/Settings.tsx:768
+#: src/view/screens/Settings/index.tsx:868
msgid "Clear all legacy storage data"
msgstr "Cancella tutti i dati legacy in archivio"
-#: src/view/screens/Settings.tsx:770
+#: src/view/screens/Settings/index.tsx:871
msgid "Clear all legacy storage data (restart after this)"
msgstr "Cancella tutti i dati legacy in archivio (poi ricomincia)"
-#: src/view/screens/Settings.tsx:779 src/view/screens/Settings.tsx:780
+#: src/view/screens/Settings/index.tsx:880
msgid "Clear all storage data"
msgstr "Cancella tutti i dati in archivio"
-#: src/view/screens/Settings.tsx:782
+#: src/view/screens/Settings/index.tsx:883
msgid "Clear all storage data (restart after this)"
msgstr "Cancella tutti i dati in archivio (poi ricomincia)"
-#: src/view/com/util/forms/SearchInput.tsx:74
-#: src/view/screens/Search/Search.tsx:590
+#: src/view/com/util/forms/SearchInput.tsx:88
+#: src/view/screens/Search/Search.tsx:699
msgid "Clear search query"
msgstr "Annulla la ricerca"
+#: src/view/screens/Settings/index.tsx:869
+msgid "Clears all legacy storage data"
+msgstr "Cancella tutti i dati di archiviazione legacy"
+
+#: src/view/screens/Settings/index.tsx:881
+msgid "Clears all storage data"
+msgstr "Cancella tutti i dati di archiviazione"
+
#: src/view/screens/Support.tsx:40
msgid "click here"
msgstr "clicca qui"
-#: src/components/Dialog/index.web.tsx:78
+#: src/components/TagMenu/index.web.tsx:138
+msgid "Click here to open tag menu for {tag}"
+msgstr "Clicca qui per aprire il menu per {tag}"
+
+#: src/components/RichText.tsx:192
+msgid "Click here to open tag menu for #{tag}"
+msgstr "Clicca qui per aprire il menu per #{tag}"
+
+#: src/screens/Onboarding/index.tsx:35
+msgid "Climate"
+msgstr "Clima"
+
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
+msgid "Close"
+msgstr "Chiudi"
+
+#: src/components/Dialog/index.web.tsx:106
+#: src/components/Dialog/index.web.tsx:218
msgid "Close active dialog"
-msgstr "Chiudi il dialogo attivo"
+msgstr "Chiudi la finestra attiva"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:38
+#: src/screens/Login/PasswordUpdatedForm.tsx:38
msgid "Close alert"
msgstr "Chiudi l'avviso"
-#: src/view/com/util/BottomSheetCustomBackdrop.tsx:33
+#: src/view/com/util/BottomSheetCustomBackdrop.tsx:36
msgid "Close bottom drawer"
msgstr "Chiudi il bottom drawer"
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:26
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:36
msgid "Close image"
msgstr "Chiudi l'immagine"
-#: src/view/com/lightbox/Lightbox.web.tsx:112
+#: src/view/com/lightbox/Lightbox.web.tsx:129
msgid "Close image viewer"
msgstr "Chiudi il visualizzatore di immagini"
-#: src/view/shell/index.web.tsx:51
+#: src/view/shell/index.web.tsx:55
msgid "Close navigation footer"
msgstr "Chiudi la navigazione del footer"
-#: src/view/shell/index.web.tsx:52
+#: src/components/Menu/index.tsx:207
+#: src/components/TagMenu/index.tsx:262
+msgid "Close this dialog"
+msgstr "Chiudi la finestra"
+
+#: src/view/shell/index.web.tsx:56
msgid "Closes bottom navigation bar"
msgstr "Chiude la barra di navigazione in basso"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:39
+#: src/screens/Login/PasswordUpdatedForm.tsx:39
msgid "Closes password update alert"
msgstr "Chiude l'avviso di aggiornamento della password"
-#: src/view/com/composer/Composer.tsx:302
+#: src/view/com/composer/Composer.tsx:319
msgid "Closes post composer and discards post draft"
msgstr "Chiude l'editore del post ed elimina la bozza del post"
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:27
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:37
msgid "Closes viewer for header image"
msgstr "Chiude il visualizzatore dell'immagine di intestazione"
@@ -651,11 +861,28 @@ msgstr "Chiude il visualizzatore dell'immagine di intestazione"
msgid "Collapses list of users for a given notification"
msgstr "Comprime l'elenco degli utenti per una determinata notifica"
-#: src/Navigation.tsx:227 src/view/screens/CommunityGuidelines.tsx:32
+#: src/screens/Onboarding/index.tsx:41
+msgid "Comedy"
+msgstr "Commedia"
+
+#: src/screens/Onboarding/index.tsx:27
+msgid "Comics"
+msgstr "Fumetti"
+
+#: src/Navigation.tsx:241
+#: src/view/screens/CommunityGuidelines.tsx:32
msgid "Community Guidelines"
msgstr "Linee guida della community"
-#: src/view/com/composer/Composer.tsx:417
+#: src/screens/Onboarding/StepFinished.tsx:152
+msgid "Complete onboarding and start using your account"
+msgstr "Completa l'incorporazione e inizia a utilizzare il tuo account"
+
+#: src/screens/Signup/index.tsx:154
+msgid "Complete the challenge"
+msgstr "Completa la challenge"
+
+#: src/view/com/composer/Composer.tsx:438
msgid "Compose posts up to {MAX_GRAPHEME_LENGTH} characters in length"
msgstr "Componi un post fino a {MAX_GRAPHEME_LENGTH} caratteri"
@@ -663,75 +890,106 @@ msgstr "Componi un post fino a {MAX_GRAPHEME_LENGTH} caratteri"
msgid "Compose reply"
msgstr "Scrivi la risposta"
-#: src/view/com/modals/Confirm.tsx:75 src/view/com/modals/Confirm.tsx:78
-msgctxt "action"
-msgid "Confirm"
-msgstr "Conferma"
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:81
+msgid "Configure content filtering setting for category: {0}"
+msgstr "Configura l'impostazione del filtro dei contenuti per la categoria:{0}"
+
+#: src/components/moderation/LabelPreference.tsx:81
+msgid "Configure content filtering setting for category: {name}"
+msgstr ""
+
+#: src/components/moderation/LabelPreference.tsx:244
+msgid "Configured in <0>moderation settings0>."
+msgstr "Configurato nelle <0>impostazioni di moderazione0>."
-#: src/components/Prompt.tsx:114 src/view/com/modals/AppealLabel.tsx:98
+#: src/components/Prompt.tsx:153
+#: src/components/Prompt.tsx:156
#: src/view/com/modals/SelfLabel.tsx:154
#: src/view/com/modals/VerifyEmail.tsx:231
#: src/view/com/modals/VerifyEmail.tsx:233
-#: src/view/screens/PreferencesHomeFeed.tsx:308
+#: src/view/screens/PreferencesFollowingFeed.tsx:308
#: src/view/screens/PreferencesThreads.tsx:159
msgid "Confirm"
msgstr "Conferma"
+#~ msgctxt "action"
+#~ msgid "Confirm"
+#~ msgstr "Conferma"
+
#: src/view/com/modals/ChangeEmail.tsx:193
#: src/view/com/modals/ChangeEmail.tsx:195
msgid "Confirm Change"
msgstr "Conferma il cambio"
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:34
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:35
msgid "Confirm content language settings"
msgstr "Conferma le impostazioni della lingua del contenuto"
-#: src/view/com/modals/DeleteAccount.tsx:216
+#: src/view/com/modals/DeleteAccount.tsx:219
msgid "Confirm delete account"
msgstr "Conferma l'eliminazione dell'account"
-#: src/view/com/modals/ContentFilteringSettings.tsx:151
-msgid "Confirm your age to enable adult content."
-msgstr "Conferma la tua età per abilitare i contenuti per adulti."
+#~ msgid "Confirm your age to enable adult content."
+#~ msgstr "Conferma la tua età per abilitare i contenuti per adulti."
+
+#: src/screens/Moderation/index.tsx:301
+msgid "Confirm your age:"
+msgstr "Conferma la tua età:"
+
+#: src/screens/Moderation/index.tsx:292
+msgid "Confirm your birthdate"
+msgstr "Conferma la tua data di nascita"
#: src/view/com/modals/ChangeEmail.tsx:157
-#: src/view/com/modals/DeleteAccount.tsx:178
+#: src/view/com/modals/DeleteAccount.tsx:175
+#: src/view/com/modals/DeleteAccount.tsx:181
#: src/view/com/modals/VerifyEmail.tsx:165
msgid "Confirmation code"
msgstr "Codice di conferma"
-#: src/view/com/modals/Waitlist.tsx:120
-msgid "Confirms signing up {email} to the waitlist"
-msgstr "Conferma l'iscrizione di {email} alla lista d'attesa"
+#~ msgid "Confirms signing up {email} to the waitlist"
+#~ msgstr "Conferma l'iscrizione di {email} alla lista d'attesa"
-#: src/view/com/auth/create/CreateAccount.tsx:175
-#: src/view/com/auth/login/LoginForm.tsx:275
+#: src/screens/Login/LoginForm.tsx:248
msgid "Connecting..."
msgstr "Connessione in corso..."
-#: src/view/com/auth/create/CreateAccount.tsx:195
+#: src/screens/Signup/index.tsx:219
msgid "Contact support"
msgstr "Contatta il supporto"
-#: src/view/screens/Moderation.tsx:81
-msgid "Content filtering"
-msgstr "Filtro dei contenuti"
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "content"
+msgstr "contenuto"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:18
+msgid "Content Blocked"
+msgstr "Contenuto Bloccato"
+
+#~ msgid "Content filtering"
+#~ msgstr "Filtro dei contenuti"
-#: src/view/com/modals/ContentFilteringSettings.tsx:44
-msgid "Content Filtering"
-msgstr "Filtro dei Contenuti"
+#~ msgid "Content Filtering"
+#~ msgstr "Filtro dei Contenuti"
+
+#: src/screens/Moderation/index.tsx:285
+msgid "Content filters"
+msgstr "Filtri dei contenuti"
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74
#: src/view/screens/LanguageSettings.tsx:278
msgid "Content Languages"
msgstr "Lingue dei contenuti"
-#: src/view/com/modals/ModerationDetails.tsx:65
+#: src/components/moderation/ModerationDetailsDialog.tsx:75
+#: src/lib/moderation/useModerationCauseDescription.ts:75
msgid "Content Not Available"
msgstr "Contenuto non disponibile"
-#: src/view/com/modals/ModerationDetails.tsx:33
-#: src/view/com/util/moderation/ScreenHider.tsx:78
+#: src/components/moderation/ModerationDetailsDialog.tsx:46
+#: src/components/moderation/ScreenHider.tsx:99
+#: src/lib/moderation/useGlobalLabelStrings.ts:22
+#: src/lib/moderation/useModerationCauseDescription.ts:38
msgid "Content Warning"
msgstr "Avviso sul Contenuto"
@@ -739,119 +997,175 @@ msgstr "Avviso sul Contenuto"
msgid "Content warnings"
msgstr "Avviso sui contenuti"
+#: src/components/Menu/index.web.tsx:84
+msgid "Context menu backdrop, click to close the menu."
+msgstr "Sfondo del menu contestuale, clicca per chiudere il menu."
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:161
+#: src/screens/Onboarding/StepFollowingFeed.tsx:154
+#: src/screens/Onboarding/StepInterests/index.tsx:252
+#: src/screens/Onboarding/StepModeration/index.tsx:103
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:118
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:96
msgid "Continue"
msgstr "Continua"
-#: src/view/com/modals/AddAppPasswords.tsx:197
-#: src/view/com/modals/InviteCodes.tsx:182
+#: src/components/AccountList.tsx:108
+msgid "Continue as {0} (currently signed in)"
+msgstr ""
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:151
+#: src/screens/Onboarding/StepInterests/index.tsx:249
+#: src/screens/Onboarding/StepModeration/index.tsx:100
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:115
+#: src/screens/Signup/index.tsx:198
+msgid "Continue to next step"
+msgstr "Vai al passaggio successivo"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:158
+msgid "Continue to the next step"
+msgstr "Vai al passaggio successivo"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:199
+msgid "Continue to the next step without following any accounts"
+msgstr "Vai al passaggio successivo senza seguire nessun account"
+
+#: src/screens/Onboarding/index.tsx:44
+msgid "Cooking"
+msgstr "Cucina"
+
+#: src/view/com/modals/AddAppPasswords.tsx:196
+#: src/view/com/modals/InviteCodes.tsx:183
msgid "Copied"
msgstr "Copiato"
-#: src/view/screens/Settings.tsx:243
+#: src/view/screens/Settings/index.tsx:251
msgid "Copied build version to clipboard"
msgstr "Versione di build copiata nella clipboard"
-#: src/view/com/modals/AddAppPasswords.tsx:75
-#: src/view/com/modals/InviteCodes.tsx:152
-#: src/view/com/util/forms/PostDropdownBtn.tsx:110
+#: src/view/com/modals/AddAppPasswords.tsx:77
+#: src/view/com/modals/ChangeHandle.tsx:326
+#: src/view/com/modals/InviteCodes.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:158
msgid "Copied to clipboard"
msgstr "Copiato nel clipboard"
-#: src/view/com/modals/AddAppPasswords.tsx:191
+#: src/view/com/modals/AddAppPasswords.tsx:190
msgid "Copies app password"
msgstr "Copia la password dell'app"
-#: src/view/com/modals/AddAppPasswords.tsx:190
+#: src/view/com/modals/AddAppPasswords.tsx:189
msgid "Copy"
msgstr "Copia"
-#: src/view/screens/ProfileList.tsx:396
+#: src/view/com/modals/ChangeHandle.tsx:480
+msgid "Copy {0}"
+msgstr "Copia {0}"
+
+#: src/view/screens/ProfileList.tsx:388
msgid "Copy link to list"
msgstr "Copia il link alla lista"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:151
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
msgid "Copy link to post"
msgstr "Copia il link al post"
-#: src/view/com/profile/ProfileHeader.tsx:342
-msgid "Copy link to profile"
-msgstr "Copia il link al profilo"
+#~ msgid "Copy link to profile"
+#~ msgstr "Copia il link al profilo"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:137
+#: src/view/com/util/forms/PostDropdownBtn.tsx:220
+#: src/view/com/util/forms/PostDropdownBtn.tsx:222
msgid "Copy post text"
msgstr "Copia il testo del post"
-#: src/Navigation.tsx:232 src/view/screens/CopyrightPolicy.tsx:29
+#: src/Navigation.tsx:246
+#: src/view/screens/CopyrightPolicy.tsx:29
msgid "Copyright Policy"
msgstr "Politica sul diritto d'autore"
-#: src/view/screens/ProfileFeed.tsx:95
+#: src/view/screens/ProfileFeed.tsx:103
msgid "Could not load feed"
msgstr "Feed non caricato"
-#: src/view/screens/ProfileList.tsx:867
+#: src/view/screens/ProfileList.tsx:907
msgid "Could not load list"
msgstr "No si è potuto caricare la lista"
-#: src/view/com/auth/create/Step2.tsx:89
-msgid "Country"
-msgstr "Paese"
+#~ msgid "Country"
+#~ msgstr "Paese"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:62
-#: src/view/com/auth/SplashScreen.tsx:46
-#: src/view/com/auth/SplashScreen.web.tsx:77
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:65
+#: src/view/com/auth/SplashScreen.tsx:75
+#: src/view/com/auth/SplashScreen.web.tsx:104
msgid "Create a new account"
msgstr "Crea un nuovo account"
-#: src/view/screens/Settings.tsx:384
+#: src/view/screens/Settings/index.tsx:403
msgid "Create a new Bluesky account"
msgstr "Crea un nuovo Bluesky account"
-#: src/view/com/auth/create/CreateAccount.tsx:122
+#: src/screens/Signup/index.tsx:129
msgid "Create Account"
msgstr "Crea un account"
-#: src/view/com/modals/AddAppPasswords.tsx:228
+#: src/view/com/modals/AddAppPasswords.tsx:227
msgid "Create App Password"
msgstr "Crea un password per l'app"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:54
-#: src/view/com/auth/SplashScreen.tsx:43
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:55
+#: src/view/com/auth/SplashScreen.tsx:66
+#: src/view/com/auth/SplashScreen.web.tsx:95
msgid "Create new account"
msgstr "Crea un nuovo account"
-#: src/view/screens/AppPasswords.tsx:249
+#: src/components/ReportDialog/SelectReportOptionView.tsx:93
+msgid "Create report for {0}"
+msgstr "Crea un report per {0}"
+
+#: src/view/screens/AppPasswords.tsx:246
msgid "Created {0}"
msgstr "Creato {0}"
-#: src/view/screens/ProfileFeed.tsx:625
-msgid "Created by <0/>"
-msgstr "Creato da <0/>"
+#~ msgid "Created by <0/>"
+#~ msgstr "Creato da <0/>"
-#: src/view/screens/ProfileFeed.tsx:623
-msgid "Created by you"
-msgstr "Creato da te"
+#~ msgid "Created by you"
+#~ msgstr "Creato da te"
-#: src/view/com/composer/Composer.tsx:448
+#: src/view/com/composer/Composer.tsx:469
msgid "Creates a card with a thumbnail. The card links to {url}"
msgstr "Crea una scheda con una miniatura. La scheda si collega a {url}"
-#: src/view/com/modals/ChangeHandle.tsx:389
-#: src/view/com/modals/ServerInput.tsx:102
+#: src/screens/Onboarding/index.tsx:29
+msgid "Culture"
+msgstr "Cultura"
+
+#: src/view/com/auth/server-input/index.tsx:97
+#: src/view/com/auth/server-input/index.tsx:99
+msgid "Custom"
+msgstr "Personalizzato"
+
+#: src/view/com/modals/ChangeHandle.tsx:388
msgid "Custom domain"
msgstr "Dominio personalizzato"
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:107
+#: src/view/screens/Feeds.tsx:692
+msgid "Custom feeds built by the community bring you new experiences and help you find the content you love."
+msgstr "I feed personalizzati creati dalla comunità ti offrono nuove esperienze e ti aiutano a trovare contenuti interessanti."
+
#: src/view/screens/PreferencesExternalEmbeds.tsx:55
msgid "Customize media from external sites."
msgstr "Personalizza i media da i siti esterni."
-#: src/view/screens/Settings.tsx:687
-msgid "Danger Zone"
-msgstr "Zona di Pericolo"
+#~ msgid "Danger Zone"
+#~ msgstr "Zona di Pericolo"
-#: src/view/screens/Settings.tsx:479
+#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:530
msgid "Dark"
msgstr "Scuro"
@@ -859,159 +1173,259 @@ msgstr "Scuro"
msgid "Dark mode"
msgstr "Aspetto scuro"
+#: src/view/screens/Settings/index.tsx:517
+msgid "Dark Theme"
+msgstr "Tema scuro"
+
+#: src/screens/Signup/StepInfo/index.tsx:132
+msgid "Date of birth"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:841
+msgid "Debug Moderation"
+msgstr "Eliminare errori nella Moderazione"
+
#: src/view/screens/Debug.tsx:83
msgid "Debug panel"
msgstr "Pannello per il debug"
-#: src/view/screens/Settings.tsx:694
+#: src/view/com/util/forms/PostDropdownBtn.tsx:319
+#: src/view/screens/AppPasswords.tsx:268
+#: src/view/screens/ProfileList.tsx:613
+msgid "Delete"
+msgstr "Elimina"
+
+#: src/view/screens/Settings/index.tsx:796
msgid "Delete account"
-msgstr "Eliminare l'account"
+msgstr "Elimina l'account"
-#: src/view/com/modals/DeleteAccount.tsx:83
+#: src/view/com/modals/DeleteAccount.tsx:86
msgid "Delete Account"
-msgstr "Eliminare l'Account"
+msgstr "Elimina l'Account"
-#: src/view/screens/AppPasswords.tsx:222 src/view/screens/AppPasswords.tsx:242
+#: src/view/screens/AppPasswords.tsx:239
msgid "Delete app password"
msgstr "Elimina la password dell'app"
-#: src/view/screens/ProfileList.tsx:363 src/view/screens/ProfileList.tsx:423
+#: src/view/screens/AppPasswords.tsx:263
+msgid "Delete app password?"
+msgstr "Eliminare la password dell'app?"
+
+#: src/view/screens/ProfileList.tsx:415
msgid "Delete List"
msgstr "Elimina la lista"
-#: src/view/com/modals/DeleteAccount.tsx:219
+#: src/view/com/modals/DeleteAccount.tsx:222
msgid "Delete my account"
-msgstr "Cancella il mio account"
+msgstr "Cancellare account"
+
+#~ msgid "Delete my account…"
+#~ msgstr "Cancella il mio account…"
-#: src/view/screens/Settings.tsx:706
-msgid "Delete my account…"
-msgstr "Cancella il mio account…"
+#: src/view/screens/Settings/index.tsx:808
+msgid "Delete My Account…"
+msgstr "Cancellare Account…"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:226
+#: src/view/com/util/forms/PostDropdownBtn.tsx:302
+#: src/view/com/util/forms/PostDropdownBtn.tsx:304
msgid "Delete post"
msgstr "Elimina il post"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:230
+#: src/view/screens/ProfileList.tsx:608
+msgid "Delete this list?"
+msgstr "Elimina questa lista?"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:314
msgid "Delete this post?"
-msgstr "Elimina questo post?"
+msgstr "Eliminare questo post?"
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:69
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:64
msgid "Deleted"
msgstr "Eliminato"
-#: src/view/com/post-thread/PostThread.tsx:246
+#: src/view/com/post-thread/PostThread.tsx:305
msgid "Deleted post."
msgstr "Post eliminato."
-#: src/view/com/modals/CreateOrEditList.tsx:237
-#: src/view/com/modals/CreateOrEditList.tsx:253
-#: src/view/com/modals/EditProfile.tsx:198
-#: src/view/com/modals/EditProfile.tsx:210
+#: src/view/com/modals/CreateOrEditList.tsx:301
+#: src/view/com/modals/CreateOrEditList.tsx:322
+#: src/view/com/modals/EditProfile.tsx:199
+#: src/view/com/modals/EditProfile.tsx:211
msgid "Description"
msgstr "Descrizione"
-#: src/view/screens/Settings.tsx:711
-msgid "Developer Tools"
-msgstr "Strumenti per sviluppatori"
+#~ msgid "Dev Server"
+#~ msgstr "Server di sviluppo"
+
+#~ msgid "Developer Tools"
+#~ msgstr "Strumenti per sviluppatori"
-#: src/view/com/composer/Composer.tsx:211
+#: src/view/com/composer/Composer.tsx:218
msgid "Did you want to say anything?"
msgstr "Volevi dire qualcosa?"
-#: src/view/com/composer/Composer.tsx:144
+#: src/view/screens/Settings/index.tsx:523
+msgid "Dim"
+msgstr "Fioco"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:32
+#: src/lib/moderation/useLabelBehaviorDescription.ts:42
+#: src/lib/moderation/useLabelBehaviorDescription.ts:68
+#: src/screens/Moderation/index.tsx:341
+msgid "Disabled"
+msgstr "Disabilitato"
+
+#: src/view/com/composer/Composer.tsx:511
msgid "Discard"
msgstr "Scartare"
-#: src/view/com/composer/Composer.tsx:138
-msgid "Discard draft"
-msgstr "Scarta la bozza"
+#~ msgid "Discard draft"
+#~ msgstr "Scarta la bozza"
+
+#: src/view/com/composer/Composer.tsx:508
+msgid "Discard draft?"
+msgstr "Scartare la bozza?"
-#: src/view/screens/Moderation.tsx:207
+#: src/screens/Moderation/index.tsx:518
+#: src/screens/Moderation/index.tsx:522
msgid "Discourage apps from showing my account to logged-out users"
msgstr "Scoraggia le app dal mostrare il mio account agli utenti disconnessi"
#: src/view/com/posts/FollowingEmptyState.tsx:74
#: src/view/com/posts/FollowingEndOfFeed.tsx:75
msgid "Discover new custom feeds"
-msgstr "Scopri nuovi feed personalizzati"
+msgstr "Scopri nuovi feeds personalizzati"
-#: src/view/screens/Feeds.tsx:409
-msgid "Discover new feeds"
+#~ msgid "Discover new feeds"
+#~ msgstr "Scopri nuovi feeds"
+
+#: src/view/screens/Feeds.tsx:689
+msgid "Discover New Feeds"
msgstr "Scopri nuovi feeds"
-#: src/view/com/modals/EditProfile.tsx:192
+#: src/view/com/modals/EditProfile.tsx:193
msgid "Display name"
msgstr "Nome visualizzato"
-#: src/view/com/modals/EditProfile.tsx:180
+#: src/view/com/modals/EditProfile.tsx:181
msgid "Display Name"
msgstr "Nome Visualizzato"
-#: src/view/com/modals/ChangeHandle.tsx:487
+#: src/view/com/modals/ChangeHandle.tsx:397
+msgid "DNS Panel"
+msgstr "Pannello DNS"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:39
+msgid "Does not include nudity."
+msgstr "Non include nudità."
+
+#: src/screens/Signup/StepHandle.tsx:104
+msgid "Doesn't begin or end with a hyphen"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "Domain Value"
+msgstr "Valore del dominio"
+
+#: src/view/com/modals/ChangeHandle.tsx:488
msgid "Domain verified!"
msgstr "Dominio verificato!"
-#: src/view/com/auth/create/Step1.tsx:114
-msgid "Don't have an invite code?"
-msgstr "Non hai un codice di invito?"
+#~ msgid "Don't have an invite code?"
+#~ msgstr "Non hai un codice di invito?"
+
+#: src/components/dialogs/BirthDateSettings.tsx:119
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/components/forms/DateField/index.tsx:74
+#: src/components/forms/DateField/index.tsx:80
+#: src/view/com/auth/server-input/index.tsx:169
+#: src/view/com/auth/server-input/index.tsx:170
+#: src/view/com/modals/AddAppPasswords.tsx:227
+#: src/view/com/modals/AltImage.tsx:140
+#: src/view/com/modals/crop-image/CropImage.web.tsx:153
+#: src/view/com/modals/InviteCodes.tsx:81
+#: src/view/com/modals/InviteCodes.tsx:124
+#: src/view/com/modals/ListAddRemoveUsers.tsx:142
+#: src/view/screens/PreferencesFollowingFeed.tsx:311
+#: src/view/screens/Settings/ExportCarDialog.tsx:94
+#: src/view/screens/Settings/ExportCarDialog.tsx:96
+msgid "Done"
+msgstr "Fatto"
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86
-#: src/view/com/modals/EditImage.tsx:333
+#: src/view/com/modals/EditImage.tsx:334
#: src/view/com/modals/ListAddRemoveUsers.tsx:144
-#: src/view/com/modals/SelfLabel.tsx:157 src/view/com/modals/Threadgate.tsx:129
+#: src/view/com/modals/SelfLabel.tsx:157
+#: src/view/com/modals/Threadgate.tsx:129
#: src/view/com/modals/Threadgate.tsx:132
-#: src/view/com/modals/UserAddRemoveLists.tsx:79
-#: src/view/com/modals/UserAddRemoveLists.tsx:82
+#: src/view/com/modals/UserAddRemoveLists.tsx:95
+#: src/view/com/modals/UserAddRemoveLists.tsx:98
#: src/view/screens/PreferencesThreads.tsx:162
msgctxt "action"
msgid "Done"
msgstr "Fatto"
-#: src/view/com/modals/AddAppPasswords.tsx:228
-#: src/view/com/modals/AltImage.tsx:115
-#: src/view/com/modals/ContentFilteringSettings.tsx:88
-#: src/view/com/modals/ContentFilteringSettings.tsx:96
-#: src/view/com/modals/crop-image/CropImage.web.tsx:152
-#: src/view/com/modals/InviteCodes.tsx:80
-#: src/view/com/modals/InviteCodes.tsx:123
-#: src/view/com/modals/ListAddRemoveUsers.tsx:142
-#: src/view/screens/PreferencesHomeFeed.tsx:311
-msgid "Done"
-msgstr "Fatto"
-
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:42
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:43
msgid "Done{extraText}"
msgstr "Fatto{extraText}"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:45
-msgid "Double tap to sign in"
-msgstr "Usa il doppio tocco per accedere"
+#: src/view/com/auth/login/ChooseAccountForm.tsx:46
+#~ msgid "Double tap to sign in"
+#~ msgstr "Usa il doppio tocco per accedere"
+
+#~ msgid "Download Bluesky account data (repository)"
+#~ msgstr "Scarica i dati dell'account Bluesky (archivio)"
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:59
+#: src/view/screens/Settings/ExportCarDialog.tsx:63
+msgid "Download CAR file"
+msgstr "Scarica il CAR file"
-#: src/view/com/modals/EditProfile.tsx:185
+#: src/view/com/composer/text-input/TextInput.web.tsx:249
+msgid "Drop to add images"
+msgstr "Trascina e rilascia per aggiungere immagini"
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:120
+msgid "Due to Apple policies, adult content can only be enabled on the web after completing sign up."
+msgstr "A causa delle politiche di Apple, i contenuti per adulti possono essere abilitati sul Web solo dopo aver completato la registrazione."
+
+#: src/view/com/modals/ChangeHandle.tsx:258
+msgid "e.g. alice"
+msgstr "e.g. alice"
+
+#: src/view/com/modals/EditProfile.tsx:186
msgid "e.g. Alice Roberts"
-msgstr "e.g. Anna Rossi"
+msgstr "e.g. Alice Roberts"
+
+#: src/view/com/modals/ChangeHandle.tsx:380
+msgid "e.g. alice.com"
+msgstr "e.g. alice.com"
-#: src/view/com/modals/EditProfile.tsx:203
+#: src/view/com/modals/EditProfile.tsx:204
msgid "e.g. Artist, dog-lover, and avid reader."
msgstr "e.g. Artista, amo i gatti, mi piace leggere."
-#: src/view/com/modals/CreateOrEditList.tsx:223
+#: src/lib/moderation/useGlobalLabelStrings.ts:43
+msgid "E.g. artistic nudes."
+msgstr "E.g. nudi artistici."
+
+#: src/view/com/modals/CreateOrEditList.tsx:284
msgid "e.g. Great Posters"
msgstr "e.g. Gli utenti più seguiti"
-#: src/view/com/modals/CreateOrEditList.tsx:224
+#: src/view/com/modals/CreateOrEditList.tsx:285
msgid "e.g. Spammers"
msgstr "e.g. Spammers"
-#: src/view/com/modals/CreateOrEditList.tsx:244
+#: src/view/com/modals/CreateOrEditList.tsx:313
msgid "e.g. The posters who never miss."
msgstr "e.g. Utenti più prolifici."
-#: src/view/com/modals/CreateOrEditList.tsx:245
+#: src/view/com/modals/CreateOrEditList.tsx:314
msgid "e.g. Users that repeatedly reply with ads."
msgstr "e.g. Utenti che rispondono ripetutamente con annunci."
-#: src/view/com/modals/InviteCodes.tsx:96
+#: src/view/com/modals/InviteCodes.tsx:97
msgid "Each code works once. You'll receive more invite codes periodically."
msgstr "Ogni codice funziona per un solo uso. Riceverai periodicamente più codici di invito."
@@ -1020,62 +1434,71 @@ msgctxt "action"
msgid "Edit"
msgstr "Modifica"
+#: src/view/com/util/UserAvatar.tsx:299
+#: src/view/com/util/UserBanner.tsx:85
+msgid "Edit avatar"
+msgstr "Modifica l'avatar"
+
#: src/view/com/composer/photos/Gallery.tsx:144
-#: src/view/com/modals/EditImage.tsx:207
+#: src/view/com/modals/EditImage.tsx:208
msgid "Edit image"
msgstr "Modifica l'immagine"
-#: src/view/screens/ProfileList.tsx:411
+#: src/view/screens/ProfileList.tsx:403
msgid "Edit list details"
msgstr "Modifica i dettagli della lista"
-#: src/view/com/modals/CreateOrEditList.tsx:192
+#: src/view/com/modals/CreateOrEditList.tsx:251
msgid "Edit Moderation List"
msgstr "Modifica l'elenco di moderazione"
-#: src/Navigation.tsx:242 src/view/screens/Feeds.tsx:371
+#: src/Navigation.tsx:256
+#: src/view/screens/Feeds.tsx:434
#: src/view/screens/SavedFeeds.tsx:84
msgid "Edit My Feeds"
msgstr "Modifica i miei feeds"
-#: src/view/com/modals/EditProfile.tsx:152
+#: src/view/com/modals/EditProfile.tsx:153
msgid "Edit my profile"
msgstr "Modifica il mio profilo"
-#: src/view/com/profile/ProfileHeader.tsx:457
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:171
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:168
msgid "Edit profile"
msgstr "Modifica il profilo"
-#: src/view/com/profile/ProfileHeader.tsx:462
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:174
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:171
msgid "Edit Profile"
msgstr "Modifica il Profilo"
-#: src/view/screens/Feeds.tsx:334
+#: src/view/com/home/HomeHeaderLayout.web.tsx:62
+#: src/view/screens/Feeds.tsx:355
msgid "Edit Saved Feeds"
msgstr "Modifica i feeds memorizzati"
-#: src/view/com/modals/CreateOrEditList.tsx:187
+#: src/view/com/modals/CreateOrEditList.tsx:246
msgid "Edit User List"
msgstr "Modifica l'elenco degli utenti"
-#: src/view/com/modals/EditProfile.tsx:193
+#: src/view/com/modals/EditProfile.tsx:194
msgid "Edit your display name"
msgstr "Modifica il tuo nome visualizzato"
-#: src/view/com/modals/EditProfile.tsx:211
+#: src/view/com/modals/EditProfile.tsx:212
msgid "Edit your profile description"
msgstr "Modifica la descrizione del tuo profilo"
-#: src/view/com/auth/create/Step1.tsx:143
-#: src/view/com/auth/create/Step2.tsx:192
-#: src/view/com/auth/create/Step2.tsx:266
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:152
-#: src/view/com/modals/ChangeEmail.tsx:141 src/view/com/modals/Waitlist.tsx:88
+#: src/screens/Onboarding/index.tsx:34
+msgid "Education"
+msgstr "Formazione scolastica"
+
+#: src/screens/Signup/StepInfo/index.tsx:80
+#: src/view/com/modals/ChangeEmail.tsx:141
msgid "Email"
msgstr "Email"
-#: src/view/com/auth/create/Step1.tsx:134
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:143
+#: src/screens/Login/ForgotPasswordForm.tsx:99
msgid "Email address"
msgstr "Indirizzo email"
@@ -1092,60 +1515,97 @@ msgstr "Email Aggiornata"
msgid "Email verified"
msgstr "Email verificata"
-#: src/view/screens/Settings.tsx:312
+#: src/view/screens/Settings/index.tsx:331
msgid "Email:"
msgstr "Email:"
-#: src/view/com/modals/EmbedConsent.tsx:113
+#: src/components/dialogs/EmbedConsent.tsx:101
msgid "Enable {0} only"
msgstr "Attiva {0} solo"
-#: src/view/com/modals/ContentFilteringSettings.tsx:162
+#: src/screens/Moderation/index.tsx:329
+msgid "Enable adult content"
+msgstr "Attiva il contenuto per adulti"
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:94
msgid "Enable Adult Content"
msgstr "Attiva Contenuto per Adulti"
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:79
+msgid "Enable adult content in your feeds"
+msgstr "Abilita i contenuti per adulti nei tuoi feeds"
+
+#: src/components/dialogs/EmbedConsent.tsx:82
+#: src/components/dialogs/EmbedConsent.tsx:89
+msgid "Enable external media"
+msgstr ""
+
#: src/view/com/modals/EmbedConsent.tsx:97
-msgid "Enable External Media"
-msgstr "Attiva Media Esterna"
+#~ msgid "Enable External Media"
+#~ msgstr "Attiva Media Esterna"
#: src/view/screens/PreferencesExternalEmbeds.tsx:75
msgid "Enable media players for"
msgstr "Attiva i lettori multimediali per"
-#: src/view/screens/PreferencesHomeFeed.tsx:147
+#: src/view/screens/PreferencesFollowingFeed.tsx:147
msgid "Enable this setting to only see replies between people you follow."
msgstr "Abilita questa impostazione per vedere solo le risposte delle persone che segui."
-#: src/view/screens/Profile.tsx:427
+#: src/components/dialogs/EmbedConsent.tsx:94
+msgid "Enable this source only"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:339
+msgid "Enabled"
+msgstr "Abilitato"
+
+#: src/screens/Profile/Sections/Feed.tsx:84
msgid "End of feed"
msgstr "Fine del feed"
-#: src/view/com/modals/AddAppPasswords.tsx:165
+#: src/view/com/modals/AddAppPasswords.tsx:167
msgid "Enter a name for this App Password"
msgstr "Inserisci un nome per questa password dell'app"
+#: src/screens/Login/SetNewPasswordForm.tsx:139
+msgid "Enter a password"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:99
+#: src/components/dialogs/MutedWords.tsx:100
+msgid "Enter a word or tag"
+msgstr "Inserisci una parola o tag"
+
#: src/view/com/modals/VerifyEmail.tsx:105
msgid "Enter Confirmation Code"
msgstr "Inserire il codice di conferma"
-#: src/view/com/modals/ChangeHandle.tsx:371
+#~ msgid "Enter the address of your provider:"
+#~ msgstr "Inserisci l'indirizzo del tuo provider:"
+
+#: src/view/com/modals/ChangePassword.tsx:153
+msgid "Enter the code you received to change your password."
+msgstr "Inserisci il codice che hai ricevuto per modificare la tua password."
+
+#: src/view/com/modals/ChangeHandle.tsx:370
msgid "Enter the domain you want to use"
msgstr "Inserisci il dominio che vuoi utilizzare"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:103
+#: src/screens/Login/ForgotPasswordForm.tsx:119
msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password."
msgstr "Inserisci l'e-mail che hai utilizzato per creare il tuo account. Ti invieremo un \"codice di reset\" in modo che tu possa impostare una nuova password."
-#: src/view/com/auth/create/Step1.tsx:195
-#: src/view/com/modals/BirthDateSettings.tsx:74
+#: src/components/dialogs/BirthDateSettings.tsx:108
msgid "Enter your birth date"
msgstr "Inserisci la tua data di nascita"
-#: src/view/com/modals/Waitlist.tsx:78
-msgid "Enter your email"
-msgstr "Inserisci la tua email"
+#~ msgid "Enter your email"
+#~ msgstr "Inserisci la tua email"
-#: src/view/com/auth/create/Step1.tsx:139
+#: src/screens/Login/ForgotPasswordForm.tsx:105
+#: src/screens/Signup/StepInfo/index.tsx:91
msgid "Enter your email address"
msgstr "Inserisci il tuo indirizzo email"
@@ -1157,15 +1617,18 @@ msgstr "Inserisci la tua nuova email qui sopra"
msgid "Enter your new email address below."
msgstr "Inserisci il tuo nuovo indirizzo email qui sotto."
-#: src/view/com/auth/create/Step2.tsx:186
-msgid "Enter your phone number"
-msgstr "Inserisci il tuo numero di telefono"
+#~ msgid "Enter your phone number"
+#~ msgstr "Inserisci il tuo numero di telefono"
-#: src/view/com/auth/login/Login.tsx:99
+#: src/screens/Login/index.tsx:101
msgid "Enter your username and password"
msgstr "Inserisci il tuo nome di utente e la tua password"
-#: src/view/screens/Search/Search.tsx:107
+#: src/screens/Signup/StepCaptcha/index.tsx:49
+msgid "Error receiving captcha response."
+msgstr "Errore nella risposta del captcha."
+
+#: src/view/screens/Search/Search.tsx:111
msgid "Error:"
msgstr "Errore:"
@@ -1173,24 +1636,35 @@ msgstr "Errore:"
msgid "Everybody"
msgstr "Tutti"
-#: src/view/com/modals/ChangeHandle.tsx:150
+#: src/lib/moderation/useReportOptions.ts:66
+msgid "Excessive mentions or replies"
+msgstr "Menzioni o risposte eccessive"
+
+#: src/view/com/modals/DeleteAccount.tsx:230
+msgid "Exits account deletion process"
+msgstr "Uscita dall'eliminazione dell'account"
+
+#: src/view/com/modals/ChangeHandle.tsx:151
msgid "Exits handle change process"
msgstr "Uscita dal processo di modifica"
-#: src/view/com/lightbox/Lightbox.web.tsx:113
+#: src/view/com/modals/crop-image/CropImage.web.tsx:136
+msgid "Exits image cropping process"
+msgstr "Uscita dal processo di ritaglio dell'immagine"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:130
msgid "Exits image view"
msgstr "Uscita dalla visualizzazione dell'immagine"
#: src/view/com/modals/ListAddRemoveUsers.tsx:88
-#: src/view/shell/desktop/Search.tsx:235
+#: src/view/shell/desktop/Search.tsx:236
msgid "Exits inputting search query"
msgstr "Uscita dall'inserzione della domanda di ricerca"
-#: src/view/com/modals/Waitlist.tsx:138
-msgid "Exits signing up for waitlist with {email}"
-msgstr "Uscita dall'iscrizione alla lista d'attesa con {email}"
+#~ msgid "Exits signing up for waitlist with {email}"
+#~ msgstr "Uscita dall'iscrizione alla lista d'attesa con {email}"
-#: src/view/com/lightbox/Lightbox.web.tsx:156
+#: src/view/com/lightbox/Lightbox.web.tsx:183
msgid "Expand alt text"
msgstr "Ampliare il testo alternativo"
@@ -1199,34 +1673,53 @@ msgstr "Ampliare il testo alternativo"
msgid "Expand or collapse the full post you are replying to"
msgstr "Espandi o comprimi l'intero post a cui stai rispondendo"
-#: src/view/com/modals/EmbedConsent.tsx:64
+#: src/lib/moderation/useGlobalLabelStrings.ts:47
+msgid "Explicit or potentially disturbing media."
+msgstr "Media espliciti o potenzialmente inquietanti."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:35
+msgid "Explicit sexual images."
+msgstr "Immagini sessuali esplicite."
+
+#: src/view/screens/Settings/index.tsx:777
+msgid "Export my data"
+msgstr "Esporta i miei dati"
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:44
+#: src/view/screens/Settings/index.tsx:788
+msgid "Export My Data"
+msgstr "Esporta i miei dati"
+
+#: src/components/dialogs/EmbedConsent.tsx:55
+#: src/components/dialogs/EmbedConsent.tsx:59
msgid "External Media"
msgstr "Media esterni"
-#: src/view/com/modals/EmbedConsent.tsx:75
+#: src/components/dialogs/EmbedConsent.tsx:71
#: src/view/screens/PreferencesExternalEmbeds.tsx:66
msgid "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."
msgstr "I multimediali esterni possono consentire ai siti web di raccogliere informazioni su di te e sul tuo dispositivo. Nessuna informazione viene inviata o richiesta finché non si preme il pulsante \"Riproduci\"."
-#: src/Navigation.tsx:258 src/view/screens/PreferencesExternalEmbeds.tsx:52
-#: src/view/screens/Settings.tsx:623
+#: src/Navigation.tsx:275
+#: src/view/screens/PreferencesExternalEmbeds.tsx:52
+#: src/view/screens/Settings/index.tsx:677
msgid "External Media Preferences"
msgstr "Preferenze multimediali esterni"
-#: src/view/screens/Settings.tsx:614
+#: src/view/screens/Settings/index.tsx:668
msgid "External media settings"
msgstr "Impostazioni multimediali esterni"
-#: src/view/com/modals/AddAppPasswords.tsx:114
-#: src/view/com/modals/AddAppPasswords.tsx:118
+#: src/view/com/modals/AddAppPasswords.tsx:116
+#: src/view/com/modals/AddAppPasswords.tsx:120
msgid "Failed to create app password."
msgstr "Impossibile creare la password dell'app."
-#: src/view/com/modals/CreateOrEditList.tsx:148
+#: src/view/com/modals/CreateOrEditList.tsx:207
msgid "Failed to create the list. Check your internet connection and try again."
msgstr "Impossibile creare l'elenco. Controlla la connessione Internet e riprova."
-#: src/view/com/util/forms/PostDropdownBtn.tsx:86
+#: src/view/com/util/forms/PostDropdownBtn.tsx:125
msgid "Failed to delete post, please try again"
msgstr "Non possiamo eliminare il post, riprova di nuovo"
@@ -1235,29 +1728,37 @@ msgstr "Non possiamo eliminare il post, riprova di nuovo"
msgid "Failed to load recommended feeds"
msgstr "Non possiamo caricare i feed consigliati"
-#: src/Navigation.tsx:192
+#: src/view/com/lightbox/Lightbox.tsx:83
+msgid "Failed to save image: {0}"
+msgstr "Non è possibile salvare l'immagine: {0}"
+
+#: src/Navigation.tsx:196
msgid "Feed"
msgstr "Feed"
-#: src/view/com/feeds/FeedSourceCard.tsx:229
+#: src/view/com/feeds/FeedSourceCard.tsx:218
msgid "Feed by {0}"
-msgstr "Feed realizzato da {0}"
+msgstr "Feed fatto da {0}"
-#: src/view/screens/Feeds.tsx:560
+#: src/view/screens/Feeds.tsx:605
msgid "Feed offline"
msgstr "Feed offline"
-#: src/view/com/feeds/FeedPage.tsx:143
-msgid "Feed Preferences"
-msgstr "Preferenze del feed"
+#~ msgid "Feed Preferences"
+#~ msgstr "Preferenze del feed"
-#: src/view/shell/desktop/RightNav.tsx:73 src/view/shell/Drawer.tsx:314
+#: src/view/shell/desktop/RightNav.tsx:61
+#: src/view/shell/Drawer.tsx:314
msgid "Feedback"
msgstr "Commenti"
-#: src/Navigation.tsx:440 src/view/screens/Feeds.tsx:479
-#: src/view/screens/Profile.tsx:165 src/view/shell/bottom-bar/BottomBar.tsx:181
-#: src/view/shell/desktop/LeftNav.tsx:342 src/view/shell/Drawer.tsx:479
+#: src/Navigation.tsx:464
+#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:524
+#: src/view/screens/Profile.tsx:194
+#: src/view/shell/bottom-bar/BottomBar.tsx:191
+#: src/view/shell/desktop/LeftNav.tsx:346
+#: src/view/shell/Drawer.tsx:479
#: src/view/shell/Drawer.tsx:480
msgid "Feeds"
msgstr "Feeds"
@@ -1270,58 +1771,109 @@ msgstr "I feed vengono creati dagli utenti per curare i contenuti. Scegli alcuni
msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information."
msgstr "I feed sono algoritmi personalizzati che gli utenti creano con un minimo di esperienza nella codifica. Vedi <0/> per ulteriori informazioni."
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:80
+msgid "Feeds can be topical as well!"
+msgstr "I feeds possono anche avere tematiche!"
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "File Contents"
+msgstr "Archivia i contenuti"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:66
+msgid "Filter from feeds"
+msgstr "Filtra dai feed"
+
+#: src/screens/Onboarding/StepFinished.tsx:155
+msgid "Finalizing"
+msgstr "Finalizzando"
+
#: src/view/com/posts/CustomFeedEmptyState.tsx:47
#: src/view/com/posts/FollowingEmptyState.tsx:57
#: src/view/com/posts/FollowingEndOfFeed.tsx:58
msgid "Find accounts to follow"
msgstr "Trova account da seguire"
-#: src/view/screens/Search/Search.tsx:429
+#: src/view/screens/Search/Search.tsx:442
msgid "Find users on Bluesky"
msgstr "Trova utenti su Bluesky"
-#: src/view/screens/Search/Search.tsx:427
+#: src/view/screens/Search/Search.tsx:440
msgid "Find users with the search tool on the right"
msgstr "Trova gli utenti con lo strumento di ricerca sulla destra"
-#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:155
msgid "Finding similar accounts..."
msgstr "Trovare account simili…"
-#: src/view/screens/PreferencesHomeFeed.tsx:111
-msgid "Fine-tune the content you see on your home screen."
-msgstr "Ottimizza il contenuto che vedi nella pagina d'inizio."
+#: src/view/screens/PreferencesFollowingFeed.tsx:111
+msgid "Fine-tune the content you see on your Following feed."
+msgstr "Ottimizza il contenuto che vedi nel tuo Following feed."
+
+#~ msgid "Fine-tune the content you see on your home screen."
+#~ msgstr "Ottimizza il contenuto che vedi nella pagina d'inizio."
#: src/view/screens/PreferencesThreads.tsx:60
msgid "Fine-tune the discussion threads."
msgstr "Ottimizza i la visualizzazione delle discussioni."
-#: src/view/com/modals/EditImage.tsx:115
+#: src/screens/Onboarding/index.tsx:38
+msgid "Fitness"
+msgstr "Fitness"
+
+#: src/screens/Onboarding/StepFinished.tsx:135
+msgid "Flexible"
+msgstr "Flessibile"
+
+#: src/view/com/modals/EditImage.tsx:116
msgid "Flip horizontal"
msgstr "Gira in orizzontale"
-#: src/view/com/modals/EditImage.tsx:120 src/view/com/modals/EditImage.tsx:287
+#: src/view/com/modals/EditImage.tsx:121
+#: src/view/com/modals/EditImage.tsx:288
msgid "Flip vertically"
msgstr "Gira in verticale"
-#: src/view/com/profile/FollowButton.tsx:64
-msgctxt "action"
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:189
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:236
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:146
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
msgid "Follow"
msgstr "Segui"
-#: src/view/com/profile/ProfileHeader.tsx:552
+#: src/view/com/profile/FollowButton.tsx:69
+msgctxt "action"
msgid "Follow"
msgstr "Segui"
-#: src/view/com/profile/ProfileHeader.tsx:543
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:58
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:221
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:128
msgid "Follow {0}"
msgstr "Segui {0}"
+#: src/view/com/profile/ProfileMenu.tsx:242
+#: src/view/com/profile/ProfileMenu.tsx:253
+msgid "Follow Account"
+msgstr "Segui l'Account"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:187
+msgid "Follow All"
+msgstr "Segui tutti"
+
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:144
+msgid "Follow Back"
+msgstr ""
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:182
+msgid "Follow selected accounts and continue to the next step"
+msgstr "Segui gli account selezionati e vai al passaggio successivo"
+
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:64
msgid "Follow some users to get started. We can recommend you more users based on who you find interesting."
msgstr "Segui alcuni utenti per iniziare. Possiamo consigliarti più utenti in base a chi trovi interessante."
-#: src/view/com/profile/ProfileCard.tsx:194
+#: src/view/com/profile/ProfileCard.tsx:216
msgid "Followed by {0}"
msgstr "Seguito da {0}"
@@ -1329,28 +1881,46 @@ msgstr "Seguito da {0}"
msgid "Followed users"
msgstr "Utenti seguiti"
-#: src/view/screens/PreferencesHomeFeed.tsx:154
+#: src/view/screens/PreferencesFollowingFeed.tsx:154
msgid "Followed users only"
msgstr "Solo utenti seguiti"
-#: src/view/com/notifications/FeedItem.tsx:166
+#: src/view/com/notifications/FeedItem.tsx:170
msgid "followed you"
msgstr "ti segue"
+#: src/view/com/profile/ProfileFollowers.tsx:104
#: src/view/screens/ProfileFollowers.tsx:25
msgid "Followers"
-msgstr "Seguiti"
+msgstr "Followers"
+
+#~ msgid "following"
+#~ msgstr "following"
-#: src/view/com/profile/ProfileHeader.tsx:534
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:234
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:149
+#: src/view/com/profile/ProfileFollows.tsx:104
#: src/view/screens/ProfileFollows.tsx:25
msgid "Following"
-msgstr "Seguiti"
+msgstr "Following"
-#: src/view/com/profile/ProfileHeader.tsx:196
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:93
msgid "Following {0}"
msgstr "Seguiti {0}"
-#: src/view/com/profile/ProfileHeader.tsx:585
+#: src/view/screens/Settings/index.tsx:553
+msgid "Following feed preferences"
+msgstr "Preferenze del Following feed"
+
+#: src/Navigation.tsx:262
+#: src/view/com/home/HomeHeaderLayout.web.tsx:50
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:84
+#: src/view/screens/PreferencesFollowingFeed.tsx:104
+#: src/view/screens/Settings/index.tsx:562
+msgid "Following Feed Preferences"
+msgstr "Preferenze del Following Feed"
+
+#: src/screens/Profile/Header/Handle.tsx:24
msgid "Follows you"
msgstr "Ti segue"
@@ -1358,27 +1928,49 @@ msgstr "Ti segue"
msgid "Follows You"
msgstr "Ti Segue"
-#: src/view/com/modals/DeleteAccount.tsx:107
+#: src/screens/Onboarding/index.tsx:43
+msgid "Food"
+msgstr "Gastronomia"
+
+#: src/view/com/modals/DeleteAccount.tsx:110
msgid "For security reasons, we'll need to send a confirmation code to your email address."
msgstr "Per motivi di sicurezza, invieremo un codice di conferma al tuo indirizzo email."
-#: src/view/com/modals/AddAppPasswords.tsx:211
+#: src/view/com/modals/AddAppPasswords.tsx:210
msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one."
msgstr "Per motivi di sicurezza non potrai visualizzarlo nuovamente. Se perdi questa password, dovrai generarne una nuova."
-#: src/view/com/auth/login/LoginForm.tsx:238
-msgid "Forgot"
-msgstr "Dimenticato"
+#: src/view/com/auth/login/LoginForm.tsx:244
+#~ msgid "Forgot"
+#~ msgstr "Dimenticato"
-#: src/view/com/auth/login/LoginForm.tsx:235
-msgid "Forgot password"
-msgstr "Ho dimenticato il password"
+#: src/view/com/auth/login/LoginForm.tsx:241
+#~ msgid "Forgot password"
+#~ msgstr "Ho dimenticato il password"
-#: src/view/com/auth/login/Login.tsx:127 src/view/com/auth/login/Login.tsx:143
+#: src/screens/Login/index.tsx:129
+#: src/screens/Login/index.tsx:144
msgid "Forgot Password"
msgstr "Ho dimenticato il Password"
-#: src/view/com/posts/FeedItem.tsx:188
+#: src/screens/Login/LoginForm.tsx:201
+msgid "Forgot password?"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:212
+msgid "Forgot?"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:52
+msgid "Frequently Posts Unwanted Content"
+msgstr "Pubblica spesso contenuti indesiderati"
+
+#: src/screens/Hashtag.tsx:109
+#: src/screens/Hashtag.tsx:149
+msgid "From @{sanitizedAuthor}"
+msgstr "Di @{sanitizedAuthor}"
+
+#: src/view/com/posts/FeedItem.tsx:179
msgctxt "from-feed"
msgid "From <0/>"
msgstr "Da <0/>"
@@ -1392,65 +1984,130 @@ msgstr "Galleria"
msgid "Get Started"
msgstr "Inizia"
-#: src/view/com/auth/LoggedOut.tsx:81 src/view/com/auth/LoggedOut.tsx:82
-#: src/view/com/util/moderation/ScreenHider.tsx:123
-#: src/view/shell/desktop/LeftNav.tsx:104
+#: src/lib/moderation/useReportOptions.ts:37
+msgid "Glaring violations of law or terms of service"
+msgstr "Evidenti violazioni della legge o dei termini di servizio"
+
+#: src/components/moderation/ScreenHider.tsx:151
+#: src/components/moderation/ScreenHider.tsx:160
+#: src/view/com/auth/LoggedOut.tsx:82
+#: src/view/com/auth/LoggedOut.tsx:83
+#: src/view/screens/NotFound.tsx:55
+#: src/view/screens/ProfileFeed.tsx:112
+#: src/view/screens/ProfileList.tsx:916
+#: src/view/shell/desktop/LeftNav.tsx:108
msgid "Go back"
msgstr "Torna indietro"
-#: src/view/screens/ProfileFeed.tsx:104 src/view/screens/ProfileFeed.tsx:109
-#: src/view/screens/ProfileList.tsx:876 src/view/screens/ProfileList.tsx:881
+#: src/components/Error.tsx:91
+#: src/screens/Profile/ErrorState.tsx:62
+#: src/screens/Profile/ErrorState.tsx:66
+#: src/view/screens/NotFound.tsx:54
+#: src/view/screens/ProfileFeed.tsx:117
+#: src/view/screens/ProfileList.tsx:921
msgid "Go Back"
msgstr "Torna Indietro"
-#: src/view/screens/Search/Search.tsx:640 src/view/shell/desktop/Search.tsx:262
+#: src/components/ReportDialog/SelectReportOptionView.tsx:73
+#: src/components/ReportDialog/SubmitView.tsx:104
+#: src/screens/Onboarding/Layout.tsx:102
+#: src/screens/Onboarding/Layout.tsx:191
+#: src/screens/Signup/index.tsx:173
+msgid "Go back to previous step"
+msgstr "Torna al passaggio precedente"
+
+#: src/view/screens/NotFound.tsx:55
+msgid "Go home"
+msgstr "Torna Home"
+
+#: src/view/screens/NotFound.tsx:54
+msgid "Go Home"
+msgstr "Torna Home"
+
+#: src/view/screens/Search/Search.tsx:749
+#: src/view/shell/desktop/Search.tsx:263
msgid "Go to @{queryMaybeHandle}"
msgstr "Vai a @{queryMaybeHandle}"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:185
-#: src/view/com/auth/login/LoginForm.tsx:285
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:165
+#: src/screens/Login/ForgotPasswordForm.tsx:172
+#: src/view/com/modals/ChangePassword.tsx:167
msgid "Go to next"
msgstr "Seguente"
-#: src/view/com/modals/ChangeHandle.tsx:265
+#: src/lib/moderation/useGlobalLabelStrings.ts:46
+msgid "Graphic Media"
+msgstr "Media grafici"
+
+#: src/view/com/modals/ChangeHandle.tsx:266
msgid "Handle"
msgstr "Nome Utente"
-#: src/view/com/auth/create/CreateAccount.tsx:190
+#: src/lib/moderation/useReportOptions.ts:32
+msgid "Harassment, trolling, or intolerance"
+msgstr "Molestie, trolling o intolleranza"
+
+#: src/Navigation.tsx:282
+msgid "Hashtag"
+msgstr "Hashtag"
+
+#: src/components/RichText.tsx:191
+msgid "Hashtag: #{tag}"
+msgstr "Hashtag: #{tag}"
+
+#: src/screens/Signup/index.tsx:217
msgid "Having trouble?"
msgstr "Ci sono problemi?"
-#: src/view/shell/desktop/RightNav.tsx:102 src/view/shell/Drawer.tsx:324
+#: src/view/shell/desktop/RightNav.tsx:90
+#: src/view/shell/Drawer.tsx:324
msgid "Help"
msgstr "Aiuto"
-#: src/view/com/modals/AddAppPasswords.tsx:152
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:140
+msgid "Here are some accounts for you to follow"
+msgstr "Ecco alcuni account da seguire"
+
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:89
+msgid "Here are some popular topical feeds. You can choose to follow as many as you like."
+msgstr "Ecco alcuni feed più visitati. Puoi seguire quanti ne vuoi."
+
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:84
+msgid "Here are some topical feeds based on your interests: {interestsText}. You can choose to follow as many as you like."
+msgstr "Ecco alcuni feed di attualità scelti in base ai tuoi interessi: {interestsText}. Puoi seguire quanti ne vuoi."
+
+#: src/view/com/modals/AddAppPasswords.tsx:154
msgid "Here is your app password."
msgstr "Ecco la password dell'app."
-#: src/view/com/modals/ContentFilteringSettings.tsx:219
-#: src/view/com/notifications/FeedItem.tsx:329
-msgctxt "action"
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:134
+#: src/components/moderation/PostHider.tsx:107
+#: src/lib/moderation/useLabelBehaviorDescription.ts:15
+#: src/lib/moderation/useLabelBehaviorDescription.ts:20
+#: src/lib/moderation/useLabelBehaviorDescription.ts:25
+#: src/lib/moderation/useLabelBehaviorDescription.ts:30
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:52
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:76
+#: src/view/com/util/forms/PostDropdownBtn.tsx:328
msgid "Hide"
msgstr "Nascondi"
-#: src/view/com/modals/ContentFilteringSettings.tsx:246
-#: src/view/com/util/moderation/ContentHider.tsx:105
-#: src/view/com/util/moderation/PostHider.tsx:108
+#: src/view/com/notifications/FeedItem.tsx:329
+msgctxt "action"
msgid "Hide"
msgstr "Nascondi"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:185
+#: src/view/com/util/forms/PostDropdownBtn.tsx:276
+#: src/view/com/util/forms/PostDropdownBtn.tsx:278
msgid "Hide post"
msgstr "Nascondi il messaggio"
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:67
+#: src/components/moderation/PostHider.tsx:64
msgid "Hide the content"
msgstr "Nascondere il contenuto"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:189
+#: src/view/com/util/forms/PostDropdownBtn.tsx:325
msgid "Hide this post?"
msgstr "Vuoi nascondere questo post?"
@@ -1458,9 +2115,8 @@ msgstr "Vuoi nascondere questo post?"
msgid "Hide user list"
msgstr "Nascondi elenco utenti"
-#: src/view/com/profile/ProfileHeader.tsx:526
-msgid "Hides posts from {0} in your feed"
-msgstr "Nasconde i post di {0} nel tuo feed"
+#~ msgid "Hides posts from {0} in your feed"
+#~ msgstr "Nasconde i post di {0} nel tuo feed"
#: src/view/com/posts/FeedErrorMessage.tsx:111
msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue."
@@ -1482,22 +2138,39 @@ msgstr "Il server del feed ha dato una risposta negativa. Informa il proprietari
msgid "Hmm, we're having trouble finding this feed. It may have been deleted."
msgstr "Stiamo riscontrando problemi nel trovare questo feed. Potrebbe essere stato cancellato."
-#: src/Navigation.tsx:430 src/view/shell/bottom-bar/BottomBar.tsx:137
-#: src/view/shell/desktop/LeftNav.tsx:306 src/view/shell/Drawer.tsx:401
+#: src/screens/Moderation/index.tsx:59
+msgid "Hmmmm, it seems we're having trouble loading this data. See below for more details. If this issue persists, please contact us."
+msgstr "Stiamo riscontrando problemi nel trovare questi dati. Guarda PI[U giù per trovare più dettagli. Se il problema continua mettiti in contatto."
+
+#: src/screens/Profile/ErrorState.tsx:31
+msgid "Hmmmm, we couldn't load that moderation service."
+msgstr "Non siamo riusciti a caricare il servizio di moderazione."
+
+#: src/Navigation.tsx:454
+#: src/view/shell/bottom-bar/BottomBar.tsx:147
+#: src/view/shell/desktop/LeftNav.tsx:310
+#: src/view/shell/Drawer.tsx:401
#: src/view/shell/Drawer.tsx:402
msgid "Home"
msgstr "Home"
-#: src/Navigation.tsx:247 src/view/com/pager/FeedsTabBarMobile.tsx:117
-#: src/view/screens/PreferencesHomeFeed.tsx:104
-#: src/view/screens/Settings.tsx:509
-msgid "Home Feed Preferences"
-msgstr "Preferenze per i feed per la pagina d'inizio"
+#~ msgid "Home Feed Preferences"
+#~ msgstr "Preferenze per i feed per la pagina d'inizio"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:116
+#: src/view/com/modals/ChangeHandle.tsx:420
+msgid "Host:"
+msgstr "Hosting:"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:89
+#: src/screens/Login/LoginForm.tsx:134
+#: src/screens/Signup/StepInfo/index.tsx:40
+#: src/view/com/modals/ChangeHandle.tsx:281
msgid "Hosting provider"
msgstr "Servizio di hosting"
+#~ msgid "Hosting provider address"
+#~ msgstr "Indirizzo del fornitore di hosting"
+
#: src/view/com/modals/InAppBrowserConsent.tsx:44
msgid "How should we open this link?"
msgstr "Come dovremmo aprire questo link?"
@@ -1510,11 +2183,11 @@ msgstr "Ho un codice"
msgid "I have a confirmation code"
msgstr "Ho un codice di conferma"
-#: src/view/com/modals/ChangeHandle.tsx:283
+#: src/view/com/modals/ChangeHandle.tsx:284
msgid "I have my own domain"
msgstr "Ho il mio dominio"
-#: src/view/com/lightbox/Lightbox.web.tsx:158
+#: src/view/com/lightbox/Lightbox.web.tsx:185
msgid "If alt text is long, toggles alt text expanded state"
msgstr "Se il testo alternativo è lungo, attiva/disattiva lo stato del testo alternativo"
@@ -1522,311 +2195,427 @@ msgstr "Se il testo alternativo è lungo, attiva/disattiva lo stato del testo al
msgid "If none are selected, suitable for all ages."
msgstr "Se niente è selezionato, adatto a tutte le età."
-#: src/view/com/util/images/Gallery.tsx:37
+#: src/screens/Signup/StepInfo/Policies.tsx:83
+msgid "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."
+msgstr "Se non sei ancora maggiorenne secondo le leggi del tuo Paese, il tuo genitore o tutore legale deve leggere i Termini a tuo nome."
+
+#: src/view/screens/ProfileList.tsx:610
+msgid "If you delete this list, you won't be able to recover it."
+msgstr "Se elimini questa lista, non potrai recuperarla."
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:316
+msgid "If you remove this post, you won't be able to recover it."
+msgstr "Se rimuovi questo post, non potrai recuperarlo."
+
+#: src/view/com/modals/ChangePassword.tsx:148
+msgid "If you want to change your password, we will send you a code to verify that this is your account."
+msgstr "Se vuoi modificare la password, ti invieremo un codice per verificare se questo è il tuo account."
+
+#: src/lib/moderation/useReportOptions.ts:36
+msgid "Illegal and Urgent"
+msgstr "Illegale e Urgente"
+
+#: src/view/com/util/images/Gallery.tsx:38
msgid "Image"
msgstr "Immagine"
-#: src/view/com/modals/AltImage.tsx:97
+#: src/view/com/modals/AltImage.tsx:121
msgid "Image alt text"
msgstr "Testo alternativo dell'immagine"
-#: src/view/com/util/UserAvatar.tsx:308 src/view/com/util/UserBanner.tsx:116
-msgid "Image options"
-msgstr "Opzioni per l'immagine"
+#~ msgid "Image options"
+#~ msgstr "Opzioni per l'immagine"
+
+#: src/lib/moderation/useReportOptions.ts:47
+msgid "Impersonation or false claims about identity or affiliation"
+msgstr "Furto d'identità o false affermazioni sull'identità o sull'affiliazione"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:110
+#: src/screens/Login/SetNewPasswordForm.tsx:127
msgid "Input code sent to your email for password reset"
msgstr "Inserisci il codice inviato alla tua email per reimpostare la password"
-#: src/view/com/modals/DeleteAccount.tsx:180
+#: src/view/com/modals/DeleteAccount.tsx:183
msgid "Input confirmation code for account deletion"
msgstr "Inserisci il codice di conferma per la cancellazione dell'account"
-#: src/view/com/auth/create/Step1.tsx:144
-msgid "Input email for Bluesky account"
-msgstr "Inserisci l'e-mail per l'account di Bluesky"
+#: src/view/com/auth/create/Step1.tsx:177
+#~ msgid "Input email for Bluesky account"
+#~ msgstr "Inserisci l'e-mail per l'account di Bluesky"
-#: src/view/com/auth/create/Step1.tsx:102
-msgid "Input invite code to proceed"
-msgstr "Inserisci il codice di invito per procedere"
+#: src/view/com/auth/create/Step1.tsx:151
+#~ msgid "Input invite code to proceed"
+#~ msgstr "Inserisci il codice di invito per procedere"
-#: src/view/com/modals/AddAppPasswords.tsx:182
+#: src/view/com/modals/AddAppPasswords.tsx:181
msgid "Input name for app password"
msgstr "Inserisci il nome per la password dell'app"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:133
+#: src/screens/Login/SetNewPasswordForm.tsx:151
msgid "Input new password"
msgstr "Inserisci la nuova password"
-#: src/view/com/modals/DeleteAccount.tsx:199
+#: src/view/com/modals/DeleteAccount.tsx:202
msgid "Input password for account deletion"
msgstr "Inserisci la password per la cancellazione dell'account"
-#: src/view/com/auth/create/Step2.tsx:194
-msgid "Input phone number for SMS verification"
-msgstr "Inserisci il numero di telefono per la verifica via SMS"
+#~ msgid "Input phone number for SMS verification"
+#~ msgstr "Inserisci il numero di telefono per la verifica via SMS"
-#: src/view/com/auth/login/LoginForm.tsx:227
+#: src/screens/Login/LoginForm.tsx:195
msgid "Input the password tied to {identifier}"
msgstr "Inserisci la password relazionata a {identifier}"
-#: src/view/com/auth/login/LoginForm.tsx:194
+#: src/screens/Login/LoginForm.tsx:168
msgid "Input the username or email address you used at signup"
msgstr "Inserisci il nome utente o l'indirizzo email che hai utilizzato al momento della registrazione"
-#: src/view/com/auth/create/Step2.tsx:268
-msgid "Input the verification code we have texted to you"
-msgstr "Inserisci il codice di verifica che ti abbiamo inviato tramite SMS"
+#~ msgid "Input the verification code we have texted to you"
+#~ msgstr "Inserisci il codice di verifica che ti abbiamo inviato tramite SMS"
-#: src/view/com/modals/Waitlist.tsx:90
-msgid "Input your email to get on the Bluesky waitlist"
-msgstr "Inserisci la tua email per entrare nella lista d'attesa di Bluesky"
+#~ msgid "Input your email to get on the Bluesky waitlist"
+#~ msgstr "Inserisci la tua email per entrare nella lista d'attesa di Bluesky"
-#: src/view/com/auth/login/LoginForm.tsx:226
+#: src/screens/Login/LoginForm.tsx:194
msgid "Input your password"
msgstr "Inserisci la tua password"
-#: src/view/com/auth/create/Step3.tsx:39
+#: src/view/com/modals/ChangeHandle.tsx:389
+msgid "Input your preferred hosting provider"
+msgstr "Inserisci il tuo provider di hosting preferito"
+
+#: src/screens/Signup/StepHandle.tsx:62
msgid "Input your user handle"
msgstr "Inserisci il tuo identificatore"
-#: src/view/com/post-thread/PostThreadItem.tsx:229
+#: src/view/com/post-thread/PostThreadItem.tsx:221
msgid "Invalid or unsupported post record"
msgstr "Protocollo del post non valido o non supportato"
-#: src/view/com/auth/login/LoginForm.tsx:115
+#: src/screens/Login/LoginForm.tsx:114
msgid "Invalid username or password"
msgstr "Nome dell'utente o password errato"
-#: src/view/screens/Settings.tsx:411
-msgid "Invite"
-msgstr "Invita"
+#~ msgid "Invite"
+#~ msgstr "Invita"
-#: src/view/com/modals/InviteCodes.tsx:93 src/view/screens/Settings.tsx:399
+#: src/view/com/modals/InviteCodes.tsx:94
msgid "Invite a Friend"
msgstr "Invita un amico"
-#: src/view/com/auth/create/Step1.tsx:92 src/view/com/auth/create/Step1.tsx:101
+#: src/screens/Signup/StepInfo/index.tsx:58
msgid "Invite code"
msgstr "Codice d'invito"
-#: src/view/com/auth/create/state.ts:199
+#: src/screens/Signup/state.ts:278
msgid "Invite code not accepted. Check that you input it correctly and try again."
msgstr "Codice invito non accettato. Controlla di averlo inserito correttamente e riprova."
-#: src/view/com/modals/InviteCodes.tsx:170
+#: src/view/com/modals/InviteCodes.tsx:171
msgid "Invite codes: {0} available"
msgstr "Codici di invito: {0} disponibili"
-#: src/view/shell/Drawer.tsx:645
-msgid "Invite codes: {invitesAvailable} available"
-msgstr "Codici di invito: {invitesAvailable} disponibili"
+#~ msgid "Invite codes: {invitesAvailable} available"
+#~ msgstr "Codici di invito: {invitesAvailable} disponibili"
-#: src/view/com/modals/InviteCodes.tsx:169
+#: src/view/com/modals/InviteCodes.tsx:170
msgid "Invite codes: 1 available"
msgstr "Codici di invito: 1 disponibile"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:99
+#: src/screens/Onboarding/StepFollowingFeed.tsx:65
+msgid "It shows posts from the people you follow as they happen."
+msgstr "Mostra i post delle persone che segui."
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:104
+#: src/view/com/auth/SplashScreen.web.tsx:172
msgid "Jobs"
msgstr "Lavori"
-#: src/view/com/modals/Waitlist.tsx:67
-msgid "Join the waitlist"
-msgstr "Iscriviti alla lista d'attesa"
+#~ msgid "Join the waitlist"
+#~ msgstr "Iscriviti alla lista d'attesa"
+
+#~ msgid "Join the waitlist."
+#~ msgstr "Iscriviti alla lista d'attesa."
+
+#~ msgid "Join Waitlist"
+#~ msgstr "Iscriviti alla Lista d'Attesa"
+
+#: src/screens/Onboarding/index.tsx:24
+msgid "Journalism"
+msgstr "Giornalismo"
+
+#: src/components/moderation/LabelsOnMe.tsx:59
+msgid "label has been placed on this {labelTarget}"
+msgstr "l'etichetta è stata inserita su questo {labelTarget}"
+
+#: src/components/moderation/ContentHider.tsx:144
+msgid "Labeled by {0}."
+msgstr "Etichettato da {0}."
+
+#: src/components/moderation/ContentHider.tsx:142
+msgid "Labeled by the author."
+msgstr "Etichettato dall'autore."
-#: src/view/com/auth/create/Step1.tsx:118
-#: src/view/com/auth/create/Step1.tsx:122
-msgid "Join the waitlist."
-msgstr "Iscriviti alla lista d'attesa."
+#: src/view/screens/Profile.tsx:188
+msgid "Labels"
+msgstr "Etichette"
-#: src/view/com/modals/Waitlist.tsx:128
-msgid "Join Waitlist"
-msgstr "Iscriviti alla Lista d'Attesa"
+#: src/screens/Profile/Sections/Labels.tsx:142
+msgid "Labels are annotations on users and content. They can be used to hide, warn, and categorize the network."
+msgstr "Le etichette sono annotazioni su utenti e contenuti. Possono essere utilizzate per nascondere, avvisare e classificare il network."
+
+#: src/components/moderation/LabelsOnMe.tsx:61
+msgid "labels have been placed on this {labelTarget}"
+msgstr "le etichette sono state inserite su questo {labelTarget}"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:62
+msgid "Labels on your account"
+msgstr "Etichette sul tuo account"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:64
+msgid "Labels on your content"
+msgstr "Etichette sul tuo contenuto"
#: src/view/com/composer/select-language/SelectLangBtn.tsx:104
msgid "Language selection"
msgstr "Seleziona la lingua"
-#: src/view/screens/Settings.tsx:560
+#: src/view/screens/Settings/index.tsx:614
msgid "Language settings"
msgstr "Impostazione delle lingue"
-#: src/Navigation.tsx:139 src/view/screens/LanguageSettings.tsx:89
+#: src/Navigation.tsx:144
+#: src/view/screens/LanguageSettings.tsx:89
msgid "Language Settings"
msgstr "Impostazione delle Lingue"
-#: src/view/screens/Settings.tsx:569
+#: src/view/screens/Settings/index.tsx:623
msgid "Languages"
msgstr "Lingue"
#: src/view/com/auth/create/StepHeader.tsx:20
-msgid "Last step!"
-msgstr "Ultimo passo!"
+#~ msgid "Last step!"
+#~ msgstr "Ultimo passo!"
-#: src/view/com/util/moderation/ContentHider.tsx:103
-msgid "Learn more"
-msgstr "Ulteriori informazioni"
+#~ msgid "Learn more"
+#~ msgstr "Ulteriori informazioni"
-#: src/view/com/util/moderation/PostAlerts.tsx:47
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:65
-#: src/view/com/util/moderation/ScreenHider.tsx:104
+#: src/components/moderation/ScreenHider.tsx:136
msgid "Learn More"
msgstr "Ulteriori Informazioni"
-#: src/view/com/util/moderation/ContentHider.tsx:85
-#: src/view/com/util/moderation/PostAlerts.tsx:40
-#: src/view/com/util/moderation/PostHider.tsx:78
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:49
-#: src/view/com/util/moderation/ScreenHider.tsx:101
+#: src/components/moderation/ContentHider.tsx:65
+#: src/components/moderation/ContentHider.tsx:128
+msgid "Learn more about the moderation applied to this content."
+msgstr "Scopri di più sulla moderazione applicata a questo contenuto."
+
+#: src/components/moderation/PostHider.tsx:85
+#: src/components/moderation/ScreenHider.tsx:125
msgid "Learn more about this warning"
msgstr "Ulteriori informazioni su questo avviso"
-#: src/view/screens/Moderation.tsx:242
+#: src/screens/Moderation/index.tsx:549
msgid "Learn more about what is public on Bluesky."
msgstr "Scopri cosa è pubblico su Bluesky."
+#: src/components/moderation/ContentHider.tsx:152
+msgid "Learn more."
+msgstr "Saperne di più."
+
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82
msgid "Leave them all unchecked to see any language."
msgstr "Deseleziona tutte per vedere qualsiasi lingua."
-#: src/view/com/modals/LinkWarning.tsx:51
+#: src/view/com/modals/LinkWarning.tsx:65
msgid "Leaving Bluesky"
msgstr "Stai lasciando Bluesky"
-#: src/view/screens/Settings.tsx:280
+#: src/screens/Deactivated.tsx:128
+msgid "left to go."
+msgstr "mancano."
+
+#: src/view/screens/Settings/index.tsx:296
msgid "Legacy storage cleared, you need to restart the app now."
msgstr "L'archivio legacy è stato cancellato, riattiva la app."
-#: src/view/com/auth/login/Login.tsx:128 src/view/com/auth/login/Login.tsx:144
+#: src/screens/Login/index.tsx:130
+#: src/screens/Login/index.tsx:145
msgid "Let's get your password reset!"
msgstr "Reimpostazione della password!"
-#: src/view/com/util/UserAvatar.tsx:245 src/view/com/util/UserBanner.tsx:60
-msgid "Library"
-msgstr "Biblioteca"
+#: src/screens/Onboarding/StepFinished.tsx:155
+msgid "Let's go!"
+msgstr "Andiamo!"
+
+#~ msgid "Library"
+#~ msgstr "Biblioteca"
-#: src/view/screens/Settings.tsx:473
+#: src/view/screens/Settings/index.tsx:498
msgid "Light"
msgstr "Chiaro"
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:189
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Like"
msgstr "Mi piace"
-#: src/view/screens/ProfileFeed.tsx:600
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:258
+#: src/view/screens/ProfileFeed.tsx:573
msgid "Like this feed"
msgstr "Metti mi piace a questo feed"
-#: src/Navigation.tsx:197 src/view/screens/PostLikedBy.tsx:27
-#: src/view/screens/ProfileFeedLikedBy.tsx:27
+#: src/components/LikesDialog.tsx:87
+#: src/Navigation.tsx:201
+#: src/Navigation.tsx:206
msgid "Liked by"
-msgstr "Piaciuto a"
+msgstr "Piace a"
+
+#: src/screens/Profile/ProfileLabelerLikedBy.tsx:29
+#: src/view/screens/PostLikedBy.tsx:27
+#: src/view/screens/ProfileFeedLikedBy.tsx:27
+msgid "Liked By"
+msgstr "Piace A"
-#: src/view/com/feeds/FeedSourceCard.tsx:277
+#: src/view/com/feeds/FeedSourceCard.tsx:268
msgid "Liked by {0} {1}"
-msgstr "È piaciuto a {0} {1}"
+msgstr "Piace a {0} {1}"
+
+#: src/components/LabelingServiceCard/index.tsx:72
+msgid "Liked by {count} {0}"
+msgstr "È piaciuto a {count} {0}"
-#: src/view/screens/ProfileFeed.tsx:615
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:278
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:292
+#: src/view/screens/ProfileFeed.tsx:588
msgid "Liked by {likeCount} {0}"
-msgstr "È piaciuto a {likeCount} {0}"
+msgstr "Piace a {likeCount} {0}"
-#: src/view/com/notifications/FeedItem.tsx:171
-msgid "liked your custom feed{0}"
-msgstr "è piaciuto il feed personalizzato{0}"
+#: src/view/com/notifications/FeedItem.tsx:174
+msgid "liked your custom feed"
+msgstr "piace il tuo feed personalizzato"
-#: src/view/com/notifications/FeedItem.tsx:155
+#~ msgid "liked your custom feed{0}"
+#~ msgstr "piace il feed personalizzato{0}"
+
+#: src/view/com/notifications/FeedItem.tsx:159
msgid "liked your post"
-msgstr "è piaciuto il tuo post"
+msgstr "piace il tuo post"
-#: src/view/screens/Profile.tsx:164
+#: src/view/screens/Profile.tsx:193
msgid "Likes"
msgstr "Mi piace"
-#: src/view/com/post-thread/PostThreadItem.tsx:184
+#: src/view/com/post-thread/PostThreadItem.tsx:182
msgid "Likes on this post"
msgstr "Mi Piace in questo post"
-#: src/Navigation.tsx:166
+#: src/Navigation.tsx:170
msgid "List"
msgstr "Lista"
-#: src/view/com/modals/CreateOrEditList.tsx:203
+#: src/view/com/modals/CreateOrEditList.tsx:262
msgid "List Avatar"
msgstr "Lista avatar"
-#: src/view/screens/ProfileList.tsx:323
+#: src/view/screens/ProfileList.tsx:311
msgid "List blocked"
msgstr "Lista bloccata"
-#: src/view/com/feeds/FeedSourceCard.tsx:231
+#: src/view/com/feeds/FeedSourceCard.tsx:220
msgid "List by {0}"
msgstr "Lista di {0}"
-#: src/view/screens/ProfileList.tsx:367
+#: src/view/screens/ProfileList.tsx:355
msgid "List deleted"
msgstr "Lista cancellata"
-#: src/view/screens/ProfileList.tsx:282
+#: src/view/screens/ProfileList.tsx:283
msgid "List muted"
msgstr "Lista muta"
-#: src/view/com/modals/CreateOrEditList.tsx:216
+#: src/view/com/modals/CreateOrEditList.tsx:276
msgid "List Name"
msgstr "Nome della lista"
-#: src/view/screens/ProfileList.tsx:342
+#: src/view/screens/ProfileList.tsx:325
msgid "List unblocked"
msgstr "Lista sbloccata"
-#: src/view/screens/ProfileList.tsx:301
+#: src/view/screens/ProfileList.tsx:297
msgid "List unmuted"
msgstr "Lista non mutata"
-#: src/Navigation.tsx:109 src/view/screens/Profile.tsx:166
-#: src/view/shell/desktop/LeftNav.tsx:379 src/view/shell/Drawer.tsx:495
+#: src/Navigation.tsx:114
+#: src/view/screens/Profile.tsx:189
+#: src/view/screens/Profile.tsx:195
+#: src/view/shell/desktop/LeftNav.tsx:383
+#: src/view/shell/Drawer.tsx:495
#: src/view/shell/Drawer.tsx:496
msgid "Lists"
msgstr "Liste"
-#: src/view/com/post-thread/PostThread.tsx:263
-#: src/view/com/post-thread/PostThread.tsx:271
-msgid "Load more posts"
-msgstr "Carica più post"
+#~ msgid "Load more posts"
+#~ msgstr "Carica più post"
-#: src/view/screens/Notifications.tsx:148
+#: src/view/screens/Notifications.tsx:159
msgid "Load new notifications"
msgstr "Carica più notifiche"
-#: src/view/com/feeds/FeedPage.tsx:190 src/view/screens/Profile.tsx:412
-#: src/view/screens/ProfileFeed.tsx:503 src/view/screens/ProfileList.tsx:659
+#: src/screens/Profile/Sections/Feed.tsx:70
+#: src/view/com/feeds/FeedPage.tsx:138
+#: src/view/screens/ProfileFeed.tsx:496
+#: src/view/screens/ProfileList.tsx:695
msgid "Load new posts"
msgstr "Carica nuovi posts"
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:99
msgid "Loading..."
msgstr "Caricamento..."
-#: src/view/com/modals/ServerInput.tsx:50
-msgid "Local dev server"
-msgstr "Server di sviluppo locale"
+#~ msgid "Local dev server"
+#~ msgstr "Server di sviluppo locale"
-#: src/Navigation.tsx:207
+#: src/Navigation.tsx:221
msgid "Log"
msgstr "Log"
-#: src/view/screens/Moderation.tsx:136
+#: src/screens/Deactivated.tsx:149
+#: src/screens/Deactivated.tsx:152
+#: src/screens/Deactivated.tsx:178
+#: src/screens/Deactivated.tsx:181
+msgid "Log out"
+msgstr "Disconnetta l'account"
+
+#: src/screens/Moderation/index.tsx:442
msgid "Logged-out visibility"
-msgstr "Visibilità degli utenti non connettati"
+msgstr "Visibilità degli utenti disconnessi"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:133
+#: src/components/AccountList.tsx:54
msgid "Login to account that is not listed"
msgstr "Accedi all'account che non è nella lista"
-#: src/view/com/modals/LinkWarning.tsx:65
+#~ msgid "Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!"
+#~ msgstr "Sembra che questo feed sia disponibile solo per gli utenti con un account Bluesky. Per favore registrati o accedi per visualizzare questo feed!"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:116
+msgid "Looks like XXXXX-XXXXX"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:79
msgid "Make sure this is where you intend to go!"
msgstr "Assicurati che questo sia dove intendi andare!"
-#: src/view/screens/Profile.tsx:163
+#: src/components/dialogs/MutedWords.tsx:82
+msgid "Manage your muted words and tags"
+msgstr "Gestisci le parole mute e i tags"
+
+#: src/view/com/auth/create/Step2.tsx:118
+#~ msgid "May not be longer than 253 characters"
+#~ msgstr "Non può contenere più di 253 caratteri"
+
+#: src/view/com/auth/create/Step2.tsx:109
+#~ msgid "May only contain letters and numbers"
+#~ msgstr "Può contenere solo lettere e numeri"
+
+#: src/view/screens/Profile.tsx:192
msgid "Media"
msgstr "Media"
@@ -1838,109 +2627,176 @@ msgstr "utenti menzionati"
msgid "Mentioned users"
msgstr "Utenti menzionati"
-#: src/view/com/util/ViewHeader.tsx:81 src/view/screens/Search/Search.tsx:544
+#: src/view/com/util/ViewHeader.tsx:87
+#: src/view/screens/Search/Search.tsx:648
msgid "Menu"
msgstr "Menù"
-#: src/view/com/posts/FeedErrorMessage.tsx:197
+#~ msgid "Message from server"
+#~ msgstr "Messaggio dal server"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:192
msgid "Message from server: {0}"
msgstr "Messaggio dal server: {0}"
-#: src/Navigation.tsx:114 src/view/screens/Moderation.tsx:64
-#: src/view/screens/Settings.tsx:591 src/view/shell/desktop/LeftNav.tsx:397
-#: src/view/shell/Drawer.tsx:514 src/view/shell/Drawer.tsx:515
+#: src/lib/moderation/useReportOptions.ts:45
+msgid "Misleading Account"
+msgstr "Account Ingannevole"
+
+#: src/Navigation.tsx:119
+#: src/screens/Moderation/index.tsx:104
+#: src/view/screens/Settings/index.tsx:645
+#: src/view/shell/desktop/LeftNav.tsx:401
+#: src/view/shell/Drawer.tsx:514
+#: src/view/shell/Drawer.tsx:515
msgid "Moderation"
msgstr "Moderazione"
-#: src/view/com/lists/ListCard.tsx:92
-#: src/view/com/modals/UserAddRemoveLists.tsx:190
+#: src/components/moderation/ModerationDetailsDialog.tsx:112
+msgid "Moderation details"
+msgstr "Dettagli sulla moderazione"
+
+#: src/view/com/lists/ListCard.tsx:93
+#: src/view/com/modals/UserAddRemoveLists.tsx:206
msgid "Moderation list by {0}"
msgstr "Lista di moderazione di {0}"
-#: src/view/screens/ProfileList.tsx:753
+#: src/view/screens/ProfileList.tsx:789
msgid "Moderation list by <0/>"
msgstr "Lista di moderazione di <0/>"
-#: src/view/com/lists/ListCard.tsx:90
-#: src/view/com/modals/UserAddRemoveLists.tsx:188
-#: src/view/screens/ProfileList.tsx:751
+#: src/view/com/lists/ListCard.tsx:91
+#: src/view/com/modals/UserAddRemoveLists.tsx:204
+#: src/view/screens/ProfileList.tsx:787
msgid "Moderation list by you"
msgstr "Le tue liste di moderazione"
-#: src/view/com/modals/CreateOrEditList.tsx:139
+#: src/view/com/modals/CreateOrEditList.tsx:198
msgid "Moderation list created"
msgstr "Lista di moderazione creata"
-#: src/view/com/modals/CreateOrEditList.tsx:126
+#: src/view/com/modals/CreateOrEditList.tsx:184
msgid "Moderation list updated"
msgstr "Lista di moderazione aggiornata"
-#: src/view/screens/Moderation.tsx:95
+#: src/screens/Moderation/index.tsx:243
msgid "Moderation lists"
msgstr "Liste di moderazione"
-#: src/Navigation.tsx:119 src/view/screens/ModerationModlists.tsx:58
+#: src/Navigation.tsx:124
+#: src/view/screens/ModerationModlists.tsx:58
msgid "Moderation Lists"
msgstr "Liste di Moderazione"
-#: src/view/screens/Settings.tsx:585
+#: src/view/screens/Settings/index.tsx:639
msgid "Moderation settings"
msgstr "Impostazioni di moderazione"
-#: src/view/com/modals/ModerationDetails.tsx:35
+#: src/Navigation.tsx:216
+msgid "Moderation states"
+msgstr "Stati di moderazione"
+
+#: src/screens/Moderation/index.tsx:215
+msgid "Moderation tools"
+msgstr "Strumenti di moderazione"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:48
+#: src/lib/moderation/useModerationCauseDescription.ts:40
msgid "Moderator has chosen to set a general warning on the content."
msgstr "Il moderatore ha scelto di mettere un avviso generale sul contenuto."
-#: src/view/shell/desktop/Feeds.tsx:53
+#: src/view/com/post-thread/PostThreadItem.tsx:541
+msgid "More"
+msgstr "Di più"
+
+#: src/view/shell/desktop/Feeds.tsx:65
msgid "More feeds"
msgstr "Altri feed"
-#: src/view/com/profile/ProfileHeader.tsx:562
-#: src/view/screens/ProfileFeed.tsx:371 src/view/screens/ProfileList.tsx:595
+#: src/view/screens/ProfileList.tsx:599
msgid "More options"
msgstr "Altre opzioni"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:268
-msgid "More post options"
-msgstr "Altre impostazioni per il post"
+#~ msgid "More post options"
+#~ msgstr "Altre impostazioni per il post"
#: src/view/screens/PreferencesThreads.tsx:82
msgid "Most-liked replies first"
msgstr "Dai priorità alle risposte con più likes"
-#: src/view/com/profile/ProfileHeader.tsx:374
+#: src/view/com/auth/create/Step2.tsx:122
+#~ msgid "Must be at least 3 characters"
+#~ msgstr "Deve contenere almeno 3 caratteri"
+
+#: src/components/TagMenu/index.tsx:249
+msgid "Mute"
+msgstr "Silenzia"
+
+#: src/components/TagMenu/index.web.tsx:105
+msgid "Mute {truncatedTag}"
+msgstr "Silenzia {truncatedTag}"
+
+#: src/view/com/profile/ProfileMenu.tsx:279
+#: src/view/com/profile/ProfileMenu.tsx:286
msgid "Mute Account"
-msgstr "Silenziare Account"
+msgstr "Silenzia l'account"
-#: src/view/screens/ProfileList.tsx:522
+#: src/view/screens/ProfileList.tsx:518
msgid "Mute accounts"
-msgstr "Silenziare accounts"
+msgstr "Silenzia gli accounts"
+
+#: src/components/TagMenu/index.tsx:209
+msgid "Mute all {displayTag} posts"
+msgstr "Silenzia tutti i post {displayTag}"
+
+#: src/components/dialogs/MutedWords.tsx:148
+msgid "Mute in tags only"
+msgstr "Silenzia solo i tags"
+
+#: src/components/dialogs/MutedWords.tsx:133
+msgid "Mute in text & tags"
+msgstr "Silenzia nel testo & tags"
-#: src/view/screens/ProfileList.tsx:469
+#: src/view/screens/ProfileList.tsx:461
+#: src/view/screens/ProfileList.tsx:624
msgid "Mute list"
msgstr "Silenziare la lista"
-#: src/view/screens/ProfileList.tsx:274
+#: src/view/screens/ProfileList.tsx:619
msgid "Mute these accounts?"
msgstr "Vuoi silenziare queste liste?"
-#: src/view/screens/ProfileList.tsx:278
-msgid "Mute this List"
-msgstr "Silenzia questa Lista"
+#~ msgid "Mute this List"
+#~ msgstr "Silenzia questa Lista"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:169
+#: src/components/dialogs/MutedWords.tsx:126
+msgid "Mute this word in post text and tags"
+msgstr "Silenzia questa parola nel testo e nei tag del post"
+
+#: src/components/dialogs/MutedWords.tsx:141
+msgid "Mute this word in tags only"
+msgstr "Siilenzia questa parola solo nei tags"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:257
msgid "Mute thread"
msgstr "Silenzia questa discussione"
-#: src/view/com/lists/ListCard.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:267
+#: src/view/com/util/forms/PostDropdownBtn.tsx:269
+msgid "Mute words & tags"
+msgstr "Silenzia parole & tags"
+
+#: src/view/com/lists/ListCard.tsx:102
msgid "Muted"
msgstr "Silenziato"
-#: src/view/screens/Moderation.tsx:109
+#: src/screens/Moderation/index.tsx:255
msgid "Muted accounts"
msgstr "Account silenziato"
-#: src/Navigation.tsx:124 src/view/screens/ModerationMutedAccounts.tsx:107
+#: src/Navigation.tsx:129
+#: src/view/screens/ModerationMutedAccounts.tsx:107
msgid "Muted Accounts"
msgstr "Accounts Silenziati"
@@ -1948,15 +2804,24 @@ msgstr "Accounts Silenziati"
msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private."
msgstr "I post degli account silenziati verranno rimossi dal tuo feed e dalle tue notifiche. Silenziare è completamente privato."
-#: src/view/screens/ProfileList.tsx:276
+#: src/lib/moderation/useModerationCauseDescription.ts:85
+msgid "Muted by \"{0}\""
+msgstr "Silenziato da \"{0}\""
+
+#: src/screens/Moderation/index.tsx:231
+msgid "Muted words & tags"
+msgstr "Parole e tags silenziati"
+
+#: src/view/screens/ProfileList.tsx:621
msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them."
msgstr "Silenziare un account è privato. Gli account silenziati possono interagire con te, ma non vedrai i loro post né riceverai le loro notifiche."
-#: src/view/com/modals/BirthDateSettings.tsx:56
+#: src/components/dialogs/BirthDateSettings.tsx:35
+#: src/components/dialogs/BirthDateSettings.tsx:38
msgid "My Birthday"
msgstr "Il mio Compleanno"
-#: src/view/screens/Feeds.tsx:367
+#: src/view/screens/Feeds.tsx:663
msgid "My Feeds"
msgstr "I miei Feeds"
@@ -1964,136 +2829,197 @@ msgstr "I miei Feeds"
msgid "My Profile"
msgstr "Il mio Profilo"
-#: src/view/screens/Settings.tsx:548
+#: src/view/screens/Settings/index.tsx:596
+msgid "My saved feeds"
+msgstr "I miei feed salvati"
+
+#: src/view/screens/Settings/index.tsx:602
msgid "My Saved Feeds"
msgstr "I miei Feeds Salvati"
-#: src/view/com/modals/AddAppPasswords.tsx:181
-#: src/view/com/modals/CreateOrEditList.tsx:230
+#~ msgid "my-server.com"
+#~ msgstr "my-server.com"
+
+#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/CreateOrEditList.tsx:291
msgid "Name"
msgstr "Nome"
-#: src/view/com/modals/CreateOrEditList.tsx:108
+#: src/view/com/modals/CreateOrEditList.tsx:146
msgid "Name is required"
msgstr "Il nome è obbligatorio"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:186
-#: src/view/com/auth/login/LoginForm.tsx:286
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:166
+#: src/lib/moderation/useReportOptions.ts:57
+#: src/lib/moderation/useReportOptions.ts:78
+#: src/lib/moderation/useReportOptions.ts:86
+msgid "Name or Description Violates Community Standards"
+msgstr "Il Nome o la Descrizione Viola gli Standard della Comunità"
+
+#: src/screens/Onboarding/index.tsx:25
+msgid "Nature"
+msgstr "Natura"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:173
+#: src/screens/Login/LoginForm.tsx:254
+#: src/view/com/modals/ChangePassword.tsx:168
msgid "Navigates to the next screen"
msgstr "Vai alla schermata successiva"
-#: src/view/shell/Drawer.tsx:73
+#: src/view/shell/Drawer.tsx:71
msgid "Navigates to your profile"
msgstr "Vai al tuo profilo"
+#: src/components/ReportDialog/SelectReportOptionView.tsx:122
+msgid "Need to report a copyright violation?"
+msgstr "Hai bisogno di segnalare una violazione del copyright?"
+
#: src/view/com/modals/EmbedConsent.tsx:107
#: src/view/com/modals/EmbedConsent.tsx:123
-msgid "Never load embeds from {0}"
-msgstr "Non caricare mai gli inserimenti di {0}"
+#~ msgid "Never load embeds from {0}"
+#~ msgstr "Non caricare mai gli inserimenti di {0}"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:72
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:72
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:74
msgid "Never lose access to your followers and data."
msgstr "Non perdere mai l'accesso ai tuoi follower e ai tuoi dati."
+#: src/screens/Onboarding/StepFinished.tsx:123
+msgid "Never lose access to your followers or data."
+msgstr "Non perdere mai l'accesso ai tuoi follower o ai tuoi dati."
+
+#: src/view/com/modals/ChangeHandle.tsx:519
+msgid "Nevermind, create a handle for me"
+msgstr "Non importa, crea una handle per me"
+
#: src/view/screens/Lists.tsx:76
msgctxt "action"
msgid "New"
-msgstr "Nuovo"
+msgstr "Nuova"
#: src/view/screens/ModerationModlists.tsx:78
msgid "New"
-msgstr "Nuovo"
+msgstr "Nuova"
-#: src/view/com/modals/CreateOrEditList.tsx:194
+#: src/view/com/modals/CreateOrEditList.tsx:253
msgid "New Moderation List"
msgstr "Nuova Lista di Moderazione"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:122
+#: src/view/com/modals/ChangePassword.tsx:212
msgid "New password"
msgstr "Nuovo Password"
-#: src/view/com/feeds/FeedPage.tsx:201
+#: src/view/com/modals/ChangePassword.tsx:217
+msgid "New Password"
+msgstr "Nuovo Password"
+
+#: src/view/com/feeds/FeedPage.tsx:149
msgctxt "action"
msgid "New post"
msgstr "Nuovo Post"
-#: src/view/screens/Feeds.tsx:511 src/view/screens/Profile.tsx:354
-#: src/view/screens/ProfileFeed.tsx:441 src/view/screens/ProfileList.tsx:197
-#: src/view/screens/ProfileList.tsx:225 src/view/shell/desktop/LeftNav.tsx:248
+#: src/view/screens/Feeds.tsx:555
+#: src/view/screens/Notifications.tsx:168
+#: src/view/screens/Profile.tsx:452
+#: src/view/screens/ProfileFeed.tsx:434
+#: src/view/screens/ProfileList.tsx:199
+#: src/view/screens/ProfileList.tsx:227
+#: src/view/shell/desktop/LeftNav.tsx:252
msgid "New post"
msgstr "Nuovo post"
-#: src/view/shell/desktop/LeftNav.tsx:258
+#: src/view/shell/desktop/LeftNav.tsx:262
msgctxt "action"
msgid "New Post"
msgstr "Nuovo post"
-#: src/view/com/modals/CreateOrEditList.tsx:189
+#~ msgid "New Post"
+#~ msgstr "Nuovo Post"
+
+#: src/view/com/modals/CreateOrEditList.tsx:248
msgid "New User List"
-msgstr "Nuova lista utenti"
+msgstr "Nuova lista"
#: src/view/screens/PreferencesThreads.tsx:79
msgid "Newest replies first"
msgstr "Mostrare prima le risposte più recenti"
-#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:103
-msgctxt "action"
+#: src/screens/Onboarding/index.tsx:23
+msgid "News"
+msgstr "Notizie"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:143
+#: src/screens/Login/ForgotPasswordForm.tsx:150
+#: src/screens/Login/LoginForm.tsx:253
+#: src/screens/Login/LoginForm.tsx:260
+#: src/screens/Login/SetNewPasswordForm.tsx:174
+#: src/screens/Login/SetNewPasswordForm.tsx:180
+#: src/screens/Signup/index.tsx:205
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79
+#: src/view/com/modals/ChangePassword.tsx:253
+#: src/view/com/modals/ChangePassword.tsx:255
msgid "Next"
msgstr "Seguente"
-#: src/view/com/auth/create/CreateAccount.tsx:155
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:178
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:188
-#: src/view/com/auth/login/LoginForm.tsx:288
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:158
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:168
-#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:103
+msgctxt "action"
msgid "Next"
msgstr "Seguente"
-#: src/view/com/lightbox/Lightbox.web.tsx:142
+#: src/view/com/lightbox/Lightbox.web.tsx:169
msgid "Next image"
msgstr "Immagine seguente"
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:200
-#: src/view/screens/PreferencesHomeFeed.tsx:235
-#: src/view/screens/PreferencesHomeFeed.tsx:272
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:200
+#: src/view/screens/PreferencesFollowingFeed.tsx:235
+#: src/view/screens/PreferencesFollowingFeed.tsx:272
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "No"
msgstr "No"
-#: src/view/screens/ProfileFeed.tsx:593 src/view/screens/ProfileList.tsx:733
+#: src/view/screens/ProfileFeed.tsx:562
+#: src/view/screens/ProfileList.tsx:769
msgid "No description"
msgstr "Senza descrizione"
-#: src/view/com/profile/ProfileHeader.tsx:217
+#: src/view/com/modals/ChangeHandle.tsx:405
+msgid "No DNS Panel"
+msgstr "Nessun pannello DNS"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:118
msgid "No longer following {0}"
msgstr "Non segui più {0}"
-#: src/view/com/notifications/Feed.tsx:107
+#: src/screens/Signup/StepHandle.tsx:114
+msgid "No longer than 253 characters"
+msgstr ""
+
+#: src/view/com/notifications/Feed.tsx:109
msgid "No notifications yet!"
msgstr "Ancora nessuna notifica!"
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:97
-#: src/view/com/composer/text-input/web/Autocomplete.tsx:191
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:101
+#: src/view/com/composer/text-input/web/Autocomplete.tsx:195
msgid "No result"
msgstr "Nessun risultato"
-#: src/view/screens/Feeds.tsx:456
+#: src/components/Lists.tsx:183
+msgid "No results found"
+msgstr "Non si è trovato nessun risultato"
+
+#: src/view/screens/Feeds.tsx:495
msgid "No results found for \"{query}\""
msgstr "Nessun risultato trovato per \"{query}\""
#: src/view/com/modals/ListAddRemoveUsers.tsx:127
-#: src/view/screens/Search/Search.tsx:272
-#: src/view/screens/Search/Search.tsx:300
+#: src/view/screens/Search/Search.tsx:283
+#: src/view/screens/Search/Search.tsx:311
msgid "No results found for {query}"
msgstr "Nessun risultato trovato per {query}"
-#: src/view/com/modals/EmbedConsent.tsx:129
+#: src/components/dialogs/EmbedConsent.tsx:105
+#: src/components/dialogs/EmbedConsent.tsx:112
msgid "No thanks"
msgstr "No grazie"
@@ -2101,11 +3027,21 @@ msgstr "No grazie"
msgid "Nobody"
msgstr "Nessuno"
+#: src/components/LikedByList.tsx:79
+#: src/components/LikesDialog.tsx:99
+msgid "Nobody has liked this yet. Maybe you should be the first!"
+msgstr "Nessuno ha fatto ancora un like. Fai il primo tu!"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:42
+msgid "Non-sexual Nudity"
+msgstr "Nudità non sessuale"
+
#: src/view/com/modals/SelfLabel.tsx:135
msgid "Not Applicable."
msgstr "Non applicabile."
-#: src/Navigation.tsx:104
+#: src/Navigation.tsx:109
+#: src/view/screens/Profile.tsx:99
msgid "Not Found"
msgstr "Non trovato"
@@ -2114,39 +3050,72 @@ msgstr "Non trovato"
msgid "Not right now"
msgstr "Non adesso"
-#: src/view/screens/Moderation.tsx:232
+#: src/view/com/profile/ProfileMenu.tsx:368
+#: src/view/com/util/forms/PostDropdownBtn.tsx:342
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:246
+msgid "Note about sharing"
+msgstr "Nota sulla condivisione"
+
+#: src/screens/Moderation/index.tsx:540
msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites."
msgstr "Nota: Bluesky è una rete aperta e pubblica. Questa impostazione limita solo la visibilità dei tuoi contenuti sull'app e sul sito Web di Bluesky e altre app potrebbero non rispettare questa impostazione. I tuoi contenuti potrebbero comunque essere mostrati agli utenti disconnessi da altre app e siti web."
-#: src/Navigation.tsx:445 src/view/screens/Notifications.tsx:113
-#: src/view/screens/Notifications.tsx:137
-#: src/view/shell/bottom-bar/BottomBar.tsx:205
-#: src/view/shell/desktop/LeftNav.tsx:361 src/view/shell/Drawer.tsx:438
+#: src/Navigation.tsx:469
+#: src/view/screens/Notifications.tsx:124
+#: src/view/screens/Notifications.tsx:148
+#: src/view/shell/bottom-bar/BottomBar.tsx:215
+#: src/view/shell/desktop/LeftNav.tsx:365
+#: src/view/shell/Drawer.tsx:438
#: src/view/shell/Drawer.tsx:439
msgid "Notifications"
-msgstr "Notifica"
+msgstr "Notifiche"
#: src/view/com/modals/SelfLabel.tsx:103
msgid "Nudity"
msgstr "Nudità"
-#: src/view/com/util/ErrorBoundary.tsx:35
+#: src/lib/moderation/useReportOptions.ts:71
+msgid "Nudity or adult content not labeled as such"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:71
+#~ msgid "Nudity or pornography not labeled as such"
+#~ msgstr "Nudità o pornografia non etichettata come tale"
+
+#: src/screens/Signup/index.tsx:142
+msgid "of"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:11
+msgid "Off"
+msgstr "Spento"
+
+#: src/view/com/util/ErrorBoundary.tsx:49
msgid "Oh no!"
msgstr "Oh no!"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:41
+#: src/screens/Onboarding/StepInterests/index.tsx:132
+msgid "Oh no! Something went wrong."
+msgstr "Oh no! Qualcosa è andato male."
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:126
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:327
+msgid "OK"
+msgstr "OK"
+
+#: src/screens/Login/PasswordUpdatedForm.tsx:44
msgid "Okay"
msgstr "Va bene"
#: src/view/screens/PreferencesThreads.tsx:78
msgid "Oldest replies first"
-msgstr "Prima le risposte più vecchie"
+msgstr "Mostrare prima le risposte più vecchie"
-#: src/view/screens/Settings.tsx:236
+#: src/view/screens/Settings/index.tsx:244
msgid "Onboarding reset"
msgstr "Reimpostazione dell'onboarding"
-#: src/view/com/composer/Composer.tsx:375
+#: src/view/com/composer/Composer.tsx:392
msgid "One or more images is missing alt text."
msgstr "A una o più immagini manca il testo alternativo."
@@ -2154,30 +3123,59 @@ msgstr "A una o più immagini manca il testo alternativo."
msgid "Only {0} can reply."
msgstr "Solo {0} può rispondere."
-#: src/view/com/modals/ProfilePreview.tsx:49
-#: src/view/com/modals/ProfilePreview.tsx:61
-#: src/view/screens/AppPasswords.tsx:65
+#: src/screens/Signup/StepHandle.tsx:97
+msgid "Only contains letters, numbers, and hyphens"
+msgstr ""
+
+#: src/components/Lists.tsx:75
+msgid "Oops, something went wrong!"
+msgstr "Ops! Qualcosa è andato male!"
+
+#: src/components/Lists.tsx:170
+#: src/view/screens/AppPasswords.tsx:67
+#: src/view/screens/Profile.tsx:99
msgid "Oops!"
msgstr "Ops!"
-#: src/view/com/composer/Composer.tsx:470
-#: src/view/com/composer/Composer.tsx:471
+#: src/screens/Onboarding/StepFinished.tsx:119
+msgid "Open"
+msgstr "Apri"
+
+#: src/view/com/composer/Composer.tsx:491
+#: src/view/com/composer/Composer.tsx:492
msgid "Open emoji picker"
msgstr "Apri il selettore emoji"
-#: src/view/screens/Settings.tsx:678
+#: src/view/screens/ProfileFeed.tsx:300
+msgid "Open feed options menu"
+msgstr "Apri il menu delle opzioni del feed"
+
+#: src/view/screens/Settings/index.tsx:734
msgid "Open links with in-app browser"
msgstr "Apri i links con il navigatore della app"
-#: src/view/com/pager/FeedsTabBarMobile.tsx:81
+#: src/screens/Moderation/index.tsx:227
+msgid "Open muted words and tags settings"
+msgstr "Apri le impostazioni delle parole e dei tag silenziati"
+
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:50
msgid "Open navigation"
msgstr "Apri la navigazione"
-#: src/view/screens/Settings.tsx:737
+#: src/view/com/util/forms/PostDropdownBtn.tsx:183
+msgid "Open post options menu"
+msgstr "Apri il menu delle opzioni del post"
+
+#: src/view/screens/Settings/index.tsx:828
+#: src/view/screens/Settings/index.tsx:838
msgid "Open storybook page"
msgstr "Apri la pagina della cronologia"
-#: src/view/com/util/forms/DropdownButton.tsx:147
+#: src/view/screens/Settings/index.tsx:816
+msgid "Open system log"
+msgstr "Apri il registro di sistema"
+
+#: src/view/com/util/forms/DropdownButton.tsx:154
msgid "Opens {numItems} options"
msgstr "Apre le {numItems} opzioni"
@@ -2185,11 +3183,11 @@ msgstr "Apre le {numItems} opzioni"
msgid "Opens additional details for a debug entry"
msgstr "Apre dettagli aggiuntivi per una debug entry"
-#: src/view/com/notifications/FeedItem.tsx:352
+#: src/view/com/notifications/FeedItem.tsx:353
msgid "Opens an expanded list of users in this notification"
msgstr "Apre un elenco ampliato di utenti in questa notifica"
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:61
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:78
msgid "Opens camera on device"
msgstr "Apre la fotocamera sul dispositivo"
@@ -2197,7 +3195,7 @@ msgstr "Apre la fotocamera sul dispositivo"
msgid "Opens composer"
msgstr "Apre il compositore"
-#: src/view/screens/Settings.tsx:561
+#: src/view/screens/Settings/index.tsx:615
msgid "Opens configurable language settings"
msgstr "Apre le impostazioni configurabili delle lingue"
@@ -2205,120 +3203,173 @@ msgstr "Apre le impostazioni configurabili delle lingue"
msgid "Opens device photo gallery"
msgstr "Apre la galleria fotografica del dispositivo"
-#: src/view/com/profile/ProfileHeader.tsx:459
-msgid "Opens editor for profile display name, avatar, background image, and description"
-msgstr "Apre l'editor per il nome configurato del profilo, l'avatar, l'immagine di sfondo e la descrizione"
+#~ msgid "Opens editor for profile display name, avatar, background image, and description"
+#~ msgstr "Apre l'editor per il nome configurato del profilo, l'avatar, l'immagine di sfondo e la descrizione"
-#: src/view/screens/Settings.tsx:615
+#: src/view/screens/Settings/index.tsx:669
msgid "Opens external embeds settings"
msgstr "Apre le impostazioni esterne per gli incorporamenti"
-#: src/view/com/profile/ProfileHeader.tsx:614
-msgid "Opens followers list"
-msgstr "Apre la lista dei followers"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:57
+#: src/view/com/auth/SplashScreen.tsx:68
+#: src/view/com/auth/SplashScreen.web.tsx:97
+msgid "Opens flow to create a new Bluesky account"
+msgstr "Apre il procedimento per creare un nuovo account Bluesky"
-#: src/view/com/profile/ProfileHeader.tsx:633
-msgid "Opens following list"
-msgstr "Apre la lista di chi segui"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:75
+#: src/view/com/auth/SplashScreen.tsx:83
+#: src/view/com/auth/SplashScreen.web.tsx:112
+msgid "Opens flow to sign into your existing Bluesky account"
+msgstr "Apre il procedimento per accedere al tuo account esistente di Bluesky"
-#: src/view/screens/Settings.tsx:412
-msgid "Opens invite code list"
-msgstr "Apre la lista dei codici di invito"
+#~ msgid "Opens followers list"
+#~ msgstr "Apre la lista dei followers"
+
+#~ msgid "Opens following list"
+#~ msgstr "Apre la lista di chi segui"
-#: src/view/com/modals/InviteCodes.tsx:172
-#: src/view/shell/desktop/RightNav.tsx:156 src/view/shell/Drawer.tsx:646
+#~ msgid "Opens invite code list"
+#~ msgstr "Apre la lista dei codici di invito"
+
+#: src/view/com/modals/InviteCodes.tsx:173
msgid "Opens list of invite codes"
msgstr "Apre la lista dei codici di invito"
-#: src/view/screens/Settings.tsx:696
-msgid "Opens modal for account deletion confirmation. Requires email code."
-msgstr "Apre il modal per la conferma dell'eliminazione dell'account. Richiede un codice email."
+#: src/view/screens/Settings/index.tsx:798
+msgid "Opens modal for account deletion confirmation. Requires email code"
+msgstr "Apre la modale per la conferma dell'eliminazione dell'account. Richiede un codice e-mail"
-#: src/view/com/modals/ChangeHandle.tsx:281
+#~ msgid "Opens modal for account deletion confirmation. Requires email code."
+#~ msgstr "Apre il modal per la conferma dell'eliminazione dell'account. Richiede un codice email."
+
+#: src/view/screens/Settings/index.tsx:756
+msgid "Opens modal for changing your Bluesky password"
+msgstr "Apre la modale per modificare il tuo password di Bluesky"
+
+#: src/view/screens/Settings/index.tsx:718
+msgid "Opens modal for choosing a new Bluesky handle"
+msgstr "Apre la modale per la scelta di un nuovo handle di Bluesky"
+
+#: src/view/screens/Settings/index.tsx:779
+msgid "Opens modal for downloading your Bluesky account data (repository)"
+msgstr "Apre la modale per scaricare i dati del tuo account Bluesky (repository)"
+
+#: src/view/screens/Settings/index.tsx:968
+msgid "Opens modal for email verification"
+msgstr "Apre la modale per la verifica dell'e-mail"
+
+#: src/view/com/modals/ChangeHandle.tsx:282
msgid "Opens modal for using custom domain"
msgstr "Apre il modal per l'utilizzo del dominio personalizzato"
-#: src/view/screens/Settings.tsx:586
+#: src/view/screens/Settings/index.tsx:640
msgid "Opens moderation settings"
msgstr "Apre le impostazioni di moderazione"
-#: src/view/com/auth/login/LoginForm.tsx:236
+#: src/screens/Login/LoginForm.tsx:202
msgid "Opens password reset form"
msgstr "Apre il modulo di reimpostazione della password"
-#: src/view/screens/Feeds.tsx:335
+#: src/view/com/home/HomeHeaderLayout.web.tsx:63
+#: src/view/screens/Feeds.tsx:356
msgid "Opens screen to edit Saved Feeds"
msgstr "Apre la schermata per modificare i feed salvati"
-#: src/view/screens/Settings.tsx:542
+#: src/view/screens/Settings/index.tsx:597
msgid "Opens screen with all saved feeds"
msgstr "Apre la schermata con tutti i feed salvati"
-#: src/view/screens/Settings.tsx:642
-msgid "Opens the app password settings page"
-msgstr "Apre la pagina delle impostazioni della password dell'app"
+#: src/view/screens/Settings/index.tsx:696
+msgid "Opens the app password settings"
+msgstr "Apre le impostazioni della password dell'app"
+
+#~ msgid "Opens the app password settings page"
+#~ msgstr "Apre la pagina delle impostazioni della password dell'app"
+
+#: src/view/screens/Settings/index.tsx:554
+msgid "Opens the Following feed preferences"
+msgstr "Apre le preferenze del feed Following"
+
+#~ msgid "Opens the home feed preferences"
+#~ msgstr "Apre le preferenze del home feed"
-#: src/view/screens/Settings.tsx:501
-msgid "Opens the home feed preferences"
-msgstr "Apre le preferenze del home feed"
+#: src/view/com/modals/LinkWarning.tsx:93
+msgid "Opens the linked website"
+msgstr "Apre il sito Web collegato"
-#: src/view/screens/Settings.tsx:738
+#: src/view/screens/Settings/index.tsx:829
+#: src/view/screens/Settings/index.tsx:839
msgid "Opens the storybook page"
msgstr "Apri la pagina della cronologia"
-#: src/view/screens/Settings.tsx:718
+#: src/view/screens/Settings/index.tsx:817
msgid "Opens the system log page"
msgstr "Apre la pagina del registro di sistema"
-#: src/view/screens/Settings.tsx:522
+#: src/view/screens/Settings/index.tsx:575
msgid "Opens the threads preferences"
msgstr "Apre le preferenze dei threads"
-#: src/view/com/util/forms/DropdownButton.tsx:254
+#: src/view/com/util/forms/DropdownButton.tsx:280
msgid "Option {0} of {numItems}"
msgstr "Opzione {0} di {numItems}"
+#: src/components/ReportDialog/SubmitView.tsx:162
+msgid "Optionally provide additional information below:"
+msgstr "Facoltativamente, fornisci ulteriori informazioni di seguito:"
+
#: src/view/com/modals/Threadgate.tsx:89
msgid "Or combine these options:"
msgstr "Oppure combina queste opzioni:"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:138
+#: src/lib/moderation/useReportOptions.ts:25
+msgid "Other"
+msgstr "Altri"
+
+#: src/components/AccountList.tsx:73
msgid "Other account"
msgstr "Altro account"
-#: src/view/com/modals/ServerInput.tsx:88
-msgid "Other service"
-msgstr "Altro servizio"
+#~ msgid "Other service"
+#~ msgstr "Altro servizio"
#: src/view/com/composer/select-language/SelectLangBtn.tsx:91
msgid "Other..."
msgstr "Altro..."
-#: src/view/screens/NotFound.tsx:42 src/view/screens/NotFound.tsx:45
+#: src/components/Lists.tsx:184
+#: src/view/screens/NotFound.tsx:45
msgid "Page not found"
msgstr "Pagina non trovata"
-#: src/view/com/auth/create/Step1.tsx:158
-#: src/view/com/auth/create/Step1.tsx:168
-#: src/view/com/auth/login/LoginForm.tsx:223
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:132
-#: src/view/com/modals/DeleteAccount.tsx:198
+#: src/view/screens/NotFound.tsx:42
+msgid "Page Not Found"
+msgstr "Pagina non trovata"
+
+#: src/screens/Login/LoginForm.tsx:178
+#: src/screens/Signup/StepInfo/index.tsx:101
+#: src/view/com/modals/DeleteAccount.tsx:194
+#: src/view/com/modals/DeleteAccount.tsx:201
msgid "Password"
msgstr "Password"
-#: src/view/com/auth/login/Login.tsx:157
+#: src/view/com/modals/ChangePassword.tsx:142
+msgid "Password Changed"
+msgstr "Password Cambiato"
+
+#: src/screens/Login/index.tsx:157
msgid "Password updated"
msgstr "Password aggiornata"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:28
+#: src/screens/Login/PasswordUpdatedForm.tsx:30
msgid "Password updated!"
msgstr "Password aggiornata!"
-#: src/Navigation.tsx:160
+#: src/Navigation.tsx:164
msgid "People followed by @{0}"
msgstr "Persone seguite da @{0}"
-#: src/Navigation.tsx:153
+#: src/Navigation.tsx:157
msgid "People following @{0}"
msgstr "Persone che seguono @{0}"
@@ -2330,120 +3381,160 @@ msgstr "È richiesta l'autorizzazione per accedere al la cartella delle immagini
msgid "Permission to access camera roll was denied. Please enable it in your system settings."
msgstr "L'autorizzazione per accedere la cartella delle immagini è stata negata. Si prega di abilitarla nelle impostazioni del sistema."
-#: src/view/com/auth/create/Step2.tsx:181
-msgid "Phone number"
-msgstr "Numero di telefono"
+#: src/screens/Onboarding/index.tsx:31
+msgid "Pets"
+msgstr "Animali di compagnia"
+
+#~ msgid "Phone number"
+#~ msgstr "Numero di telefono"
#: src/view/com/modals/SelfLabel.tsx:121
msgid "Pictures meant for adults."
msgstr "Immagini per adulti."
-#: src/view/screens/ProfileFeed.tsx:362 src/view/screens/ProfileList.tsx:559
+#: src/view/screens/ProfileFeed.tsx:292
+#: src/view/screens/ProfileList.tsx:563
msgid "Pin to home"
-msgstr "Fissa sulla pagina principale"
+msgstr "Fissa su Home"
+
+#: src/view/screens/ProfileFeed.tsx:295
+msgid "Pin to Home"
+msgstr "Fissa su Home"
#: src/view/screens/SavedFeeds.tsx:88
msgid "Pinned Feeds"
-msgstr "Feed Fissati"
+msgstr "Feeds Fissi"
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:111
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:123
msgid "Play {0}"
msgstr "Riproduci {0}"
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:54
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:55
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:57
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:58
msgid "Play Video"
msgstr "Riproduci video"
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:110
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:122
msgid "Plays the GIF"
msgstr "Riproduci questa GIF"
-#: src/view/com/auth/create/state.ts:177
+#: src/screens/Signup/state.ts:241
msgid "Please choose your handle."
msgstr "Scegli il tuo nome utente."
-#: src/view/com/auth/create/state.ts:160
+#: src/screens/Signup/state.ts:234
msgid "Please choose your password."
msgstr "Scegli la tua password."
+#: src/screens/Signup/state.ts:251
+msgid "Please complete the verification captcha."
+msgstr "Si prega di completare il captcha di verifica."
+
#: src/view/com/modals/ChangeEmail.tsx:67
msgid "Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed."
msgstr "Conferma la tua email prima di cambiarla. Si tratta di un requisito temporaneo durante l'aggiunta degli strumenti di aggiornamento della posta elettronica e verrà presto rimosso."
-#: src/view/com/modals/AddAppPasswords.tsx:89
+#: src/view/com/modals/AddAppPasswords.tsx:91
msgid "Please enter a name for your app password. All spaces is not allowed."
msgstr "Inserisci un nome per la password dell'app. Tutti gli spazi non sono consentiti."
-#: src/view/com/auth/create/Step2.tsx:204
-msgid "Please enter a phone number that can receive SMS text messages."
-msgstr "Inserisci un numero di telefono in grado di ricevere messaggi di testo SMS."
+#~ msgid "Please enter a phone number that can receive SMS text messages."
+#~ msgstr "Inserisci un numero di telefono in grado di ricevere messaggi di testo SMS."
-#: src/view/com/modals/AddAppPasswords.tsx:144
+#: src/view/com/modals/AddAppPasswords.tsx:146
msgid "Please enter a unique name for this App Password or use our randomly generated one."
msgstr "Inserisci un nome unico per la password dell'app o utilizzane uno generato automaticamente."
-#: src/view/com/auth/create/state.ts:170
-msgid "Please enter the code you received by SMS."
-msgstr "Inserisci il codice che hai ricevuto via SMS."
+#: src/components/dialogs/MutedWords.tsx:67
+msgid "Please enter a valid word, tag, or phrase to mute"
+msgstr "Inserisci una parola, un tag o una frase valida da silenziare"
+
+#~ msgid "Please enter the code you received by SMS."
+#~ msgstr "Inserisci il codice che hai ricevuto via SMS."
-#: src/view/com/auth/create/Step2.tsx:279
-msgid "Please enter the verification code sent to {phoneNumberFormatted}."
-msgstr "Inserisci il codice di verifica inviato a {phoneNumberFormatted}."
+#~ msgid "Please enter the verification code sent to {phoneNumberFormatted}."
+#~ msgstr "Inserisci il codice di verifica inviato a {phoneNumberFormatted}."
-#: src/view/com/auth/create/state.ts:146
+#: src/screens/Signup/state.ts:220
msgid "Please enter your email."
msgstr "Inserisci la tua email."
-#: src/view/com/modals/DeleteAccount.tsx:187
+#: src/view/com/modals/DeleteAccount.tsx:190
msgid "Please enter your password as well:"
msgstr "Inserisci anche la tua password:"
-#: src/view/com/modals/AppealLabel.tsx:72
-#: src/view/com/modals/AppealLabel.tsx:75
-msgid "Please tell us why you think this content warning was incorrectly applied!"
-msgstr "Spiegaci perché ritieni che questo avviso sui contenuti sia stato applicato in modo errato!"
+#: src/components/moderation/LabelsOnMeDialog.tsx:221
+msgid "Please explain why you think this label was incorrectly applied by {0}"
+msgstr "Spiega perché ritieni che questa etichetta sia stata applicata in modo errato da {0}"
+
+#~ msgid "Please tell us why you think this content warning was incorrectly applied!"
+#~ msgstr "Spiegaci perché ritieni che questo avviso sui contenuti sia stato applicato in modo errato!"
+
+#~ msgid "Please tell us why you think this decision was incorrect."
+#~ msgstr "Per favore spiegaci perché ritieni che questa decisione sia stata sbagliata."
#: src/view/com/modals/VerifyEmail.tsx:101
msgid "Please Verify Your Email"
msgstr "Verifica la tua email"
-#: src/view/com/composer/Composer.tsx:215
+#: src/view/com/composer/Composer.tsx:222
msgid "Please wait for your link card to finish loading"
msgstr "Attendi il caricamento della scheda di collegamento"
+#: src/screens/Onboarding/index.tsx:37
+msgid "Politics"
+msgstr "Politica"
+
#: src/view/com/modals/SelfLabel.tsx:111
msgid "Porn"
msgstr "Porno"
-#: src/view/com/composer/Composer.tsx:350
-#: src/view/com/composer/Composer.tsx:358
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#~ msgid "Pornography"
+#~ msgstr "Pornografia"
+
+#: src/view/com/composer/Composer.tsx:367
+#: src/view/com/composer/Composer.tsx:375
msgctxt "action"
msgid "Post"
msgstr "Post"
-#: src/view/com/post-thread/PostThread.tsx:227
-#: src/view/screens/PostThread.tsx:82
+#: src/view/com/post-thread/PostThread.tsx:292
msgctxt "description"
msgid "Post"
msgstr "Post"
-#: src/view/com/post-thread/PostThreadItem.tsx:176
+#~ msgid "Post"
+#~ msgstr "Post"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:175
msgid "Post by {0}"
msgstr "Pubblicato da {0}"
-#: src/Navigation.tsx:172 src/Navigation.tsx:179 src/Navigation.tsx:186
+#: src/Navigation.tsx:176
+#: src/Navigation.tsx:183
+#: src/Navigation.tsx:190
msgid "Post by @{0}"
msgstr "Pubblicato da @{0}"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:82
+#: src/view/com/util/forms/PostDropdownBtn.tsx:105
msgid "Post deleted"
msgstr "Post eliminato"
-#: src/view/com/post-thread/PostThread.tsx:382
+#: src/view/com/post-thread/PostThread.tsx:157
msgid "Post hidden"
msgstr "Post nascosto"
+#: src/components/moderation/ModerationDetailsDialog.tsx:97
+#: src/lib/moderation/useModerationCauseDescription.ts:99
+msgid "Post Hidden by Muted Word"
+msgstr "Post nascosto dalla Parola Silenziata"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:100
+#: src/lib/moderation/useModerationCauseDescription.ts:108
+msgid "Post Hidden by You"
+msgstr "Post nascosto da te"
+
#: src/view/com/composer/select-language/SelectLangBtn.tsx:87
msgid "Post language"
msgstr "Lingua del post"
@@ -2452,23 +3543,42 @@ msgstr "Lingua del post"
msgid "Post Languages"
msgstr "Lingue del post"
-#: src/view/com/post-thread/PostThread.tsx:434
+#: src/view/com/post-thread/PostThread.tsx:152
+#: src/view/com/post-thread/PostThread.tsx:164
msgid "Post not found"
msgstr "Post non trovato"
-#: src/view/screens/Profile.tsx:161
+#: src/components/TagMenu/index.tsx:253
+msgid "posts"
+msgstr "post"
+
+#: src/view/screens/Profile.tsx:190
msgid "Posts"
msgstr "Post"
+#: src/components/dialogs/MutedWords.tsx:89
+msgid "Posts can be muted based on their text, their tags, or both."
+msgstr "I post possono essere silenziati in base al testo, ai tag o entrambi."
+
#: src/view/com/posts/FeedErrorMessage.tsx:64
msgid "Posts hidden"
msgstr "Post nascosto"
-#: src/view/com/modals/LinkWarning.tsx:46
+#: src/view/com/modals/LinkWarning.tsx:60
msgid "Potentially Misleading Link"
msgstr "Link potenzialmente fuorviante"
-#: src/view/com/lightbox/Lightbox.web.tsx:128
+#: src/components/forms/HostingProvider.tsx:45
+msgid "Press to change hosting provider"
+msgstr ""
+
+#: src/components/Error.tsx:74
+#: src/components/Lists.tsx:80
+#: src/screens/Signup/index.tsx:186
+msgid "Press to retry"
+msgstr "Premere per riprovare"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:150
msgid "Previous image"
msgstr "Immagine precedente"
@@ -2480,50 +3590,65 @@ msgstr "Lingua principale"
msgid "Prioritize Your Follows"
msgstr "Dai priorità a quelli che segui"
-#: src/view/screens/Settings.tsx:598 src/view/shell/desktop/RightNav.tsx:84
+#: src/view/screens/Settings/index.tsx:652
+#: src/view/shell/desktop/RightNav.tsx:72
msgid "Privacy"
msgstr "Privacy"
-#: src/Navigation.tsx:217 src/view/screens/PrivacyPolicy.tsx:29
-#: src/view/screens/Settings.tsx:824 src/view/shell/Drawer.tsx:265
+#: src/Navigation.tsx:231
+#: src/screens/Signup/StepInfo/Policies.tsx:56
+#: src/view/screens/PrivacyPolicy.tsx:29
+#: src/view/screens/Settings/index.tsx:923
+#: src/view/shell/Drawer.tsx:265
msgid "Privacy Policy"
msgstr "Informativa sulla privacy"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:194
+#: src/screens/Login/ForgotPasswordForm.tsx:156
msgid "Processing..."
msgstr "Elaborazione in corso…"
-#: src/view/shell/bottom-bar/BottomBar.tsx:247
-#: src/view/shell/desktop/LeftNav.tsx:415 src/view/shell/Drawer.tsx:72
-#: src/view/shell/Drawer.tsx:549 src/view/shell/Drawer.tsx:550
+#: src/view/screens/DebugMod.tsx:888
+#: src/view/screens/Profile.tsx:342
+msgid "profile"
+msgstr "profilo"
+
+#: src/view/shell/bottom-bar/BottomBar.tsx:260
+#: src/view/shell/desktop/LeftNav.tsx:419
+#: src/view/shell/Drawer.tsx:70
+#: src/view/shell/Drawer.tsx:549
+#: src/view/shell/Drawer.tsx:550
msgid "Profile"
msgstr "Profilo"
-#: src/view/com/modals/EditProfile.tsx:128
+#: src/view/com/modals/EditProfile.tsx:129
msgid "Profile updated"
msgstr "Profilo aggiornato"
-#: src/view/screens/Settings.tsx:882
+#: src/view/screens/Settings/index.tsx:981
msgid "Protect your account by verifying your email."
msgstr "Proteggi il tuo account verificando la tua email."
+#: src/screens/Onboarding/StepFinished.tsx:105
+msgid "Public"
+msgstr "Pubblico"
+
#: src/view/screens/ModerationModlists.tsx:61
msgid "Public, shareable lists of users to mute or block in bulk."
msgstr "Elenchi pubblici e condivisibili di utenti da disattivare o bloccare in blocco."
#: src/view/screens/Lists.tsx:61
msgid "Public, shareable lists which can drive feeds."
-msgstr "Elenchi pubblici e condivisibili che possono gestire i feeds."
+msgstr "Liste pubbliche e condivisibili che possono impulsare i feeds."
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish post"
msgstr "Pubblica il post"
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish reply"
msgstr "Pubblica la risposta"
-#: src/view/com/modals/Repost.tsx:65
+#: src/view/com/modals/Repost.tsx:66
msgctxt "action"
msgid "Quote post"
msgstr "Cita il post"
@@ -2532,19 +3657,26 @@ msgstr "Cita il post"
msgid "Quote post"
msgstr "Cita il post"
-#: src/view/com/modals/Repost.tsx:70
+#: src/view/com/modals/Repost.tsx:71
msgctxt "action"
msgid "Quote Post"
msgstr "Cita il post"
+#~ msgid "Quote Post"
+#~ msgstr "Cita il post"
+
#: src/view/screens/PreferencesThreads.tsx:86
msgid "Random (aka \"Poster's Roulette\")"
msgstr "Selezione a caso (nota anche come \"Poster's Roulette\")"
-#: src/view/com/modals/EditImage.tsx:236
+#: src/view/com/modals/EditImage.tsx:237
msgid "Ratios"
msgstr "Rapporti"
+#: src/view/screens/Search/Search.tsx:777
+msgid "Recent Searches"
+msgstr "Ricerche recenti"
+
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116
msgid "Recommended Feeds"
msgstr "Feeds consigliati"
@@ -2553,34 +3685,49 @@ msgstr "Feeds consigliati"
msgid "Recommended Users"
msgstr "Utenti consigliati"
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/components/dialogs/MutedWords.tsx:286
+#: src/view/com/feeds/FeedSourceCard.tsx:283
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/SelfLabel.tsx:83
-#: src/view/com/modals/UserAddRemoveLists.tsx:203
-#: src/view/com/util/UserAvatar.tsx:282 src/view/com/util/UserBanner.tsx:89
+#: src/view/com/modals/UserAddRemoveLists.tsx:219
+#: src/view/com/posts/FeedErrorMessage.tsx:204
msgid "Remove"
msgstr "Rimuovi"
-#: src/view/com/feeds/FeedSourceCard.tsx:106
-msgid "Remove {0} from my feeds?"
-msgstr "Rimuovere {0} dai miei feeds?"
+#~ msgid "Remove {0} from my feeds?"
+#~ msgstr "Rimuovere {0} dai miei feeds?"
#: src/view/com/util/AccountDropdownBtn.tsx:22
msgid "Remove account"
msgstr "Rimuovi l'account"
-#: src/view/com/posts/FeedErrorMessage.tsx:131
-#: src/view/com/posts/FeedErrorMessage.tsx:166
+#: src/view/com/util/UserAvatar.tsx:358
+msgid "Remove Avatar"
+msgstr "Rimuovere Avatar"
+
+#: src/view/com/util/UserBanner.tsx:148
+msgid "Remove Banner"
+msgstr "Rimuovi il Banner"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:160
msgid "Remove feed"
msgstr "Rimuovi il feed"
-#: src/view/com/feeds/FeedSourceCard.tsx:105
-#: src/view/com/feeds/FeedSourceCard.tsx:167
-#: src/view/com/feeds/FeedSourceCard.tsx:172
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:281
+#: src/view/com/posts/FeedErrorMessage.tsx:201
+msgid "Remove feed?"
+msgstr "Rimuovere il feed?"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:173
+#: src/view/com/feeds/FeedSourceCard.tsx:233
+#: src/view/screens/ProfileFeed.tsx:335
+#: src/view/screens/ProfileFeed.tsx:341
msgid "Remove from my feeds"
msgstr "Rimuovi dai miei feed"
+#: src/view/com/feeds/FeedSourceCard.tsx:278
+msgid "Remove from my feeds?"
+msgstr "Rimuovere dai miei feed?"
+
#: src/view/com/composer/photos/Gallery.tsx:167
msgid "Remove image"
msgstr "Rimuovi l'immagine"
@@ -2589,33 +3736,42 @@ msgstr "Rimuovi l'immagine"
msgid "Remove image preview"
msgstr "Rimuovi l'anteprima dell'immagine"
-#: src/view/com/modals/Repost.tsx:47
+#: src/components/dialogs/MutedWords.tsx:329
+msgid "Remove mute word from your list"
+msgstr "Rimuovi la parola silenziata dalla tua lista"
+
+#: src/view/com/modals/Repost.tsx:48
msgid "Remove repost"
msgstr "Rimuovi la ripubblicazione"
-#: src/view/com/feeds/FeedSourceCard.tsx:173
-msgid "Remove this feed from my feeds?"
-msgstr "Rimuovere questo feed dai miei feeds?"
+#~ msgid "Remove this feed from my feeds?"
+#~ msgstr "Rimuovere questo feed dai miei feeds?"
-#: src/view/com/posts/FeedErrorMessage.tsx:132
-msgid "Remove this feed from your saved feeds?"
-msgstr "Elimina questo feed dai feeds salvati?"
+#: src/view/com/posts/FeedErrorMessage.tsx:202
+msgid "Remove this feed from your saved feeds"
+msgstr "Rimuovi questo feed dai feed salvati"
+
+#~ msgid "Remove this feed from your saved feeds?"
+#~ msgstr "Elimina questo feed dai feeds salvati?"
#: src/view/com/modals/ListAddRemoveUsers.tsx:199
-#: src/view/com/modals/UserAddRemoveLists.tsx:136
+#: src/view/com/modals/UserAddRemoveLists.tsx:152
msgid "Removed from list"
msgstr "Elimina dalla lista"
-#: src/view/com/feeds/FeedSourceCard.tsx:111
-#: src/view/com/feeds/FeedSourceCard.tsx:178
+#: src/view/com/feeds/FeedSourceCard.tsx:121
msgid "Removed from my feeds"
msgstr "Rimuovere dai miei feeds"
+#: src/view/screens/ProfileFeed.tsx:209
+msgid "Removed from your feeds"
+msgstr "Rimosso dai tuoi feed"
+
#: src/view/com/composer/ExternalEmbed.tsx:71
msgid "Removes default thumbnail from {0}"
msgstr "Elimina la miniatura predefinita da {0}"
-#: src/view/screens/Profile.tsx:162
+#: src/view/screens/Profile.tsx:191
msgid "Replies"
msgstr "Risposte"
@@ -2623,43 +3779,70 @@ msgstr "Risposte"
msgid "Replies to this thread are disabled"
msgstr "Le risposte a questo thread sono disabilitate"
-#: src/view/com/composer/Composer.tsx:348
+#: src/view/com/composer/Composer.tsx:365
msgctxt "action"
msgid "Reply"
-msgstr "Rispondi"
+msgstr "Risposta"
-#: src/view/screens/PreferencesHomeFeed.tsx:144
+#: src/view/screens/PreferencesFollowingFeed.tsx:144
msgid "Reply Filters"
msgstr "Filtri di risposta"
-#: src/view/com/post/Post.tsx:165 src/view/com/posts/FeedItem.tsx:286
+#: src/view/com/post/Post.tsx:166
+#: src/view/com/posts/FeedItem.tsx:280
msgctxt "description"
msgid "Reply to <0/>"
-msgstr "Rispondi a <0/>"
+msgstr "In risposta a <0/>"
-#: src/view/com/modals/report/Modal.tsx:166
-msgid "Report {collectionName}"
-msgstr "Segnala {collectionName}"
+#~ msgid "Report {collectionName}"
+#~ msgstr "Segnala {collectionName}"
-#: src/view/com/profile/ProfileHeader.tsx:408
+#: src/view/com/profile/ProfileMenu.tsx:319
+#: src/view/com/profile/ProfileMenu.tsx:322
msgid "Report Account"
-msgstr "Segnala il conto"
+msgstr "Segnala l'account"
-#: src/view/screens/ProfileFeed.tsx:301
+#: src/components/ReportDialog/index.tsx:49
+msgid "Report dialog"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:352
+#: src/view/screens/ProfileFeed.tsx:354
msgid "Report feed"
msgstr "Segnala il feed"
-#: src/view/screens/ProfileList.tsx:437
+#: src/view/screens/ProfileList.tsx:429
msgid "Report List"
msgstr "Segnala la lista"
-#: src/view/com/modals/report/SendReportButton.tsx:37
-#: src/view/com/util/forms/PostDropdownBtn.tsx:208
+#: src/view/com/util/forms/PostDropdownBtn.tsx:292
+#: src/view/com/util/forms/PostDropdownBtn.tsx:294
msgid "Report post"
msgstr "Segnala il post"
-#: src/view/com/modals/Repost.tsx:43 src/view/com/modals/Repost.tsx:48
-#: src/view/com/modals/Repost.tsx:53
+#: src/components/ReportDialog/SelectReportOptionView.tsx:42
+msgid "Report this content"
+msgstr "Segnala questo contenuto"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:55
+msgid "Report this feed"
+msgstr "Segnala questo feed"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:52
+msgid "Report this list"
+msgstr "Segnala questa lista"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:49
+msgid "Report this post"
+msgstr "Segnala questo post"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:46
+msgid "Report this user"
+msgstr "Segnala questo utente"
+
+#: src/view/com/modals/Repost.tsx:44
+#: src/view/com/modals/Repost.tsx:49
+#: src/view/com/modals/Repost.tsx:54
#: src/view/com/util/post-ctrls/RepostButton.tsx:61
msgctxt "action"
msgid "Repost"
@@ -2674,172 +3857,232 @@ msgstr "Ripubblicare"
msgid "Repost or quote post"
msgstr "Ripubblicare o citare il post"
+#~ msgid "Reposted by"
+#~ msgstr "Repost di"
+
#: src/view/screens/PostRepostedBy.tsx:27
-msgid "Reposted by"
-msgstr "Ripubblicato da"
+msgid "Reposted By"
+msgstr "Repost di"
-#: src/view/com/posts/FeedItem.tsx:206
-msgid "Reposted by {0})"
-msgstr "Ripubblicato da {0})"
+#: src/view/com/posts/FeedItem.tsx:197
+msgid "Reposted by {0}"
+msgstr "Repost di {0}"
-#: src/view/com/posts/FeedItem.tsx:223
+#~ msgid "Reposted by {0})"
+#~ msgstr "Repost di {0})"
+
+#: src/view/com/posts/FeedItem.tsx:214
msgid "Reposted by <0/>"
-msgstr "Ripubblicato da <0/>"
+msgstr "Repost di <0/>"
-#: src/view/com/notifications/FeedItem.tsx:162
+#: src/view/com/notifications/FeedItem.tsx:166
msgid "reposted your post"
-msgstr "ripubblicato il tuo post"
+msgstr "reposted il tuo post"
-#: src/view/com/post-thread/PostThreadItem.tsx:189
+#: src/view/com/post-thread/PostThreadItem.tsx:187
msgid "Reposts of this post"
-msgstr "Ripubblicazione di questo post"
+msgstr "Repost di questo post"
#: src/view/com/modals/ChangeEmail.tsx:181
#: src/view/com/modals/ChangeEmail.tsx:183
msgid "Request Change"
msgstr "Richiedi un cambio"
-#: src/view/com/auth/create/Step2.tsx:217
-msgid "Request code"
-msgstr "Richiedi un codice"
+#~ msgid "Request code"
+#~ msgstr "Richiedi un codice"
-#: src/view/screens/Settings.tsx:450
+#: src/view/com/modals/ChangePassword.tsx:241
+#: src/view/com/modals/ChangePassword.tsx:243
+msgid "Request Code"
+msgstr "Richiedi il codice"
+
+#: src/view/screens/Settings/index.tsx:475
msgid "Require alt text before posting"
msgstr "Richiedi il testo alternativo prima di pubblicare"
-#: src/view/com/auth/create/Step1.tsx:97
+#: src/screens/Signup/StepInfo/index.tsx:69
msgid "Required for this provider"
msgstr "Obbligatorio per questo operatore"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:98
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:108
+#: src/view/com/modals/ChangePassword.tsx:185
msgid "Reset code"
msgstr "Reimpostare il codice"
-#: src/view/screens/Settings.tsx:757
-msgid "Reset onboarding"
-msgstr "Reimposta l'incorporazione"
+#: src/view/com/modals/ChangePassword.tsx:192
+msgid "Reset Code"
+msgstr "Reimposta il Codice"
-#: src/view/screens/Settings.tsx:760
+#~ msgid "Reset onboarding"
+#~ msgstr "Reimposta l'incorporazione"
+
+#: src/view/screens/Settings/index.tsx:858
+#: src/view/screens/Settings/index.tsx:861
msgid "Reset onboarding state"
msgstr "Reimposta lo stato dell' incorporazione"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:100
+#: src/screens/Login/ForgotPasswordForm.tsx:86
msgid "Reset password"
msgstr "Reimposta la password"
-#: src/view/screens/Settings.tsx:747
-msgid "Reset preferences"
-msgstr "Reimposta le preferenze"
+#~ msgid "Reset preferences"
+#~ msgstr "Reimposta le preferenze"
-#: src/view/screens/Settings.tsx:750
+#: src/view/screens/Settings/index.tsx:848
+#: src/view/screens/Settings/index.tsx:851
msgid "Reset preferences state"
msgstr "Reimposta lo stato delle preferenze"
-#: src/view/screens/Settings.tsx:758
+#: src/view/screens/Settings/index.tsx:859
msgid "Resets the onboarding state"
msgstr "Reimposta lo stato dell'incorporazione"
-#: src/view/screens/Settings.tsx:748
+#: src/view/screens/Settings/index.tsx:849
msgid "Resets the preferences state"
msgstr "Reimposta lo stato delle preferenze"
-#: src/view/com/auth/login/LoginForm.tsx:266
+#: src/screens/Login/LoginForm.tsx:235
msgid "Retries login"
msgstr "Ritenta l'accesso"
#: src/view/com/util/error/ErrorMessage.tsx:57
-#: src/view/com/util/error/ErrorScreen.tsx:67
+#: src/view/com/util/error/ErrorScreen.tsx:74
msgid "Retries the last action, which errored out"
msgstr "Ritenta l'ultima azione che ha generato un errore"
-#: src/view/com/auth/create/CreateAccount.tsx:164
-#: src/view/com/auth/create/CreateAccount.tsx:168
-#: src/view/com/auth/create/Step2.tsx:252
-#: src/view/com/auth/login/LoginForm.tsx:265
-#: src/view/com/auth/login/LoginForm.tsx:268
+#: src/components/Error.tsx:79
+#: src/components/Lists.tsx:91
+#: src/screens/Login/LoginForm.tsx:234
+#: src/screens/Login/LoginForm.tsx:241
+#: src/screens/Onboarding/StepInterests/index.tsx:225
+#: src/screens/Onboarding/StepInterests/index.tsx:228
+#: src/screens/Signup/index.tsx:193
#: src/view/com/util/error/ErrorMessage.tsx:55
-#: src/view/com/util/error/ErrorScreen.tsx:65
+#: src/view/com/util/error/ErrorScreen.tsx:72
msgid "Retry"
msgstr "Riprova"
-#: src/view/com/auth/create/Step2.tsx:245
-msgid "Retry."
-msgstr "Riprova."
+#~ msgid "Retry."
+#~ msgstr "Riprova."
-#: src/view/screens/ProfileList.tsx:877
+#: src/components/Error.tsx:86
+#: src/view/screens/ProfileList.tsx:917
msgid "Return to previous page"
msgstr "Ritorna alla pagina precedente"
-#: src/view/shell/desktop/RightNav.tsx:59
-msgid "SANDBOX. Posts and accounts are not permanent."
-msgstr "SANDBOX. I post e gli account non sono permanenti."
+#: src/view/screens/NotFound.tsx:59
+msgid "Returns to home page"
+msgstr "Ritorna su Home"
-#: src/view/com/lightbox/Lightbox.tsx:129
-#: src/view/com/modals/CreateOrEditList.tsx:276
-msgctxt "action"
+#: src/view/screens/NotFound.tsx:58
+#: src/view/screens/ProfileFeed.tsx:113
+msgid "Returns to previous page"
+msgstr "Ritorna alla pagina precedente"
+
+#~ msgid "SANDBOX. Posts and accounts are not permanent."
+#~ msgstr "SANDBOX. I post e gli account non sono permanenti."
+
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/view/com/modals/ChangeHandle.tsx:174
+#: src/view/com/modals/CreateOrEditList.tsx:338
+#: src/view/com/modals/EditProfile.tsx:225
msgid "Save"
msgstr "Salva"
-#: src/view/com/modals/BirthDateSettings.tsx:94
-#: src/view/com/modals/BirthDateSettings.tsx:97
-#: src/view/com/modals/ChangeHandle.tsx:173
-#: src/view/com/modals/CreateOrEditList.tsx:268
-#: src/view/com/modals/EditProfile.tsx:224 src/view/screens/ProfileFeed.tsx:354
+#: src/view/com/lightbox/Lightbox.tsx:132
+#: src/view/com/modals/CreateOrEditList.tsx:346
+msgctxt "action"
msgid "Save"
msgstr "Salva"
-#: src/view/com/modals/AltImage.tsx:106
+#: src/view/com/modals/AltImage.tsx:131
msgid "Save alt text"
msgstr "Salva il testo alternativo"
-#: src/view/com/modals/EditProfile.tsx:232
+#: src/components/dialogs/BirthDateSettings.tsx:119
+msgid "Save birthday"
+msgstr "Salva il compleanno"
+
+#: src/view/com/modals/EditProfile.tsx:233
msgid "Save Changes"
msgstr "Salva i cambi"
-#: src/view/com/modals/ChangeHandle.tsx:170
+#: src/view/com/modals/ChangeHandle.tsx:171
msgid "Save handle change"
msgstr "Salva la modifica del tuo identificatore"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:144
+#: src/view/com/modals/crop-image/CropImage.web.tsx:145
msgid "Save image crop"
msgstr "Salva il ritaglio dell'immagine"
+#: src/view/screens/ProfileFeed.tsx:336
+#: src/view/screens/ProfileFeed.tsx:342
+msgid "Save to my feeds"
+msgstr "Salva nei miei feed"
+
#: src/view/screens/SavedFeeds.tsx:122
msgid "Saved Feeds"
msgstr "Canali salvati"
-#: src/view/com/modals/EditProfile.tsx:225
+#: src/view/com/lightbox/Lightbox.tsx:81
+msgid "Saved to your camera roll."
+msgstr "Salvato nel rullino fotografico."
+
+#: src/view/screens/ProfileFeed.tsx:213
+msgid "Saved to your feeds"
+msgstr "Salvato nei tuoi feed"
+
+#: src/view/com/modals/EditProfile.tsx:226
msgid "Saves any changes to your profile"
msgstr "Salva eventuali modifiche al tuo profilo"
-#: src/view/com/modals/ChangeHandle.tsx:171
+#: src/view/com/modals/ChangeHandle.tsx:172
msgid "Saves handle change to {handle}"
msgstr "Salva la modifica del cambio dell'utente in {handle}"
-#: src/view/screens/ProfileList.tsx:833
+#: src/view/com/modals/crop-image/CropImage.web.tsx:146
+msgid "Saves image crop settings"
+msgstr "Salva le impostazioni di ritaglio dell'immagine"
+
+#: src/screens/Onboarding/index.tsx:36
+msgid "Science"
+msgstr "Scienza"
+
+#: src/view/screens/ProfileList.tsx:873
msgid "Scroll to top"
msgstr "Scorri verso l'alto"
-#: src/Navigation.tsx:435 src/view/com/auth/LoggedOut.tsx:122
+#: src/Navigation.tsx:459
+#: src/view/com/auth/LoggedOut.tsx:123
#: src/view/com/modals/ListAddRemoveUsers.tsx:75
-#: src/view/com/util/forms/SearchInput.tsx:53
-#: src/view/com/util/forms/SearchInput.tsx:65
-#: src/view/screens/Search/Search.tsx:408
-#: src/view/screens/Search/Search.tsx:566
-#: src/view/screens/Search/Search.tsx:579
-#: src/view/shell/bottom-bar/BottomBar.tsx:159
-#: src/view/shell/desktop/LeftNav.tsx:324 src/view/shell/desktop/Search.tsx:214
-#: src/view/shell/desktop/Search.tsx:223 src/view/shell/Drawer.tsx:365
+#: src/view/com/util/forms/SearchInput.tsx:67
+#: src/view/com/util/forms/SearchInput.tsx:79
+#: src/view/screens/Search/Search.tsx:421
+#: src/view/screens/Search/Search.tsx:670
+#: src/view/screens/Search/Search.tsx:688
+#: src/view/shell/bottom-bar/BottomBar.tsx:169
+#: src/view/shell/desktop/LeftNav.tsx:328
+#: src/view/shell/desktop/Search.tsx:215
+#: src/view/shell/desktop/Search.tsx:224
+#: src/view/shell/Drawer.tsx:365
#: src/view/shell/Drawer.tsx:366
msgid "Search"
msgstr "Cerca"
-#: src/view/screens/Search/Search.tsx:628 src/view/shell/desktop/Search.tsx:255
+#: src/view/screens/Search/Search.tsx:737
+#: src/view/shell/desktop/Search.tsx:256
msgid "Search for \"{query}\""
msgstr "Cerca \"{query}\""
-#: src/view/com/auth/LoggedOut.tsx:104 src/view/com/auth/LoggedOut.tsx:105
+#: src/components/TagMenu/index.tsx:145
+msgid "Search for all posts by @{authorHandle} with tag {displayTag}"
+msgstr "Cerca tutti i post di @{authorHandle} con tag {displayTag}"
+
+#: src/components/TagMenu/index.tsx:94
+msgid "Search for all posts with tag {displayTag}"
+msgstr "Cerca tutti i post con il tag {displayTag}"
+
+#: src/view/com/auth/LoggedOut.tsx:105
+#: src/view/com/auth/LoggedOut.tsx:106
#: src/view/com/modals/ListAddRemoveUsers.tsx:70
msgid "Search for users"
msgstr "Cerca utenti"
@@ -2848,11 +4091,27 @@ msgstr "Cerca utenti"
msgid "Security Step Required"
msgstr "Passaggio di sicurezza obbligatorio"
+#: src/components/TagMenu/index.web.tsx:66
+msgid "See {truncatedTag} posts"
+msgstr "Vedi {truncatedTag} post"
+
+#: src/components/TagMenu/index.web.tsx:83
+msgid "See {truncatedTag} posts by user"
+msgstr "Visualizza i post {truncatedTag} per utente"
+
+#: src/components/TagMenu/index.tsx:128
+msgid "See <0>{displayTag}0> posts"
+msgstr "Vedi <0>{displayTag}0> posts"
+
+#: src/components/TagMenu/index.tsx:187
+msgid "See <0>{displayTag}0> posts by this user"
+msgstr "Vedi <0>{displayTag}0> posts di questo utente"
+
#: src/view/screens/SavedFeeds.tsx:163
msgid "See this guide"
msgstr "Consulta questa guida"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:39
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:40
msgid "See what's next"
msgstr "Scopri cosa c'è dopo"
@@ -2860,104 +4119,173 @@ msgstr "Scopri cosa c'è dopo"
msgid "Select {item}"
msgstr "Seleziona {item}"
-#: src/view/com/modals/ServerInput.tsx:75
-msgid "Select Bluesky Social"
-msgstr "Seleziona Bluesky Social"
+#: src/screens/Login/ChooseAccountForm.tsx:61
+msgid "Select account"
+msgstr ""
+
+#~ msgid "Select Bluesky Social"
+#~ msgstr "Seleziona Bluesky Social"
-#: src/view/com/auth/login/Login.tsx:117
+#: src/screens/Login/index.tsx:120
msgid "Select from an existing account"
msgstr "Seleziona da un account esistente"
+#: src/view/screens/LanguageSettings.tsx:299
+msgid "Select languages"
+msgstr "Seleziona lingue"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:30
+msgid "Select moderator"
+msgstr "Seleziona moderatore"
+
#: src/view/com/util/Selector.tsx:107
msgid "Select option {i} of {numItems}"
msgstr "Seleziona l'opzione {i} di {numItems}"
-#: src/view/com/auth/create/Step1.tsx:77
-#: src/view/com/auth/login/LoginForm.tsx:147
-msgid "Select service"
-msgstr "Selecciona el servei"
+#: src/view/com/auth/create/Step1.tsx:96
+#: src/view/com/auth/login/LoginForm.tsx:153
+#~ msgid "Select service"
+#~ msgstr "Selecciona el servei"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:52
+msgid "Select some accounts below to follow"
+msgstr "Seleziona alcuni account da seguire qui giù"
+
+#: src/components/ReportDialog/SubmitView.tsx:135
+msgid "Select the moderation service(s) to report to"
+msgstr "Seleziona il/i servizio/i di moderazione per fare la segnalazione"
+
+#: src/view/com/auth/server-input/index.tsx:82
+msgid "Select the service that hosts your data."
+msgstr "Seleziona il servizio che ospita i tuoi dati."
+
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:100
+msgid "Select topical feeds to follow from the list below"
+msgstr "Seleziona i feeds con temi da seguire dal seguente elenco"
+
+#: src/screens/Onboarding/StepModeration/index.tsx:63
+msgid "Select what you want to see (or not see), and we’ll handle the rest."
+msgstr "Seleziona ciò che vuoi vedere (o non vedere) e noi gestiremo il resto."
#: src/view/screens/LanguageSettings.tsx:281
msgid "Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown."
msgstr "Seleziona le lingue che desideri includere nei feed a cui sei iscritto. Se non ne viene selezionata nessuna, verranno visualizzate tutte le lingue."
+#~ msgid "Select your app language for the default text to display in the app"
+#~ msgstr "Seleziona la lingua dell'app per il testo predefinito da visualizzare nell'app"
+
#: src/view/screens/LanguageSettings.tsx:98
-msgid "Select your app language for the default text to display in the app"
-msgstr "Seleziona la lingua dell'app per il testo predefinito da visualizzare nell'app"
+msgid "Select your app language for the default text to display in the app."
+msgstr "Seleziona la lingua dell'app per il testo predefinito da visualizzare nell'app."
+
+#: src/screens/Signup/StepInfo/index.tsx:133
+msgid "Select your date of birth"
+msgstr ""
-#: src/view/com/auth/create/Step2.tsx:153
-msgid "Select your phone's country"
-msgstr "Seleziona il Paese del tuo cellulare"
+#: src/screens/Onboarding/StepInterests/index.tsx:200
+msgid "Select your interests from the options below"
+msgstr "Seleziona i tuoi interessi dalle seguenti opzioni"
+
+#~ msgid "Select your phone's country"
+#~ msgstr "Seleziona il Paese del tuo cellulare"
#: src/view/screens/LanguageSettings.tsx:190
msgid "Select your preferred language for translations in your feed."
msgstr "Seleziona la tua lingua preferita per le traduzioni nel tuo feed."
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:117
+msgid "Select your primary algorithmic feeds"
+msgstr "Seleziona i tuoi feed algoritmici principali"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:133
+msgid "Select your secondary algorithmic feeds"
+msgstr "Seleziona i tuoi feed algoritmici secondari"
+
#: src/view/com/modals/VerifyEmail.tsx:202
#: src/view/com/modals/VerifyEmail.tsx:204
msgid "Send Confirmation Email"
msgstr "Invia email di conferma"
-#: src/view/com/modals/DeleteAccount.tsx:127
+#: src/view/com/modals/DeleteAccount.tsx:130
msgid "Send email"
msgstr "Invia email"
-#: src/view/com/modals/DeleteAccount.tsx:140
+#: src/view/com/modals/DeleteAccount.tsx:143
msgctxt "action"
msgid "Send Email"
msgstr "Invia email"
-#: src/view/shell/Drawer.tsx:298 src/view/shell/Drawer.tsx:319
+#~ msgid "Send Email"
+#~ msgstr "Envia Email"
+
+#: src/view/shell/Drawer.tsx:298
+#: src/view/shell/Drawer.tsx:319
msgid "Send feedback"
msgstr "Invia feedback"
-#: src/view/com/modals/report/SendReportButton.tsx:45
-msgid "Send Report"
-msgstr "Invia segnalazione"
+#: src/components/ReportDialog/SubmitView.tsx:214
+#: src/components/ReportDialog/SubmitView.tsx:218
+msgid "Send report"
+msgstr "Invia la segnalazione"
+
+#~ msgid "Send Report"
+#~ msgstr "Invia segnalazione"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:44
+msgid "Send report to {0}"
+msgstr "Invia la segnalazione a {0}"
-#: src/view/com/modals/DeleteAccount.tsx:129
+#: src/view/com/modals/DeleteAccount.tsx:132
msgid "Sends email with confirmation code for account deletion"
msgstr "Invia un'email con il codice di conferma per la cancellazione dell'account"
-#: src/view/com/modals/ContentFilteringSettings.tsx:306
-msgid "Set {value} for {labelGroup} content moderation policy"
-msgstr "Imposta {value} per la politica di moderazione dei contenuti di {labelGroup}"
+#: src/view/com/auth/server-input/index.tsx:114
+msgid "Server address"
+msgstr "Indirizzo del server"
-#: src/view/com/modals/ContentFilteringSettings.tsx:155
-#: src/view/com/modals/ContentFilteringSettings.tsx:174
-msgctxt "action"
-msgid "Set Age"
-msgstr "Imposta l'età"
+#~ msgid "Set {value} for {labelGroup} content moderation policy"
+#~ msgstr "Imposta {value} per la politica di moderazione dei contenuti di {labelGroup}"
+
+#~ msgctxt "action"
+#~ msgid "Set Age"
+#~ msgstr "Imposta l'età"
+
+#: src/screens/Moderation/index.tsx:304
+msgid "Set birthdate"
+msgstr "Imposta la data di nascita"
-#: src/view/screens/Settings.tsx:482
-msgid "Set color theme to dark"
-msgstr "Imposta il colore del tema scuro"
+#~ msgid "Set color theme to dark"
+#~ msgstr "Imposta il colore del tema scuro"
-#: src/view/screens/Settings.tsx:475
-msgid "Set color theme to light"
-msgstr "Imposta il colore del tema su chiaro"
+#~ msgid "Set color theme to light"
+#~ msgstr "Imposta il colore del tema su chiaro"
-#: src/view/screens/Settings.tsx:469
-msgid "Set color theme to system setting"
-msgstr "Imposta il colore del tema basato sulle impostazioni del tuo sistema"
+#~ msgid "Set color theme to system setting"
+#~ msgstr "Imposta il colore del tema basato sulle impostazioni del tuo sistema"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:78
+#~ msgid "Set dark theme to the dark theme"
+#~ msgstr "Imposta il tema scuro sul tema scuro"
+
+#~ msgid "Set dark theme to the dim theme"
+#~ msgstr "Imposta il tema scuro sul tema scuro"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:102
msgid "Set new password"
msgstr "Imposta una nuova password"
-#: src/view/com/auth/create/Step1.tsx:169
-msgid "Set password"
-msgstr "Imposta la password"
+#: src/view/com/auth/create/Step1.tsx:202
+#~ msgid "Set password"
+#~ msgstr "Imposta la password"
-#: src/view/screens/PreferencesHomeFeed.tsx:225
+#: src/view/screens/PreferencesFollowingFeed.tsx:225
msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible."
msgstr "Seleziona \"No\" per nascondere tutti i post con le citazioni dal tuo feed. I repost saranno ancora visibili."
-#: src/view/screens/PreferencesHomeFeed.tsx:122
+#: src/view/screens/PreferencesFollowingFeed.tsx:122
msgid "Set this setting to \"No\" to hide all replies from your feed."
msgstr "Seleziona \"No\" per nascondere tutte le risposte dal tuo feed."
-#: src/view/screens/PreferencesHomeFeed.tsx:191
+#: src/view/screens/PreferencesFollowingFeed.tsx:191
msgid "Set this setting to \"No\" to hide all reposts from your feed."
msgstr "Seleziona \"No\" per nascondere tutte le ripubblicazioni dal tuo feed."
@@ -2965,29 +4293,70 @@ msgstr "Seleziona \"No\" per nascondere tutte le ripubblicazioni dal tuo feed."
msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature."
msgstr "Seleziona \"Sì\" per mostrare le risposte in una visualizzazione concatenata. Questa è una funzionalità sperimentale."
-#: src/view/screens/PreferencesHomeFeed.tsx:261
-msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
-msgstr "Seleziona \"Sì\" per mostrare esempi dei feed salvati nel feed successivo. Questa è una funzionalità sperimentale."
+#~ msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
+#~ msgstr "Seleziona \"Sì\" per mostrare esempi dei feed salvati nel feed successivo. Questa è una funzionalità sperimentale."
-#: src/view/com/modals/ChangeHandle.tsx:266
+#: src/view/screens/PreferencesFollowingFeed.tsx:261
+msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your Following feed. This is an experimental feature."
+msgstr "Imposta questa impostazione su \"Sì\" per mostrare esempi dei tuoi feed salvati nel feed Seguiti. Questa è una funzionalità sperimentale."
+
+#: src/screens/Onboarding/Layout.tsx:48
+msgid "Set up your account"
+msgstr "Configura il tuo account"
+
+#: src/view/com/modals/ChangeHandle.tsx:267
msgid "Sets Bluesky username"
msgstr "Imposta il tuo nome utente di Bluesky"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:153
+#: src/view/screens/Settings/index.tsx:507
+msgid "Sets color theme to dark"
+msgstr "Imposta il tema colore su scuro"
+
+#: src/view/screens/Settings/index.tsx:500
+msgid "Sets color theme to light"
+msgstr "Imposta il tema colore su chiaro"
+
+#: src/view/screens/Settings/index.tsx:494
+msgid "Sets color theme to system setting"
+msgstr "Imposta il tema colore basato impostazioni di sistema"
+
+#: src/view/screens/Settings/index.tsx:533
+msgid "Sets dark theme to the dark theme"
+msgstr "Imposta il tema scuro sul tema scuro"
+
+#: src/view/screens/Settings/index.tsx:526
+msgid "Sets dark theme to the dim theme"
+msgstr "Imposta il tema scuro sul tema semi fosco"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:113
msgid "Sets email for password reset"
msgstr "Imposta l'email per la reimpostazione della password"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:118
-msgid "Sets hosting provider for password reset"
-msgstr "Imposta il provider del hosting per la reimpostazione della password"
+#: src/view/com/auth/login/ForgotPasswordForm.tsx:122
+#~ msgid "Sets hosting provider for password reset"
+#~ msgstr "Imposta il provider del hosting per la reimpostazione della password"
-#: src/view/com/auth/create/Step1.tsx:78
-#: src/view/com/auth/login/LoginForm.tsx:148
-msgid "Sets server for the Bluesky client"
-msgstr "Imposta il server per il client Bluesky"
+#: src/view/com/modals/crop-image/CropImage.web.tsx:124
+msgid "Sets image aspect ratio to square"
+msgstr "Imposta le proporzioni quadrate sull'immagine"
-#: src/Navigation.tsx:134 src/view/screens/Settings.tsx:294
-#: src/view/shell/desktop/LeftNav.tsx:433 src/view/shell/Drawer.tsx:570
+#: src/view/com/modals/crop-image/CropImage.web.tsx:114
+msgid "Sets image aspect ratio to tall"
+msgstr "Imposta l'altura sulle proporzioni dell'immagine"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:104
+msgid "Sets image aspect ratio to wide"
+msgstr "Imposta l'amplio sulle proporzioni dell'immagine"
+
+#: src/view/com/auth/create/Step1.tsx:97
+#: src/view/com/auth/login/LoginForm.tsx:154
+#~ msgid "Sets server for the Bluesky client"
+#~ msgstr "Imposta il server per il client Bluesky"
+
+#: src/Navigation.tsx:139
+#: src/view/screens/Settings/index.tsx:313
+#: src/view/shell/desktop/LeftNav.tsx:437
+#: src/view/shell/Drawer.tsx:570
#: src/view/shell/Drawer.tsx:571
msgid "Settings"
msgstr "Impostazioni"
@@ -2996,58 +4365,105 @@ msgstr "Impostazioni"
msgid "Sexual activity or erotic nudity."
msgstr "Attività sessuale o nudità erotica."
-#: src/view/com/lightbox/Lightbox.tsx:138
+#: src/lib/moderation/useGlobalLabelStrings.ts:38
+msgid "Sexually Suggestive"
+msgstr "Sessualmente suggestivo"
+
+#: src/view/com/lightbox/Lightbox.tsx:141
msgctxt "action"
msgid "Share"
msgstr "Condividi"
-#: src/view/com/profile/ProfileHeader.tsx:342
-#: src/view/com/util/forms/PostDropdownBtn.tsx:151
-#: src/view/screens/ProfileList.tsx:396
+#: src/view/com/profile/ProfileMenu.tsx:215
+#: src/view/com/profile/ProfileMenu.tsx:224
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:235
+#: src/view/screens/ProfileList.tsx:388
msgid "Share"
msgstr "Condividi"
-#: src/view/screens/ProfileFeed.tsx:313
+#: src/view/com/profile/ProfileMenu.tsx:373
+#: src/view/com/util/forms/PostDropdownBtn.tsx:347
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:251
+msgid "Share anyway"
+msgstr "Condividi comunque"
+
+#: src/view/screens/ProfileFeed.tsx:362
+#: src/view/screens/ProfileFeed.tsx:364
msgid "Share feed"
msgstr "Condividi il feed"
-#: src/view/com/modals/ContentFilteringSettings.tsx:261
-#: src/view/com/util/moderation/ContentHider.tsx:107
-#: src/view/com/util/moderation/PostHider.tsx:108
-#: src/view/screens/Settings.tsx:344
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
+msgid "Share Link"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:92
+msgid "Shares the linked website"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:136
+#: src/components/moderation/PostHider.tsx:107
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:54
+#: src/view/screens/Settings/index.tsx:363
msgid "Show"
msgstr "Mostra"
-#: src/view/screens/PreferencesHomeFeed.tsx:68
+#: src/view/screens/PreferencesFollowingFeed.tsx:68
msgid "Show all replies"
msgstr "Mostra tutte le repliche"
-#: src/view/com/util/moderation/ScreenHider.tsx:132
+#: src/components/moderation/ScreenHider.tsx:169
+#: src/components/moderation/ScreenHider.tsx:172
msgid "Show anyway"
msgstr "Mostra comunque"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:27
+#: src/lib/moderation/useLabelBehaviorDescription.ts:63
+msgid "Show badge"
+msgstr "Mostra badge"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:61
+msgid "Show badge and filter from feeds"
+msgstr "Mostra badge e filtra dai feed"
+
#: src/view/com/modals/EmbedConsent.tsx:87
-msgid "Show embeds from {0}"
-msgstr "Mostra incorporamenti di {0}"
+#~ msgid "Show embeds from {0}"
+#~ msgstr "Mostra incorporamenti di {0}"
-#: src/view/com/profile/ProfileHeader.tsx:498
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:200
msgid "Show follows similar to {0}"
msgstr "Mostra follows simile a {0}"
-#: src/view/com/post-thread/PostThreadItem.tsx:569
-#: src/view/com/post/Post.tsx:196 src/view/com/posts/FeedItem.tsx:362
+#: src/view/com/post-thread/PostThreadItem.tsx:507
+#: src/view/com/post/Post.tsx:201
+#: src/view/com/posts/FeedItem.tsx:355
msgid "Show More"
msgstr "Mostra di più"
-#: src/view/screens/PreferencesHomeFeed.tsx:258
+#: src/view/screens/PreferencesFollowingFeed.tsx:258
msgid "Show Posts from My Feeds"
msgstr "Mostra post dai miei feed"
-#: src/view/screens/PreferencesHomeFeed.tsx:222
+#: src/view/screens/PreferencesFollowingFeed.tsx:222
msgid "Show Quote Posts"
msgstr "Mostra post con citazioni"
-#: src/view/screens/PreferencesHomeFeed.tsx:119
+#: src/screens/Onboarding/StepFollowingFeed.tsx:119
+msgid "Show quote-posts in Following feed"
+msgstr "Mostra i post con citazioni nel feed Seguiti"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:135
+msgid "Show quotes in Following"
+msgstr "Mostra le citazioni in Seguiti"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:95
+msgid "Show re-posts in Following feed"
+msgstr "Mostra re-post nel feed Seguiti"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:119
msgid "Show Replies"
msgstr "Mostra risposte"
@@ -3055,75 +4471,102 @@ msgstr "Mostra risposte"
msgid "Show replies by people you follow before all other replies."
msgstr "Mostra le risposte delle persone che segui prima delle altre risposte."
-#: src/view/screens/PreferencesHomeFeed.tsx:70
+#: src/screens/Onboarding/StepFollowingFeed.tsx:87
+msgid "Show replies in Following"
+msgstr "Mostra le risposte in Seguiti"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:71
+msgid "Show replies in Following feed"
+msgstr "Mostra le risposte nel feed Seguiti"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:70
msgid "Show replies with at least {value} {0}"
msgstr "Mostra risposte con almeno {value} {0}"
-#: src/view/screens/PreferencesHomeFeed.tsx:188
+#: src/view/screens/PreferencesFollowingFeed.tsx:188
msgid "Show Reposts"
msgstr "Mostra ripubblicazioni"
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/screens/Onboarding/StepFollowingFeed.tsx:111
+msgid "Show reposts in Following"
+msgstr "Mostra i re-repost in Seguiti"
+
+#: src/components/moderation/ContentHider.tsx:68
+#: src/components/moderation/PostHider.tsx:64
msgid "Show the content"
msgstr "Mostra il contenuto"
-#: src/view/com/notifications/FeedItem.tsx:350
+#: src/view/com/notifications/FeedItem.tsx:351
msgid "Show users"
msgstr "Mostra utenti"
-#: src/view/com/profile/ProfileHeader.tsx:501
-msgid "Shows a list of users similar to this user."
-msgstr "Mostra un elenco di utenti simili a questo utente."
+#: src/lib/moderation/useLabelBehaviorDescription.ts:58
+msgid "Show warning"
+msgstr "Mostra avviso"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:56
+msgid "Show warning and filter from feeds"
+msgstr "Mostra avviso e filtra dai feed"
+
+#~ msgid "Shows a list of users similar to this user."
+#~ msgstr "Mostra un elenco di utenti simili a questo utente."
-#: src/view/com/profile/ProfileHeader.tsx:545
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:130
msgid "Shows posts from {0} in your feed"
msgstr "Mostra i post di {0} nel tuo feed"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:70
-#: src/view/com/auth/login/Login.tsx:98 src/view/com/auth/SplashScreen.tsx:54
-#: src/view/shell/bottom-bar/BottomBar.tsx:285
-#: src/view/shell/bottom-bar/BottomBar.tsx:286
-#: src/view/shell/bottom-bar/BottomBar.tsx:288
-#: src/view/shell/bottom-bar/BottomBarWeb.tsx:177
+#: src/screens/Login/index.tsx:100
+#: src/screens/Login/index.tsx:119
+#: src/screens/Login/LoginForm.tsx:131
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:73
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:83
+#: src/view/com/auth/SplashScreen.tsx:81
+#: src/view/com/auth/SplashScreen.tsx:90
+#: src/view/com/auth/SplashScreen.web.tsx:110
+#: src/view/com/auth/SplashScreen.web.tsx:119
+#: src/view/shell/bottom-bar/BottomBar.tsx:300
+#: src/view/shell/bottom-bar/BottomBar.tsx:301
+#: src/view/shell/bottom-bar/BottomBar.tsx:303
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:178
-#: src/view/shell/bottom-bar/BottomBarWeb.tsx:180
-#: src/view/shell/NavSignupCard.tsx:58 src/view/shell/NavSignupCard.tsx:59
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:179
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:181
+#: src/view/shell/NavSignupCard.tsx:58
+#: src/view/shell/NavSignupCard.tsx:59
+#: src/view/shell/NavSignupCard.tsx:61
msgid "Sign in"
msgstr "Accedi"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:78
-#: src/view/com/auth/SplashScreen.tsx:57
-#: src/view/com/auth/SplashScreen.web.tsx:87
-msgid "Sign In"
-msgstr "Accedi"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:82
+#: src/view/com/auth/SplashScreen.tsx:86
+#: src/view/com/auth/SplashScreen.web.tsx:91
+#~ msgid "Sign In"
+#~ msgstr "Accedi"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:44
+#: src/components/AccountList.tsx:109
msgid "Sign in as {0}"
msgstr "Accedi come... {0}"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:118
-#: src/view/com/auth/login/Login.tsx:116
+#: src/screens/Login/ChooseAccountForm.tsx:64
msgid "Sign in as..."
msgstr "Accedi come..."
-#: src/view/com/auth/login/LoginForm.tsx:134
-msgid "Sign into"
-msgstr "Accedere a"
+#: src/view/com/auth/login/LoginForm.tsx:140
+#~ msgid "Sign into"
+#~ msgstr "Accedere a"
-#: src/view/com/modals/SwitchAccount.tsx:64
-#: src/view/com/modals/SwitchAccount.tsx:69 src/view/screens/Settings.tsx:107
-#: src/view/screens/Settings.tsx:110
+#: src/view/screens/Settings/index.tsx:107
+#: src/view/screens/Settings/index.tsx:110
msgid "Sign out"
-msgstr "Disconnettiti"
+msgstr "Disconnetta"
-#: src/view/shell/bottom-bar/BottomBar.tsx:275
-#: src/view/shell/bottom-bar/BottomBar.tsx:276
-#: src/view/shell/bottom-bar/BottomBar.tsx:278
-#: src/view/shell/bottom-bar/BottomBarWeb.tsx:167
+#: src/view/shell/bottom-bar/BottomBar.tsx:290
+#: src/view/shell/bottom-bar/BottomBar.tsx:291
+#: src/view/shell/bottom-bar/BottomBar.tsx:293
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:168
-#: src/view/shell/bottom-bar/BottomBarWeb.tsx:170
-#: src/view/shell/NavSignupCard.tsx:49 src/view/shell/NavSignupCard.tsx:50
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:169
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:171
+#: src/view/shell/NavSignupCard.tsx:49
+#: src/view/shell/NavSignupCard.tsx:50
#: src/view/shell/NavSignupCard.tsx:52
msgid "Sign up"
msgstr "Iscrizione"
@@ -3132,39 +4575,53 @@ msgstr "Iscrizione"
msgid "Sign up or sign in to join the conversation"
msgstr "Iscriviti o accedi per partecipare alla conversazione"
-#: src/view/com/util/moderation/ScreenHider.tsx:76
+#: src/components/moderation/ScreenHider.tsx:97
+#: src/lib/moderation/useGlobalLabelStrings.ts:28
msgid "Sign-in Required"
msgstr "È richiesta l'autenticazione"
-#: src/view/screens/Settings.tsx:355
+#: src/view/screens/Settings/index.tsx:374
msgid "Signed in as"
-msgstr "Registrato come"
+msgstr "Registrato/a come"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:103
+#: src/screens/Login/ChooseAccountForm.tsx:48
msgid "Signed in as @{0}"
-msgstr "Registrato come @{0}"
+msgstr "Registrato/a come @{0}"
-#: src/view/com/modals/SwitchAccount.tsx:66
-msgid "Signs {0} out of Bluesky"
-msgstr "{0} esce da Bluesky"
+#: src/view/com/modals/SwitchAccount.tsx:70
+#~ msgid "Signs {0} out of Bluesky"
+#~ msgstr "{0} esce da Bluesky"
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:33
+#: src/screens/Onboarding/StepInterests/index.tsx:239
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:203
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:35
msgid "Skip"
msgstr "Salta questo passo"
-#: src/view/com/auth/create/Step2.tsx:80
-msgid "SMS verification"
-msgstr "Verifica tramite SMS"
+#: src/screens/Onboarding/StepInterests/index.tsx:236
+msgid "Skip this flow"
+msgstr "Salta questa corrente"
+
+#~ msgid "SMS verification"
+#~ msgstr "Verifica tramite SMS"
+
+#: src/screens/Onboarding/index.tsx:40
+msgid "Software Dev"
+msgstr "Sviluppo Software"
+
+#~ msgid "Something went wrong and we're not sure what."
+#~ msgstr "Qualcosa è andato storto ma non siamo sicuri di cosa."
-#: src/view/com/modals/ProfilePreview.tsx:62
-msgid "Something went wrong and we're not sure what."
-msgstr "Qualcosa è andato storto ma non siamo sicuri di cosa."
+#: src/components/ReportDialog/index.tsx:59
+#: src/screens/Moderation/index.tsx:114
+#: src/screens/Profile/Sections/Labels.tsx:76
+msgid "Something went wrong, please try again."
+msgstr "Qualcosa è andato male, prova di nuovo."
-#: src/view/com/modals/Waitlist.tsx:51
-msgid "Something went wrong. Check your email and try again."
-msgstr "Qualcosa è andato storto. Controlla la tua email e riprova."
+#~ msgid "Something went wrong. Check your email and try again."
+#~ msgstr "Qualcosa è andato storto. Controlla la tua email e riprova."
-#: src/App.native.tsx:62
+#: src/App.native.tsx:66
msgid "Sorry! Your session expired. Please log in again."
msgstr "Scusa! La tua sessione è scaduta. Per favore accedi di nuovo."
@@ -3176,47 +4633,85 @@ msgstr "Ordina le risposte"
msgid "Sort replies to the same post by:"
msgstr "Ordina le risposte allo stesso post per:"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:122
+#: src/components/moderation/LabelsOnMeDialog.tsx:146
+msgid "Source:"
+msgstr "Origine:"
+
+#: src/lib/moderation/useReportOptions.ts:65
+msgid "Spam"
+msgstr "Spam"
+
+#: src/lib/moderation/useReportOptions.ts:53
+msgid "Spam; excessive mentions or replies"
+msgstr "Spam; menzioni o risposte eccessive"
+
+#: src/screens/Onboarding/index.tsx:30
+msgid "Sports"
+msgstr "Sports"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:123
msgid "Square"
msgstr "Quadrato"
-#: src/view/com/modals/ServerInput.tsx:62
-msgid "Staging"
-msgstr "Allestimento"
+#~ msgid "Staging"
+#~ msgstr "Allestimento"
-#: src/view/screens/Settings.tsx:804
+#: src/view/screens/Settings/index.tsx:903
msgid "Status page"
msgstr "Pagina di stato"
+#: src/screens/Signup/index.tsx:142
+msgid "Step"
+msgstr ""
+
#: src/view/com/auth/create/StepHeader.tsx:22
-msgid "Step {0} of {numSteps}"
-msgstr "Passo {0} di {numSteps}"
+#~ msgid "Step {0} of {numSteps}"
+#~ msgstr "Passo {0} di {numSteps}"
-#: src/view/screens/Settings.tsx:276
+#: src/view/screens/Settings/index.tsx:292
msgid "Storage cleared, you need to restart the app now."
msgstr "Spazio di archiviazione eliminato. Riavvia l'app."
-#: src/Navigation.tsx:202 src/view/screens/Settings.tsx:740
+#: src/Navigation.tsx:211
+#: src/view/screens/Settings/index.tsx:831
msgid "Storybook"
msgstr "Cronologia"
-#: src/view/com/modals/AppealLabel.tsx:101
+#: src/components/moderation/LabelsOnMeDialog.tsx:255
+#: src/components/moderation/LabelsOnMeDialog.tsx:256
msgid "Submit"
msgstr "Invia"
-#: src/view/screens/ProfileList.tsx:586
+#: src/view/screens/ProfileList.tsx:590
msgid "Subscribe"
msgstr "Iscriviti"
-#: src/view/screens/ProfileList.tsx:582
+#: src/screens/Profile/Sections/Labels.tsx:180
+msgid "Subscribe to @{0} to use these labels:"
+msgstr "Iscriviti a @{0} per utilizzare queste etichette:"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:221
+msgid "Subscribe to Labeler"
+msgstr "Iscriviti a Labeler"
+
+#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:172
+#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:307
+msgid "Subscribe to the {0} feed"
+msgstr "Iscriviti a {0} feed"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:184
+msgid "Subscribe to this labeler"
+msgstr "Iscriviti a questo labeler"
+
+#: src/view/screens/ProfileList.tsx:586
msgid "Subscribe to this list"
msgstr "Iscriviti alla lista"
-#: src/view/screens/Search/Search.tsx:364
+#: src/view/screens/Search/Search.tsx:376
msgid "Suggested Follows"
msgstr "Followers suggeriti"
-#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:64
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:65
msgid "Suggested for you"
msgstr "Suggerito per te"
@@ -3224,36 +4719,45 @@ msgstr "Suggerito per te"
msgid "Suggestive"
msgstr "Suggestivo"
-#: src/Navigation.tsx:212 src/view/screens/Support.tsx:30
+#: src/Navigation.tsx:226
+#: src/view/screens/Support.tsx:30
#: src/view/screens/Support.tsx:33
msgid "Support"
msgstr "Supporto"
-#: src/view/com/modals/ProfilePreview.tsx:110
-msgid "Swipe up to see more"
-msgstr "Scorri verso l'alto per vedere di più"
+#~ msgid "Swipe up to see more"
+#~ msgstr "Scorri verso l'alto per vedere di più"
-#: src/view/com/modals/SwitchAccount.tsx:117
+#: src/components/dialogs/SwitchAccount.tsx:46
+#: src/components/dialogs/SwitchAccount.tsx:49
msgid "Switch Account"
msgstr "Cambia account"
-#: src/view/com/modals/SwitchAccount.tsx:97 src/view/screens/Settings.tsx:137
+#: src/view/screens/Settings/index.tsx:139
msgid "Switch to {0}"
msgstr "Cambia a {0}"
-#: src/view/com/modals/SwitchAccount.tsx:98 src/view/screens/Settings.tsx:138
+#: src/view/screens/Settings/index.tsx:140
msgid "Switches the account you are logged in to"
msgstr "Cambia l'account dal quale hai effettuato l'accesso"
-#: src/view/screens/Settings.tsx:466
+#: src/view/screens/Settings/index.tsx:491
msgid "System"
msgstr "Sistema"
-#: src/view/screens/Settings.tsx:720
+#: src/view/screens/Settings/index.tsx:819
msgid "System log"
msgstr "Registro di sistema"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:112
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "tag"
+msgstr "tag"
+
+#: src/components/TagMenu/index.tsx:78
+msgid "Tag menu: {displayTag}"
+msgstr "Tag menu: {displayTag}"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:113
msgid "Tall"
msgstr "Alto"
@@ -3261,24 +4765,57 @@ msgstr "Alto"
msgid "Tap to view fully"
msgstr "Tocca per visualizzare completamente"
-#: src/view/shell/desktop/RightNav.tsx:93
+#: src/screens/Onboarding/index.tsx:39
+msgid "Tech"
+msgstr "Tecnologia"
+
+#: src/view/shell/desktop/RightNav.tsx:81
msgid "Terms"
msgstr "Termini"
-#: src/Navigation.tsx:222 src/view/screens/Settings.tsx:818
-#: src/view/screens/TermsOfService.tsx:29 src/view/shell/Drawer.tsx:259
+#: src/Navigation.tsx:236
+#: src/screens/Signup/StepInfo/Policies.tsx:49
+#: src/view/screens/Settings/index.tsx:917
+#: src/view/screens/TermsOfService.tsx:29
+#: src/view/shell/Drawer.tsx:259
msgid "Terms of Service"
msgstr "Termini di servizio"
-#: src/view/com/modals/AppealLabel.tsx:70
-#: src/view/com/modals/report/InputIssueDetails.tsx:51
+#: src/lib/moderation/useReportOptions.ts:58
+#: src/lib/moderation/useReportOptions.ts:79
+#: src/lib/moderation/useReportOptions.ts:87
+msgid "Terms used violate community standards"
+msgstr "I termini utilizzati violano gli standard della comunità"
+
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "text"
+msgstr "testo"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:219
msgid "Text input field"
msgstr "Campo di testo"
-#: src/view/com/profile/ProfileHeader.tsx:310
+#: src/components/ReportDialog/SubmitView.tsx:78
+msgid "Thank you. Your report has been sent."
+msgstr "Grazie. La tua segnalazione è stata inviata."
+
+#: src/view/com/modals/ChangeHandle.tsx:465
+msgid "That contains the following:"
+msgstr "Che contiene il seguente:"
+
+#: src/screens/Signup/index.tsx:84
+msgid "That handle is already taken."
+msgstr "Questo handle è già stato preso."
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:283
+#: src/view/com/profile/ProfileMenu.tsx:349
msgid "The account will be able to interact with you after unblocking."
msgstr "L'account sarà in grado di interagire con te dopo lo sblocco."
+#: src/components/moderation/ModerationDetailsDialog.tsx:127
+msgid "the author"
+msgstr "l'autore"
+
#: src/view/screens/CommunityGuidelines.tsx:36
msgid "The Community Guidelines have been moved to <0/>"
msgstr "Le Linee guida della community sono state spostate a<0/>"
@@ -3287,7 +4824,20 @@ msgstr "Le Linee guida della community sono state spostate a<0/>"
msgid "The Copyright Policy has been moved to <0/>"
msgstr "La politica sul copyright è stata spostata a <0/>"
-#: src/view/com/post-thread/PostThread.tsx:437
+#: src/components/moderation/LabelsOnMeDialog.tsx:48
+msgid "The following labels were applied to your account."
+msgstr "Al tuo account sono state applicate le seguenti etichette."
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:49
+msgid "The following labels were applied to your content."
+msgstr "Ai tuoi contenuti sono state applicate le seguenti etichette."
+
+#: src/screens/Onboarding/Layout.tsx:58
+msgid "The following steps will help customize your Bluesky experience."
+msgstr "I passaggi seguenti ti aiuteranno a personalizzare la tua esperienza con Bluesky."
+
+#: src/view/com/post-thread/PostThread.tsx:153
+#: src/view/com/post-thread/PostThread.tsx:165
msgid "The post may have been deleted."
msgstr "Il post potrebbe essere stato cancellato."
@@ -3299,15 +4849,23 @@ msgstr "La politica sulla privacy è stata spostata a <0/><0/>"
msgid "The support form has been moved. If you need help, please <0/> or visit {HELP_DESK_URL} to get in touch with us."
msgstr "Il modulo di supporto è stato spostato. Se hai bisogno di aiuto, <0/> o visita {HELP_DESK_URL} per metterti in contatto con noi."
+#~ msgid "The support form has been moved. If you need help, please<0/> or visit {HELP_DESK_URL} to get in touch with us."
+#~ msgstr "Il modulo di supporto è stato spostato. Se hai bisogno di aiuto, <0/> o visita {HELP_DESK_URL} per metterti in contatto con noi."
+
#: src/view/screens/TermsOfService.tsx:33
msgid "The Terms of Service have been moved to"
msgstr "I Termini di Servizio sono stati spostati a"
-#: src/view/screens/ProfileFeed.tsx:558
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:141
+msgid "There are many feeds to try:"
+msgstr "Ci sono molti feed da provare:"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:112
+#: src/view/screens/ProfileFeed.tsx:544
msgid "There was an an issue contacting the server, please check your internet connection and try again."
msgstr "Si è verificato un problema nel contattare il server, controlla la tua connessione Internet e riprova."
-#: src/view/com/posts/FeedErrorMessage.tsx:139
+#: src/view/com/posts/FeedErrorMessage.tsx:138
msgid "There was an an issue removing this feed. Please check your internet connection and try again."
msgstr "Si è verificato un problema durante la rimozione di questo feed. Per favore controlla la tua connessione Internet e prova di nuovo."
@@ -3315,25 +4873,26 @@ msgstr "Si è verificato un problema durante la rimozione di questo feed. Per fa
msgid "There was an an issue updating your feeds, please check your internet connection and try again."
msgstr "Si è verificato un problema durante la rimozione di questo feed. Per favore controlla la tua connessione Internet e prova di nuovo."
-#: src/view/screens/ProfileFeed.tsx:245 src/view/screens/ProfileList.tsx:266
-#: src/view/screens/SavedFeeds.tsx:209 src/view/screens/SavedFeeds.tsx:231
+#: src/view/screens/ProfileFeed.tsx:245
+#: src/view/screens/ProfileList.tsx:275
+#: src/view/screens/SavedFeeds.tsx:209
+#: src/view/screens/SavedFeeds.tsx:231
#: src/view/screens/SavedFeeds.tsx:252
msgid "There was an issue contacting the server"
msgstr "Si è verificato un problema durante il contatto con il server"
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:57
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:66
-#: src/view/com/feeds/FeedSourceCard.tsx:113
-#: src/view/com/feeds/FeedSourceCard.tsx:127
-#: src/view/com/feeds/FeedSourceCard.tsx:181
+#: src/view/com/feeds/FeedSourceCard.tsx:110
+#: src/view/com/feeds/FeedSourceCard.tsx:123
msgid "There was an issue contacting your server"
msgstr "Si è verificato un problema durante il contatto con il tuo server"
-#: src/view/com/notifications/Feed.tsx:115
+#: src/view/com/notifications/Feed.tsx:117
msgid "There was an issue fetching notifications. Tap here to try again."
msgstr "Si è verificato un problema durante il recupero delle notifiche. Tocca qui per riprovare."
-#: src/view/com/posts/Feed.tsx:263
+#: src/view/com/posts/Feed.tsx:287
msgid "There was an issue fetching posts. Tap here to try again."
msgstr "Si è verificato un problema nel recupero dei post. Tocca qui per riprovare."
@@ -3346,49 +4905,83 @@ msgstr "Si è verificato un problema durante il recupero dell'elenco. Tocca qui
msgid "There was an issue fetching your lists. Tap here to try again."
msgstr "Si è verificato un problema durante il recupero delle tue liste. Tocca qui per riprovare."
-#: src/view/com/modals/ContentFilteringSettings.tsx:126
+#: src/components/ReportDialog/SubmitView.tsx:83
+msgid "There was an issue sending your report. Please check your internet connection."
+msgstr "Si è verificato un problema durante l'invio della segnalazione. Per favore controlla la tua connessione Internet."
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:65
msgid "There was an issue syncing your preferences with the server"
msgstr "Si è verificato un problema durante la sincronizzazione delle tue preferenze con il server"
-#: src/view/screens/AppPasswords.tsx:66
+#: src/view/screens/AppPasswords.tsx:68
msgid "There was an issue with fetching your app passwords"
msgstr "Si è verificato un problema durante il recupero delle password dell'app"
-#: src/view/com/profile/ProfileHeader.tsx:204
-#: src/view/com/profile/ProfileHeader.tsx:225
-#: src/view/com/profile/ProfileHeader.tsx:264
-#: src/view/com/profile/ProfileHeader.tsx:277
-#: src/view/com/profile/ProfileHeader.tsx:297
-#: src/view/com/profile/ProfileHeader.tsx:319
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:105
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:127
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:99
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:111
+#: src/view/com/profile/ProfileMenu.tsx:106
+#: src/view/com/profile/ProfileMenu.tsx:117
+#: src/view/com/profile/ProfileMenu.tsx:132
+#: src/view/com/profile/ProfileMenu.tsx:143
+#: src/view/com/profile/ProfileMenu.tsx:157
+#: src/view/com/profile/ProfileMenu.tsx:170
msgid "There was an issue! {0}"
msgstr "Si è verificato un problema! {0}"
-#: src/view/screens/ProfileList.tsx:287 src/view/screens/ProfileList.tsx:306
-#: src/view/screens/ProfileList.tsx:328 src/view/screens/ProfileList.tsx:347
+#: src/view/screens/ProfileList.tsx:288
+#: src/view/screens/ProfileList.tsx:302
+#: src/view/screens/ProfileList.tsx:316
+#: src/view/screens/ProfileList.tsx:330
msgid "There was an issue. Please check your internet connection and try again."
msgstr "Si è verificato un problema. Per favore controlla la tua connessione Internet e prova di nuovo."
-#: src/view/com/util/ErrorBoundary.tsx:36
+#: src/view/com/util/ErrorBoundary.tsx:51
msgid "There was an unexpected issue in the application. Please let us know if this happened to you!"
msgstr "Si è verificato un problema imprevisto nell'applicazione. Per favore facci sapere se ti è successo!"
-#: src/view/com/auth/create/Step2.tsx:53
-msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
-msgstr "C'è qualcosa di sbagliato in questo numero. Scegli il tuo Paese e inserisci il tuo numero di telefono completo!"
+#: src/screens/Deactivated.tsx:106
+msgid "There's been a rush of new users to Bluesky! We'll activate your account as soon as we can."
+msgstr "C'è stata un'ondata di nuovi utenti su Bluesky! Attiveremo il tuo account il prima possibile."
+
+#~ msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
+#~ msgstr "C'è qualcosa di sbagliato in questo numero. Scegli il tuo Paese e inserisci il tuo numero di telefono completo!"
-#: src/view/com/util/moderation/ScreenHider.tsx:88
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:146
+msgid "These are popular accounts you might like:"
+msgstr "Questi sono gli account popolari che potrebbero piacerti:"
+
+#~ msgid "This {0} has been labeled."
+#~ msgstr "Questo {0} è stato etichettato."
+
+#: src/components/moderation/ScreenHider.tsx:116
msgid "This {screenDescription} has been flagged:"
msgstr "Questa {screenDescription} è stata segnalata:"
-#: src/view/com/util/moderation/ScreenHider.tsx:83
+#: src/components/moderation/ScreenHider.tsx:111
msgid "This account has requested that users sign in to view their profile."
msgstr "Questo account ha richiesto agli utenti di accedere Bluesky per visualizzare il profilo."
-#: src/view/com/modals/EmbedConsent.tsx:68
+#: src/components/moderation/LabelsOnMeDialog.tsx:204
+msgid "This appeal will be sent to <0>{0}0>."
+msgstr "Questo ricorso verrà inviato a <0>{0}0>."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:19
+msgid "This content has been hidden by the moderators."
+msgstr "Questo contenuto è stato nascosto dai moderatori."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:24
+msgid "This content has received a general warning from moderators."
+msgstr "Questo contenuto ha ricevuto un avviso generale dai moderatori."
+
+#: src/components/dialogs/EmbedConsent.tsx:64
msgid "This content is hosted by {0}. Do you want to enable external media?"
msgstr "Questo contenuto è hosted da {0}. Vuoi abilitare i media esterni?"
-#: src/view/com/modals/ModerationDetails.tsx:67
+#: src/components/moderation/ModerationDetailsDialog.tsx:77
+#: src/lib/moderation/useModerationCauseDescription.ts:77
msgid "This content is not available because one of the users involved has blocked the other."
msgstr "Questo contenuto non è disponibile perché uno degli utenti coinvolti ha bloccato l'altro."
@@ -3396,12 +4989,20 @@ msgstr "Questo contenuto non è disponibile perché uno degli utenti coinvolti h
msgid "This content is not viewable without a Bluesky account."
msgstr "Questo contenuto non è visualizzabile senza un account Bluesky."
+#~ msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
+#~ msgstr "Questa funzionalità è in versione beta. Puoi leggere ulteriori informazioni sulle esportazioni dell' archivio in <0>questo post del blog.0>"
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:75
+msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost0>."
+msgstr "Questa funzionalità è in versione beta. Puoi leggere ulteriori informazioni sulle esportazioni del repository in <0>questo post del blog0>."
+
#: src/view/com/posts/FeedErrorMessage.tsx:114
msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later."
msgstr "Questo canale al momento sta ricevendo molte visite ed è temporaneamente non disponibile. Riprova più tardi."
-#: src/view/screens/Profile.tsx:392 src/view/screens/ProfileFeed.tsx:484
-#: src/view/screens/ProfileList.tsx:639
+#: src/screens/Profile/Sections/Feed.tsx:50
+#: src/view/screens/ProfileFeed.tsx:477
+#: src/view/screens/ProfileList.tsx:675
msgid "This feed is empty!"
msgstr "Questo feed è vuoto!"
@@ -3409,7 +5010,7 @@ msgstr "Questo feed è vuoto!"
msgid "This feed is empty! You may need to follow more users or tune your language settings."
msgstr "Questo feed è vuoto! Prova a seguire più utenti o ottimizza le impostazioni della lingua."
-#: src/view/com/modals/BirthDateSettings.tsx:61
+#: src/components/dialogs/BirthDateSettings.tsx:41
msgid "This information is not shared with other users."
msgstr "Queste informazioni non vengono condivise con altri utenti."
@@ -3417,171 +5018,338 @@ msgstr "Queste informazioni non vengono condivise con altri utenti."
msgid "This is important in case you ever need to change your email or reset your password."
msgstr "Questo è importante nel caso in cui avessi bisogno di modificare la tua email o reimpostare la password."
-#: src/view/com/modals/LinkWarning.tsx:58
+#~ msgid "This is the service that keeps you online."
+#~ msgstr "Questo è il servizio che ti mantiene online."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:124
+msgid "This label was applied by {0}."
+msgstr "Questa etichetta è stata applicata da {0}."
+
+#: src/screens/Profile/Sections/Labels.tsx:167
+msgid "This labeler hasn't declared what labels it publishes, and may not be active."
+msgstr "Questo etichettatore non ha dichiarato quali etichette pubblica e potrebbe non essere attivo."
+
+#: src/view/com/modals/LinkWarning.tsx:72
msgid "This link is taking you to the following website:"
msgstr "Questo link ti porta al seguente sito web:"
-#: src/view/screens/ProfileList.tsx:813
+#: src/view/screens/ProfileList.tsx:853
msgid "This list is empty!"
msgstr "La lista è vuota!"
-#: src/view/com/modals/AddAppPasswords.tsx:105
+#: src/screens/Profile/ErrorState.tsx:40
+msgid "This moderation service is unavailable. See below for more details. If this issue persists, contact us."
+msgstr "Questo servizio di moderazione non è disponibile. Vedi giù per ulteriori dettagli. Se il problema persiste, contattaci."
+
+#: src/view/com/modals/AddAppPasswords.tsx:107
msgid "This name is already in use"
msgstr "Questo nome è già in uso"
-#: src/view/com/post-thread/PostThreadItem.tsx:123
+#: src/view/com/post-thread/PostThreadItem.tsx:125
msgid "This post has been deleted."
msgstr "Questo post è stato cancellato."
-#: src/view/com/modals/ModerationDetails.tsx:62
+#: src/view/com/util/forms/PostDropdownBtn.tsx:344
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:248
+msgid "This post is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr "Questo post è visibile solo agli utenti registrati. Non sarà visibile alle persone che non hanno effettuato l'accesso."
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:326
+msgid "This post will be hidden from feeds."
+msgstr "Questo post verrà nascosto dai feed."
+
+#: src/view/com/profile/ProfileMenu.tsx:370
+msgid "This profile is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr "Questo profilo è visibile solo agli utenti registrati. Non sarà visibile alle persone che non hanno effettuato l'accesso."
+
+#: src/screens/Signup/StepInfo/Policies.tsx:37
+msgid "This service has not provided terms of service or a privacy policy."
+msgstr "Questo servizio non ha fornito termini di servizio o un'informativa sulla privacy."
+
+#: src/view/com/modals/ChangeHandle.tsx:445
+msgid "This should create a domain record at:"
+msgstr "Questo dovrebbe creare un record di dominio in:"
+
+#: src/view/com/profile/ProfileFollowers.tsx:87
+msgid "This user doesn't have any followers."
+msgstr "Questo utente non ha follower."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:72
+#: src/lib/moderation/useModerationCauseDescription.ts:68
msgid "This user has blocked you. You cannot view their content."
msgstr "Questo utente ti ha bloccato. Non è possibile visualizzare il suo contenuto."
-#: src/view/com/modals/ModerationDetails.tsx:42
-msgid "This user is included in the <0/> list which you have blocked."
-msgstr "Questo utente è incluso nell'elenco <0/> che hai bloccato."
+#: src/lib/moderation/useGlobalLabelStrings.ts:30
+msgid "This user has requested that their content only be shown to signed-in users."
+msgstr "Questo utente ha richiesto che i suoi contenuti vengano mostrati solo agli utenti che hanno effettuato l'accesso."
-#: src/view/com/modals/ModerationDetails.tsx:74
-msgid "This user is included the <0/> list which you have muted."
-msgstr "Questo utente è incluso nell'elenco <0/> che hai silenziato."
+#~ msgid "This user is included in the <0/> list which you have blocked."
+#~ msgstr "Questo utente è incluso nell'elenco <0/> che hai bloccato."
+
+#~ msgid "This user is included in the <0/> list which you have muted."
+#~ msgstr "Questo utente è incluso nell'elenco <0/> che hai disattivato."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:55
+msgid "This user is included in the <0>{0}0> list which you have blocked."
+msgstr "Questo utente è incluso nell'elenco <0>{0}0> che hai bloccato."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:84
+msgid "This user is included in the <0>{0}0> list which you have muted."
+msgstr "Questo utente è incluso nell'elenco <0>{0}0> che hai silenziato."
+
+#~ msgid "This user is included the <0/> list which you have muted."
+#~ msgstr "Questo utente è incluso nella lista <0/> che hai silenziato."
+
+#: src/view/com/profile/ProfileFollows.tsx:87
+msgid "This user isn't following anyone."
+msgstr "Questo utente non sta seguendo nessuno."
#: src/view/com/modals/SelfLabel.tsx:137
msgid "This warning is only available for posts with media attached."
msgstr "Questo avviso è disponibile solo per i post con contenuti multimediali allegati."
-#: src/view/com/util/forms/PostDropdownBtn.tsx:190
-msgid "This will hide this post from your feeds."
-msgstr "Questo nasconderà il post dai tuoi feeds."
+#: src/components/dialogs/MutedWords.tsx:283
+msgid "This will delete {0} from your muted words. You can always add it back later."
+msgstr "Questo eliminerà {0} dalle parole disattivate. Puoi sempre aggiungerla nuovamente in seguito."
-#: src/view/screens/PreferencesThreads.tsx:53 src/view/screens/Settings.tsx:531
-msgid "Thread Preferences"
+#~ msgid "This will hide this post from your feeds."
+#~ msgstr "Questo nasconderà il post dai tuoi feeds."
+
+#: src/view/screens/Settings/index.tsx:574
+msgid "Thread preferences"
msgstr "Preferenze delle discussioni"
+#: src/view/screens/PreferencesThreads.tsx:53
+#: src/view/screens/Settings/index.tsx:584
+msgid "Thread Preferences"
+msgstr "Preferenze delle Discussioni"
+
#: src/view/screens/PreferencesThreads.tsx:119
msgid "Threaded Mode"
msgstr "Modalità discussione"
-#: src/Navigation.tsx:252
+#: src/Navigation.tsx:269
msgid "Threads Preferences"
msgstr "Preferenze per le discussioni"
-#: src/view/com/util/forms/DropdownButton.tsx:234
+#: src/components/ReportDialog/SelectLabelerView.tsx:33
+msgid "To whom would you like to send this report?"
+msgstr "A chi desideri inviare questo report?"
+
+#: src/components/dialogs/MutedWords.tsx:112
+msgid "Toggle between muted word options."
+msgstr "Alterna tra le opzioni delle parole silenziate."
+
+#: src/view/com/util/forms/DropdownButton.tsx:246
msgid "Toggle dropdown"
msgstr "Attiva/disattiva il menu a discesa"
-#: src/view/com/modals/EditImage.tsx:271
+#: src/screens/Moderation/index.tsx:332
+msgid "Toggle to enable or disable adult content"
+msgstr "Seleziona per abilitare o disabilitare i contenuti per adulti"
+
+#: src/view/com/modals/EditImage.tsx:272
msgid "Transformations"
msgstr "Trasformazioni"
-#: src/view/com/post-thread/PostThreadItem.tsx:710
-#: src/view/com/post-thread/PostThreadItem.tsx:712
-#: src/view/com/util/forms/PostDropdownBtn.tsx:123
+#: src/view/com/post-thread/PostThreadItem.tsx:644
+#: src/view/com/post-thread/PostThreadItem.tsx:646
+#: src/view/com/util/forms/PostDropdownBtn.tsx:212
+#: src/view/com/util/forms/PostDropdownBtn.tsx:214
msgid "Translate"
msgstr "Tradurre"
-#: src/view/com/util/error/ErrorScreen.tsx:75
+#: src/view/com/util/error/ErrorScreen.tsx:82
msgctxt "action"
msgid "Try again"
msgstr "Riprova"
-#: src/view/screens/ProfileList.tsx:484
+#~ msgid "Try again"
+#~ msgstr "Provalo di nuovo"
+
+#: src/view/com/modals/ChangeHandle.tsx:428
+msgid "Type:"
+msgstr "Tipo:"
+
+#: src/view/screens/ProfileList.tsx:478
msgid "Un-block list"
msgstr "Sblocca la lista"
-#: src/view/screens/ProfileList.tsx:469
+#: src/view/screens/ProfileList.tsx:461
msgid "Un-mute list"
msgstr "Riattiva questa lista"
-#: src/view/com/auth/create/CreateAccount.tsx:66
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:87
-#: src/view/com/auth/login/Login.tsx:76
-#: src/view/com/auth/login/LoginForm.tsx:120
+#: src/screens/Login/ForgotPasswordForm.tsx:74
+#: src/screens/Login/index.tsx:78
+#: src/screens/Login/LoginForm.tsx:119
+#: src/screens/Login/SetNewPasswordForm.tsx:77
+#: src/screens/Signup/index.tsx:63
+#: src/view/com/modals/ChangePassword.tsx:70
msgid "Unable to contact your service. Please check your Internet connection."
msgstr "Impossibile contattare il servizio. Per favore controlla la tua connessione Internet."
-#: src/view/com/profile/ProfileHeader.tsx:475
-msgctxt "action"
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:181
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+#: src/view/screens/ProfileList.tsx:572
msgid "Unblock"
msgstr "Sblocca"
-#: src/view/com/profile/ProfileHeader.tsx:472
-#: src/view/screens/ProfileList.tsx:568
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:186
+msgctxt "action"
msgid "Unblock"
msgstr "Sblocca"
-#: src/view/com/profile/ProfileHeader.tsx:308
-#: src/view/com/profile/ProfileHeader.tsx:392
+#: src/view/com/profile/ProfileMenu.tsx:299
+#: src/view/com/profile/ProfileMenu.tsx:305
msgid "Unblock Account"
-msgstr "Sblocca il conto"
+msgstr "Sblocca Account"
-#: src/view/com/modals/Repost.tsx:42 src/view/com/modals/Repost.tsx:55
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:281
+#: src/view/com/profile/ProfileMenu.tsx:343
+msgid "Unblock Account?"
+msgstr "Sblocca Account?"
+
+#: src/view/com/modals/Repost.tsx:43
+#: src/view/com/modals/Repost.tsx:56
#: src/view/com/util/post-ctrls/RepostButton.tsx:60
#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
msgid "Undo repost"
msgstr "Annulla la ripubblicazione"
-#: src/view/com/profile/FollowButton.tsx:55
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
+msgid "Unfollow"
+msgstr "Smetti di seguire"
+
+#: src/view/com/profile/FollowButton.tsx:60
msgctxt "action"
msgid "Unfollow"
msgstr "Smetti di seguire"
-#: src/view/com/profile/ProfileHeader.tsx:524
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:220
msgid "Unfollow {0}"
msgstr "Smetti di seguire {0}"
-#: src/view/com/auth/create/state.ts:298
-msgid "Unfortunately, you do not meet the requirements to create an account."
-msgstr "Sfortunatamente, non soddisfi i requisiti per creare un account."
+#: src/view/com/profile/ProfileMenu.tsx:241
+#: src/view/com/profile/ProfileMenu.tsx:251
+msgid "Unfollow Account"
+msgstr "Smetti di seguire questo account"
+
+#: src/view/com/auth/create/state.ts:262
+#~ msgid "Unfortunately, you do not meet the requirements to create an account."
+#~ msgstr "Sfortunatamente, non soddisfi i requisiti per creare un account."
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:189
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Unlike"
msgstr "Togli Mi piace"
-#: src/view/screens/ProfileList.tsx:575
+#: src/view/screens/ProfileFeed.tsx:573
+msgid "Unlike this feed"
+msgstr "Togli il like a questo feed"
+
+#: src/components/TagMenu/index.tsx:249
+#: src/view/screens/ProfileList.tsx:579
msgid "Unmute"
msgstr "Riattiva"
-#: src/view/com/profile/ProfileHeader.tsx:373
+#: src/components/TagMenu/index.web.tsx:104
+msgid "Unmute {truncatedTag}"
+msgstr "Riattiva {truncatedTag}"
+
+#: src/view/com/profile/ProfileMenu.tsx:278
+#: src/view/com/profile/ProfileMenu.tsx:284
msgid "Unmute Account"
msgstr "Riattiva questo account"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:169
+#: src/components/TagMenu/index.tsx:208
+msgid "Unmute all {displayTag} posts"
+msgstr "Riattiva tutti i post di {displayTag}"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:256
msgid "Unmute thread"
msgstr "Riattiva questa discussione"
-#: src/view/screens/ProfileFeed.tsx:362 src/view/screens/ProfileList.tsx:559
+#: src/view/screens/ProfileFeed.tsx:295
+#: src/view/screens/ProfileList.tsx:563
msgid "Unpin"
msgstr "Stacca dal profilo"
-#: src/view/screens/ProfileList.tsx:452
+#: src/view/screens/ProfileFeed.tsx:292
+msgid "Unpin from home"
+msgstr "Stacca dalla Home"
+
+#: src/view/screens/ProfileList.tsx:444
msgid "Unpin moderation list"
msgstr "Stacca la lista di moderazione"
-#: src/view/screens/ProfileFeed.tsx:354
-msgid "Unsave"
-msgstr "Rimuovi"
+#~ msgid "Unsave"
+#~ msgstr "Rimuovi"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:219
+msgid "Unsubscribe"
+msgstr "Annulla l'iscrizione"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:183
+msgid "Unsubscribe from this labeler"
+msgstr "Annulla l'iscrizione a questo/a labeler"
-#: src/view/com/modals/UserAddRemoveLists.tsx:54
+#: src/lib/moderation/useReportOptions.ts:70
+msgid "Unwanted Sexual Content"
+msgstr "Contenuti Sessuali Indesiderati"
+
+#: src/view/com/modals/UserAddRemoveLists.tsx:70
msgid "Update {displayName} in Lists"
msgstr "Aggiorna {displayName} negli elenchi"
-#: src/lib/hooks/useOTAUpdate.ts:15
-msgid "Update Available"
-msgstr "Aggiornamento disponibile"
+#~ msgid "Update Available"
+#~ msgstr "Aggiornamento disponibile"
+
+#: src/view/com/modals/ChangeHandle.tsx:508
+msgid "Update to {handle}"
+msgstr "Aggiorna a {handle}"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:174
+#: src/screens/Login/SetNewPasswordForm.tsx:186
msgid "Updating..."
msgstr "In aggiornamento..."
-#: src/view/com/modals/ChangeHandle.tsx:455
+#: src/view/com/modals/ChangeHandle.tsx:454
msgid "Upload a text file to:"
msgstr "Carica una file di testo a:"
-#: src/view/screens/AppPasswords.tsx:195
+#: src/view/com/util/UserAvatar.tsx:326
+#: src/view/com/util/UserAvatar.tsx:329
+#: src/view/com/util/UserBanner.tsx:116
+#: src/view/com/util/UserBanner.tsx:119
+msgid "Upload from Camera"
+msgstr "Carica dalla fotocamera"
+
+#: src/view/com/util/UserAvatar.tsx:343
+#: src/view/com/util/UserBanner.tsx:133
+msgid "Upload from Files"
+msgstr "Carica dai Files"
+
+#: src/view/com/util/UserAvatar.tsx:337
+#: src/view/com/util/UserAvatar.tsx:341
+#: src/view/com/util/UserBanner.tsx:127
+#: src/view/com/util/UserBanner.tsx:131
+msgid "Upload from Library"
+msgstr "Carica dalla Libreria"
+
+#: src/view/com/modals/ChangeHandle.tsx:408
+msgid "Use a file on your server"
+msgstr "Utilizza un file sul tuo server"
+
+#: src/view/screens/AppPasswords.tsx:197
msgid "Use app passwords to login to other Bluesky clients without giving full access to your account or password."
msgstr "Utilizza le password dell'app per accedere ad altri client Bluesky senza fornire l'accesso completo al tuo account o alla tua password."
-#: src/view/com/modals/ChangeHandle.tsx:515
+#: src/view/com/modals/ChangeHandle.tsx:517
+msgid "Use bsky.social as hosting provider"
+msgstr "Utilizza bsky.social come provider di hosting"
+
+#: src/view/com/modals/ChangeHandle.tsx:516
msgid "Use default provider"
msgstr "Utilizza il tuo provider predefinito"
@@ -3595,67 +5363,78 @@ msgstr "Utilizza il browser dell'app"
msgid "Use my default browser"
msgstr "Utilizza il mio browser predefinito"
-#: src/view/com/modals/AddAppPasswords.tsx:154
+#: src/view/com/modals/ChangeHandle.tsx:400
+msgid "Use the DNS panel"
+msgstr "Utilizza il pannello DNS"
+
+#: src/view/com/modals/AddAppPasswords.tsx:156
msgid "Use this to sign into the other app along with your handle."
msgstr "Utilizza questo per accedere all'altra app insieme al tuo nome utente."
-#: src/view/com/modals/ServerInput.tsx:105
-msgid "Use your domain as your Bluesky client service provider"
-msgstr "Utilizza il tuo dominio come provider di servizi clienti Bluesky"
+#~ msgid "Use your domain as your Bluesky client service provider"
+#~ msgstr "Utilizza il tuo dominio come provider di servizi clienti Bluesky"
-#: src/view/com/modals/InviteCodes.tsx:200
+#: src/view/com/modals/InviteCodes.tsx:201
msgid "Used by:"
msgstr "Usato da:"
-#: src/view/com/modals/ModerationDetails.tsx:54
+#: src/components/moderation/ModerationDetailsDialog.tsx:64
+#: src/lib/moderation/useModerationCauseDescription.ts:56
msgid "User Blocked"
msgstr "Utente bloccato"
-#: src/view/com/modals/ModerationDetails.tsx:40
+#: src/lib/moderation/useModerationCauseDescription.ts:48
+msgid "User Blocked by \"{0}\""
+msgstr "Utente bloccato da \"{0}\""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:53
msgid "User Blocked by List"
msgstr "Utente bloccato dalla lista"
-#: src/view/com/modals/ModerationDetails.tsx:60
+#: src/lib/moderation/useModerationCauseDescription.ts:66
+msgid "User Blocking You"
+msgstr "Questo Utente ti Blocca"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:70
msgid "User Blocks You"
msgstr "Questo utente ti blocca"
-#: src/view/com/auth/create/Step3.tsx:38
-msgid "User handle"
-msgstr "Handle dell'utente"
+#: src/view/com/auth/create/Step2.tsx:79
+#~ msgid "User handle"
+#~ msgstr "Handle dell'utente"
-#: src/view/com/lists/ListCard.tsx:84
-#: src/view/com/modals/UserAddRemoveLists.tsx:182
+#: src/view/com/lists/ListCard.tsx:85
+#: src/view/com/modals/UserAddRemoveLists.tsx:198
msgid "User list by {0}"
-msgstr "Lista utenti di {0}"
+msgstr "Lista di {0}"
-#: src/view/screens/ProfileList.tsx:741
+#: src/view/screens/ProfileList.tsx:777
msgid "User list by <0/>"
-msgstr "Lista utenti di<0/>"
+msgstr "Lista di<0/>"
-#: src/view/com/lists/ListCard.tsx:82
-#: src/view/com/modals/UserAddRemoveLists.tsx:180
-#: src/view/screens/ProfileList.tsx:739
+#: src/view/com/lists/ListCard.tsx:83
+#: src/view/com/modals/UserAddRemoveLists.tsx:196
+#: src/view/screens/ProfileList.tsx:775
msgid "User list by you"
-msgstr "La tua lista utenti"
+msgstr "La tua lista"
-#: src/view/com/modals/CreateOrEditList.tsx:138
+#: src/view/com/modals/CreateOrEditList.tsx:197
msgid "User list created"
-msgstr "Lista utenti creata"
+msgstr "Lista creata"
-#: src/view/com/modals/CreateOrEditList.tsx:125
+#: src/view/com/modals/CreateOrEditList.tsx:183
msgid "User list updated"
-msgstr "Lista utenti aggiornata"
+msgstr "Lista aggiornata"
#: src/view/screens/Lists.tsx:58
msgid "User Lists"
-msgstr "Lista utenti"
+msgstr "Liste publiche"
-#: src/view/com/auth/login/LoginForm.tsx:174
-#: src/view/com/auth/login/LoginForm.tsx:192
+#: src/screens/Login/LoginForm.tsx:151
msgid "Username or email address"
msgstr "Nome utente o indirizzo Email"
-#: src/view/screens/ProfileList.tsx:775
+#: src/view/screens/ProfileList.tsx:811
msgid "Users"
msgstr "Utenti"
@@ -3667,19 +5446,30 @@ msgstr "utenti seguiti da <0/>"
msgid "Users in \"{0}\""
msgstr "Utenti in «{0}»"
-#: src/view/com/auth/create/Step2.tsx:241
-msgid "Verification code"
-msgstr "Codice di verifica"
+#: src/components/LikesDialog.tsx:85
+msgid "Users that have liked this content or profile"
+msgstr "Utenti a cui è piaciuto questo contenuto o profilo"
+
+#: src/view/com/modals/ChangeHandle.tsx:436
+msgid "Value:"
+msgstr "Valore:"
+
+#~ msgid "Verification code"
+#~ msgstr "Codice di verifica"
+
+#: src/view/com/modals/ChangeHandle.tsx:509
+msgid "Verify {0}"
+msgstr "Verifica {0}"
-#: src/view/screens/Settings.tsx:843
+#: src/view/screens/Settings/index.tsx:942
msgid "Verify email"
msgstr "Verifica Email"
-#: src/view/screens/Settings.tsx:868
+#: src/view/screens/Settings/index.tsx:967
msgid "Verify my email"
msgstr "Verifica la mia email"
-#: src/view/screens/Settings.tsx:877
+#: src/view/screens/Settings/index.tsx:976
msgid "Verify My Email"
msgstr "Verifica la Mia Email"
@@ -3692,7 +5482,15 @@ msgstr "Verifica la nuova email"
msgid "Verify Your Email"
msgstr "Verifica la tua email"
-#: src/view/com/profile/ProfileHeader.tsx:701
+#: src/view/screens/Settings/index.tsx:893
+msgid "Version {0}"
+msgstr ""
+
+#: src/screens/Onboarding/index.tsx:42
+msgid "Video Games"
+msgstr "Video Games"
+
+#: src/screens/Profile/Header/Shell.tsx:107
msgid "View {0}'s avatar"
msgstr "Vedi l'avatar di {0}"
@@ -3700,11 +5498,23 @@ msgstr "Vedi l'avatar di {0}"
msgid "View debug entry"
msgstr "Vedi le informazioni del debug"
-#: src/view/com/posts/FeedSlice.tsx:103
+#: src/components/ReportDialog/SelectReportOptionView.tsx:131
+msgid "View details"
+msgstr "Vedere dettagli"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:126
+msgid "View details for reporting a copyright violation"
+msgstr "Visualizza i dettagli per segnalare una violazione del copyright"
+
+#: src/view/com/posts/FeedSlice.tsx:99
msgid "View full thread"
msgstr "Vedi la discussione completa"
-#: src/view/com/posts/FeedErrorMessage.tsx:172
+#: src/components/moderation/LabelsOnMe.tsx:51
+msgid "View information about these labels"
+msgstr "Visualizza le informazioni su queste etichette"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:166
msgid "View profile"
msgstr "Vedi il profilo"
@@ -3712,47 +5522,127 @@ msgstr "Vedi il profilo"
msgid "View the avatar"
msgstr "Vedi l'avatar"
-#: src/view/com/modals/LinkWarning.tsx:75
+#: src/components/LabelingServiceCard/index.tsx:140
+msgid "View the labeling service provided by @{0}"
+msgstr "Visualizza il servizio di etichettatura fornito da @{0}"
+
+#: src/view/screens/ProfileFeed.tsx:585
+msgid "View users who like this feed"
+msgstr "Visualizza gli utenti a cui piace questo feed"
+
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
msgid "Visit Site"
msgstr "Visita il sito"
-#: src/view/com/modals/ContentFilteringSettings.tsx:254
+#: src/components/moderation/LabelPreference.tsx:135
+#: src/lib/moderation/useLabelBehaviorDescription.ts:17
+#: src/lib/moderation/useLabelBehaviorDescription.ts:22
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:53
msgid "Warn"
msgstr "Avvisa"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:48
+msgid "Warn content"
+msgstr "Avvisa il contenuto"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:46
+msgid "Warn content and filter from feeds"
+msgstr "Avvisa i contenuti e filtra dai feed"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:134
+#~ msgid "We also think you'll like \"For You\" by Skygaze:"
+#~ msgstr "Pensiamo che ti piacerà anche \"Per Te\" di Skygaze:"
+
+#: src/screens/Hashtag.tsx:133
+msgid "We couldn't find any results for that hashtag."
+msgstr "Non siamo riusciti a trovare alcun risultato per quell'hashtag."
+
+#: src/screens/Deactivated.tsx:133
+msgid "We estimate {estimatedTime} until your account is ready."
+msgstr "Stimiamo {estimatedTime} prima che il tuo account sia pronto."
+
+#: src/screens/Onboarding/StepFinished.tsx:97
+msgid "We hope you have a wonderful time. Remember, Bluesky is:"
+msgstr "Speriamo di darti dei momenti dei bei momenti. Ricorda, Bluesky è:"
+
#: src/view/com/posts/DiscoverFallbackHeader.tsx:29
msgid "We ran out of posts from your follows. Here's the latest from <0/>."
msgstr "Abbiamo esaurito i posts dei tuoi follower. Ecco le ultime novità da <0/>."
-#: src/view/com/modals/AppealLabel.tsx:48
-msgid "We'll look into your appeal promptly."
-msgstr "Esamineremo il tuo ricorso al più presto."
+#: src/components/dialogs/MutedWords.tsx:203
+msgid "We recommend avoiding common words that appear in many posts, since it can result in no posts being shown."
+msgstr "Ti consigliamo di evitare usare parole comuni che compaiono in molti post, perchè ciò potrebbe comportare la mancata visualizzazione dei post."
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:125
+msgid "We recommend our \"Discover\" feed:"
+msgstr "Consigliamo il nostro feed \"Scopri\":"
+
+#: src/components/dialogs/BirthDateSettings.tsx:52
+msgid "We were unable to load your birth date preferences. Please try again."
+msgstr "Non siamo riusciti a caricare le tue preferenze relative alla data di nascita. Per favore riprova."
+
+#: src/screens/Moderation/index.tsx:385
+msgid "We were unable to load your configured labelers at this time."
+msgstr "Al momento non è stato possibile caricare le etichettatori configurati."
+
+#: src/screens/Onboarding/StepInterests/index.tsx:137
+msgid "We weren't able to connect. Please try again to continue setting up your account. If it continues to fail, you can skip this flow."
+msgstr "Non siamo riusciti a connetterci. Riprova per continuare a configurare il tuo account. Se il problema persiste, puoi ignorare questo flusso."
+
+#: src/screens/Deactivated.tsx:137
+msgid "We will let you know when your account is ready."
+msgstr "Ti faremo sapere quando il tuo account sarà pronto."
+
+#~ msgid "We'll look into your appeal promptly."
+#~ msgstr "Esamineremo il tuo ricorso al più presto."
+
+#: src/screens/Onboarding/StepInterests/index.tsx:142
+msgid "We'll use this to help customize your experience."
+msgstr "Lo useremo per personalizzare la tua esperienza."
-#: src/view/com/auth/create/CreateAccount.tsx:123
+#: src/screens/Signup/index.tsx:130
msgid "We're so excited to have you join us!"
msgstr "Siamo felici che tu ti unisca a noi!"
-#: src/view/screens/ProfileList.tsx:83
+#: src/view/screens/ProfileList.tsx:89
msgid "We're sorry, but we were unable to resolve this list. If this persists, please contact the list creator, @{handleOrDid}."
msgstr "Siamo spiacenti, ma non siamo riusciti a risolvere questa lista. Se il problema persiste, contatta il creatore della lista, @{handleOrDid}."
-#: src/view/screens/Search/Search.tsx:245
+#: src/components/dialogs/MutedWords.tsx:229
+msgid "We're sorry, but we weren't able to load your muted words at this time. Please try again."
+msgstr "Siamo spiacenti, ma al momento non siamo riusciti a caricare le parole silenziate. Per favore riprova si nuovo."
+
+#: src/view/screens/Search/Search.tsx:256
msgid "We're sorry, but your search could not be completed. Please try again in a few minutes."
msgstr "Siamo spiacenti, ma non è stato possibile completare la ricerca. Riprova tra qualche minuto."
+#: src/components/Lists.tsx:188
#: src/view/screens/NotFound.tsx:48
msgid "We're sorry! We can't find the page you were looking for."
msgstr "Ci dispiace! Non riusciamo a trovare la pagina che stavi cercando."
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:46
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:321
+msgid "We're sorry! You can only subscribe to ten labelers, and you've reached your limit of ten."
+msgstr "Ci dispiace! Puoi abbonarti solo a dieci etichettatori e hai raggiunto il limite di dieci."
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:48
msgid "Welcome to <0>Bluesky0>"
msgstr "Ti diamo il benvenuto a <0>Bluesky0>"
-#: src/view/com/modals/report/Modal.tsx:169
-msgid "What is the issue with this {collectionName}?"
-msgstr "Qual è il problema con questo {collectionName}?"
+#: src/screens/Onboarding/StepInterests/index.tsx:134
+msgid "What are your interests?"
+msgstr "Quali sono i tuoi interessi?"
-#: src/view/com/auth/SplashScreen.tsx:34 src/view/com/composer/Composer.tsx:279
+#~ msgid "What is the issue with this {collectionName}?"
+#~ msgstr "Qual è il problema con questo {collectionName}?"
+
+#~ msgid "What's next?"
+#~ msgstr "Qual è il prossimo?"
+
+#: src/view/com/auth/SplashScreen.tsx:58
+#: src/view/com/auth/SplashScreen.web.tsx:84
+#: src/view/com/composer/Composer.tsx:296
msgid "What's up?"
msgstr "Come va?"
@@ -3769,43 +5659,86 @@ msgstr "Quali lingue vorresti vedere negli algoritmi dei tuoi feeds?"
msgid "Who can reply"
msgstr "Chi può rispondere"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:102
+#: src/components/ReportDialog/SelectReportOptionView.tsx:43
+msgid "Why should this content be reviewed?"
+msgstr "Perché questo contenuto dovrebbe essere revisionato?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:56
+msgid "Why should this feed be reviewed?"
+msgstr "Perché questo feed dovrebbe essere revisionato?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:53
+msgid "Why should this list be reviewed?"
+msgstr "Perché questa lista dovrebbe essere revisionata?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:50
+msgid "Why should this post be reviewed?"
+msgstr "Perché questo post dovrebbe essere revisionato?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:47
+msgid "Why should this user be reviewed?"
+msgstr "Perché questo utente dovrebbe essere revisionato?"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:103
msgid "Wide"
msgstr "Largo"
-#: src/view/com/composer/Composer.tsx:415
+#: src/view/com/composer/Composer.tsx:436
msgid "Write post"
msgstr "Scrivi un post"
-#: src/view/com/composer/Composer.tsx:278 src/view/com/composer/Prompt.tsx:33
+#: src/view/com/composer/Composer.tsx:295
+#: src/view/com/composer/Prompt.tsx:37
msgid "Write your reply"
msgstr "Scrivi la tua risposta"
-#: src/view/com/auth/create/Step2.tsx:260
-msgid "XXXXXX"
-msgstr "XXXXXX"
+#: src/screens/Onboarding/index.tsx:28
+msgid "Writers"
+msgstr "Scrittori"
-#: src/view/com/composer/select-language/SuggestedLanguage.tsx:82
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:201
-#: src/view/screens/PreferencesHomeFeed.tsx:236
-#: src/view/screens/PreferencesHomeFeed.tsx:271
+#~ msgid "XXXXXX"
+#~ msgstr "XXXXXX"
+
+#: src/view/com/composer/select-language/SuggestedLanguage.tsx:77
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:201
+#: src/view/screens/PreferencesFollowingFeed.tsx:236
+#: src/view/screens/PreferencesFollowingFeed.tsx:271
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "Yes"
msgstr "Si"
+#: src/screens/Deactivated.tsx:130
+msgid "You are in line."
+msgstr "Sei nella fila."
+
+#: src/view/com/profile/ProfileFollows.tsx:86
+msgid "You are not following anyone."
+msgstr "Non stai seguendo nessuno."
+
#: src/view/com/posts/FollowingEmptyState.tsx:67
#: src/view/com/posts/FollowingEndOfFeed.tsx:68
msgid "You can also discover new Custom Feeds to follow."
msgstr "Puoi anche scoprire nuovi feed personalizzati da seguire."
-#: src/view/com/auth/login/Login.tsx:158
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:31
+#~ msgid "You can change hosting providers at any time."
+#~ msgstr "Puoi cambiare provider di hosting in qualsiasi momento."
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:143
+msgid "You can change these settings later."
+msgstr "Potrai modificare queste impostazioni in seguito."
+
+#: src/screens/Login/index.tsx:158
+#: src/screens/Login/PasswordUpdatedForm.tsx:33
msgid "You can now sign in with your new password."
msgstr "Adesso puoi accedere con la tua nuova password."
-#: src/view/com/modals/InviteCodes.tsx:66
+#: src/view/com/profile/ProfileFollowers.tsx:86
+msgid "You do not have any followers."
+msgstr "Non hai follower."
+
+#: src/view/com/modals/InviteCodes.tsx:67
msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer."
msgstr "Non hai ancora alcun codice di invito! Te ne invieremo alcuni quando utilizzerai Bluesky per un po' più a lungo."
@@ -3813,7 +5746,7 @@ msgstr "Non hai ancora alcun codice di invito! Te ne invieremo alcuni quando uti
msgid "You don't have any pinned feeds."
msgstr "Non hai fissato nessun feed."
-#: src/view/screens/Feeds.tsx:387
+#: src/view/screens/Feeds.tsx:452
msgid "You don't have any saved feeds!"
msgstr "Non hai salvato nessun feed!"
@@ -3821,67 +5754,141 @@ msgstr "Non hai salvato nessun feed!"
msgid "You don't have any saved feeds."
msgstr "Non hai salvato nessun feed."
-#: src/view/com/post-thread/PostThread.tsx:385
+#: src/view/com/post-thread/PostThread.tsx:159
msgid "You have blocked the author or you have been blocked by the author."
msgstr "Hai bloccato l'autore o sei stato bloccato dall'autore."
-#: src/view/com/modals/ModerationDetails.tsx:56
+#: src/components/moderation/ModerationDetailsDialog.tsx:66
+#: src/lib/moderation/useModerationCauseDescription.ts:50
+#: src/lib/moderation/useModerationCauseDescription.ts:58
msgid "You have blocked this user. You cannot view their content."
msgstr "Hai bloccato questo utente. Non è possibile visualizzare il contenuto."
-#: src/view/com/modals/ModerationDetails.tsx:87
-msgid "You have muted this user."
-msgstr "Hai silenziato questo utente."
+#: src/screens/Login/SetNewPasswordForm.tsx:54
+#: src/screens/Login/SetNewPasswordForm.tsx:91
+#: src/view/com/modals/ChangePassword.tsx:87
+#: src/view/com/modals/ChangePassword.tsx:121
+msgid "You have entered an invalid code. It should look like XXXXX-XXXXX."
+msgstr "Hai inserito un codice non valido. Dovrebbe apparire come XXXX-XXXXXX."
+
+#: src/lib/moderation/useModerationCauseDescription.ts:109
+msgid "You have hidden this post"
+msgstr "Hai nascosto questo post"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:101
+msgid "You have hidden this post."
+msgstr "Hai silenziato questo post."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:94
+#: src/lib/moderation/useModerationCauseDescription.ts:92
+msgid "You have muted this account."
+msgstr "Hai silenziato questo account."
+
+#: src/lib/moderation/useModerationCauseDescription.ts:86
+msgid "You have muted this user"
+msgstr "Hai silenziato questo utente"
+
+#~ msgid "You have muted this user."
+#~ msgstr "Hai disattivato questo utente."
#: src/view/com/feeds/ProfileFeedgens.tsx:136
msgid "You have no feeds."
msgstr "Non hai feeds."
-#: src/view/com/lists/MyLists.tsx:89 src/view/com/lists/ProfileLists.tsx:140
+#: src/view/com/lists/MyLists.tsx:89
+#: src/view/com/lists/ProfileLists.tsx:140
msgid "You have no lists."
msgstr "Non hai liste."
#: src/view/screens/ModerationBlockedAccounts.tsx:132
-msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
-msgstr "Non hai ancora bloccato nessun conto. Per bloccare un conto, vai al profilo e seleziona \"Blocca conto\" dal menu del suo conto."
+msgid "You have not blocked any accounts yet. To block an account, go to their profile and select \"Block account\" from the menu on their account."
+msgstr "Non hai ancora bloccato nessun account. Per bloccare un account, vai sul profilo e seleziona \"Blocca account\" dal menu dell'account."
+
+#~ msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
+#~ msgstr "Non hai ancora bloccato nessun conto. Per bloccare un conto, vai al profilo e seleziona \"Blocca conto\" dal menu del suo conto."
-#: src/view/screens/AppPasswords.tsx:87
+#: src/view/screens/AppPasswords.tsx:89
msgid "You have not created any app passwords yet. You can create one by pressing the button below."
msgstr "Non hai ancora creato alcuna password per l'app. Puoi crearne uno premendo il pulsante qui sotto."
#: src/view/screens/ModerationMutedAccounts.tsx:131
-msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
-msgstr "Non hai ancora disattivato alcun account. Per disattivare un account, vai al suo profilo e seleziona \"Disattiva account\" dal menu del account."
+msgid "You have not muted any accounts yet. To mute an account, go to their profile and select \"Mute account\" from the menu on their account."
+msgstr "Non hai ancora silenziato nessun account. Per silenziare un account, vai al suo profilo e seleziona \"Silenzia account\" dal menu dell' account."
+
+#~ msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
+#~ msgstr "Non hai ancora disattivato alcun account. Per disattivare un account, vai al suo profilo e seleziona \"Disattiva account\" dal menu del account."
+
+#: src/components/dialogs/MutedWords.tsx:249
+msgid "You haven't muted any words or tags yet"
+msgstr "Non hai ancora silenziato nessuna parola o tag"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:68
+msgid "You may appeal these labels if you feel they were placed in error."
+msgstr "Puoi presentare ricorso contro queste etichette se ritieni che siano state inserite per errore."
-#: src/view/com/modals/ContentFilteringSettings.tsx:170
-msgid "You must be 18 or older to enable adult content."
-msgstr "Devi avere almeno 18 anni per abilitare i contenuti per adulti."
+#: src/screens/Signup/StepInfo/Policies.tsx:79
+msgid "You must be 13 years of age or older to sign up."
+msgstr ""
+
+#~ msgid "You must be 18 or older to enable adult content."
+#~ msgstr "Devi avere almeno 18 anni per abilitare i contenuti per adulti."
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:110
+msgid "You must be 18 years or older to enable adult content"
+msgstr "Devi avere almeno 18 anni per abilitare i contenuti per adulti"
+
+#: src/components/ReportDialog/SubmitView.tsx:205
+msgid "You must select at least one labeler for a report"
+msgstr "È necessario selezionare almeno un'etichettatore per un report"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:96
+#: src/view/com/util/forms/PostDropdownBtn.tsx:144
msgid "You will no longer receive notifications for this thread"
msgstr "Non riceverai più notifiche per questo filo di discussione"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:99
+#: src/view/com/util/forms/PostDropdownBtn.tsx:147
msgid "You will now receive notifications for this thread"
msgstr "Adesso riceverai le notifiche per questa discussione"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:81
+#: src/screens/Login/SetNewPasswordForm.tsx:104
msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password."
msgstr "Riceverai un'email con un \"codice di reset\". Inserisci il codice qui, poi inserisci la nuova password."
+#: src/screens/Onboarding/StepModeration/index.tsx:60
+msgid "You're in control"
+msgstr "Sei in controllo"
+
+#: src/screens/Deactivated.tsx:87
+#: src/screens/Deactivated.tsx:88
+#: src/screens/Deactivated.tsx:103
+msgid "You're in line"
+msgstr "Sei in fila"
+
+#: src/screens/Onboarding/StepFinished.tsx:94
+msgid "You're ready to go!"
+msgstr "Sei pronto per iniziare!"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:98
+#: src/lib/moderation/useModerationCauseDescription.ts:101
+msgid "You've chosen to hide a word or tag within this post."
+msgstr "Hai scelto di nascondere una parola o un tag in questo post."
+
#: src/view/com/posts/FollowingEndOfFeed.tsx:48
msgid "You've reached the end of your feed! Find some more accounts to follow."
msgstr "Hai raggiunto la fine del tuo feed! Trova altri account da seguire."
-#: src/view/com/auth/create/Step1.tsx:67
+#: src/screens/Signup/index.tsx:150
msgid "Your account"
msgstr "Il tuo account"
-#: src/view/com/modals/DeleteAccount.tsx:65
+#: src/view/com/modals/DeleteAccount.tsx:68
msgid "Your account has been deleted"
msgstr "Il tuo account è stato eliminato"
-#: src/view/com/auth/create/Step1.tsx:182
+#: src/view/screens/Settings/ExportCarDialog.tsx:47
+msgid "Your account repository, containing all public data records, can be downloaded as a \"CAR\" file. This file does not include media embeds, such as images, or your private data, which must be fetched separately."
+msgstr "L'archivio del tuo account, che contiene tutti i record di dati pubblici, può essere scaricato come file \"CAR\". Questo file non include elementi multimediali incorporati, come immagini o dati privati, che devono essere recuperati separatamente."
+
+#: src/screens/Signup/StepInfo/index.tsx:121
msgid "Your birth date"
msgstr "La tua data di nascita"
@@ -3889,14 +5896,18 @@ msgstr "La tua data di nascita"
msgid "Your choice will be saved, but can be changed later in settings."
msgstr "La tua scelta verrà salvata, ma potrà essere modificata successivamente nelle impostazioni."
-#: src/view/com/auth/create/state.ts:153
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:70
+#: src/screens/Onboarding/StepFollowingFeed.tsx:62
+msgid "Your default feed is \"Following\""
+msgstr "Il tuo feed predefinito è \"Following\""
+
+#: src/screens/Login/ForgotPasswordForm.tsx:57
+#: src/screens/Signup/state.ts:227
+#: src/view/com/modals/ChangePassword.tsx:54
msgid "Your email appears to be invalid."
msgstr "Your email appears to be invalid."
-#: src/view/com/modals/Waitlist.tsx:109
-msgid "Your email has been saved! We'll be in touch soon."
-msgstr "La tua email è stata salvata! Ci metteremo in contatto al più presto."
+#~ msgid "Your email has been saved! We'll be in touch soon."
+#~ msgstr "La tua email è stata salvata! Ci metteremo in contatto al più presto."
#: src/view/com/modals/ChangeEmail.tsx:125
msgid "Your email has been updated but not verified. As a next step, please verify your new email."
@@ -3910,108 +5921,46 @@ msgstr "La tua email non è stata ancora verificata. Ti consigliamo di fare ques
msgid "Your following feed is empty! Follow more users to see what's happening."
msgstr "Il tuo feed seguente è vuoto! Segui più utenti per vedere cosa sta succedendo."
-#: src/view/com/auth/create/Step3.tsx:42
+#: src/screens/Signup/StepHandle.tsx:72
msgid "Your full handle will be"
msgstr "Il tuo nome di utente completo sarà"
-#: src/view/com/modals/ChangeHandle.tsx:270
+#: src/view/com/modals/ChangeHandle.tsx:271
msgid "Your full handle will be <0>@{0}0>"
msgstr "Il tuo nome di utente completo sarà <0>@{0}0>"
-#: src/view/screens/Settings.tsx:430 src/view/shell/desktop/RightNav.tsx:137
-#: src/view/shell/Drawer.tsx:660
-msgid "Your invite codes are hidden when logged in using an App Password"
-msgstr "I tuoi codici di invito vengono celati quando accedi utilizzando una password per l'app"
+#~ msgid "Your hosting provider"
+#~ msgstr "Il tuo fornitore di hosting"
+
+#~ msgid "Your invite codes are hidden when logged in using an App Password"
+#~ msgstr "I tuoi codici di invito vengono celati quando accedi utilizzando una password per l'app"
+
+#: src/components/dialogs/MutedWords.tsx:220
+msgid "Your muted words"
+msgstr "Le tue parole silenziate"
-#: src/view/com/composer/Composer.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:157
+msgid "Your password has been changed successfully!"
+msgstr "La tua password è stata modificata correttamente!"
+
+#: src/view/com/composer/Composer.tsx:284
msgid "Your post has been published"
msgstr "Il tuo post è stato pubblicato"
+#: src/screens/Onboarding/StepFinished.tsx:109
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:59
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:59
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:61
msgid "Your posts, likes, and blocks are public. Mutes are private."
msgstr "I tuoi post, i tuoi Mi piace e i tuoi blocchi sono pubblici. I conti silenziati sono privati."
-#: src/view/com/modals/SwitchAccount.tsx:84 src/view/screens/Settings.tsx:125
+#: src/view/screens/Settings/index.tsx:125
msgid "Your profile"
msgstr "Il tuo profilo"
-#: src/view/com/composer/Composer.tsx:266
+#: src/view/com/composer/Composer.tsx:283
msgid "Your reply has been published"
msgstr "La tua risposta è stata pubblicata"
-#: src/view/com/auth/create/Step3.tsx:28
+#: src/screens/Signup/index.tsx:152
msgid "Your user handle"
msgstr "Il tuo handle utente"
-
-#~ msgid "{0}"
-#~ msgstr "{0}"
-
-#~ msgid "{0} {purposeLabel} List"
-#~ msgstr "Llista {purposeLabel} {0}"
-
-#~ msgid "{message}"
-#~ msgstr "{message}"
-
-#~ msgid "Appeal Decision"
-#~ msgstr "Decisión de apelación"
-
-#~ msgid "Cancel add image alt text"
-#~ msgstr "Cancel·la afegir text a la imatge"
-
-#~ msgid "Change"
-#~ msgstr "Canvia"
-
-#~ msgid "Dev Server"
-#~ msgstr "Servidor de desenvolupament"
-
-#~ msgid "Enter the address of your provider:"
-#~ msgstr "Introdueix l'adreça del teu proveïdor:"
-
-#~ msgid "following"
-#~ msgstr "seguint"
-
-#~ msgid "Hosting provider address"
-#~ msgstr "Adreça del proveïdor d'allotjament"
-
-#~ msgid "Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!"
-#~ msgstr "Parece que este canal de noticias sólo está disponible para usuarios con una cuenta Bluesky. Por favor, ¡regístrate o inicia sesión para ver este canal!"
-
-#~ msgid "Message from server"
-#~ msgstr "Missatge del servidor"
-
-#~ msgid "New Post"
-#~ msgstr "Nova publicació"
-
-#~ msgid "Please tell us why you think this decision was incorrect."
-#~ msgstr "Por favor, dinos por qué crees que esta decisión fue incorrecta."
-
-#~ msgid "Post"
-#~ msgstr "Publicació"
-
-#~ msgid "Quote Post"
-#~ msgstr "Cita una publicació"
-
-#~ msgid "Send Email"
-#~ msgstr "Envia correu"
-
-#~ msgid "The support form has been moved. If you need help, please<0/> or visit {HELP_DESK_URL} to get in touch with us."
-#~ msgstr "El formulari de suport ha estat traslladat. Si necessites ajuda, <0/> o visita {HELP_DESK_URL} per contactar amb nosaltres."
-
-#~ msgid "This {0} has been labeled."
-#~ msgstr "Este {0} ha sido etiquetado."
-
-#~ msgid "This is the service that keeps you online."
-#~ msgstr "Aquest és el servei que et manté connectat."
-
-#~ msgid "Try again"
-#~ msgstr "Torna-ho a provar"
-
-#~ msgid "What's next?"
-#~ msgstr "¿Qué sigue?"
-
-#~ msgid "You can change hosting providers at any time."
-#~ msgstr "Pots canviar el teu proveïdor d'allotjament quan vulguis."
-
-#~ msgid "Your hosting provider"
-#~ msgstr "El teu proveïdor d'allotjament"
diff --git a/src/locale/locales/ja/messages.po b/src/locale/locales/ja/messages.po
index d7884c765b..3bb8437bba 100644
--- a/src/locale/locales/ja/messages.po
+++ b/src/locale/locales/ja/messages.po
@@ -8,9 +8,9 @@ msgstr ""
"Language: ja\n"
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2024-01-30 19:00+0900\n"
+"PO-Revision-Date: 2024-03-24 09:30+0900\n"
"Last-Translator: Hima-Zinn\n"
-"Language-Team: Hima-Zinn, tkusano, dolciss, oboenikui, noritada, middlingphys\n"
+"Language-Team: Hima-Zinn, tkusano, dolciss, oboenikui, noritada, middlingphys, hibiki, reindex-ot, haoyayoi, vyv03354\n"
"Plural-Forms: \n"
#: src/view/com/modals/VerifyEmail.tsx:142
@@ -30,9 +30,9 @@ msgstr "メールがありません"
#~ msgid "{0} {purposeLabel} List"
#~ msgstr "{0} {purposeLabel} リスト"
-#: src/view/com/profile/ProfileHeader.tsx:592
+#: src/screens/Profile/Header/Metrics.tsx:44
msgid "{following} following"
-msgstr "{following}人をフォロー中"
+msgstr "{following} フォロー"
#: src/view/shell/desktop/RightNav.tsx:151
#~ msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}"
@@ -52,7 +52,7 @@ msgstr "{following}人をフォロー中"
#~ msgid "{message}"
#~ msgstr "{message}"
-#: src/view/shell/Drawer.tsx:440
+#: src/view/shell/Drawer.tsx:443
msgid "{numUnreadNotifications} unread"
msgstr "{numUnreadNotifications}件の未読"
@@ -64,9 +64,13 @@ msgstr "{numUnreadNotifications}件の未読"
msgid "<0/> members"
msgstr "<0/>のメンバー"
-#: src/view/com/profile/ProfileHeader.tsx:594
+#: src/view/shell/Drawer.tsx:97
+msgid "<0>{0}0> following"
+msgstr "<0>{0}0> フォロー"
+
+#: src/screens/Profile/Header/Metrics.tsx:45
msgid "<0>{following} 0><1>following1>"
-msgstr "<0>{following}0><1>人をフォロー中1>"
+msgstr "<0>{following} 0><1>フォロー1>"
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:30
msgid "<0>Choose your0><1>Recommended1><2>Feeds2>"
@@ -80,51 +84,60 @@ msgstr "<1>おすすめの1><2>ユーザー2><0>をフォロー0>"
msgid "<0>Welcome to0><1>Bluesky1>"
msgstr "<1>Bluesky1><0>へようこそ0>"
-#: src/view/com/profile/ProfileHeader.tsx:557
+#: src/screens/Profile/Header/Handle.tsx:42
msgid "⚠Invalid Handle"
-msgstr "⚠不正なハンドル"
+msgstr "⚠無効なハンドル"
#: src/view/com/util/moderation/LabelInfo.tsx:45
-msgid "A content warning has been applied to this {0}."
-msgstr "この{0}にコンテンツの警告が適用されています。"
+#~ msgid "A content warning has been applied to this {0}."
+#~ msgstr "この{0}にコンテンツの警告が適用されています。"
#: src/lib/hooks/useOTAUpdate.ts:16
-msgid "A new version of the app is available. Please update to continue using the app."
-msgstr "新しいバージョンのアプリが利用可能です。継続して使用するためにはアップデートしてください。"
+#~ msgid "A new version of the app is available. Please update to continue using the app."
+#~ msgstr "新しいバージョンのアプリが利用可能です。継続して使用するためにはアップデートしてください。"
-#: src/view/com/util/ViewHeader.tsx:83
-#: src/view/screens/Search/Search.tsx:624
+#: src/view/com/util/ViewHeader.tsx:89
+#: src/view/screens/Search/Search.tsx:649
msgid "Access navigation links and settings"
msgstr "ナビゲーションリンクと設定にアクセス"
-#: src/view/com/pager/FeedsTabBarMobile.tsx:89
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:52
msgid "Access profile and other navigation links"
msgstr "プロフィールと他のナビゲーションリンクにアクセス"
-#: src/view/com/modals/EditImage.tsx:299
-#: src/view/screens/Settings/index.tsx:451
+#: src/view/com/modals/EditImage.tsx:300
+#: src/view/screens/Settings/index.tsx:470
msgid "Accessibility"
msgstr "アクセシビリティ"
-#: src/view/com/auth/login/LoginForm.tsx:166
-#: src/view/screens/Settings/index.tsx:308
-#: src/view/screens/Settings/index.tsx:721
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "account"
+msgstr "アカウント"
+
+#: src/screens/Login/LoginForm.tsx:144
+#: src/view/screens/Settings/index.tsx:327
+#: src/view/screens/Settings/index.tsx:743
msgid "Account"
msgstr "アカウント"
-#: src/view/com/profile/ProfileHeader.tsx:245
+#: src/view/com/profile/ProfileMenu.tsx:139
msgid "Account blocked"
msgstr "アカウントをブロックしました"
-#: src/view/com/profile/ProfileHeader.tsx:212
+#: src/view/com/profile/ProfileMenu.tsx:153
+msgid "Account followed"
+msgstr "アカウントをフォローしました"
+
+#: src/view/com/profile/ProfileMenu.tsx:113
msgid "Account muted"
msgstr "アカウントをミュートしました"
-#: src/view/com/modals/ModerationDetails.tsx:86
+#: src/components/moderation/ModerationDetailsDialog.tsx:93
+#: src/lib/moderation/useModerationCauseDescription.ts:91
msgid "Account Muted"
msgstr "ミュート中のアカウント"
-#: src/view/com/modals/ModerationDetails.tsx:72
+#: src/components/moderation/ModerationDetailsDialog.tsx:82
msgid "Account Muted by List"
msgstr "リストによってミュート中のアカウント"
@@ -136,18 +149,24 @@ msgstr "アカウントオプション"
msgid "Account removed from quick access"
msgstr "クイックアクセスからアカウントを解除"
-#: src/view/com/profile/ProfileHeader.tsx:267
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:137
+#: src/view/com/profile/ProfileMenu.tsx:128
msgid "Account unblocked"
msgstr "アカウントのブロックを解除しました"
-#: src/view/com/profile/ProfileHeader.tsx:225
+#: src/view/com/profile/ProfileMenu.tsx:166
+msgid "Account unfollowed"
+msgstr "アカウントのフォローを解除しました"
+
+#: src/view/com/profile/ProfileMenu.tsx:102
msgid "Account unmuted"
msgstr "アカウントのミュートを解除しました"
+#: src/components/dialogs/MutedWords.tsx:164
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:150
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/screens/ProfileList.tsx:812
+#: src/view/screens/ProfileList.tsx:827
msgid "Add"
msgstr "追加"
@@ -155,54 +174,63 @@ msgstr "追加"
msgid "Add a content warning"
msgstr "コンテンツの警告を追加"
-#: src/view/screens/ProfileList.tsx:802
+#: src/view/screens/ProfileList.tsx:817
msgid "Add a user to this list"
msgstr "リストにユーザーを追加"
-#: src/view/screens/Settings/index.tsx:383
-#: src/view/screens/Settings/index.tsx:392
+#: src/components/dialogs/SwitchAccount.tsx:55
+#: src/view/screens/Settings/index.tsx:402
+#: src/view/screens/Settings/index.tsx:411
msgid "Add account"
msgstr "アカウントを追加"
#: src/view/com/composer/photos/Gallery.tsx:119
#: src/view/com/composer/photos/Gallery.tsx:180
-#: src/view/com/modals/AltImage.tsx:116
+#: src/view/com/modals/AltImage.tsx:117
msgid "Add alt text"
msgstr "ALTテキストを追加"
-#: src/view/screens/AppPasswords.tsx:102
-#: src/view/screens/AppPasswords.tsx:143
-#: src/view/screens/AppPasswords.tsx:156
+#: src/view/screens/AppPasswords.tsx:104
+#: src/view/screens/AppPasswords.tsx:145
+#: src/view/screens/AppPasswords.tsx:158
msgid "Add App Password"
msgstr "アプリパスワードを追加"
#: src/view/com/modals/report/InputIssueDetails.tsx:41
#: src/view/com/modals/report/Modal.tsx:191
-msgid "Add details"
-msgstr "詳細を追加"
+#~ msgid "Add details"
+#~ msgstr "詳細を追加"
#: src/view/com/modals/report/Modal.tsx:194
-msgid "Add details to report"
-msgstr "レポートに詳細を追加"
+#~ msgid "Add details to report"
+#~ msgstr "報告に詳細を追加"
-#: src/view/com/composer/Composer.tsx:446
+#: src/view/com/composer/Composer.tsx:467
msgid "Add link card"
msgstr "リンクカードを追加"
-#: src/view/com/composer/Composer.tsx:451
+#: src/view/com/composer/Composer.tsx:472
msgid "Add link card:"
msgstr "リンクカードを追加:"
-#: src/view/com/modals/ChangeHandle.tsx:417
+#: src/components/dialogs/MutedWords.tsx:157
+msgid "Add mute word for configured settings"
+msgstr "ミュートするワードを設定に追加"
+
+#: src/components/dialogs/MutedWords.tsx:86
+msgid "Add muted words and tags"
+msgstr "ミュートするワードとタグを追加"
+
+#: src/view/com/modals/ChangeHandle.tsx:416
msgid "Add the following DNS record to your domain:"
msgstr "次のDNSレコードをドメインに追加してください:"
-#: src/view/com/profile/ProfileHeader.tsx:309
+#: src/view/com/profile/ProfileMenu.tsx:263
+#: src/view/com/profile/ProfileMenu.tsx:266
msgid "Add to Lists"
msgstr "リストに追加"
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/feeds/FeedSourceCard.tsx:234
msgid "Add to my feeds"
msgstr "マイフィードに追加"
@@ -215,36 +243,47 @@ msgstr "追加済み"
msgid "Added to list"
msgstr "リストに追加"
-#: src/view/com/feeds/FeedSourceCard.tsx:125
+#: src/view/com/feeds/FeedSourceCard.tsx:108
msgid "Added to my feeds"
msgstr "マイフィードに追加"
-#: src/view/screens/PreferencesHomeFeed.tsx:173
+#: src/view/screens/PreferencesFollowingFeed.tsx:173
msgid "Adjust the number of likes a reply must have to be shown in your feed."
-msgstr "返信がフィードに表示されるために必要な「いいね」の数を調整します。"
+msgstr "返信がフィードに表示されるために必要ないいねの数を調整します。"
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:117
#: src/view/com/modals/SelfLabel.tsx:75
msgid "Adult Content"
msgstr "成人向けコンテンツ"
#: src/view/com/modals/ContentFilteringSettings.tsx:141
-msgid "Adult content can only be enabled via the Web at <0/>."
-msgstr "成人向けコンテンツはウェブ(<0/>)からのみ有効化できます。"
+#~ msgid "Adult content can only be enabled via the Web at <0/>."
+#~ msgstr "成人向けコンテンツはウェブ(<0/>)からのみ有効化できます。"
#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
#~ msgid "Adult content can only be enabled via the Web at <0>bsky.app0>."
#~ msgstr "成人向けコンテンツはウェブ(<0>bsky.app0>)からのみ有効化できます。"
-#: src/view/screens/Settings/index.tsx:664
+#: src/components/moderation/LabelPreference.tsx:242
+msgid "Adult content is disabled."
+msgstr "成人向けコンテンツは無効になっています。"
+
+#: src/screens/Moderation/index.tsx:375
+#: src/view/screens/Settings/index.tsx:684
msgid "Advanced"
msgstr "高度な設定"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:221
-#: src/view/com/modals/ChangePassword.tsx:168
+#: src/view/screens/Feeds.tsx:666
+msgid "All the feeds you've saved, right in one place."
+msgstr "保存したすべてのフィードを1箇所にまとめます。"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:178
+#: src/view/com/modals/ChangePassword.tsx:170
msgid "Already have a code?"
msgstr "コードをすでに持っていますか?"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:98
+#: src/screens/Login/ChooseAccountForm.tsx:39
msgid "Already signed in as @{0}"
msgstr "@{0}としてすでにサインイン済み"
@@ -252,7 +291,7 @@ msgstr "@{0}としてすでにサインイン済み"
msgid "ALT"
msgstr "ALT"
-#: src/view/com/modals/EditImage.tsx:315
+#: src/view/com/modals/EditImage.tsx:316
msgid "Alt text"
msgstr "ALTテキスト"
@@ -268,12 +307,18 @@ msgstr "メールが{0}に送信されました。以下に入力できる確認
msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below."
msgstr "以前のメールアドレス{0}にメールが送信されました。以下に入力できる確認コードがそのメールに記載されています。"
-#: src/view/com/profile/FollowButton.tsx:30
-#: src/view/com/profile/FollowButton.tsx:40
+#: src/lib/moderation/useReportOptions.ts:26
+msgid "An issue not included in these options"
+msgstr "ほかの選択肢にはあてはまらない問題"
+
+#: src/view/com/profile/FollowButton.tsx:35
+#: src/view/com/profile/FollowButton.tsx:45
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:188
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:198
msgid "An issue occurred, please try again."
msgstr "問題が発生しました。もう一度お試しください。"
-#: src/view/com/notifications/FeedItem.tsx:236
+#: src/view/com/notifications/FeedItem.tsx:240
#: src/view/com/threadgate/WhoCanReply.tsx:178
msgid "and"
msgstr "および"
@@ -282,23 +327,27 @@ msgstr "および"
msgid "Animals"
msgstr "動物"
+#: src/lib/moderation/useReportOptions.ts:31
+msgid "Anti-Social Behavior"
+msgstr "反社会的な行動"
+
#: src/view/screens/LanguageSettings.tsx:95
msgid "App Language"
msgstr "アプリの言語"
-#: src/view/screens/AppPasswords.tsx:228
+#: src/view/screens/AppPasswords.tsx:223
msgid "App password deleted"
msgstr "アプリパスワードを削除しました"
-#: src/view/com/modals/AddAppPasswords.tsx:134
+#: src/view/com/modals/AddAppPasswords.tsx:135
msgid "App Password names can only contain letters, numbers, spaces, dashes, and underscores."
msgstr "アプリパスワードの名前には、英数字、スペース、ハイフン、アンダースコアのみが使用可能です。"
-#: src/view/com/modals/AddAppPasswords.tsx:99
+#: src/view/com/modals/AddAppPasswords.tsx:100
msgid "App Password names must be at least 4 characters long."
-msgstr "アプリパスワードの名前は長さが4文字以上である必要があります。"
+msgstr "アプリパスワードの名前は長さが4文字以上である必要があります。"
-#: src/view/screens/Settings/index.tsx:675
+#: src/view/screens/Settings/index.tsx:695
msgid "App password settings"
msgstr "アプリパスワードの設定"
@@ -306,51 +355,69 @@ msgstr "アプリパスワードの設定"
#~ msgid "App passwords"
#~ msgstr "アプリパスワード"
-#: src/Navigation.tsx:237
-#: src/view/screens/AppPasswords.tsx:187
-#: src/view/screens/Settings/index.tsx:684
+#: src/Navigation.tsx:251
+#: src/view/screens/AppPasswords.tsx:189
+#: src/view/screens/Settings/index.tsx:704
msgid "App Passwords"
msgstr "アプリパスワード"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:250
-msgid "Appeal content warning"
-msgstr "コンテンツの警告に異議を申し立てる"
+#: src/components/moderation/LabelsOnMeDialog.tsx:133
+#: src/components/moderation/LabelsOnMeDialog.tsx:136
+msgid "Appeal"
+msgstr "異議を申し立てる"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:201
+msgid "Appeal \"{0}\" label"
+msgstr "「{0}」のラベルに異議を申し立てる"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:337
+#: src/view/com/util/forms/PostDropdownBtn.tsx:346
+#~ msgid "Appeal content warning"
+#~ msgstr "コンテンツの警告に異議を申し立てる"
#: src/view/com/modals/AppealLabel.tsx:65
-msgid "Appeal Content Warning"
-msgstr "コンテンツの警告に異議を申し立てる"
+#~ msgid "Appeal Content Warning"
+#~ msgstr "コンテンツの警告に異議を申し立てる"
#: src/view/com/modals/AppealLabel.tsx:65
#~ msgid "Appeal Decision"
#~ msgstr "判断に異議を申し立てる"
+#: src/components/moderation/LabelsOnMeDialog.tsx:192
+msgid "Appeal submitted."
+msgstr "異議申し立てを提出しました。"
+
#: src/view/com/util/moderation/LabelInfo.tsx:52
-msgid "Appeal this decision"
-msgstr "この判断に異議を申し立てる"
+#~ msgid "Appeal this decision"
+#~ msgstr "この判断に異議を申し立てる"
#: src/view/com/util/moderation/LabelInfo.tsx:56
-msgid "Appeal this decision."
-msgstr "この判断に異議を申し立てる"
+#~ msgid "Appeal this decision."
+#~ msgstr "この判断に異議を申し立てる"
-#: src/view/screens/Settings/index.tsx:466
+#: src/view/screens/Settings/index.tsx:485
msgid "Appearance"
msgstr "背景"
-#: src/view/screens/AppPasswords.tsx:224
+#: src/view/screens/AppPasswords.tsx:265
msgid "Are you sure you want to delete the app password \"{name}\"?"
msgstr "アプリパスワード「{name}」を本当に削除しますか?"
-#: src/view/com/composer/Composer.tsx:143
+#: src/view/com/feeds/FeedSourceCard.tsx:280
+msgid "Are you sure you want to remove {0} from your feeds?"
+msgstr "あなたのフィードから{0}を削除してもよろしいですか?"
+
+#: src/view/com/composer/Composer.tsx:509
msgid "Are you sure you'd like to discard this draft?"
msgstr "本当にこの下書きを破棄しますか?"
-#: src/view/screens/ProfileList.tsx:364
+#: src/components/dialogs/MutedWords.tsx:281
msgid "Are you sure?"
msgstr "本当によろしいですか?"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:233
-msgid "Are you sure? This cannot be undone."
-msgstr "本当によろしいですか?これは元に戻せません。"
+#: src/view/com/util/forms/PostDropdownBtn.tsx:322
+#~ msgid "Are you sure? This cannot be undone."
+#~ msgstr "本当によろしいですか?これは元に戻せません。"
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:60
msgid "Are you writing in <0>{0}0>?"
@@ -364,78 +431,93 @@ msgstr "アート"
msgid "Artistic or non-erotic nudity."
msgstr "芸術的または性的ではないヌード。"
-#: src/view/com/auth/create/CreateAccount.tsx:147
-#: src/view/com/auth/login/ChooseAccountForm.tsx:151
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:174
-#: src/view/com/auth/login/LoginForm.tsx:259
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:179
-#: src/view/com/modals/report/InputIssueDetails.tsx:46
-#: src/view/com/post-thread/PostThread.tsx:408
-#: src/view/com/post-thread/PostThread.tsx:458
-#: src/view/com/post-thread/PostThread.tsx:466
-#: src/view/com/profile/ProfileHeader.tsx:648
-#: src/view/com/util/ViewHeader.tsx:81
-msgid "Back"
-msgstr "戻る"
+#: src/screens/Signup/StepHandle.tsx:118
+msgid "At least 3 characters"
+msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:416
-msgctxt "action"
+#: src/components/moderation/LabelsOnMeDialog.tsx:246
+#: src/components/moderation/LabelsOnMeDialog.tsx:247
+#: src/screens/Login/ChooseAccountForm.tsx:73
+#: src/screens/Login/ChooseAccountForm.tsx:78
+#: src/screens/Login/ForgotPasswordForm.tsx:129
+#: src/screens/Login/ForgotPasswordForm.tsx:135
+#: src/screens/Login/LoginForm.tsx:221
+#: src/screens/Login/LoginForm.tsx:227
+#: src/screens/Login/SetNewPasswordForm.tsx:160
+#: src/screens/Login/SetNewPasswordForm.tsx:166
+#: src/screens/Profile/Header/Shell.tsx:96
+#: src/screens/Signup/index.tsx:179
+#: src/view/com/util/ViewHeader.tsx:87
msgid "Back"
msgstr "戻る"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:136
+#: src/view/com/post-thread/PostThread.tsx:480
+#~ msgctxt "action"
+#~ msgid "Back"
+#~ msgstr "戻る"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:144
msgid "Based on your interest in {interestsText}"
-msgstr "「{interestsText}」への興味に基づいたおすすめです。"
+msgstr "{interestsText}への興味に基づいたおすすめ"
-#: src/view/screens/Settings/index.tsx:523
+#: src/view/screens/Settings/index.tsx:542
msgid "Basics"
msgstr "基本"
-#: src/view/com/auth/create/Step1.tsx:246
-#: src/view/com/modals/BirthDateSettings.tsx:73
+#: src/components/dialogs/BirthDateSettings.tsx:107
msgid "Birthday"
msgstr "誕生日"
-#: src/view/screens/Settings/index.tsx:340
+#: src/view/screens/Settings/index.tsx:359
msgid "Birthday:"
msgstr "誕生日:"
-#: src/view/com/profile/ProfileHeader.tsx:238
-#: src/view/com/profile/ProfileHeader.tsx:345
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+msgid "Block"
+msgstr "ブロック"
+
+#: src/view/com/profile/ProfileMenu.tsx:300
+#: src/view/com/profile/ProfileMenu.tsx:307
msgid "Block Account"
msgstr "アカウントをブロック"
-#: src/view/screens/ProfileList.tsx:555
+#: src/view/com/profile/ProfileMenu.tsx:344
+msgid "Block Account?"
+msgstr "アカウントをブロックしますか?"
+
+#: src/view/screens/ProfileList.tsx:530
msgid "Block accounts"
msgstr "アカウントをブロック"
-#: src/view/screens/ProfileList.tsx:505
+#: src/view/screens/ProfileList.tsx:478
+#: src/view/screens/ProfileList.tsx:634
msgid "Block list"
msgstr "リストをブロック"
-#: src/view/screens/ProfileList.tsx:315
+#: src/view/screens/ProfileList.tsx:629
msgid "Block these accounts?"
msgstr "これらのアカウントをブロックしますか?"
-#: src/view/screens/ProfileList.tsx:319
-msgid "Block this List"
-msgstr "このリストをブロック"
+#: src/view/screens/ProfileList.tsx:320
+#~ msgid "Block this List"
+#~ msgstr "このリストをブロック"
-#: src/view/com/lists/ListCard.tsx:109
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:60
+#: src/view/com/lists/ListCard.tsx:110
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:55
msgid "Blocked"
msgstr "ブロックされています"
-#: src/view/screens/Moderation.tsx:123
+#: src/screens/Moderation/index.tsx:267
msgid "Blocked accounts"
msgstr "ブロック中のアカウント"
-#: src/Navigation.tsx:130
+#: src/Navigation.tsx:134
#: src/view/screens/ModerationBlockedAccounts.tsx:107
msgid "Blocked Accounts"
msgstr "ブロック中のアカウント"
-#: src/view/com/profile/ProfileHeader.tsx:240
+#: src/view/com/profile/ProfileMenu.tsx:356
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
msgstr "ブロック中のアカウントは、あなたのスレッドでの返信、あなたへのメンション、その他の方法であなたとやり取りすることはできません。"
@@ -443,48 +525,57 @@ msgstr "ブロック中のアカウントは、あなたのスレッドでの返
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours."
msgstr "ブロック中のアカウントは、あなたのスレッドでの返信、あなたへのメンション、その他の方法であなたとやり取りすることはできません。あなたは相手のコンテンツを見ることができず、相手はあなたのコンテンツを見ることができなくなります。"
-#: src/view/com/post-thread/PostThread.tsx:267
+#: src/view/com/post-thread/PostThread.tsx:313
msgid "Blocked post."
msgstr "投稿をブロックしました。"
-#: src/view/screens/ProfileList.tsx:317
+#: src/screens/Profile/Sections/Labels.tsx:152
+msgid "Blocking does not prevent this labeler from placing labels on your account."
+msgstr "ブロックしてもこのラベラーがあなたのアカウントにラベルを貼ることができます。"
+
+#: src/view/screens/ProfileList.tsx:631
msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
msgstr "ブロックしたことは公開されます。ブロック中のアカウントは、あなたのスレッドでの返信、あなたへのメンション、その他の方法であなたとやり取りすることはできません。"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:93
+#: src/view/com/profile/ProfileMenu.tsx:353
+msgid "Blocking will not prevent labels from being applied on your account, but it will stop this account from replying in your threads or interacting with you."
+msgstr "ブロックしてもこのラベラーがあなたのアカウントにラベルを貼ることができますが、このアカウントがあなたのスレッドに返信したり、やりとりをしたりといったことはできなくなります。"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:98
+#: src/view/com/auth/SplashScreen.web.tsx:169
msgid "Blog"
msgstr "ブログ"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:31
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:32
#: src/view/com/auth/server-input/index.tsx:89
-#: src/view/com/auth/server-input/index.tsx:90
+#: src/view/com/auth/server-input/index.tsx:91
msgid "Bluesky"
msgstr "Bluesky"
-#: src/view/com/auth/server-input/index.tsx:150
+#: src/view/com/auth/server-input/index.tsx:154
msgid "Bluesky is an open network where you can choose your hosting provider. Custom hosting is now available in beta for developers."
-msgstr "Bluesky は、ホスティング プロバイダーを選択できるオープン ネットワークです。 カスタム ホスティングは、開発者向けのベータ版で利用できるようになりました。"
+msgstr "Bluesky は、ホスティング プロバイダーを選択できるオープン ネットワークです。 カスタムホスティングは、開発者向けのベータ版で利用できるようになりました。"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:80
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:80
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:82
msgid "Bluesky is flexible."
msgstr "Blueskyは柔軟です。"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:69
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:69
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:71
msgid "Bluesky is open."
msgstr "Blueskyは開かれています。"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:56
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:56
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:58
msgid "Bluesky is public."
msgstr "Blueskyはパブリックです。"
#: src/view/com/modals/Waitlist.tsx:70
-msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
-msgstr "Blueskyはより健全なコミュニティーを構築するために招待状を使用します。招待状をお持ちでない場合、Waitlistにお申し込みいただくと招待状をお送りします。"
+#~ msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
+#~ msgstr "Blueskyはより健全なコミュニティーを構築するために招待状を使用します。招待状をお持ちでない場合、Waitlistにお申し込みいただくと招待状をお送りします。"
-#: src/view/screens/Moderation.tsx:226
+#: src/screens/Moderation/index.tsx:533
msgid "Bluesky will not show your profile and posts to logged-out users. Other apps may not honor this request. This does not make your account private."
msgstr "Blueskyはログアウトしたユーザーにあなたのプロフィールや投稿を表示しません。他のアプリはこのリクエストに応じない場合があります。この設定はあなたのアカウントを非公開にするものではありません。"
@@ -492,15 +583,24 @@ msgstr "Blueskyはログアウトしたユーザーにあなたのプロフィ
#~ msgid "Bluesky.Social"
#~ msgstr "Bluesky.Social"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:53
+msgid "Blur images"
+msgstr "画像をぼかす"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:51
+msgid "Blur images and filter from feeds"
+msgstr "画像のぼかしとフィードからのフィルタリング"
+
#: src/screens/Onboarding/index.tsx:33
msgid "Books"
msgstr "書籍"
-#: src/view/screens/Settings/index.tsx:859
-msgid "Build version {0} {1}"
-msgstr "ビルドバージョン {0} {1}"
+#: src/view/screens/Settings/index.tsx:893
+#~ msgid "Build version {0} {1}"
+#~ msgstr "ビルドバージョン {0} {1}"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:87
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:92
+#: src/view/com/auth/SplashScreen.web.tsx:166
msgid "Business"
msgstr "ビジネス"
@@ -516,56 +616,66 @@ msgstr "作成者:-"
msgid "by {0}"
msgstr "作成者:{0}"
+#: src/components/LabelingServiceCard/index.tsx:57
+msgid "By {0}"
+msgstr "作成者:{0}"
+
#: src/view/com/profile/ProfileSubpageHeader.tsx:161
msgid "by <0/>"
msgstr "作成者:<0/>"
+#: src/screens/Signup/StepInfo/Policies.tsx:74
+msgid "By creating an account you agree to the {els}."
+msgstr "アカウントを作成することで、{els}に同意したものとみなされます。"
+
#: src/view/com/profile/ProfileSubpageHeader.tsx:159
msgid "by you"
msgstr "作成者:あなた"
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:60
-#: src/view/com/util/UserAvatar.tsx:224
-#: src/view/com/util/UserBanner.tsx:40
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:77
msgid "Camera"
msgstr "カメラ"
-#: src/view/com/modals/AddAppPasswords.tsx:216
+#: src/view/com/modals/AddAppPasswords.tsx:217
msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long."
-msgstr "英数字、スペース、ハイフン、アンダースコアのみが使用可能です。長さは4文字以上32文字以下である必要があります。"
+msgstr "英数字、スペース、ハイフン、アンダースコアのみが使用可能です。長さは4文字以上32文字以下である必要があります。"
-#: src/components/Prompt.tsx:91
-#: src/view/com/composer/Composer.tsx:300
-#: src/view/com/composer/Composer.tsx:305
+#: src/components/Menu/index.tsx:213
+#: src/components/Prompt.tsx:113
+#: src/components/Prompt.tsx:115
+#: src/components/TagMenu/index.tsx:268
+#: src/view/com/composer/Composer.tsx:317
+#: src/view/com/composer/Composer.tsx:322
#: src/view/com/modals/ChangeEmail.tsx:218
#: src/view/com/modals/ChangeEmail.tsx:220
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
-#: src/view/com/modals/CreateOrEditList.tsx:355
-#: src/view/com/modals/EditImage.tsx:323
-#: src/view/com/modals/EditProfile.tsx:249
+#: src/view/com/modals/ChangeHandle.tsx:154
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
+#: src/view/com/modals/CreateOrEditList.tsx:356
+#: src/view/com/modals/crop-image/CropImage.web.tsx:138
+#: src/view/com/modals/EditImage.tsx:324
+#: src/view/com/modals/EditProfile.tsx:250
#: src/view/com/modals/InAppBrowserConsent.tsx:78
-#: src/view/com/modals/LinkWarning.tsx:87
-#: src/view/com/modals/Repost.tsx:87
+#: src/view/com/modals/InAppBrowserConsent.tsx:80
+#: src/view/com/modals/LinkWarning.tsx:105
+#: src/view/com/modals/LinkWarning.tsx:107
+#: src/view/com/modals/Repost.tsx:88
#: src/view/com/modals/VerifyEmail.tsx:247
#: src/view/com/modals/VerifyEmail.tsx:253
-#: src/view/com/modals/Waitlist.tsx:142
-#: src/view/screens/Search/Search.tsx:693
-#: src/view/shell/desktop/Search.tsx:238
+#: src/view/screens/Search/Search.tsx:718
+#: src/view/shell/desktop/Search.tsx:239
msgid "Cancel"
msgstr "キャンセル"
-#: src/view/com/modals/Confirm.tsx:88
-#: src/view/com/modals/Confirm.tsx:91
-#: src/view/com/modals/CreateOrEditList.tsx:360
-#: src/view/com/modals/DeleteAccount.tsx:156
-#: src/view/com/modals/DeleteAccount.tsx:234
+#: src/view/com/modals/CreateOrEditList.tsx:361
+#: src/view/com/modals/DeleteAccount.tsx:155
+#: src/view/com/modals/DeleteAccount.tsx:233
msgctxt "action"
msgid "Cancel"
msgstr "キャンセル"
-#: src/view/com/modals/DeleteAccount.tsx:152
-#: src/view/com/modals/DeleteAccount.tsx:230
+#: src/view/com/modals/DeleteAccount.tsx:151
+#: src/view/com/modals/DeleteAccount.tsx:229
msgid "Cancel account deletion"
msgstr "アカウントの削除をキャンセル"
@@ -573,46 +683,50 @@ msgstr "アカウントの削除をキャンセル"
#~ msgid "Cancel add image alt text"
#~ msgstr "画像のALTテキストの追加をキャンセル"
-#: src/view/com/modals/ChangeHandle.tsx:149
+#: src/view/com/modals/ChangeHandle.tsx:150
msgid "Cancel change handle"
msgstr "ハンドルの変更をキャンセル"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:134
+#: src/view/com/modals/crop-image/CropImage.web.tsx:135
msgid "Cancel image crop"
msgstr "画像の切り抜きをキャンセル"
-#: src/view/com/modals/EditProfile.tsx:244
+#: src/view/com/modals/EditProfile.tsx:245
msgid "Cancel profile editing"
msgstr "プロフィールの編集をキャンセル"
-#: src/view/com/modals/Repost.tsx:78
+#: src/view/com/modals/Repost.tsx:79
msgid "Cancel quote post"
msgstr "引用をキャンセル"
#: src/view/com/modals/ListAddRemoveUsers.tsx:87
-#: src/view/shell/desktop/Search.tsx:234
+#: src/view/shell/desktop/Search.tsx:235
msgid "Cancel search"
msgstr "検索をキャンセル"
#: src/view/com/modals/Waitlist.tsx:136
-msgid "Cancel waitlist signup"
-msgstr "Waitlistの登録をキャンセル"
+#~ msgid "Cancel waitlist signup"
+#~ msgstr "Waitlistの登録をキャンセル"
-#: src/view/screens/Settings/index.tsx:334
-msgctxt "action"
+#: src/view/com/modals/LinkWarning.tsx:106
+msgid "Cancels opening the linked website"
+msgstr "リンク先のウェブサイトを開くことをキャンセル"
+
+#: src/view/com/modals/VerifyEmail.tsx:152
msgid "Change"
msgstr "変更"
-#: src/view/screens/Settings.tsx:306
-#~ msgid "Change"
-#~ msgstr "変更"
+#: src/view/screens/Settings/index.tsx:353
+msgctxt "action"
+msgid "Change"
+msgstr "変更"
-#: src/view/screens/Settings/index.tsx:696
+#: src/view/screens/Settings/index.tsx:716
msgid "Change handle"
msgstr "ハンドルを変更"
-#: src/view/com/modals/ChangeHandle.tsx:161
-#: src/view/screens/Settings/index.tsx:705
+#: src/view/com/modals/ChangeHandle.tsx:162
+#: src/view/screens/Settings/index.tsx:727
msgid "Change Handle"
msgstr "ハンドルを変更"
@@ -620,11 +734,12 @@ msgstr "ハンドルを変更"
msgid "Change my email"
msgstr "メールアドレスを変更"
-#: src/view/screens/Settings/index.tsx:732
+#: src/view/screens/Settings/index.tsx:754
msgid "Change password"
msgstr "パスワードを変更"
-#: src/view/screens/Settings/index.tsx:741
+#: src/view/com/modals/ChangePassword.tsx:141
+#: src/view/screens/Settings/index.tsx:765
msgid "Change Password"
msgstr "パスワードを変更"
@@ -633,8 +748,8 @@ msgid "Change post language to {0}"
msgstr "投稿の言語を{0}に変更します"
#: src/view/screens/Settings/index.tsx:733
-msgid "Change your Bluesky password"
-msgstr "Blueskyのパスワードを変更"
+#~ msgid "Change your Bluesky password"
+#~ msgstr "Blueskyのパスワードを変更"
#: src/view/com/modals/ChangeEmail.tsx:109
msgid "Change Your Email"
@@ -653,7 +768,7 @@ msgstr "おすすめのフィードを確認してください。「+」をタ
msgid "Check out some recommended users. Follow them to see similar users."
msgstr "おすすめのユーザーを確認してください。フォローすることであなたに合ったユーザーが見つかるかもしれません。"
-#: src/view/com/modals/DeleteAccount.tsx:169
+#: src/view/com/modals/DeleteAccount.tsx:168
msgid "Check your inbox for an email with the confirmation code to enter below:"
msgstr "入力したメールアドレスの受信トレイを確認して、以下に入力するための確認コードが記載されたメールが届いていないか確認してください:"
@@ -662,19 +777,19 @@ msgid "Choose \"Everybody\" or \"Nobody\""
msgstr "「全員」か「返信不可」のどちらかを選択"
#: src/view/screens/Settings/index.tsx:697
-msgid "Choose a new Bluesky username or create"
-msgstr "Blueskyの別のユーザー名を選択するか、新規に作成します"
+#~ msgid "Choose a new Bluesky username or create"
+#~ msgstr "Blueskyの別のユーザー名を選択するか、新規作成します"
#: src/view/com/auth/server-input/index.tsx:79
msgid "Choose Service"
msgstr "サービスを選択"
-#: src/screens/Onboarding/StepFinished.tsx:135
+#: src/screens/Onboarding/StepFinished.tsx:139
msgid "Choose the algorithms that power your custom feeds."
msgstr "カスタムフィードのアルゴリズムを選択できます。"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:83
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:83
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:85
msgid "Choose the algorithms that power your experience with custom feeds."
msgstr "カスタムフィードを使用してあなたの体験を強化するアルゴリズムを選択します。"
@@ -682,91 +797,111 @@ msgstr "カスタムフィードを使用してあなたの体験を強化する
#~ msgid "Choose your algorithmic feeds"
#~ msgstr "フィードのアルゴリズムを選択"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:103
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:104
msgid "Choose your main feeds"
msgstr "メインのフィードを選択"
-#: src/view/com/auth/create/Step1.tsx:215
+#: src/screens/Signup/StepInfo/index.tsx:112
msgid "Choose your password"
msgstr "パスワードを入力"
-#: src/view/screens/Settings/index.tsx:834
-#: src/view/screens/Settings/index.tsx:835
+#: src/view/screens/Settings/index.tsx:868
msgid "Clear all legacy storage data"
msgstr "レガシーストレージデータをすべてクリア"
-#: src/view/screens/Settings/index.tsx:837
+#: src/view/screens/Settings/index.tsx:871
msgid "Clear all legacy storage data (restart after this)"
-msgstr "すべてのレガシーストレージデータをクリア(この後再起動します)"
+msgstr "すべてのレガシーストレージデータをクリア(このあと再起動します)"
-#: src/view/screens/Settings/index.tsx:846
-#: src/view/screens/Settings/index.tsx:847
+#: src/view/screens/Settings/index.tsx:880
msgid "Clear all storage data"
msgstr "すべてのストレージデータをクリア"
-#: src/view/screens/Settings/index.tsx:849
+#: src/view/screens/Settings/index.tsx:883
msgid "Clear all storage data (restart after this)"
-msgstr "すべてのストレージデータをクリア(この後再起動します)"
+msgstr "すべてのストレージデータをクリア(このあと再起動します)"
#: src/view/com/util/forms/SearchInput.tsx:88
-#: src/view/screens/Search/Search.tsx:674
+#: src/view/screens/Search/Search.tsx:699
msgid "Clear search query"
msgstr "検索クエリをクリア"
+#: src/view/screens/Settings/index.tsx:869
+msgid "Clears all legacy storage data"
+msgstr "すべてのレガシーストレージデータをクリア"
+
+#: src/view/screens/Settings/index.tsx:881
+msgid "Clears all storage data"
+msgstr "すべてのストレージデータをクリア"
+
#: src/view/screens/Support.tsx:40
msgid "click here"
msgstr "こちらをクリック"
+#: src/components/TagMenu/index.web.tsx:138
+msgid "Click here to open tag menu for {tag}"
+msgstr "{tag}のタグメニューをクリックして表示"
+
+#: src/components/RichText.tsx:192
+msgid "Click here to open tag menu for #{tag}"
+msgstr "#{tag}のタグメニューをクリックして表示"
+
#: src/screens/Onboarding/index.tsx:35
msgid "Climate"
msgstr "気象"
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
msgid "Close"
msgstr "閉じる"
-#: src/components/Dialog/index.web.tsx:78
+#: src/components/Dialog/index.web.tsx:106
+#: src/components/Dialog/index.web.tsx:218
msgid "Close active dialog"
msgstr "アクティブなダイアログを閉じる"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:38
+#: src/screens/Login/PasswordUpdatedForm.tsx:38
msgid "Close alert"
msgstr "アラートを閉じる"
-#: src/view/com/util/BottomSheetCustomBackdrop.tsx:33
+#: src/view/com/util/BottomSheetCustomBackdrop.tsx:36
msgid "Close bottom drawer"
msgstr "一番下の引き出しを閉じる"
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:26
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:36
msgid "Close image"
msgstr "画像を閉じる"
-#: src/view/com/lightbox/Lightbox.web.tsx:119
+#: src/view/com/lightbox/Lightbox.web.tsx:129
msgid "Close image viewer"
msgstr "画像ビューアを閉じる"
-#: src/view/shell/index.web.tsx:49
+#: src/view/shell/index.web.tsx:55
msgid "Close navigation footer"
msgstr "ナビゲーションフッターを閉じる"
-#: src/view/shell/index.web.tsx:50
+#: src/components/Menu/index.tsx:207
+#: src/components/TagMenu/index.tsx:262
+msgid "Close this dialog"
+msgstr "このダイアログを閉じる"
+
+#: src/view/shell/index.web.tsx:56
msgid "Closes bottom navigation bar"
msgstr "下部のナビゲーションバーを閉じる"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:39
+#: src/screens/Login/PasswordUpdatedForm.tsx:39
msgid "Closes password update alert"
msgstr "パスワード更新アラートを閉じる"
-#: src/view/com/composer/Composer.tsx:302
+#: src/view/com/composer/Composer.tsx:319
msgid "Closes post composer and discards post draft"
-msgstr "投稿の編集画面を閉じ、下書きを削除する"
+msgstr "投稿の編集画面を閉じて下書きを削除する"
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:27
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:37
msgid "Closes viewer for header image"
msgstr "ヘッダー画像のビューワーを閉じる"
-#: src/view/com/notifications/FeedItem.tsx:317
+#: src/view/com/notifications/FeedItem.tsx:321
msgid "Collapses list of users for a given notification"
msgstr "指定した通知のユーザーリストを折りたたむ"
@@ -778,16 +913,20 @@ msgstr "コメディー"
msgid "Comics"
msgstr "漫画"
-#: src/Navigation.tsx:227
+#: src/Navigation.tsx:241
#: src/view/screens/CommunityGuidelines.tsx:32
msgid "Community Guidelines"
msgstr "コミュニティーガイドライン"
-#: src/screens/Onboarding/StepFinished.tsx:148
+#: src/screens/Onboarding/StepFinished.tsx:152
msgid "Complete onboarding and start using your account"
msgstr "初期設定を完了してアカウントを使い始める"
-#: src/view/com/composer/Composer.tsx:417
+#: src/screens/Signup/index.tsx:154
+msgid "Complete the challenge"
+msgstr "テストをクリアしてください"
+
+#: src/view/com/composer/Composer.tsx:438
msgid "Compose posts up to {MAX_GRAPHEME_LENGTH} characters in length"
msgstr "{MAX_GRAPHEME_LENGTH}文字までの投稿を作成"
@@ -795,81 +934,112 @@ msgstr "{MAX_GRAPHEME_LENGTH}文字までの投稿を作成"
msgid "Compose reply"
msgstr "返信を作成"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:67
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:81
msgid "Configure content filtering setting for category: {0}"
-msgstr "このカテゴリのコンテンツフィルタリングを設定: {0}"
+msgstr "このカテゴリのコンテンツフィルタリングを設定:{0}"
-#: src/components/Prompt.tsx:113
-#: src/view/com/modals/AppealLabel.tsx:98
+#: src/components/moderation/LabelPreference.tsx:81
+msgid "Configure content filtering setting for category: {name}"
+msgstr ""
+
+#: src/components/moderation/LabelPreference.tsx:244
+msgid "Configured in <0>moderation settings0>."
+msgstr "<0>モデレーションの設定0>で設定されています。"
+
+#: src/components/Prompt.tsx:153
+#: src/components/Prompt.tsx:156
#: src/view/com/modals/SelfLabel.tsx:154
#: src/view/com/modals/VerifyEmail.tsx:231
#: src/view/com/modals/VerifyEmail.tsx:233
-#: src/view/screens/PreferencesHomeFeed.tsx:308
+#: src/view/screens/PreferencesFollowingFeed.tsx:308
#: src/view/screens/PreferencesThreads.tsx:159
msgid "Confirm"
msgstr "確認"
#: src/view/com/modals/Confirm.tsx:75
#: src/view/com/modals/Confirm.tsx:78
-msgctxt "action"
-msgid "Confirm"
-msgstr "確認"
+#~ msgctxt "action"
+#~ msgid "Confirm"
+#~ msgstr "確認"
#: src/view/com/modals/ChangeEmail.tsx:193
#: src/view/com/modals/ChangeEmail.tsx:195
msgid "Confirm Change"
msgstr "変更を確認"
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:34
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:35
msgid "Confirm content language settings"
msgstr "コンテンツの言語設定を確認"
-#: src/view/com/modals/DeleteAccount.tsx:220
+#: src/view/com/modals/DeleteAccount.tsx:219
msgid "Confirm delete account"
msgstr "アカウントの削除を確認"
#: src/view/com/modals/ContentFilteringSettings.tsx:156
-msgid "Confirm your age to enable adult content."
-msgstr "成人向けコンテンツを有効にするために年齢を確認してください。"
+#~ msgid "Confirm your age to enable adult content."
+#~ msgstr "成人向けコンテンツを有効にするために年齢を確認してください。"
+
+#: src/screens/Moderation/index.tsx:301
+msgid "Confirm your age:"
+msgstr "年齢の確認:"
+
+#: src/screens/Moderation/index.tsx:292
+msgid "Confirm your birthdate"
+msgstr "生年月日の確認"
#: src/view/com/modals/ChangeEmail.tsx:157
-#: src/view/com/modals/DeleteAccount.tsx:182
+#: src/view/com/modals/DeleteAccount.tsx:175
+#: src/view/com/modals/DeleteAccount.tsx:181
#: src/view/com/modals/VerifyEmail.tsx:165
msgid "Confirmation code"
msgstr "確認コード"
#: src/view/com/modals/Waitlist.tsx:120
-msgid "Confirms signing up {email} to the waitlist"
-msgstr "{email}のWaitlistへの登録を確認"
+#~ msgid "Confirms signing up {email} to the waitlist"
+#~ msgstr "{email}のWaitlistへの登録を確認"
-#: src/view/com/auth/create/CreateAccount.tsx:182
-#: src/view/com/auth/login/LoginForm.tsx:278
+#: src/screens/Login/LoginForm.tsx:248
msgid "Connecting..."
msgstr "接続中..."
-#: src/view/com/auth/create/CreateAccount.tsx:202
+#: src/screens/Signup/index.tsx:219
msgid "Contact support"
msgstr "サポートに連絡"
-#: src/view/screens/Moderation.tsx:81
-msgid "Content filtering"
-msgstr "コンテンツのフィルタリング"
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "content"
+msgstr "コンテンツ"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:18
+msgid "Content Blocked"
+msgstr "ブロックされたコンテンツ"
+
+#: src/view/screens/Moderation.tsx:83
+#~ msgid "Content filtering"
+#~ msgstr "コンテンツのフィルタリング"
#: src/view/com/modals/ContentFilteringSettings.tsx:44
-msgid "Content Filtering"
-msgstr "コンテンツのフィルタリング"
+#~ msgid "Content Filtering"
+#~ msgstr "コンテンツのフィルタリング"
+
+#: src/screens/Moderation/index.tsx:285
+msgid "Content filters"
+msgstr "コンテンツのフィルター"
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74
#: src/view/screens/LanguageSettings.tsx:278
msgid "Content Languages"
msgstr "コンテンツの言語"
-#: src/view/com/modals/ModerationDetails.tsx:65
+#: src/components/moderation/ModerationDetailsDialog.tsx:75
+#: src/lib/moderation/useModerationCauseDescription.ts:75
msgid "Content Not Available"
msgstr "コンテンツはありません"
-#: src/view/com/modals/ModerationDetails.tsx:33
-#: src/view/com/util/moderation/ScreenHider.tsx:78
+#: src/components/moderation/ModerationDetailsDialog.tsx:46
+#: src/components/moderation/ScreenHider.tsx:99
+#: src/lib/moderation/useGlobalLabelStrings.ts:22
+#: src/lib/moderation/useModerationCauseDescription.ts:38
msgid "Content Warning"
msgstr "コンテンツの警告"
@@ -877,28 +1047,38 @@ msgstr "コンテンツの警告"
msgid "Content warnings"
msgstr "コンテンツの警告"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:170
-#: src/screens/Onboarding/StepFollowingFeed.tsx:153
-#: src/screens/Onboarding/StepInterests/index.tsx:248
-#: src/screens/Onboarding/StepModeration/index.tsx:118
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:108
+#: src/components/Menu/index.web.tsx:84
+msgid "Context menu backdrop, click to close the menu."
+msgstr "コンテキストメニューの背景をクリックし、メニューを閉じる。"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:161
+#: src/screens/Onboarding/StepFollowingFeed.tsx:154
+#: src/screens/Onboarding/StepInterests/index.tsx:252
+#: src/screens/Onboarding/StepModeration/index.tsx:103
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:118
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:96
msgid "Continue"
msgstr "続行"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:150
-#: src/screens/Onboarding/StepInterests/index.tsx:245
-#: src/screens/Onboarding/StepModeration/index.tsx:115
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:105
+#: src/components/AccountList.tsx:108
+msgid "Continue as {0} (currently signed in)"
+msgstr ""
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:151
+#: src/screens/Onboarding/StepInterests/index.tsx:249
+#: src/screens/Onboarding/StepModeration/index.tsx:100
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:115
+#: src/screens/Signup/index.tsx:198
msgid "Continue to next step"
msgstr "次のステップへ進む"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:167
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:158
msgid "Continue to the next step"
msgstr "次のステップへ進む"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:191
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:199
msgid "Continue to the next step without following any accounts"
msgstr "アカウントをフォローせずに次のステップへ進む"
@@ -906,98 +1086,110 @@ msgstr "アカウントをフォローせずに次のステップへ進む"
msgid "Cooking"
msgstr "料理"
-#: src/view/com/modals/AddAppPasswords.tsx:195
-#: src/view/com/modals/InviteCodes.tsx:182
+#: src/view/com/modals/AddAppPasswords.tsx:196
+#: src/view/com/modals/InviteCodes.tsx:183
msgid "Copied"
msgstr "コピーしました"
-#: src/view/screens/Settings/index.tsx:241
+#: src/view/screens/Settings/index.tsx:251
msgid "Copied build version to clipboard"
msgstr "ビルドバージョンをクリップボードにコピーしました"
-#: src/view/com/modals/AddAppPasswords.tsx:76
-#: src/view/com/modals/InviteCodes.tsx:152
-#: src/view/com/util/forms/PostDropdownBtn.tsx:112
+#: src/view/com/modals/AddAppPasswords.tsx:77
+#: src/view/com/modals/ChangeHandle.tsx:326
+#: src/view/com/modals/InviteCodes.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:158
msgid "Copied to clipboard"
msgstr "クリップボードにコピーしました"
-#: src/view/com/modals/AddAppPasswords.tsx:189
+#: src/view/com/modals/AddAppPasswords.tsx:190
msgid "Copies app password"
msgstr "アプリパスワードをコピーします"
-#: src/view/com/modals/AddAppPasswords.tsx:188
+#: src/view/com/modals/AddAppPasswords.tsx:189
msgid "Copy"
msgstr "コピー"
-#: src/view/screens/ProfileList.tsx:417
+#: src/view/com/modals/ChangeHandle.tsx:480
+msgid "Copy {0}"
+msgstr "{0}をコピー"
+
+#: src/view/screens/ProfileList.tsx:388
msgid "Copy link to list"
msgstr "リストへのリンクをコピー"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
msgid "Copy link to post"
msgstr "投稿へのリンクをコピー"
-#: src/view/com/profile/ProfileHeader.tsx:294
-msgid "Copy link to profile"
-msgstr "プロフィールへのリンクをコピー"
+#: src/view/com/profile/ProfileHeader.tsx:295
+#~ msgid "Copy link to profile"
+#~ msgstr "プロフィールへのリンクをコピー"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:139
+#: src/view/com/util/forms/PostDropdownBtn.tsx:220
+#: src/view/com/util/forms/PostDropdownBtn.tsx:222
msgid "Copy post text"
msgstr "投稿のテキストをコピー"
-#: src/Navigation.tsx:232
+#: src/Navigation.tsx:246
#: src/view/screens/CopyrightPolicy.tsx:29
msgid "Copyright Policy"
msgstr "著作権ポリシー"
-#: src/view/screens/ProfileFeed.tsx:96
+#: src/view/screens/ProfileFeed.tsx:103
msgid "Could not load feed"
-msgstr "フィードのロードに失敗しました"
+msgstr "フィードの読み込みに失敗しました"
-#: src/view/screens/ProfileList.tsx:888
+#: src/view/screens/ProfileList.tsx:907
msgid "Could not load list"
-msgstr "リストのロードに失敗しました"
+msgstr "リストの読み込みに失敗しました"
#: src/view/com/auth/create/Step2.tsx:91
-msgid "Country"
-msgstr "国"
+#~ msgid "Country"
+#~ msgstr "国"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:62
-#: src/view/com/auth/SplashScreen.tsx:46
-#: src/view/com/auth/SplashScreen.web.tsx:77
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:65
+#: src/view/com/auth/SplashScreen.tsx:75
+#: src/view/com/auth/SplashScreen.web.tsx:104
msgid "Create a new account"
msgstr "新しいアカウントを作成"
-#: src/view/screens/Settings/index.tsx:384
+#: src/view/screens/Settings/index.tsx:403
msgid "Create a new Bluesky account"
msgstr "新しいBlueskyアカウントを作成"
-#: src/view/com/auth/create/CreateAccount.tsx:122
+#: src/screens/Signup/index.tsx:129
msgid "Create Account"
msgstr "アカウントを作成"
-#: src/view/com/modals/AddAppPasswords.tsx:226
+#: src/view/com/modals/AddAppPasswords.tsx:227
msgid "Create App Password"
msgstr "アプリパスワードを作成"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:54
-#: src/view/com/auth/SplashScreen.tsx:43
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:55
+#: src/view/com/auth/SplashScreen.tsx:66
+#: src/view/com/auth/SplashScreen.web.tsx:95
msgid "Create new account"
msgstr "新しいアカウントを作成"
-#: src/view/screens/AppPasswords.tsx:249
+#: src/components/ReportDialog/SelectReportOptionView.tsx:93
+msgid "Create report for {0}"
+msgstr "{0}の報告を作成"
+
+#: src/view/screens/AppPasswords.tsx:246
msgid "Created {0}"
-msgstr "{0}を作成済み"
+msgstr "{0}に作成"
#: src/view/screens/ProfileFeed.tsx:616
-msgid "Created by <0/>"
-msgstr "作成者:<0/>"
+#~ msgid "Created by <0/>"
+#~ msgstr "作成者:<0/>"
#: src/view/screens/ProfileFeed.tsx:614
-msgid "Created by you"
-msgstr "作成者:あなた"
+#~ msgid "Created by you"
+#~ msgstr "作成者:あなた"
-#: src/view/com/composer/Composer.tsx:448
+#: src/view/com/composer/Composer.tsx:469
msgid "Creates a card with a thumbnail. The card links to {url}"
msgstr "サムネイル付きのカードを作成します。そのカードは次のアドレスへリンクします:{url}"
@@ -1005,16 +1197,17 @@ msgstr "サムネイル付きのカードを作成します。そのカードは
msgid "Culture"
msgstr "文化"
-#: src/view/com/auth/server-input/index.tsx:95
-#: src/view/com/auth/server-input/index.tsx:96
+#: src/view/com/auth/server-input/index.tsx:97
+#: src/view/com/auth/server-input/index.tsx:99
msgid "Custom"
msgstr "カスタム"
-#: src/view/com/modals/ChangeHandle.tsx:389
+#: src/view/com/modals/ChangeHandle.tsx:388
msgid "Custom domain"
msgstr "カスタムドメイン"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:107
+#: src/view/screens/Feeds.tsx:692
msgid "Custom feeds built by the community bring you new experiences and help you find the content you love."
msgstr "コミュニティーによって作成されたカスタムフィードは、あなたに新しい体験をもたらし、あなたが好きなコンテンツを見つけるのに役立ちます。"
@@ -1026,8 +1219,8 @@ msgstr "外部サイトのメディアをカスタマイズします。"
#~ msgid "Danger Zone"
#~ msgstr "危険地帯"
-#: src/view/screens/Settings/index.tsx:485
-#: src/view/screens/Settings/index.tsx:511
+#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:530
msgid "Dark"
msgstr "ダーク"
@@ -1035,37 +1228,53 @@ msgstr "ダーク"
msgid "Dark mode"
msgstr "ダークモード"
-#: src/view/screens/Settings/index.tsx:498
+#: src/view/screens/Settings/index.tsx:517
msgid "Dark Theme"
msgstr "ダークテーマ"
+#: src/screens/Signup/StepInfo/index.tsx:132
+msgid "Date of birth"
+msgstr ""
+
#: src/Navigation.tsx:204
#~ msgid "Debug"
#~ msgstr "デバッグ"
+#: src/view/screens/Settings/index.tsx:841
+msgid "Debug Moderation"
+msgstr "モデレーションをデバッグ"
+
#: src/view/screens/Debug.tsx:83
msgid "Debug panel"
msgstr "デバッグパネル"
-#: src/view/screens/Settings/index.tsx:772
+#: src/view/com/util/forms/PostDropdownBtn.tsx:319
+#: src/view/screens/AppPasswords.tsx:268
+#: src/view/screens/ProfileList.tsx:613
+msgid "Delete"
+msgstr "削除"
+
+#: src/view/screens/Settings/index.tsx:796
msgid "Delete account"
msgstr "アカウントを削除"
-#: src/view/com/modals/DeleteAccount.tsx:87
+#: src/view/com/modals/DeleteAccount.tsx:86
msgid "Delete Account"
msgstr "アカウントを削除"
-#: src/view/screens/AppPasswords.tsx:222
-#: src/view/screens/AppPasswords.tsx:242
+#: src/view/screens/AppPasswords.tsx:239
msgid "Delete app password"
msgstr "アプリパスワードを削除"
-#: src/view/screens/ProfileList.tsx:363
-#: src/view/screens/ProfileList.tsx:444
+#: src/view/screens/AppPasswords.tsx:263
+msgid "Delete app password?"
+msgstr "アプリパスワードを削除しますか?"
+
+#: src/view/screens/ProfileList.tsx:415
msgid "Delete List"
msgstr "リストを削除"
-#: src/view/com/modals/DeleteAccount.tsx:223
+#: src/view/com/modals/DeleteAccount.tsx:222
msgid "Delete my account"
msgstr "マイアカウントを削除"
@@ -1073,30 +1282,35 @@ msgstr "マイアカウントを削除"
#~ msgid "Delete my account…"
#~ msgstr "マイアカウントを削除…"
-#: src/view/screens/Settings/index.tsx:784
+#: src/view/screens/Settings/index.tsx:808
msgid "Delete My Account…"
msgstr "マイアカウントを削除…"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:302
+#: src/view/com/util/forms/PostDropdownBtn.tsx:304
msgid "Delete post"
msgstr "投稿を削除"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:232
+#: src/view/screens/ProfileList.tsx:608
+msgid "Delete this list?"
+msgstr "このリストを削除しますか?"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:314
msgid "Delete this post?"
msgstr "この投稿を削除しますか?"
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:69
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:64
msgid "Deleted"
msgstr "削除されています"
-#: src/view/com/post-thread/PostThread.tsx:259
+#: src/view/com/post-thread/PostThread.tsx:305
msgid "Deleted post."
msgstr "投稿を削除しました。"
-#: src/view/com/modals/CreateOrEditList.tsx:300
-#: src/view/com/modals/CreateOrEditList.tsx:321
-#: src/view/com/modals/EditProfile.tsx:198
-#: src/view/com/modals/EditProfile.tsx:210
+#: src/view/com/modals/CreateOrEditList.tsx:301
+#: src/view/com/modals/CreateOrEditList.tsx:322
+#: src/view/com/modals/EditProfile.tsx:199
+#: src/view/com/modals/EditProfile.tsx:211
msgid "Description"
msgstr "説明"
@@ -1108,23 +1322,35 @@ msgstr "説明"
#~ msgid "Developer Tools"
#~ msgstr "開発者ツール"
-#: src/view/com/composer/Composer.tsx:211
+#: src/view/com/composer/Composer.tsx:218
msgid "Did you want to say anything?"
msgstr "なにか言いたいことはあった?"
-#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:523
msgid "Dim"
msgstr "グレー"
-#: src/view/com/composer/Composer.tsx:144
+#: src/lib/moderation/useLabelBehaviorDescription.ts:32
+#: src/lib/moderation/useLabelBehaviorDescription.ts:42
+#: src/lib/moderation/useLabelBehaviorDescription.ts:68
+#: src/screens/Moderation/index.tsx:341
+msgid "Disabled"
+msgstr "無効"
+
+#: src/view/com/composer/Composer.tsx:511
msgid "Discard"
msgstr "破棄"
-#: src/view/com/composer/Composer.tsx:138
-msgid "Discard draft"
-msgstr "下書きを破棄"
+#: src/view/com/composer/Composer.tsx:145
+#~ msgid "Discard draft"
+#~ msgstr "下書きを破棄"
+
+#: src/view/com/composer/Composer.tsx:508
+msgid "Discard draft?"
+msgstr "下書きを削除しますか?"
-#: src/view/screens/Moderation.tsx:207
+#: src/screens/Moderation/index.tsx:518
+#: src/screens/Moderation/index.tsx:522
msgid "Discourage apps from showing my account to logged-out users"
msgstr "アプリがログアウトしたユーザーに自分のアカウントを表示しないようにする"
@@ -1134,27 +1360,65 @@ msgid "Discover new custom feeds"
msgstr "新しいカスタムフィードを見つける"
#: src/view/screens/Feeds.tsx:473
-msgid "Discover new feeds"
-msgstr "新しいフィードを見つける"
+#~ msgid "Discover new feeds"
+#~ msgstr "新しいフィードを探す"
-#: src/view/com/modals/EditProfile.tsx:192
+#: src/view/screens/Feeds.tsx:689
+msgid "Discover New Feeds"
+msgstr "新しいフィードを探す"
+
+#: src/view/com/modals/EditProfile.tsx:193
msgid "Display name"
msgstr "表示名"
-#: src/view/com/modals/EditProfile.tsx:180
+#: src/view/com/modals/EditProfile.tsx:181
msgid "Display Name"
msgstr "表示名"
-#: src/view/com/modals/ChangeHandle.tsx:487
+#: src/view/com/modals/ChangeHandle.tsx:397
+msgid "DNS Panel"
+msgstr "DNSパネルがある場合"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:39
+msgid "Does not include nudity."
+msgstr "ヌードは含まれません。"
+
+#: src/screens/Signup/StepHandle.tsx:104
+msgid "Doesn't begin or end with a hyphen"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "Domain Value"
+msgstr "ドメインの値"
+
+#: src/view/com/modals/ChangeHandle.tsx:488
msgid "Domain verified!"
msgstr "ドメインを確認しました!"
-#: src/view/com/auth/create/Step1.tsx:166
-msgid "Don't have an invite code?"
-msgstr "招待コードをお持ちでない場合"
+#: src/view/com/auth/create/Step1.tsx:170
+#~ msgid "Don't have an invite code?"
+#~ msgstr "招待コードをお持ちでない場合"
+
+#: src/components/dialogs/BirthDateSettings.tsx:119
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/components/forms/DateField/index.tsx:74
+#: src/components/forms/DateField/index.tsx:80
+#: src/view/com/auth/server-input/index.tsx:169
+#: src/view/com/auth/server-input/index.tsx:170
+#: src/view/com/modals/AddAppPasswords.tsx:227
+#: src/view/com/modals/AltImage.tsx:140
+#: src/view/com/modals/crop-image/CropImage.web.tsx:153
+#: src/view/com/modals/InviteCodes.tsx:81
+#: src/view/com/modals/InviteCodes.tsx:124
+#: src/view/com/modals/ListAddRemoveUsers.tsx:142
+#: src/view/screens/PreferencesFollowingFeed.tsx:311
+#: src/view/screens/Settings/ExportCarDialog.tsx:94
+#: src/view/screens/Settings/ExportCarDialog.tsx:96
+msgid "Done"
+msgstr "完了"
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86
-#: src/view/com/modals/EditImage.tsx:333
+#: src/view/com/modals/EditImage.tsx:334
#: src/view/com/modals/ListAddRemoveUsers.tsx:144
#: src/view/com/modals/SelfLabel.tsx:157
#: src/view/com/modals/Threadgate.tsx:129
@@ -1166,72 +1430,68 @@ msgctxt "action"
msgid "Done"
msgstr "完了"
-#: src/view/com/auth/server-input/index.tsx:165
-#: src/view/com/auth/server-input/index.tsx:166
-#: src/view/com/modals/AddAppPasswords.tsx:226
-#: src/view/com/modals/AltImage.tsx:139
-#: src/view/com/modals/ContentFilteringSettings.tsx:88
-#: src/view/com/modals/ContentFilteringSettings.tsx:96
-#: src/view/com/modals/crop-image/CropImage.web.tsx:152
-#: src/view/com/modals/InviteCodes.tsx:80
-#: src/view/com/modals/InviteCodes.tsx:123
-#: src/view/com/modals/ListAddRemoveUsers.tsx:142
-#: src/view/screens/PreferencesHomeFeed.tsx:311
-#: src/view/screens/Settings/ExportCarDialog.tsx:93
-#: src/view/screens/Settings/ExportCarDialog.tsx:94
-msgid "Done"
-msgstr "完了"
-
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:42
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:43
msgid "Done{extraText}"
msgstr "完了{extraText}"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:45
-msgid "Double tap to sign in"
-msgstr "ダブルタップでサインイン"
+#: src/view/com/auth/login/ChooseAccountForm.tsx:46
+#~ msgid "Double tap to sign in"
+#~ msgstr "ダブルタップでサインイン"
#: src/view/screens/Settings/index.tsx:755
-msgid "Download Bluesky account data (repository)"
-msgstr ""
+#~ msgid "Download Bluesky account data (repository)"
+#~ msgstr "Blueskyのアカウントのデータ(リポジトリ)をダウンロード"
#: src/view/screens/Settings/ExportCarDialog.tsx:59
#: src/view/screens/Settings/ExportCarDialog.tsx:63
msgid "Download CAR file"
-msgstr ""
+msgstr "CARファイルをダウンロード"
-#: src/view/com/composer/text-input/TextInput.web.tsx:247
+#: src/view/com/composer/text-input/TextInput.web.tsx:249
msgid "Drop to add images"
msgstr "ドロップして画像を追加する"
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:111
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:120
msgid "Due to Apple policies, adult content can only be enabled on the web after completing sign up."
msgstr "Appleのポリシーにより、成人向けコンテンツはサインアップ完了後にウェブ上でのみ有効にすることができます。"
-#: src/view/com/modals/EditProfile.tsx:185
+#: src/view/com/modals/ChangeHandle.tsx:258
+msgid "e.g. alice"
+msgstr "例:太郎"
+
+#: src/view/com/modals/EditProfile.tsx:186
msgid "e.g. Alice Roberts"
msgstr "例:山田 太郎"
-#: src/view/com/modals/EditProfile.tsx:203
+#: src/view/com/modals/ChangeHandle.tsx:380
+msgid "e.g. alice.com"
+msgstr "例:taro.com"
+
+#: src/view/com/modals/EditProfile.tsx:204
msgid "e.g. Artist, dog-lover, and avid reader."
msgstr "例:アーティスト、犬好き、熱烈な読書愛好家。"
-#: src/view/com/modals/CreateOrEditList.tsx:283
+#: src/lib/moderation/useGlobalLabelStrings.ts:43
+msgid "E.g. artistic nudes."
+msgstr "例:芸術的なヌード。"
+
+#: src/view/com/modals/CreateOrEditList.tsx:284
msgid "e.g. Great Posters"
msgstr "例:重要な投稿をするユーザー"
-#: src/view/com/modals/CreateOrEditList.tsx:284
+#: src/view/com/modals/CreateOrEditList.tsx:285
msgid "e.g. Spammers"
msgstr "例:スパム"
-#: src/view/com/modals/CreateOrEditList.tsx:312
+#: src/view/com/modals/CreateOrEditList.tsx:313
msgid "e.g. The posters who never miss."
msgstr "例:絶対に投稿を見逃してはならないユーザー。"
-#: src/view/com/modals/CreateOrEditList.tsx:313
+#: src/view/com/modals/CreateOrEditList.tsx:314
msgid "e.g. Users that repeatedly reply with ads."
msgstr "例:返信として広告を繰り返し送ってくるユーザー。"
-#: src/view/com/modals/InviteCodes.tsx:96
+#: src/view/com/modals/InviteCodes.tsx:97
msgid "Each code works once. You'll receive more invite codes periodically."
msgstr "それぞれのコードは一回限り有効です。定期的に追加の招待コードをお送りします。"
@@ -1240,50 +1500,58 @@ msgctxt "action"
msgid "Edit"
msgstr "編集"
+#: src/view/com/util/UserAvatar.tsx:299
+#: src/view/com/util/UserBanner.tsx:85
+msgid "Edit avatar"
+msgstr "アバターを編集"
+
#: src/view/com/composer/photos/Gallery.tsx:144
-#: src/view/com/modals/EditImage.tsx:207
+#: src/view/com/modals/EditImage.tsx:208
msgid "Edit image"
msgstr "画像を編集"
-#: src/view/screens/ProfileList.tsx:432
+#: src/view/screens/ProfileList.tsx:403
msgid "Edit list details"
msgstr "リストの詳細を編集"
-#: src/view/com/modals/CreateOrEditList.tsx:250
+#: src/view/com/modals/CreateOrEditList.tsx:251
msgid "Edit Moderation List"
msgstr "モデレーションリストを編集"
-#: src/Navigation.tsx:242
+#: src/Navigation.tsx:256
#: src/view/screens/Feeds.tsx:434
#: src/view/screens/SavedFeeds.tsx:84
msgid "Edit My Feeds"
msgstr "マイフィードを編集"
-#: src/view/com/modals/EditProfile.tsx:152
+#: src/view/com/modals/EditProfile.tsx:153
msgid "Edit my profile"
msgstr "マイプロフィールを編集"
-#: src/view/com/profile/ProfileHeader.tsx:417
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:171
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:168
msgid "Edit profile"
msgstr "プロフィールを編集"
-#: src/view/com/profile/ProfileHeader.tsx:422
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:174
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:171
msgid "Edit Profile"
msgstr "プロフィールを編集"
-#: src/view/screens/Feeds.tsx:356
+#: src/view/com/home/HomeHeaderLayout.web.tsx:62
+#: src/view/screens/Feeds.tsx:355
msgid "Edit Saved Feeds"
msgstr "保存されたフィードを編集"
-#: src/view/com/modals/CreateOrEditList.tsx:245
+#: src/view/com/modals/CreateOrEditList.tsx:246
msgid "Edit User List"
msgstr "ユーザーリストを編集"
-#: src/view/com/modals/EditProfile.tsx:193
+#: src/view/com/modals/EditProfile.tsx:194
msgid "Edit your display name"
msgstr "あなたの表示名を編集します"
-#: src/view/com/modals/EditProfile.tsx:211
+#: src/view/com/modals/EditProfile.tsx:212
msgid "Edit your profile description"
msgstr "あなたのプロフィールの説明を編集します"
@@ -1291,17 +1559,12 @@ msgstr "あなたのプロフィールの説明を編集します"
msgid "Education"
msgstr "教育"
-#: src/view/com/auth/create/Step1.tsx:195
-#: src/view/com/auth/create/Step2.tsx:194
-#: src/view/com/auth/create/Step2.tsx:269
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:156
+#: src/screens/Signup/StepInfo/index.tsx:80
#: src/view/com/modals/ChangeEmail.tsx:141
-#: src/view/com/modals/Waitlist.tsx:88
msgid "Email"
msgstr "メールアドレス"
-#: src/view/com/auth/create/Step1.tsx:186
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:147
+#: src/screens/Login/ForgotPasswordForm.tsx:99
msgid "Email address"
msgstr "メールアドレス"
@@ -1318,43 +1581,69 @@ msgstr "メールアドレスは更新されました"
msgid "Email verified"
msgstr "メールアドレスは認証されました"
-#: src/view/screens/Settings/index.tsx:312
+#: src/view/screens/Settings/index.tsx:331
msgid "Email:"
msgstr "メールアドレス:"
-#: src/view/com/modals/EmbedConsent.tsx:113
+#: src/components/dialogs/EmbedConsent.tsx:101
msgid "Enable {0} only"
msgstr "{0}のみ有効にする"
-#: src/view/com/modals/ContentFilteringSettings.tsx:167
+#: src/screens/Moderation/index.tsx:329
+msgid "Enable adult content"
+msgstr "成人向けコンテンツを有効にする"
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:94
msgid "Enable Adult Content"
msgstr "成人向けコンテンツを有効にする"
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:76
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:77
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:79
msgid "Enable adult content in your feeds"
msgstr "フィードで成人向けコンテンツを有効にする"
+#: src/components/dialogs/EmbedConsent.tsx:82
+#: src/components/dialogs/EmbedConsent.tsx:89
+msgid "Enable external media"
+msgstr ""
+
#: src/view/com/modals/EmbedConsent.tsx:97
-msgid "Enable External Media"
-msgstr "外部メディアを有効にする"
+#~ msgid "Enable External Media"
+#~ msgstr "外部メディアを有効にする"
#: src/view/screens/PreferencesExternalEmbeds.tsx:75
msgid "Enable media players for"
msgstr "有効にするメディアプレイヤー"
-#: src/view/screens/PreferencesHomeFeed.tsx:147
+#: src/view/screens/PreferencesFollowingFeed.tsx:147
msgid "Enable this setting to only see replies between people you follow."
msgstr "この設定を有効にすると、自分がフォローしているユーザーからの返信だけが表示されます。"
-#: src/view/screens/Profile.tsx:455
+#: src/components/dialogs/EmbedConsent.tsx:94
+msgid "Enable this source only"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:339
+msgid "Enabled"
+msgstr "有効"
+
+#: src/screens/Profile/Sections/Feed.tsx:84
msgid "End of feed"
msgstr "フィードの終わり"
-#: src/view/com/modals/AddAppPasswords.tsx:166
+#: src/view/com/modals/AddAppPasswords.tsx:167
msgid "Enter a name for this App Password"
msgstr "このアプリパスワードの名前を入力"
+#: src/screens/Login/SetNewPasswordForm.tsx:139
+msgid "Enter a password"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:99
+#: src/components/dialogs/MutedWords.tsx:100
+msgid "Enter a word or tag"
+msgstr "ワードまたはタグを入力"
+
#: src/view/com/modals/VerifyEmail.tsx:105
msgid "Enter Confirmation Code"
msgstr "確認コードを入力してください"
@@ -1363,28 +1652,28 @@ msgstr "確認コードを入力してください"
#~ msgid "Enter the address of your provider:"
#~ msgstr "プロバイダーのアドレスを入力してください:"
-#: src/view/com/modals/ChangePassword.tsx:151
+#: src/view/com/modals/ChangePassword.tsx:153
msgid "Enter the code you received to change your password."
msgstr "パスワードを変更するために受け取ったコードを入力してください。"
-#: src/view/com/modals/ChangeHandle.tsx:371
+#: src/view/com/modals/ChangeHandle.tsx:370
msgid "Enter the domain you want to use"
msgstr "使用するドメインを入力してください"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:107
+#: src/screens/Login/ForgotPasswordForm.tsx:119
msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password."
msgstr "アカウントの作成に使用したメールアドレスを入力します。新しいパスワードを設定できるように、「リセットコード」をお送りします。"
-#: src/view/com/auth/create/Step1.tsx:247
-#: src/view/com/modals/BirthDateSettings.tsx:74
+#: src/components/dialogs/BirthDateSettings.tsx:108
msgid "Enter your birth date"
msgstr "誕生日を入力してください"
#: src/view/com/modals/Waitlist.tsx:78
-msgid "Enter your email"
-msgstr "メールアドレスを入力してください"
+#~ msgid "Enter your email"
+#~ msgstr "メールアドレスを入力してください"
-#: src/view/com/auth/create/Step1.tsx:191
+#: src/screens/Login/ForgotPasswordForm.tsx:105
+#: src/screens/Signup/StepInfo/index.tsx:91
msgid "Enter your email address"
msgstr "メールアドレスを入力してください"
@@ -1397,14 +1686,18 @@ msgid "Enter your new email address below."
msgstr "以下に新しいメールアドレスを入力してください。"
#: src/view/com/auth/create/Step2.tsx:188
-msgid "Enter your phone number"
-msgstr "電話番号を入力"
+#~ msgid "Enter your phone number"
+#~ msgstr "電話番号を入力"
-#: src/view/com/auth/login/Login.tsx:99
+#: src/screens/Login/index.tsx:101
msgid "Enter your username and password"
msgstr "ユーザー名とパスワードを入力してください"
-#: src/view/screens/Search/Search.tsx:109
+#: src/screens/Signup/StepCaptcha/index.tsx:49
+msgid "Error receiving captcha response."
+msgstr "Captchaレスポンスの受信中にエラーが発生しました。"
+
+#: src/view/screens/Search/Search.tsx:111
msgid "Error:"
msgstr "エラー:"
@@ -1412,24 +1705,36 @@ msgstr "エラー:"
msgid "Everybody"
msgstr "全員"
-#: src/view/com/modals/ChangeHandle.tsx:150
+#: src/lib/moderation/useReportOptions.ts:66
+msgid "Excessive mentions or replies"
+msgstr "過剰なメンションや返信"
+
+#: src/view/com/modals/DeleteAccount.tsx:230
+msgid "Exits account deletion process"
+msgstr "アカウントの削除処理を終了"
+
+#: src/view/com/modals/ChangeHandle.tsx:151
msgid "Exits handle change process"
msgstr "ハンドルの変更を終了"
-#: src/view/com/lightbox/Lightbox.web.tsx:120
+#: src/view/com/modals/crop-image/CropImage.web.tsx:136
+msgid "Exits image cropping process"
+msgstr "画像の切り抜き処理を終了"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:130
msgid "Exits image view"
msgstr "画像表示を終了"
#: src/view/com/modals/ListAddRemoveUsers.tsx:88
-#: src/view/shell/desktop/Search.tsx:235
+#: src/view/shell/desktop/Search.tsx:236
msgid "Exits inputting search query"
msgstr "検索クエリの入力を終了"
#: src/view/com/modals/Waitlist.tsx:138
-msgid "Exits signing up for waitlist with {email}"
-msgstr "{email}でWaitlistへの登録を終了"
+#~ msgid "Exits signing up for waitlist with {email}"
+#~ msgstr "{email}でWaitlistへの登録を終了"
-#: src/view/com/lightbox/Lightbox.web.tsx:163
+#: src/view/com/lightbox/Lightbox.web.tsx:183
msgid "Expand alt text"
msgstr "ALTテキストを展開"
@@ -1438,80 +1743,94 @@ msgstr "ALTテキストを展開"
msgid "Expand or collapse the full post you are replying to"
msgstr "返信する投稿全体を展開または折りたたむ"
-#: src/view/screens/Settings/index.tsx:753
+#: src/lib/moderation/useGlobalLabelStrings.ts:47
+msgid "Explicit or potentially disturbing media."
+msgstr "露骨な、または不愉快になる可能性のあるメディア。"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:35
+msgid "Explicit sexual images."
+msgstr "露骨な性的画像。"
+
+#: src/view/screens/Settings/index.tsx:777
msgid "Export my data"
msgstr "私のデータをエクスポートする"
#: src/view/screens/Settings/ExportCarDialog.tsx:44
-#: src/view/screens/Settings/index.tsx:764
+#: src/view/screens/Settings/index.tsx:788
msgid "Export My Data"
msgstr "私のデータをエクスポートする"
-#: src/view/com/modals/EmbedConsent.tsx:64
+#: src/components/dialogs/EmbedConsent.tsx:55
+#: src/components/dialogs/EmbedConsent.tsx:59
msgid "External Media"
msgstr "外部メディア"
-#: src/view/com/modals/EmbedConsent.tsx:75
+#: src/components/dialogs/EmbedConsent.tsx:71
#: src/view/screens/PreferencesExternalEmbeds.tsx:66
msgid "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."
msgstr "外部メディアを有効にすると、それらのメディアのウェブサイトがあなたやお使いのデバイスに関する情報を収集する場合があります。その場合でも、あなたが「再生」ボタンを押すまで情報は送信されず、要求もされません。"
-#: src/Navigation.tsx:258
+#: src/Navigation.tsx:275
#: src/view/screens/PreferencesExternalEmbeds.tsx:52
-#: src/view/screens/Settings/index.tsx:657
+#: src/view/screens/Settings/index.tsx:677
msgid "External Media Preferences"
msgstr "外部メディアの設定"
-#: src/view/screens/Settings/index.tsx:648
+#: src/view/screens/Settings/index.tsx:668
msgid "External media settings"
msgstr "外部メディアの設定"
-#: src/view/com/modals/AddAppPasswords.tsx:115
-#: src/view/com/modals/AddAppPasswords.tsx:119
+#: src/view/com/modals/AddAppPasswords.tsx:116
+#: src/view/com/modals/AddAppPasswords.tsx:120
msgid "Failed to create app password."
msgstr "アプリパスワードの作成に失敗しました。"
-#: src/view/com/modals/CreateOrEditList.tsx:206
+#: src/view/com/modals/CreateOrEditList.tsx:207
msgid "Failed to create the list. Check your internet connection and try again."
msgstr "リストの作成に失敗しました。インターネットへの接続を確認の上、もう一度お試しください。"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:88
+#: src/view/com/util/forms/PostDropdownBtn.tsx:125
msgid "Failed to delete post, please try again"
msgstr "投稿の削除に失敗しました。もう一度お試しください。"
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:109
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:141
msgid "Failed to load recommended feeds"
-msgstr "おすすめのフィードのロードに失敗しました"
+msgstr "おすすめのフィードの読み込みに失敗しました"
-#: src/Navigation.tsx:192
+#: src/view/com/lightbox/Lightbox.tsx:83
+msgid "Failed to save image: {0}"
+msgstr "画像の保存に失敗しました:{0}"
+
+#: src/Navigation.tsx:196
msgid "Feed"
msgstr "フィード"
-#: src/view/com/feeds/FeedSourceCard.tsx:229
+#: src/view/com/feeds/FeedSourceCard.tsx:218
msgid "Feed by {0}"
msgstr "{0}によるフィード"
-#: src/view/screens/Feeds.tsx:631
+#: src/view/screens/Feeds.tsx:605
msgid "Feed offline"
msgstr "フィードはオフラインです"
#: src/view/com/feeds/FeedPage.tsx:143
-msgid "Feed Preferences"
-msgstr "フィードの設定"
+#~ msgid "Feed Preferences"
+#~ msgstr "フィードの設定"
-#: src/view/shell/desktop/RightNav.tsx:69
-#: src/view/shell/Drawer.tsx:311
+#: src/view/shell/desktop/RightNav.tsx:61
+#: src/view/shell/Drawer.tsx:314
msgid "Feedback"
msgstr "フィードバック"
-#: src/Navigation.tsx:442
-#: src/view/screens/Feeds.tsx:548
-#: src/view/screens/Profile.tsx:184
-#: src/view/shell/bottom-bar/BottomBar.tsx:181
-#: src/view/shell/desktop/LeftNav.tsx:342
-#: src/view/shell/Drawer.tsx:476
-#: src/view/shell/Drawer.tsx:477
+#: src/Navigation.tsx:464
+#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:524
+#: src/view/screens/Profile.tsx:194
+#: src/view/shell/bottom-bar/BottomBar.tsx:191
+#: src/view/shell/desktop/LeftNav.tsx:346
+#: src/view/shell/Drawer.tsx:479
+#: src/view/shell/Drawer.tsx:480
msgid "Feeds"
msgstr "フィード"
@@ -1531,11 +1850,19 @@ msgstr "フィードはコンテンツを整理する為にユーザーによっ
msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information."
msgstr "フィードはユーザーがプログラミングの専門知識を持って構築するカスタムアルゴリズムです。詳細については、<0/>を参照してください。"
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:70
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:80
msgid "Feeds can be topical as well!"
msgstr "フィードには特定の話題に焦点を当てたものもあります!"
-#: src/screens/Onboarding/StepFinished.tsx:151
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "File Contents"
+msgstr "ファイルのコンテンツ"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:66
+msgid "Filter from feeds"
+msgstr "フィードからのフィルター"
+
+#: src/screens/Onboarding/StepFinished.tsx:155
msgid "Finalizing"
msgstr "最後に"
@@ -1545,21 +1872,25 @@ msgstr "最後に"
msgid "Find accounts to follow"
msgstr "フォローするアカウントを探す"
-#: src/view/screens/Search/Search.tsx:439
+#: src/view/screens/Search/Search.tsx:442
msgid "Find users on Bluesky"
msgstr "Blueskyでユーザーを検索"
-#: src/view/screens/Search/Search.tsx:437
+#: src/view/screens/Search/Search.tsx:440
msgid "Find users with the search tool on the right"
msgstr "右側の検索ツールでユーザーを検索"
-#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:155
msgid "Finding similar accounts..."
msgstr "似ているアカウントを検索中..."
+#: src/view/screens/PreferencesFollowingFeed.tsx:111
+msgid "Fine-tune the content you see on your Following feed."
+msgstr "Followingフィードに表示されるコンテンツを調整します。"
+
#: src/view/screens/PreferencesHomeFeed.tsx:111
-msgid "Fine-tune the content you see on your home screen."
-msgstr "ホーム画面に表示されるコンテンツを微調整します。"
+#~ msgid "Fine-tune the content you see on your home screen."
+#~ msgstr "ホーム画面に表示されるコンテンツを微調整します。"
#: src/view/screens/PreferencesThreads.tsx:60
msgid "Fine-tune the discussion threads."
@@ -1569,41 +1900,52 @@ msgstr "ディスカッションスレッドを微調整します。"
msgid "Fitness"
msgstr "フィットネス"
-#: src/screens/Onboarding/StepFinished.tsx:131
+#: src/screens/Onboarding/StepFinished.tsx:135
msgid "Flexible"
msgstr "柔軟です"
-#: src/view/com/modals/EditImage.tsx:115
+#: src/view/com/modals/EditImage.tsx:116
msgid "Flip horizontal"
msgstr "水平方向に反転"
-#: src/view/com/modals/EditImage.tsx:120
-#: src/view/com/modals/EditImage.tsx:287
+#: src/view/com/modals/EditImage.tsx:121
+#: src/view/com/modals/EditImage.tsx:288
msgid "Flip vertically"
msgstr "垂直方向に反転"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:181
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:512
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:189
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:236
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:146
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
msgid "Follow"
msgstr "フォロー"
-#: src/view/com/profile/FollowButton.tsx:64
+#: src/view/com/profile/FollowButton.tsx:69
msgctxt "action"
msgid "Follow"
msgstr "フォロー"
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:58
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:122
-#: src/view/com/profile/ProfileHeader.tsx:503
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:221
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:128
msgid "Follow {0}"
msgstr "{0}をフォロー"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:179
+#: src/view/com/profile/ProfileMenu.tsx:242
+#: src/view/com/profile/ProfileMenu.tsx:253
+msgid "Follow Account"
+msgstr "アカウントをフォロー"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:187
msgid "Follow All"
msgstr "すべてのアカウントをフォロー"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:174
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:144
+msgid "Follow Back"
+msgstr ""
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:182
msgid "Follow selected accounts and continue to the next step"
msgstr "選択したアカウントをフォローして次のステップへ進む"
@@ -1615,7 +1957,7 @@ msgstr "選択したアカウントをフォローして次のステップへ進
msgid "Follow some users to get started. We can recommend you more users based on who you find interesting."
msgstr "何人かのユーザーをフォローして開始します。興味を持っている人に基づいて、より多くのユーザーをおすすめします。"
-#: src/view/com/profile/ProfileCard.tsx:194
+#: src/view/com/profile/ProfileCard.tsx:216
msgid "Followed by {0}"
msgstr "{0}がフォロー中"
@@ -1623,14 +1965,15 @@ msgstr "{0}がフォロー中"
msgid "Followed users"
msgstr "自分がフォローしているユーザー"
-#: src/view/screens/PreferencesHomeFeed.tsx:154
+#: src/view/screens/PreferencesFollowingFeed.tsx:154
msgid "Followed users only"
msgstr "自分がフォローしているユーザーのみ"
-#: src/view/com/notifications/FeedItem.tsx:166
+#: src/view/com/notifications/FeedItem.tsx:170
msgid "followed you"
msgstr "あなたをフォローしました"
+#: src/view/com/profile/ProfileFollowers.tsx:104
#: src/view/screens/ProfileFollowers.tsx:25
msgid "Followers"
msgstr "フォロワー"
@@ -1639,17 +1982,30 @@ msgstr "フォロワー"
#~ msgid "following"
#~ msgstr "フォロー中"
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:494
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:234
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:149
+#: src/view/com/profile/ProfileFollows.tsx:104
#: src/view/screens/ProfileFollows.tsx:25
msgid "Following"
msgstr "フォロー中"
-#: src/view/com/profile/ProfileHeader.tsx:148
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:93
msgid "Following {0}"
msgstr "{0}をフォローしています"
-#: src/view/com/profile/ProfileHeader.tsx:545
+#: src/view/screens/Settings/index.tsx:553
+msgid "Following feed preferences"
+msgstr "Followingフィードの設定"
+
+#: src/Navigation.tsx:262
+#: src/view/com/home/HomeHeaderLayout.web.tsx:50
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:84
+#: src/view/screens/PreferencesFollowingFeed.tsx:104
+#: src/view/screens/Settings/index.tsx:562
+msgid "Following Feed Preferences"
+msgstr "Followingフィードの設定"
+
+#: src/screens/Profile/Header/Handle.tsx:24
msgid "Follows you"
msgstr "あなたをフォロー"
@@ -1661,28 +2017,45 @@ msgstr "あなたをフォロー"
msgid "Food"
msgstr "食べ物"
-#: src/view/com/modals/DeleteAccount.tsx:111
+#: src/view/com/modals/DeleteAccount.tsx:110
msgid "For security reasons, we'll need to send a confirmation code to your email address."
msgstr "セキュリティ上の理由から、あなたのメールアドレスに確認コードを送信する必要があります。"
-#: src/view/com/modals/AddAppPasswords.tsx:209
+#: src/view/com/modals/AddAppPasswords.tsx:210
msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one."
msgstr "セキュリティ上の理由から、これを再度表示することはできません。このパスワードを紛失した場合は、新しいパスワードを生成する必要があります。"
-#: src/view/com/auth/login/LoginForm.tsx:241
-msgid "Forgot"
-msgstr "忘れた"
+#: src/view/com/auth/login/LoginForm.tsx:244
+#~ msgid "Forgot"
+#~ msgstr "忘れた"
-#: src/view/com/auth/login/LoginForm.tsx:238
-msgid "Forgot password"
-msgstr "パスワードを忘れた"
+#: src/view/com/auth/login/LoginForm.tsx:241
+#~ msgid "Forgot password"
+#~ msgstr "パスワードを忘れた"
-#: src/view/com/auth/login/Login.tsx:127
-#: src/view/com/auth/login/Login.tsx:143
+#: src/screens/Login/index.tsx:129
+#: src/screens/Login/index.tsx:144
msgid "Forgot Password"
msgstr "パスワードを忘れた"
-#: src/view/com/posts/FeedItem.tsx:189
+#: src/screens/Login/LoginForm.tsx:201
+msgid "Forgot password?"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:212
+msgid "Forgot?"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:52
+msgid "Frequently Posts Unwanted Content"
+msgstr "望ましくないコンテンツを頻繁に投稿"
+
+#: src/screens/Hashtag.tsx:109
+#: src/screens/Hashtag.tsx:149
+msgid "From @{sanitizedAuthor}"
+msgstr "@{sanitizedAuthor}による"
+
+#: src/view/com/posts/FeedItem.tsx:179
msgctxt "from-feed"
msgid "From <0/>"
msgstr "<0/>から"
@@ -1696,52 +2069,90 @@ msgstr "ギャラリー"
msgid "Get Started"
msgstr "開始"
-#: src/view/com/auth/LoggedOut.tsx:81
+#: src/lib/moderation/useReportOptions.ts:37
+msgid "Glaring violations of law or terms of service"
+msgstr "法律または利用規約への明らかな違反"
+
+#: src/components/moderation/ScreenHider.tsx:151
+#: src/components/moderation/ScreenHider.tsx:160
#: src/view/com/auth/LoggedOut.tsx:82
-#: src/view/com/util/moderation/ScreenHider.tsx:123
-#: src/view/shell/desktop/LeftNav.tsx:104
+#: src/view/com/auth/LoggedOut.tsx:83
+#: src/view/screens/NotFound.tsx:55
+#: src/view/screens/ProfileFeed.tsx:112
+#: src/view/screens/ProfileList.tsx:916
+#: src/view/shell/desktop/LeftNav.tsx:108
msgid "Go back"
msgstr "戻る"
-#: src/view/screens/ProfileFeed.tsx:105
-#: src/view/screens/ProfileFeed.tsx:110
-#: src/view/screens/ProfileList.tsx:897
-#: src/view/screens/ProfileList.tsx:902
+#: src/components/Error.tsx:91
+#: src/screens/Profile/ErrorState.tsx:62
+#: src/screens/Profile/ErrorState.tsx:66
+#: src/view/screens/NotFound.tsx:54
+#: src/view/screens/ProfileFeed.tsx:117
+#: src/view/screens/ProfileList.tsx:921
msgid "Go Back"
msgstr "戻る"
-#: src/screens/Onboarding/Layout.tsx:104
-#: src/screens/Onboarding/Layout.tsx:193
+#: src/components/ReportDialog/SelectReportOptionView.tsx:73
+#: src/components/ReportDialog/SubmitView.tsx:104
+#: src/screens/Onboarding/Layout.tsx:102
+#: src/screens/Onboarding/Layout.tsx:191
+#: src/screens/Signup/index.tsx:173
msgid "Go back to previous step"
msgstr "前のステップに戻る"
-#: src/view/screens/Search/Search.tsx:724
-#: src/view/shell/desktop/Search.tsx:262
+#: src/view/screens/NotFound.tsx:55
+msgid "Go home"
+msgstr "ホームへ"
+
+#: src/view/screens/NotFound.tsx:54
+msgid "Go Home"
+msgstr "ホームへ"
+
+#: src/view/screens/Search/Search.tsx:749
+#: src/view/shell/desktop/Search.tsx:263
msgid "Go to @{queryMaybeHandle}"
msgstr "@{queryMaybeHandle}へ"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:189
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:218
-#: src/view/com/auth/login/LoginForm.tsx:288
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:195
-#: src/view/com/modals/ChangePassword.tsx:165
+#: src/screens/Login/ForgotPasswordForm.tsx:172
+#: src/view/com/modals/ChangePassword.tsx:167
msgid "Go to next"
msgstr "次へ"
-#: src/view/com/modals/ChangeHandle.tsx:265
+#: src/lib/moderation/useGlobalLabelStrings.ts:46
+msgid "Graphic Media"
+msgstr "生々しいメディア"
+
+#: src/view/com/modals/ChangeHandle.tsx:266
msgid "Handle"
msgstr "ハンドル"
-#: src/view/com/auth/create/CreateAccount.tsx:197
+#: src/lib/moderation/useReportOptions.ts:32
+msgid "Harassment, trolling, or intolerance"
+msgstr "嫌がらせ、荒らし、不寛容"
+
+#: src/Navigation.tsx:282
+msgid "Hashtag"
+msgstr "ハッシュタグ"
+
+#: src/components/RichText.tsx:188
+#~ msgid "Hashtag: {tag}"
+#~ msgstr "ハッシュタグ:{tag}"
+
+#: src/components/RichText.tsx:191
+msgid "Hashtag: #{tag}"
+msgstr "ハッシュタグ:#{tag}"
+
+#: src/screens/Signup/index.tsx:217
msgid "Having trouble?"
-msgstr "何か問題が発生しましたか?"
+msgstr "なにか問題が発生しましたか?"
-#: src/view/shell/desktop/RightNav.tsx:98
-#: src/view/shell/Drawer.tsx:321
+#: src/view/shell/desktop/RightNav.tsx:90
+#: src/view/shell/Drawer.tsx:324
msgid "Help"
msgstr "ヘルプ"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:132
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:140
msgid "Here are some accounts for you to follow"
msgstr "あなたがフォローしそうなアカウントを紹介します"
@@ -1749,51 +2160,57 @@ msgstr "あなたがフォローしそうなアカウントを紹介します"
#~ msgid "Here are some accounts for your to follow"
#~ msgstr "あなたがフォローしそうなアカウントを紹介します"
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:79
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:89
msgid "Here are some popular topical feeds. You can choose to follow as many as you like."
msgstr "人気のあるフィードを紹介します。好きなだけフォローすることができます。"
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:74
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:84
msgid "Here are some topical feeds based on your interests: {interestsText}. You can choose to follow as many as you like."
-msgstr "「{interestsText}」への興味に基づいたおすすめです。好きなだけフォローすることができます。"
+msgstr "{interestsText}への興味に基づいたおすすめです。好きなだけフォローすることができます。"
-#: src/view/com/modals/AddAppPasswords.tsx:153
+#: src/view/com/modals/AddAppPasswords.tsx:154
msgid "Here is your app password."
msgstr "アプリパスワードをお知らせします。"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:41
-#: src/view/com/modals/ContentFilteringSettings.tsx:251
-#: src/view/com/util/moderation/ContentHider.tsx:105
-#: src/view/com/util/moderation/PostHider.tsx:108
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:134
+#: src/components/moderation/PostHider.tsx:107
+#: src/lib/moderation/useLabelBehaviorDescription.ts:15
+#: src/lib/moderation/useLabelBehaviorDescription.ts:20
+#: src/lib/moderation/useLabelBehaviorDescription.ts:25
+#: src/lib/moderation/useLabelBehaviorDescription.ts:30
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:52
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:76
+#: src/view/com/util/forms/PostDropdownBtn.tsx:328
msgid "Hide"
msgstr "非表示"
-#: src/view/com/modals/ContentFilteringSettings.tsx:224
-#: src/view/com/notifications/FeedItem.tsx:325
+#: src/view/com/notifications/FeedItem.tsx:329
msgctxt "action"
msgid "Hide"
msgstr "非表示"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:187
+#: src/view/com/util/forms/PostDropdownBtn.tsx:276
+#: src/view/com/util/forms/PostDropdownBtn.tsx:278
msgid "Hide post"
msgstr "投稿を非表示"
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:67
+#: src/components/moderation/PostHider.tsx:64
msgid "Hide the content"
msgstr "コンテンツを非表示"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:191
+#: src/view/com/util/forms/PostDropdownBtn.tsx:325
msgid "Hide this post?"
msgstr "この投稿を非表示にしますか?"
-#: src/view/com/notifications/FeedItem.tsx:315
+#: src/view/com/notifications/FeedItem.tsx:319
msgid "Hide user list"
msgstr "ユーザーリストを非表示"
-#: src/view/com/profile/ProfileHeader.tsx:486
-msgid "Hides posts from {0} in your feed"
-msgstr "{0}の投稿をあなたのフィードで非表示にします"
+#: src/view/com/profile/ProfileHeader.tsx:487
+#~ msgid "Hides posts from {0} in your feed"
+#~ msgstr "{0}の投稿をあなたのフィードで非表示にします"
#: src/view/com/posts/FeedErrorMessage.tsx:111
msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue."
@@ -1815,11 +2232,19 @@ msgstr "フィードサーバーの反応が悪いようです。この問題を
msgid "Hmm, we're having trouble finding this feed. It may have been deleted."
msgstr "このフィードが見つからないようです。もしかしたら削除されたのかもしれません。"
-#: src/Navigation.tsx:432
-#: src/view/shell/bottom-bar/BottomBar.tsx:137
-#: src/view/shell/desktop/LeftNav.tsx:306
-#: src/view/shell/Drawer.tsx:398
-#: src/view/shell/Drawer.tsx:399
+#: src/screens/Moderation/index.tsx:59
+msgid "Hmmmm, it seems we're having trouble loading this data. See below for more details. If this issue persists, please contact us."
+msgstr "このデータの読み込みに問題があるようです。詳細は以下をご覧ください。この問題が解決しない場合は、サポートにご連絡ください。"
+
+#: src/screens/Profile/ErrorState.tsx:31
+msgid "Hmmmm, we couldn't load that moderation service."
+msgstr "そのモデレーションサービスを読み込めませんでした。"
+
+#: src/Navigation.tsx:454
+#: src/view/shell/bottom-bar/BottomBar.tsx:147
+#: src/view/shell/desktop/LeftNav.tsx:310
+#: src/view/shell/Drawer.tsx:401
+#: src/view/shell/Drawer.tsx:402
msgid "Home"
msgstr "ホーム"
@@ -1827,11 +2252,17 @@ msgstr "ホーム"
#: src/view/com/pager/FeedsTabBarMobile.tsx:123
#: src/view/screens/PreferencesHomeFeed.tsx:104
#: src/view/screens/Settings/index.tsx:543
-msgid "Home Feed Preferences"
-msgstr "ホームフィードの設定"
+#~ msgid "Home Feed Preferences"
+#~ msgstr "ホームフィードの設定"
-#: src/view/com/auth/create/Step1.tsx:78
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:120
+#: src/view/com/modals/ChangeHandle.tsx:420
+msgid "Host:"
+msgstr "ホスト:"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:89
+#: src/screens/Login/LoginForm.tsx:134
+#: src/screens/Signup/StepInfo/index.tsx:40
+#: src/view/com/modals/ChangeHandle.tsx:281
msgid "Hosting provider"
msgstr "ホスティングプロバイダー"
@@ -1852,46 +2283,66 @@ msgstr "コードを持っています"
msgid "I have a confirmation code"
msgstr "確認コードを持っています"
-#: src/view/com/modals/ChangeHandle.tsx:283
+#: src/view/com/modals/ChangeHandle.tsx:284
msgid "I have my own domain"
msgstr "自分のドメインを持っています"
-#: src/view/com/lightbox/Lightbox.web.tsx:165
+#: src/view/com/lightbox/Lightbox.web.tsx:185
msgid "If alt text is long, toggles alt text expanded state"
msgstr "ALTテキストが長い場合、ALTテキストの展開状態を切り替える"
#: src/view/com/modals/SelfLabel.tsx:127
msgid "If none are selected, suitable for all ages."
-msgstr "何も選択しない場合は、全年齢対象です。"
+msgstr "なにも選択しない場合は、全年齢対象です。"
-#: src/view/com/modals/ChangePassword.tsx:146
+#: src/screens/Signup/StepInfo/Policies.tsx:83
+msgid "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."
+msgstr "あなたがお住いの国の法律においてまだ成人していない場合は、親権者または法定後見人があなたに代わって本規約をお読みください。"
+
+#: src/view/screens/ProfileList.tsx:610
+msgid "If you delete this list, you won't be able to recover it."
+msgstr "このリストを削除すると、復元できなくなります。"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:316
+msgid "If you remove this post, you won't be able to recover it."
+msgstr "この投稿を削除すると、復元できなくなります。"
+
+#: src/view/com/modals/ChangePassword.tsx:148
msgid "If you want to change your password, we will send you a code to verify that this is your account."
msgstr "パスワードを変更する場合は、あなたのアカウントであることを確認するためのコードをお送りします。"
+#: src/lib/moderation/useReportOptions.ts:36
+msgid "Illegal and Urgent"
+msgstr "違法かつ緊急"
+
#: src/view/com/util/images/Gallery.tsx:38
msgid "Image"
msgstr "画像"
-#: src/view/com/modals/AltImage.tsx:120
+#: src/view/com/modals/AltImage.tsx:121
msgid "Image alt text"
msgstr "画像のALTテキスト"
#: src/view/com/util/UserAvatar.tsx:311
#: src/view/com/util/UserBanner.tsx:118
-msgid "Image options"
-msgstr "画像のオプション"
+#~ msgid "Image options"
+#~ msgstr "画像のオプション"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:138
+#: src/lib/moderation/useReportOptions.ts:47
+msgid "Impersonation or false claims about identity or affiliation"
+msgstr "なりすまし、または身元もしくは所属に関する虚偽の主張"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:127
msgid "Input code sent to your email for password reset"
msgstr "パスワードをリセットするためにあなたのメールアドレスに送られたコードを入力"
-#: src/view/com/modals/DeleteAccount.tsx:184
+#: src/view/com/modals/DeleteAccount.tsx:183
msgid "Input confirmation code for account deletion"
msgstr "アカウント削除のために確認コードを入力"
-#: src/view/com/auth/create/Step1.tsx:196
-msgid "Input email for Bluesky account"
-msgstr "Blueskyアカウント用のメールアドレスを入力してください"
+#: src/view/com/auth/create/Step1.tsx:177
+#~ msgid "Input email for Bluesky account"
+#~ msgstr "Blueskyアカウント用のメールアドレスを入力してください"
#: src/view/com/auth/create/Step2.tsx:109
#~ msgid "Input email for Bluesky waitlist"
@@ -1901,55 +2352,59 @@ msgstr "Blueskyアカウント用のメールアドレスを入力してくだ
#~ msgid "Input hosting provider address"
#~ msgstr "ホスティングプロバイダーのアドレスを入力"
-#: src/view/com/auth/create/Step1.tsx:154
-msgid "Input invite code to proceed"
-msgstr "招待コードを入力して次に進む"
+#: src/view/com/auth/create/Step1.tsx:151
+#~ msgid "Input invite code to proceed"
+#~ msgstr "招待コードを入力して次に進む"
-#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/AddAppPasswords.tsx:181
msgid "Input name for app password"
msgstr "アプリパスワードの名前を入力"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:162
+#: src/screens/Login/SetNewPasswordForm.tsx:151
msgid "Input new password"
msgstr "新しいパスワードを入力"
-#: src/view/com/modals/DeleteAccount.tsx:203
+#: src/view/com/modals/DeleteAccount.tsx:202
msgid "Input password for account deletion"
msgstr "アカウント削除のためにパスワードを入力"
#: src/view/com/auth/create/Step2.tsx:196
-msgid "Input phone number for SMS verification"
-msgstr "SMS認証に用いる電話番号を入力"
+#~ msgid "Input phone number for SMS verification"
+#~ msgstr "SMS認証に用いる電話番号を入力"
-#: src/view/com/auth/login/LoginForm.tsx:230
+#: src/screens/Login/LoginForm.tsx:195
msgid "Input the password tied to {identifier}"
msgstr "{identifier}に紐づくパスワードを入力"
-#: src/view/com/auth/login/LoginForm.tsx:197
+#: src/screens/Login/LoginForm.tsx:168
msgid "Input the username or email address you used at signup"
msgstr "サインアップ時に使用したユーザー名またはメールアドレスを入力"
#: src/view/com/auth/create/Step2.tsx:271
-msgid "Input the verification code we have texted to you"
-msgstr "テキストメッセージで送られてきた認証コードを入力してください"
+#~ msgid "Input the verification code we have texted to you"
+#~ msgstr "テキストメッセージで送られてきた認証コードを入力してください"
#: src/view/com/modals/Waitlist.tsx:90
-msgid "Input your email to get on the Bluesky waitlist"
-msgstr "BlueskyのWaitlistに登録するメールアドレスを入力"
+#~ msgid "Input your email to get on the Bluesky waitlist"
+#~ msgstr "BlueskyのWaitlistに登録するメールアドレスを入力"
-#: src/view/com/auth/login/LoginForm.tsx:229
+#: src/screens/Login/LoginForm.tsx:194
msgid "Input your password"
msgstr "あなたのパスワードを入力"
-#: src/view/com/auth/create/Step3.tsx:42
+#: src/view/com/modals/ChangeHandle.tsx:389
+msgid "Input your preferred hosting provider"
+msgstr "ご希望のホスティングプロバイダーを入力"
+
+#: src/screens/Signup/StepHandle.tsx:62
msgid "Input your user handle"
msgstr "あなたのユーザーハンドルを入力"
-#: src/view/com/post-thread/PostThreadItem.tsx:225
+#: src/view/com/post-thread/PostThreadItem.tsx:221
msgid "Invalid or unsupported post record"
msgstr "無効またはサポートされていない投稿のレコード"
-#: src/view/com/auth/login/LoginForm.tsx:113
+#: src/screens/Login/LoginForm.tsx:114
msgid "Invalid username or password"
msgstr "無効なユーザー名またはパスワード"
@@ -1957,104 +2412,140 @@ msgstr "無効なユーザー名またはパスワード"
#~ msgid "Invite"
#~ msgstr "招待"
-#: src/view/com/modals/InviteCodes.tsx:93
+#: src/view/com/modals/InviteCodes.tsx:94
msgid "Invite a Friend"
msgstr "友達を招待"
-#: src/view/com/auth/create/Step1.tsx:144
-#: src/view/com/auth/create/Step1.tsx:153
+#: src/screens/Signup/StepInfo/index.tsx:58
msgid "Invite code"
msgstr "招待コード"
-#: src/view/com/auth/create/state.ts:199
+#: src/screens/Signup/state.ts:278
msgid "Invite code not accepted. Check that you input it correctly and try again."
msgstr "招待コードが確認できません。正しく入力されていることを確認し、もう一度実行してください。"
-#: src/view/com/modals/InviteCodes.tsx:170
+#: src/view/com/modals/InviteCodes.tsx:171
msgid "Invite codes: {0} available"
msgstr "招待コード:{0}個使用可能"
#: src/view/shell/Drawer.tsx:645
#~ msgid "Invite codes: {invitesAvailable} available"
-#~ msgstr "使用可能な招待コード: {invitesAvailable} 個"
+#~ msgstr "使用可能な招待コード:{invitesAvailable}個"
-#: src/view/com/modals/InviteCodes.tsx:169
+#: src/view/com/modals/InviteCodes.tsx:170
msgid "Invite codes: 1 available"
msgstr "招待コード:1個使用可能"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:64
+#: src/screens/Onboarding/StepFollowingFeed.tsx:65
msgid "It shows posts from the people you follow as they happen."
msgstr "あなたがフォローした人の投稿が随時表示されます。"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:99
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:104
+#: src/view/com/auth/SplashScreen.web.tsx:172
msgid "Jobs"
msgstr "仕事"
#: src/view/com/modals/Waitlist.tsx:67
-msgid "Join the waitlist"
-msgstr "Waitlistに参加"
+#~ msgid "Join the waitlist"
+#~ msgstr "Waitlistに参加"
-#: src/view/com/auth/create/Step1.tsx:170
#: src/view/com/auth/create/Step1.tsx:174
-msgid "Join the waitlist."
-msgstr "Waitlistに参加します。"
+#: src/view/com/auth/create/Step1.tsx:178
+#~ msgid "Join the waitlist."
+#~ msgstr "Waitlistに参加します。"
#: src/view/com/modals/Waitlist.tsx:128
-msgid "Join Waitlist"
-msgstr "Waitlistに参加"
+#~ msgid "Join Waitlist"
+#~ msgstr "Waitlistに参加"
#: src/screens/Onboarding/index.tsx:24
msgid "Journalism"
msgstr "報道"
+#: src/components/moderation/LabelsOnMe.tsx:59
+msgid "label has been placed on this {labelTarget}"
+msgstr "個のラベルがこの{labelTarget}に貼られました"
+
+#: src/components/moderation/ContentHider.tsx:144
+msgid "Labeled by {0}."
+msgstr "{0}によるラベル"
+
+#: src/components/moderation/ContentHider.tsx:142
+msgid "Labeled by the author."
+msgstr "投稿者によるラベル。"
+
+#: src/view/screens/Profile.tsx:188
+msgid "Labels"
+msgstr "ラベル"
+
+#: src/screens/Profile/Sections/Labels.tsx:142
+msgid "Labels are annotations on users and content. They can be used to hide, warn, and categorize the network."
+msgstr "ラベルは、ユーザーやコンテンツに対する注釈です。ラベルはネットワークを隠したり、警告したり、分類したりするのに使われます。"
+
+#: src/components/moderation/LabelsOnMe.tsx:61
+msgid "labels have been placed on this {labelTarget}"
+msgstr "個のラベルがこの{labelTarget}に貼られました"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:62
+msgid "Labels on your account"
+msgstr "あなたのアカウントのラベル"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:64
+msgid "Labels on your content"
+msgstr "あなたのコンテンツのラベル"
+
#: src/view/com/composer/select-language/SelectLangBtn.tsx:104
msgid "Language selection"
msgstr "言語の選択"
-#: src/view/screens/Settings/index.tsx:594
+#: src/view/screens/Settings/index.tsx:614
msgid "Language settings"
msgstr "言語の設定"
-#: src/Navigation.tsx:140
+#: src/Navigation.tsx:144
#: src/view/screens/LanguageSettings.tsx:89
msgid "Language Settings"
msgstr "言語の設定"
-#: src/view/screens/Settings/index.tsx:603
+#: src/view/screens/Settings/index.tsx:623
msgid "Languages"
msgstr "言語"
#: src/view/com/auth/create/StepHeader.tsx:20
-msgid "Last step!"
-msgstr "最後のステップ!"
+#~ msgid "Last step!"
+#~ msgstr "最後のステップ!"
#: src/view/com/util/moderation/ContentHider.tsx:103
-msgid "Learn more"
-msgstr "詳細"
+#~ msgid "Learn more"
+#~ msgstr "詳細"
-#: src/view/com/util/moderation/PostAlerts.tsx:47
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:65
-#: src/view/com/util/moderation/ScreenHider.tsx:104
+#: src/components/moderation/ScreenHider.tsx:136
msgid "Learn More"
msgstr "詳細"
-#: src/view/com/util/moderation/ContentHider.tsx:85
-#: src/view/com/util/moderation/PostAlerts.tsx:40
-#: src/view/com/util/moderation/PostHider.tsx:78
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:49
-#: src/view/com/util/moderation/ScreenHider.tsx:101
+#: src/components/moderation/ContentHider.tsx:65
+#: src/components/moderation/ContentHider.tsx:128
+msgid "Learn more about the moderation applied to this content."
+msgstr "このコンテンツに適用されるモデレーションはこちらを参照してください。"
+
+#: src/components/moderation/PostHider.tsx:85
+#: src/components/moderation/ScreenHider.tsx:125
msgid "Learn more about this warning"
msgstr "この警告の詳細"
-#: src/view/screens/Moderation.tsx:243
+#: src/screens/Moderation/index.tsx:549
msgid "Learn more about what is public on Bluesky."
msgstr "Blueskyで公開されている内容はこちらを参照してください。"
+#: src/components/moderation/ContentHider.tsx:152
+msgid "Learn more."
+msgstr "詳細。"
+
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82
msgid "Leave them all unchecked to see any language."
msgstr "どの言語も表示するには、すべてのチェックを外したままにします。"
-#: src/view/com/modals/LinkWarning.tsx:51
+#: src/view/com/modals/LinkWarning.tsx:65
msgid "Leaving Bluesky"
msgstr "Blueskyから離れる"
@@ -2062,55 +2553,64 @@ msgstr "Blueskyから離れる"
msgid "left to go."
msgstr "あと少しです。"
-#: src/view/screens/Settings/index.tsx:278
+#: src/view/screens/Settings/index.tsx:296
msgid "Legacy storage cleared, you need to restart the app now."
msgstr "レガシーストレージがクリアされたため、今すぐアプリを再起動する必要があります。"
-#: src/view/com/auth/login/Login.tsx:128
-#: src/view/com/auth/login/Login.tsx:144
+#: src/screens/Login/index.tsx:130
+#: src/screens/Login/index.tsx:145
msgid "Let's get your password reset!"
msgstr "パスワードをリセットしましょう!"
-#: src/screens/Onboarding/StepFinished.tsx:151
+#: src/screens/Onboarding/StepFinished.tsx:155
msgid "Let's go!"
msgstr "さあ始めましょう!"
#: src/view/com/util/UserAvatar.tsx:248
#: src/view/com/util/UserBanner.tsx:62
-msgid "Library"
-msgstr "ライブラリー"
+#~ msgid "Library"
+#~ msgstr "ライブラリー"
-#: src/view/screens/Settings/index.tsx:479
+#: src/view/screens/Settings/index.tsx:498
msgid "Light"
msgstr "ライト"
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Like"
msgstr "いいね"
-#: src/view/screens/ProfileFeed.tsx:591
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:258
+#: src/view/screens/ProfileFeed.tsx:573
msgid "Like this feed"
msgstr "このフィードをいいね"
-#: src/Navigation.tsx:197
+#: src/components/LikesDialog.tsx:87
+#: src/Navigation.tsx:201
+#: src/Navigation.tsx:206
msgid "Liked by"
msgstr "いいねしたユーザー"
+#: src/screens/Profile/ProfileLabelerLikedBy.tsx:29
#: src/view/screens/PostLikedBy.tsx:27
#: src/view/screens/ProfileFeedLikedBy.tsx:27
msgid "Liked By"
msgstr "いいねしたユーザー"
-#: src/view/com/feeds/FeedSourceCard.tsx:277
+#: src/view/com/feeds/FeedSourceCard.tsx:268
msgid "Liked by {0} {1}"
msgstr "{0} {1}にいいねされました"
-#: src/view/screens/ProfileFeed.tsx:606
+#: src/components/LabelingServiceCard/index.tsx:72
+msgid "Liked by {count} {0}"
+msgstr "{count} {0}にいいねされました"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:278
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:292
+#: src/view/screens/ProfileFeed.tsx:588
msgid "Liked by {likeCount} {0}"
msgstr "いいねしたユーザー:{likeCount}人"
-#: src/view/com/notifications/FeedItem.tsx:170
+#: src/view/com/notifications/FeedItem.tsx:174
msgid "liked your custom feed"
msgstr "あなたのカスタムフィードがいいねされました"
@@ -2122,11 +2622,11 @@ msgstr "あなたのカスタムフィードがいいねされました"
#~ msgid "liked your custom feed{0}"
#~ msgstr "{0}にあなたのカスタムフィードがいいねされました"
-#: src/view/com/notifications/FeedItem.tsx:155
+#: src/view/com/notifications/FeedItem.tsx:159
msgid "liked your post"
msgstr "あなたの投稿がいいねされました"
-#: src/view/screens/Profile.tsx:183
+#: src/view/screens/Profile.tsx:193
msgid "Likes"
msgstr "いいね"
@@ -2138,75 +2638,76 @@ msgstr "この投稿をいいねする"
#~ msgid "Limit the visibility of my account to logged-out users"
#~ msgstr "ログアウトしたユーザーに対して私のアカウントの閲覧を制限"
-#: src/Navigation.tsx:166
+#: src/Navigation.tsx:170
msgid "List"
msgstr "リスト"
-#: src/view/com/modals/CreateOrEditList.tsx:261
+#: src/view/com/modals/CreateOrEditList.tsx:262
msgid "List Avatar"
msgstr "リストのアバター"
-#: src/view/screens/ProfileList.tsx:323
+#: src/view/screens/ProfileList.tsx:311
msgid "List blocked"
msgstr "リストをブロックしました"
-#: src/view/com/feeds/FeedSourceCard.tsx:231
+#: src/view/com/feeds/FeedSourceCard.tsx:220
msgid "List by {0}"
msgstr "{0}によるリスト"
-#: src/view/screens/ProfileList.tsx:377
+#: src/view/screens/ProfileList.tsx:355
msgid "List deleted"
msgstr "リストを削除しました"
-#: src/view/screens/ProfileList.tsx:282
+#: src/view/screens/ProfileList.tsx:283
msgid "List muted"
msgstr "リストをミュートしました"
-#: src/view/com/modals/CreateOrEditList.tsx:275
+#: src/view/com/modals/CreateOrEditList.tsx:276
msgid "List Name"
msgstr "リストの名前"
-#: src/view/screens/ProfileList.tsx:342
+#: src/view/screens/ProfileList.tsx:325
msgid "List unblocked"
msgstr "リストのブロックを解除しました"
-#: src/view/screens/ProfileList.tsx:301
+#: src/view/screens/ProfileList.tsx:297
msgid "List unmuted"
msgstr "リストのミュートを解除しました"
-#: src/Navigation.tsx:110
-#: src/view/screens/Profile.tsx:185
-#: src/view/shell/desktop/LeftNav.tsx:379
-#: src/view/shell/Drawer.tsx:492
-#: src/view/shell/Drawer.tsx:493
+#: src/Navigation.tsx:114
+#: src/view/screens/Profile.tsx:189
+#: src/view/screens/Profile.tsx:195
+#: src/view/shell/desktop/LeftNav.tsx:383
+#: src/view/shell/Drawer.tsx:495
+#: src/view/shell/Drawer.tsx:496
msgid "Lists"
msgstr "リスト"
-#: src/view/com/post-thread/PostThread.tsx:276
-#: src/view/com/post-thread/PostThread.tsx:284
-msgid "Load more posts"
-msgstr "投稿をさらにロード"
+#: src/view/com/post-thread/PostThread.tsx:333
+#: src/view/com/post-thread/PostThread.tsx:341
+#~ msgid "Load more posts"
+#~ msgstr "投稿をさらに読み込む"
#: src/view/screens/Notifications.tsx:159
msgid "Load new notifications"
-msgstr "最新の通知をロード"
+msgstr "最新の通知を読み込む"
-#: src/view/com/feeds/FeedPage.tsx:190
-#: src/view/screens/Profile.tsx:440
-#: src/view/screens/ProfileFeed.tsx:494
-#: src/view/screens/ProfileList.tsx:680
+#: src/screens/Profile/Sections/Feed.tsx:70
+#: src/view/com/feeds/FeedPage.tsx:138
+#: src/view/screens/ProfileFeed.tsx:496
+#: src/view/screens/ProfileList.tsx:695
msgid "Load new posts"
-msgstr "最新の投稿をロード"
+msgstr "最新の投稿を読み込む"
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:99
msgid "Loading..."
-msgstr "ロード中..."
+msgstr "読み込み中..."
#: src/view/com/modals/ServerInput.tsx:50
#~ msgid "Local dev server"
#~ msgstr "ローカル開発者サーバー"
-#: src/Navigation.tsx:207
+#: src/Navigation.tsx:221
msgid "Log"
msgstr "ログ"
@@ -2221,11 +2722,11 @@ msgstr "ログアウト"
#~ msgid "Logged-out users"
#~ msgstr "ログアウトしたユーザー"
-#: src/view/screens/Moderation.tsx:136
+#: src/screens/Moderation/index.tsx:442
msgid "Logged-out visibility"
msgstr "ログアウトしたユーザーからの可視性"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:133
+#: src/components/AccountList.tsx:54
msgid "Login to account that is not listed"
msgstr "リストにないアカウントにログイン"
@@ -2233,11 +2734,27 @@ msgstr "リストにないアカウントにログイン"
#~ msgid "Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!"
#~ msgstr "このフィードはBlueskyのアカウントを持っているユーザーのみが利用できるようです。このフィードを表示するには、サインアップするかサインインしてください!"
-#: src/view/com/modals/LinkWarning.tsx:65
+#: src/screens/Login/SetNewPasswordForm.tsx:116
+msgid "Looks like XXXXX-XXXXX"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:79
msgid "Make sure this is where you intend to go!"
msgstr "意図した場所であることを確認してください!"
-#: src/view/screens/Profile.tsx:182
+#: src/components/dialogs/MutedWords.tsx:82
+msgid "Manage your muted words and tags"
+msgstr "ミュートしたワードとタグの管理"
+
+#: src/view/com/auth/create/Step2.tsx:118
+#~ msgid "May not be longer than 253 characters"
+#~ msgstr "253文字より長くはできません"
+
+#: src/view/com/auth/create/Step2.tsx:109
+#~ msgid "May only contain letters and numbers"
+#~ msgstr "英字と数字のみ使用可能です"
+
+#: src/view/screens/Profile.tsx:192
msgid "Media"
msgstr "メディア"
@@ -2249,8 +2766,8 @@ msgstr "メンションされたユーザー"
msgid "Mentioned users"
msgstr "メンションされたユーザー"
-#: src/view/com/util/ViewHeader.tsx:81
-#: src/view/screens/Search/Search.tsx:623
+#: src/view/com/util/ViewHeader.tsx:87
+#: src/view/screens/Search/Search.tsx:648
msgid "Menu"
msgstr "メニュー"
@@ -2258,110 +2775,173 @@ msgstr "メニュー"
#~ msgid "Message from server"
#~ msgstr "サーバーからのメッセージ"
-#: src/view/com/posts/FeedErrorMessage.tsx:197
+#: src/view/com/posts/FeedErrorMessage.tsx:192
msgid "Message from server: {0}"
msgstr "サーバーからのメッセージ:{0}"
-#: src/Navigation.tsx:115
-#: src/view/screens/Moderation.tsx:64
-#: src/view/screens/Settings/index.tsx:625
-#: src/view/shell/desktop/LeftNav.tsx:397
-#: src/view/shell/Drawer.tsx:511
-#: src/view/shell/Drawer.tsx:512
+#: src/lib/moderation/useReportOptions.ts:45
+msgid "Misleading Account"
+msgstr "誤解を招くアカウント"
+
+#: src/Navigation.tsx:119
+#: src/screens/Moderation/index.tsx:104
+#: src/view/screens/Settings/index.tsx:645
+#: src/view/shell/desktop/LeftNav.tsx:401
+#: src/view/shell/Drawer.tsx:514
+#: src/view/shell/Drawer.tsx:515
msgid "Moderation"
msgstr "モデレーション"
-#: src/view/com/lists/ListCard.tsx:92
+#: src/components/moderation/ModerationDetailsDialog.tsx:112
+msgid "Moderation details"
+msgstr "モデレーションの詳細"
+
+#: src/view/com/lists/ListCard.tsx:93
#: src/view/com/modals/UserAddRemoveLists.tsx:206
msgid "Moderation list by {0}"
msgstr "{0}の作成したモデレーションリスト"
-#: src/view/screens/ProfileList.tsx:774
+#: src/view/screens/ProfileList.tsx:789
msgid "Moderation list by <0/>"
msgstr "<0/>の作成したモデレーションリスト"
-#: src/view/com/lists/ListCard.tsx:90
+#: src/view/com/lists/ListCard.tsx:91
#: src/view/com/modals/UserAddRemoveLists.tsx:204
-#: src/view/screens/ProfileList.tsx:772
+#: src/view/screens/ProfileList.tsx:787
msgid "Moderation list by you"
msgstr "あなたの作成したモデレーションリスト"
-#: src/view/com/modals/CreateOrEditList.tsx:197
+#: src/view/com/modals/CreateOrEditList.tsx:198
msgid "Moderation list created"
msgstr "モデレーションリストを作成しました"
-#: src/view/com/modals/CreateOrEditList.tsx:183
+#: src/view/com/modals/CreateOrEditList.tsx:184
msgid "Moderation list updated"
msgstr "モデレーションリストを更新しました"
-#: src/view/screens/Moderation.tsx:95
+#: src/screens/Moderation/index.tsx:243
msgid "Moderation lists"
msgstr "モデレーションリスト"
-#: src/Navigation.tsx:120
+#: src/Navigation.tsx:124
#: src/view/screens/ModerationModlists.tsx:58
msgid "Moderation Lists"
msgstr "モデレーションリスト"
-#: src/view/screens/Settings/index.tsx:619
+#: src/view/screens/Settings/index.tsx:639
msgid "Moderation settings"
msgstr "モデレーションの設定"
-#: src/view/com/modals/ModerationDetails.tsx:35
+#: src/Navigation.tsx:216
+msgid "Moderation states"
+msgstr "モデレーションのステータス"
+
+#: src/screens/Moderation/index.tsx:215
+msgid "Moderation tools"
+msgstr "モデレーションのツール"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:48
+#: src/lib/moderation/useModerationCauseDescription.ts:40
msgid "Moderator has chosen to set a general warning on the content."
msgstr "モデレーターによりコンテンツに一般的な警告が設定されました。"
-#: src/view/shell/desktop/Feeds.tsx:63
+#: src/view/com/post-thread/PostThreadItem.tsx:541
+msgid "More"
+msgstr "さらに"
+
+#: src/view/shell/desktop/Feeds.tsx:65
msgid "More feeds"
msgstr "その他のフィード"
-#: src/view/com/profile/ProfileHeader.tsx:522
-#: src/view/screens/ProfileFeed.tsx:362
-#: src/view/screens/ProfileList.tsx:616
+#: src/view/screens/ProfileList.tsx:599
msgid "More options"
msgstr "その他のオプション"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:270
-msgid "More post options"
-msgstr "そのほかの投稿のオプション"
+#: src/view/com/util/forms/PostDropdownBtn.tsx:315
+#~ msgid "More post options"
+#~ msgstr "その他の投稿のオプション"
#: src/view/screens/PreferencesThreads.tsx:82
msgid "Most-liked replies first"
msgstr "いいねの数が多い順に返信を表示"
-#: src/view/com/profile/ProfileHeader.tsx:326
+#: src/view/com/auth/create/Step2.tsx:122
+#~ msgid "Must be at least 3 characters"
+#~ msgstr "最低でも3文字以上にしてください"
+
+#: src/components/TagMenu/index.tsx:249
+msgid "Mute"
+msgstr "ミュート"
+
+#: src/components/TagMenu/index.web.tsx:105
+msgid "Mute {truncatedTag}"
+msgstr "{truncatedTag}をミュート"
+
+#: src/view/com/profile/ProfileMenu.tsx:279
+#: src/view/com/profile/ProfileMenu.tsx:286
msgid "Mute Account"
msgstr "アカウントをミュート"
-#: src/view/screens/ProfileList.tsx:543
+#: src/view/screens/ProfileList.tsx:518
msgid "Mute accounts"
msgstr "アカウントをミュート"
-#: src/view/screens/ProfileList.tsx:490
+#: src/components/TagMenu/index.tsx:209
+msgid "Mute all {displayTag} posts"
+msgstr "{displayTag}のすべての投稿をミュート"
+
+#: src/components/TagMenu/index.tsx:211
+#~ msgid "Mute all {tag} posts"
+#~ msgstr "{tag}のすべての投稿をミュート"
+
+#: src/components/dialogs/MutedWords.tsx:148
+msgid "Mute in tags only"
+msgstr "タグのみをミュート"
+
+#: src/components/dialogs/MutedWords.tsx:133
+msgid "Mute in text & tags"
+msgstr "テキストとタグをミュート"
+
+#: src/view/screens/ProfileList.tsx:461
+#: src/view/screens/ProfileList.tsx:624
msgid "Mute list"
msgstr "リストをミュート"
-#: src/view/screens/ProfileList.tsx:274
+#: src/view/screens/ProfileList.tsx:619
msgid "Mute these accounts?"
msgstr "これらのアカウントをミュートしますか?"
-#: src/view/screens/ProfileList.tsx:278
-msgid "Mute this List"
-msgstr "このリストをミュート"
+#: src/view/screens/ProfileList.tsx:279
+#~ msgid "Mute this List"
+#~ msgstr "このリストをミュート"
+
+#: src/components/dialogs/MutedWords.tsx:126
+msgid "Mute this word in post text and tags"
+msgstr "投稿のテキストやタグでこのワードをミュート"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/components/dialogs/MutedWords.tsx:141
+msgid "Mute this word in tags only"
+msgstr "タグのみでこのワードをミュート"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:257
msgid "Mute thread"
msgstr "スレッドをミュート"
-#: src/view/com/lists/ListCard.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:267
+#: src/view/com/util/forms/PostDropdownBtn.tsx:269
+msgid "Mute words & tags"
+msgstr "ワードとタグをミュート"
+
+#: src/view/com/lists/ListCard.tsx:102
msgid "Muted"
msgstr "ミュートされています"
-#: src/view/screens/Moderation.tsx:109
+#: src/screens/Moderation/index.tsx:255
msgid "Muted accounts"
msgstr "ミュート中のアカウント"
-#: src/Navigation.tsx:125
+#: src/Navigation.tsx:129
#: src/view/screens/ModerationMutedAccounts.tsx:107
msgid "Muted Accounts"
msgstr "ミュート中のアカウント"
@@ -2370,15 +2950,24 @@ msgstr "ミュート中のアカウント"
msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private."
msgstr "ミュート中のアカウントの投稿は、フィードや通知から取り除かれます。ミュートの設定は完全に非公開です。"
-#: src/view/screens/ProfileList.tsx:276
+#: src/lib/moderation/useModerationCauseDescription.ts:85
+msgid "Muted by \"{0}\""
+msgstr "「{0}」によってミュート中"
+
+#: src/screens/Moderation/index.tsx:231
+msgid "Muted words & tags"
+msgstr "ミュートしたワードとタグ"
+
+#: src/view/screens/ProfileList.tsx:621
msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them."
msgstr "ミュートの設定は非公開です。ミュート中のアカウントはあなたと引き続き関わることができますが、そのアカウントの投稿や通知を受信することはできません。"
-#: src/view/com/modals/BirthDateSettings.tsx:56
+#: src/components/dialogs/BirthDateSettings.tsx:35
+#: src/components/dialogs/BirthDateSettings.tsx:38
msgid "My Birthday"
msgstr "誕生日"
-#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:663
msgid "My Feeds"
msgstr "マイフィード"
@@ -2386,32 +2975,40 @@ msgstr "マイフィード"
msgid "My Profile"
msgstr "マイプロフィール"
-#: src/view/screens/Settings/index.tsx:582
+#: src/view/screens/Settings/index.tsx:596
+msgid "My saved feeds"
+msgstr "保存されたフィード"
+
+#: src/view/screens/Settings/index.tsx:602
msgid "My Saved Feeds"
msgstr "保存されたフィード"
#: src/view/com/auth/server-input/index.tsx:118
-msgid "my-server.com"
-msgstr ""
+#~ msgid "my-server.com"
+#~ msgstr "my-server.com"
-#: src/view/com/modals/AddAppPasswords.tsx:179
-#: src/view/com/modals/CreateOrEditList.tsx:290
+#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/CreateOrEditList.tsx:291
msgid "Name"
msgstr "名前"
-#: src/view/com/modals/CreateOrEditList.tsx:145
+#: src/view/com/modals/CreateOrEditList.tsx:146
msgid "Name is required"
msgstr "名前は必須です"
+#: src/lib/moderation/useReportOptions.ts:57
+#: src/lib/moderation/useReportOptions.ts:78
+#: src/lib/moderation/useReportOptions.ts:86
+msgid "Name or Description Violates Community Standards"
+msgstr "名前または説明がコミュニティ基準に違反"
+
#: src/screens/Onboarding/index.tsx:25
msgid "Nature"
msgstr "自然"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:190
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:219
-#: src/view/com/auth/login/LoginForm.tsx:289
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:196
-#: src/view/com/modals/ChangePassword.tsx:166
+#: src/screens/Login/ForgotPasswordForm.tsx:173
+#: src/screens/Login/LoginForm.tsx:254
+#: src/view/com/modals/ChangePassword.tsx:168
msgid "Navigates to the next screen"
msgstr "次の画面に移動します"
@@ -2419,20 +3016,32 @@ msgstr "次の画面に移動します"
msgid "Navigates to your profile"
msgstr "あなたのプロフィールに移動します"
+#: src/components/ReportDialog/SelectReportOptionView.tsx:122
+msgid "Need to report a copyright violation?"
+msgstr "著作権違反を報告する必要がありますか?"
+
#: src/view/com/modals/EmbedConsent.tsx:107
#: src/view/com/modals/EmbedConsent.tsx:123
-msgid "Never load embeds from {0}"
-msgstr "{0}からの埋め込みを表示しない"
+#~ msgid "Never load embeds from {0}"
+#~ msgstr "{0}からの埋め込みを表示しない"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:72
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:72
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:74
msgid "Never lose access to your followers and data."
msgstr "フォロワーやデータへのアクセスを失うことはありません。"
-#: src/screens/Onboarding/StepFinished.tsx:119
+#: src/screens/Onboarding/StepFinished.tsx:123
msgid "Never lose access to your followers or data."
msgstr "フォロワーやデータへのアクセスを失うことはありません。"
+#: src/components/dialogs/MutedWords.tsx:293
+#~ msgid "Nevermind"
+#~ msgstr "やめておく"
+
+#: src/view/com/modals/ChangeHandle.tsx:519
+msgid "Nevermind, create a handle for me"
+msgstr "気にせずにハンドルを作成"
+
#: src/view/screens/Lists.tsx:76
msgctxt "action"
msgid "New"
@@ -2442,34 +3051,34 @@ msgstr "新規"
msgid "New"
msgstr "新規"
-#: src/view/com/modals/CreateOrEditList.tsx:252
+#: src/view/com/modals/CreateOrEditList.tsx:253
msgid "New Moderation List"
msgstr "新しいモデレーションリスト"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:150
+#: src/view/com/modals/ChangePassword.tsx:212
msgid "New password"
msgstr "新しいパスワード"
-#: src/view/com/modals/ChangePassword.tsx:215
+#: src/view/com/modals/ChangePassword.tsx:217
msgid "New Password"
msgstr "新しいパスワード"
-#: src/view/com/feeds/FeedPage.tsx:201
+#: src/view/com/feeds/FeedPage.tsx:149
msgctxt "action"
msgid "New post"
msgstr "新しい投稿"
-#: src/view/screens/Feeds.tsx:581
+#: src/view/screens/Feeds.tsx:555
#: src/view/screens/Notifications.tsx:168
-#: src/view/screens/Profile.tsx:382
-#: src/view/screens/ProfileFeed.tsx:432
-#: src/view/screens/ProfileList.tsx:195
-#: src/view/screens/ProfileList.tsx:223
-#: src/view/shell/desktop/LeftNav.tsx:248
+#: src/view/screens/Profile.tsx:452
+#: src/view/screens/ProfileFeed.tsx:434
+#: src/view/screens/ProfileList.tsx:199
+#: src/view/screens/ProfileList.tsx:227
+#: src/view/shell/desktop/LeftNav.tsx:252
msgid "New post"
msgstr "新しい投稿"
-#: src/view/shell/desktop/LeftNav.tsx:258
+#: src/view/shell/desktop/LeftNav.tsx:262
msgctxt "action"
msgid "New Post"
msgstr "新しい投稿"
@@ -2478,7 +3087,7 @@ msgstr "新しい投稿"
#~ msgid "New Post"
#~ msgstr "新しい投稿"
-#: src/view/com/modals/CreateOrEditList.tsx:247
+#: src/view/com/modals/CreateOrEditList.tsx:248
msgid "New User List"
msgstr "新しいユーザーリスト"
@@ -2490,15 +3099,16 @@ msgstr "新しい順に返信を表示"
msgid "News"
msgstr "ニュース"
-#: src/view/com/auth/create/CreateAccount.tsx:161
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:182
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:192
-#: src/view/com/auth/login/LoginForm.tsx:291
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:187
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:198
+#: src/screens/Login/ForgotPasswordForm.tsx:143
+#: src/screens/Login/ForgotPasswordForm.tsx:150
+#: src/screens/Login/LoginForm.tsx:253
+#: src/screens/Login/LoginForm.tsx:260
+#: src/screens/Login/SetNewPasswordForm.tsx:174
+#: src/screens/Login/SetNewPasswordForm.tsx:180
+#: src/screens/Signup/index.tsx:205
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79
-#: src/view/com/modals/ChangePassword.tsx:251
#: src/view/com/modals/ChangePassword.tsx:253
+#: src/view/com/modals/ChangePassword.tsx:255
msgid "Next"
msgstr "次へ"
@@ -2507,48 +3117,61 @@ msgctxt "action"
msgid "Next"
msgstr "次へ"
-#: src/view/com/lightbox/Lightbox.web.tsx:149
+#: src/view/com/lightbox/Lightbox.web.tsx:169
msgid "Next image"
msgstr "次の画像"
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:200
-#: src/view/screens/PreferencesHomeFeed.tsx:235
-#: src/view/screens/PreferencesHomeFeed.tsx:272
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:200
+#: src/view/screens/PreferencesFollowingFeed.tsx:235
+#: src/view/screens/PreferencesFollowingFeed.tsx:272
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "No"
msgstr "いいえ"
-#: src/view/screens/ProfileFeed.tsx:584
-#: src/view/screens/ProfileList.tsx:754
+#: src/view/screens/ProfileFeed.tsx:562
+#: src/view/screens/ProfileList.tsx:769
msgid "No description"
msgstr "説明はありません"
-#: src/view/com/profile/ProfileHeader.tsx:169
+#: src/view/com/modals/ChangeHandle.tsx:405
+msgid "No DNS Panel"
+msgstr "DNSパネルがない場合"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:118
msgid "No longer following {0}"
msgstr "{0}のフォローを解除しました"
+#: src/screens/Signup/StepHandle.tsx:114
+msgid "No longer than 253 characters"
+msgstr ""
+
#: src/view/com/notifications/Feed.tsx:109
msgid "No notifications yet!"
msgstr "お知らせはありません!"
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:97
-#: src/view/com/composer/text-input/web/Autocomplete.tsx:191
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:101
+#: src/view/com/composer/text-input/web/Autocomplete.tsx:195
msgid "No result"
msgstr "結果はありません"
-#: src/view/screens/Feeds.tsx:524
+#: src/components/Lists.tsx:183
+msgid "No results found"
+msgstr "結果は見つかりません"
+
+#: src/view/screens/Feeds.tsx:495
msgid "No results found for \"{query}\""
msgstr "「{query}」の検索結果はありません"
#: src/view/com/modals/ListAddRemoveUsers.tsx:127
-#: src/view/screens/Search/Search.tsx:280
-#: src/view/screens/Search/Search.tsx:308
+#: src/view/screens/Search/Search.tsx:283
+#: src/view/screens/Search/Search.tsx:311
msgid "No results found for {query}"
msgstr "「{query}」の検索結果はありません"
-#: src/view/com/modals/EmbedConsent.tsx:129
+#: src/components/dialogs/EmbedConsent.tsx:105
+#: src/components/dialogs/EmbedConsent.tsx:112
msgid "No thanks"
msgstr "結構です"
@@ -2556,12 +3179,21 @@ msgstr "結構です"
msgid "Nobody"
msgstr "返信不可"
+#: src/components/LikedByList.tsx:79
+#: src/components/LikesDialog.tsx:99
+msgid "Nobody has liked this yet. Maybe you should be the first!"
+msgstr "まだ誰もこれをいいねしていません。あなたが最初になるべきかもしれません!"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:42
+msgid "Non-sexual Nudity"
+msgstr "性的ではないヌード"
+
#: src/view/com/modals/SelfLabel.tsx:135
msgid "Not Applicable."
msgstr "該当なし。"
-#: src/Navigation.tsx:105
-#: src/view/screens/Profile.tsx:106
+#: src/Navigation.tsx:109
+#: src/view/screens/Profile.tsx:99
msgid "Not Found"
msgstr "見つかりません"
@@ -2570,21 +3202,27 @@ msgstr "見つかりません"
msgid "Not right now"
msgstr "今はしない"
+#: src/view/com/profile/ProfileMenu.tsx:368
+#: src/view/com/util/forms/PostDropdownBtn.tsx:342
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:246
+msgid "Note about sharing"
+msgstr "共有についての注意事項"
+
#: src/view/screens/Moderation.tsx:227
#~ msgid "Note: Bluesky is an open and public network, and enabling this will not make your profile private or limit the ability of logged in users to see your posts. This setting only limits the visibility of posts on the Bluesky app and website; third-party apps that display Bluesky content may not respect this setting, and could show your content to logged-out users."
#~ msgstr "注記:Blueskyはオープンでパブリックなネットワークであり、この設定を有効にしてもログインしているユーザーはあなたのプロフィールや投稿を制限なく閲覧できます。この設定はBlueskyのアプリおよびウェブサイト上のみでのあなたのコンテンツの可視性を制限するものです。Blueskyのコンテンツを表示するサードパーティーのアプリやウェブサイトなどはこの設定を尊重しない場合があり、ログアウトしたユーザーに対しあなたのコンテンツが表示される可能性があります。"
-#: src/view/screens/Moderation.tsx:233
+#: src/screens/Moderation/index.tsx:540
msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites."
msgstr "注記:Blueskyはオープンでパブリックなネットワークです。この設定はBlueskyのアプリおよびウェブサイト上のみでのあなたのコンテンツの可視性を制限するものであり、他のアプリではこの設定を尊重しない場合があります。他のアプリやウェブサイトでは、ログアウトしたユーザーにあなたのコンテンツが表示される場合があります。"
-#: src/Navigation.tsx:447
+#: src/Navigation.tsx:469
#: src/view/screens/Notifications.tsx:124
#: src/view/screens/Notifications.tsx:148
-#: src/view/shell/bottom-bar/BottomBar.tsx:205
-#: src/view/shell/desktop/LeftNav.tsx:361
-#: src/view/shell/Drawer.tsx:435
-#: src/view/shell/Drawer.tsx:436
+#: src/view/shell/bottom-bar/BottomBar.tsx:215
+#: src/view/shell/desktop/LeftNav.tsx:365
+#: src/view/shell/Drawer.tsx:438
+#: src/view/shell/Drawer.tsx:439
msgid "Notifications"
msgstr "通知"
@@ -2592,15 +3230,36 @@ msgstr "通知"
msgid "Nudity"
msgstr "ヌード"
-#: src/view/com/util/ErrorBoundary.tsx:35
+#: src/lib/moderation/useReportOptions.ts:71
+msgid "Nudity or adult content not labeled as such"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:71
+#~ msgid "Nudity or pornography not labeled as such"
+#~ msgstr "ヌードもしくはポルノと表示されていないもの"
+
+#: src/screens/Signup/index.tsx:142
+msgid "of"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:11
+msgid "Off"
+msgstr "オフ"
+
+#: src/view/com/util/ErrorBoundary.tsx:49
msgid "Oh no!"
msgstr "ちょっと!"
-#: src/screens/Onboarding/StepInterests/index.tsx:128
+#: src/screens/Onboarding/StepInterests/index.tsx:132
msgid "Oh no! Something went wrong."
-msgstr "ちょっと!何かがおかしいです。"
+msgstr "ちょっと!なにかがおかしいです。"
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:126
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:327
+msgid "OK"
+msgstr "OK"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:41
+#: src/screens/Login/PasswordUpdatedForm.tsx:44
msgid "Okay"
msgstr "OK"
@@ -2608,44 +3267,78 @@ msgstr "OK"
msgid "Oldest replies first"
msgstr "古い順に返信を表示"
-#: src/view/screens/Settings/index.tsx:234
+#: src/view/screens/Settings/index.tsx:244
msgid "Onboarding reset"
msgstr "オンボーディングのリセット"
-#: src/view/com/composer/Composer.tsx:375
+#: src/view/com/composer/Composer.tsx:392
msgid "One or more images is missing alt text."
-msgstr "1つもしくは複数の画像にALTテキストがありません。"
+msgstr "1つもしくは複数の画像にALTテキストがありません。"
#: src/view/com/threadgate/WhoCanReply.tsx:100
msgid "Only {0} can reply."
msgstr "{0}のみ返信可能"
-#: src/view/screens/AppPasswords.tsx:65
-#: src/view/screens/Profile.tsx:106
+#: src/screens/Signup/StepHandle.tsx:97
+msgid "Only contains letters, numbers, and hyphens"
+msgstr ""
+
+#: src/components/Lists.tsx:75
+msgid "Oops, something went wrong!"
+msgstr "おっと、なにかが間違っているようです!"
+
+#: src/components/Lists.tsx:170
+#: src/view/screens/AppPasswords.tsx:67
+#: src/view/screens/Profile.tsx:99
msgid "Oops!"
msgstr "おっと!"
-#: src/screens/Onboarding/StepFinished.tsx:115
+#: src/screens/Onboarding/StepFinished.tsx:119
msgid "Open"
msgstr "開かれています"
-#: src/view/com/composer/Composer.tsx:470
-#: src/view/com/composer/Composer.tsx:471
+#: src/view/screens/Moderation.tsx:75
+#~ msgid "Open content filtering settings"
+#~ msgstr "コンテンツのフィルタリング設定を開く"
+
+#: src/view/com/composer/Composer.tsx:491
+#: src/view/com/composer/Composer.tsx:492
msgid "Open emoji picker"
msgstr "絵文字を入力"
-#: src/view/screens/Settings/index.tsx:712
+#: src/view/screens/ProfileFeed.tsx:300
+msgid "Open feed options menu"
+msgstr "フィードの設定メニューを開く"
+
+#: src/view/screens/Settings/index.tsx:734
msgid "Open links with in-app browser"
msgstr "アプリ内ブラウザーでリンクを開く"
-#: src/view/com/pager/FeedsTabBarMobile.tsx:87
+#: src/screens/Moderation/index.tsx:227
+msgid "Open muted words and tags settings"
+msgstr "ミュートしたワードとタグの設定を開く"
+
+#: src/view/screens/Moderation.tsx:92
+#~ msgid "Open muted words settings"
+#~ msgstr "ミュートしたワードの設定を開く"
+
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:50
msgid "Open navigation"
msgstr "ナビゲーションを開く"
-#: src/view/screens/Settings/index.tsx:804
+#: src/view/com/util/forms/PostDropdownBtn.tsx:183
+msgid "Open post options menu"
+msgstr "投稿のオプションを開く"
+
+#: src/view/screens/Settings/index.tsx:828
+#: src/view/screens/Settings/index.tsx:838
msgid "Open storybook page"
msgstr "絵本のページを開く"
+#: src/view/screens/Settings/index.tsx:816
+msgid "Open system log"
+msgstr "システムのログを開く"
+
#: src/view/com/util/forms/DropdownButton.tsx:154
msgid "Opens {numItems} options"
msgstr "{numItems}個のオプションを開く"
@@ -2654,11 +3347,11 @@ msgstr "{numItems}個のオプションを開く"
msgid "Opens additional details for a debug entry"
msgstr "デバッグエントリーの追加詳細を開く"
-#: src/view/com/notifications/FeedItem.tsx:348
+#: src/view/com/notifications/FeedItem.tsx:353
msgid "Opens an expanded list of users in this notification"
msgstr "この通知内のユーザーの拡張リストを開く"
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:61
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:78
msgid "Opens camera on device"
msgstr "デバイスのカメラを開く"
@@ -2666,7 +3359,7 @@ msgstr "デバイスのカメラを開く"
msgid "Opens composer"
msgstr "編集画面を開く"
-#: src/view/screens/Settings/index.tsx:595
+#: src/view/screens/Settings/index.tsx:615
msgid "Opens configurable language settings"
msgstr "構成可能な言語設定を開く"
@@ -2674,71 +3367,117 @@ msgstr "構成可能な言語設定を開く"
msgid "Opens device photo gallery"
msgstr "デバイスのフォトギャラリーを開く"
-#: src/view/com/profile/ProfileHeader.tsx:419
-msgid "Opens editor for profile display name, avatar, background image, and description"
-msgstr "プロフィールの表示名、アバター、背景画像、説明文のエディタを開く"
+#: src/view/com/profile/ProfileHeader.tsx:420
+#~ msgid "Opens editor for profile display name, avatar, background image, and description"
+#~ msgstr "プロフィールの表示名、アバター、背景画像、説明文のエディタを開く"
-#: src/view/screens/Settings/index.tsx:649
+#: src/view/screens/Settings/index.tsx:669
msgid "Opens external embeds settings"
msgstr "外部コンテンツの埋め込みの設定を開く"
-#: src/view/com/profile/ProfileHeader.tsx:574
-msgid "Opens followers list"
-msgstr "フォロワーのリストを開きます"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:57
+#: src/view/com/auth/SplashScreen.tsx:68
+#: src/view/com/auth/SplashScreen.web.tsx:97
+msgid "Opens flow to create a new Bluesky account"
+msgstr "新しいBlueskyのアカウントを作成するフローを開く"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:75
+#: src/view/com/auth/SplashScreen.tsx:83
+#: src/view/com/auth/SplashScreen.web.tsx:112
+msgid "Opens flow to sign into your existing Bluesky account"
+msgstr "既存のBlueskyアカウントにサインインするフローを開く"
+
+#: src/view/com/profile/ProfileHeader.tsx:575
+#~ msgid "Opens followers list"
+#~ msgstr "フォロワーのリストを開きます"
-#: src/view/com/profile/ProfileHeader.tsx:593
-msgid "Opens following list"
-msgstr "フォロー中のリストを開きます"
+#: src/view/com/profile/ProfileHeader.tsx:594
+#~ msgid "Opens following list"
+#~ msgstr "フォロー中のリストを開きます"
#: src/view/screens/Settings.tsx:412
#~ msgid "Opens invite code list"
#~ msgstr "招待コードのリストを開く"
-#: src/view/com/modals/InviteCodes.tsx:172
+#: src/view/com/modals/InviteCodes.tsx:173
msgid "Opens list of invite codes"
msgstr "招待コードのリストを開く"
+#: src/view/screens/Settings/index.tsx:798
+msgid "Opens modal for account deletion confirmation. Requires email code"
+msgstr "アカウントの削除確認用の表示を開きます。メールアドレスのコードが必要です"
+
#: src/view/screens/Settings/index.tsx:774
-msgid "Opens modal for account deletion confirmation. Requires email code."
-msgstr "アカウントの削除確認用の表示を開きます。メールアドレスのコードが必要です。"
+#~ msgid "Opens modal for account deletion confirmation. Requires email code."
+#~ msgstr "アカウントの削除確認用の表示を開きます。メールアドレスのコードが必要です。"
-#: src/view/com/modals/ChangeHandle.tsx:281
+#: src/view/screens/Settings/index.tsx:756
+msgid "Opens modal for changing your Bluesky password"
+msgstr "Blueskyのパスワードを変更するためのモーダルを開く"
+
+#: src/view/screens/Settings/index.tsx:718
+msgid "Opens modal for choosing a new Bluesky handle"
+msgstr "新しいBlueskyのハンドルを選択するためのモーダルを開く"
+
+#: src/view/screens/Settings/index.tsx:779
+msgid "Opens modal for downloading your Bluesky account data (repository)"
+msgstr "Blueskyのアカウントのデータ(リポジトリ)をダウンロードするためのモーダルを開く"
+
+#: src/view/screens/Settings/index.tsx:968
+msgid "Opens modal for email verification"
+msgstr "メールアドレスの認証のためのモーダルを開く"
+
+#: src/view/com/modals/ChangeHandle.tsx:282
msgid "Opens modal for using custom domain"
msgstr "カスタムドメインを使用するためのモーダルを開く"
-#: src/view/screens/Settings/index.tsx:620
+#: src/view/screens/Settings/index.tsx:640
msgid "Opens moderation settings"
msgstr "モデレーションの設定を開く"
-#: src/view/com/auth/login/LoginForm.tsx:239
+#: src/screens/Login/LoginForm.tsx:202
msgid "Opens password reset form"
msgstr "パスワードリセットのフォームを開く"
-#: src/view/screens/Feeds.tsx:357
+#: src/view/com/home/HomeHeaderLayout.web.tsx:63
+#: src/view/screens/Feeds.tsx:356
msgid "Opens screen to edit Saved Feeds"
msgstr "保存されたフィードの編集画面を開く"
-#: src/view/screens/Settings/index.tsx:576
+#: src/view/screens/Settings/index.tsx:597
msgid "Opens screen with all saved feeds"
msgstr "保存されたすべてのフィードで画面を開く"
+#: src/view/screens/Settings/index.tsx:696
+msgid "Opens the app password settings"
+msgstr "アプリパスワードの設定を開く"
+
#: src/view/screens/Settings/index.tsx:676
-msgid "Opens the app password settings page"
-msgstr "アプリパスワードの設定ページを開く"
+#~ msgid "Opens the app password settings page"
+#~ msgstr "アプリパスワードの設定ページを開く"
+
+#: src/view/screens/Settings/index.tsx:554
+msgid "Opens the Following feed preferences"
+msgstr "Followingフィードの設定を開く"
#: src/view/screens/Settings/index.tsx:535
-msgid "Opens the home feed preferences"
-msgstr "ホームフィードの設定を開く"
+#~ msgid "Opens the home feed preferences"
+#~ msgstr "ホームフィードの設定を開く"
+
+#: src/view/com/modals/LinkWarning.tsx:93
+msgid "Opens the linked website"
+msgstr "リンク先のウェブサイトを開く"
-#: src/view/screens/Settings/index.tsx:805
+#: src/view/screens/Settings/index.tsx:829
+#: src/view/screens/Settings/index.tsx:839
msgid "Opens the storybook page"
msgstr "ストーリーブックのページを開く"
-#: src/view/screens/Settings/index.tsx:793
+#: src/view/screens/Settings/index.tsx:817
msgid "Opens the system log page"
msgstr "システムログのページを開く"
-#: src/view/screens/Settings/index.tsx:556
+#: src/view/screens/Settings/index.tsx:575
msgid "Opens the threads preferences"
msgstr "スレッドの設定を開く"
@@ -2746,6 +3485,10 @@ msgstr "スレッドの設定を開く"
msgid "Option {0} of {numItems}"
msgstr "{numItems}個中{0}目のオプション"
+#: src/components/ReportDialog/SubmitView.tsx:162
+msgid "Optionally provide additional information below:"
+msgstr "オプションとして、以下に追加情報をご記入ください:"
+
#: src/view/com/modals/Threadgate.tsx:89
msgid "Or combine these options:"
msgstr "または以下のオプションを組み合わせてください:"
@@ -2754,7 +3497,11 @@ msgstr "または以下のオプションを組み合わせてください:"
#~ msgid "Or you can try our \"Discover\" algorithm:"
#~ msgstr "または我々の「Discover」アルゴリズムを試すことができます:"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:138
+#: src/lib/moderation/useReportOptions.ts:25
+msgid "Other"
+msgstr "その他"
+
+#: src/components/AccountList.tsx:73
msgid "Other account"
msgstr "その他のアカウント"
@@ -2766,6 +3513,7 @@ msgstr "その他のアカウント"
msgid "Other..."
msgstr "その他..."
+#: src/components/Lists.tsx:184
#: src/view/screens/NotFound.tsx:45
msgid "Page not found"
msgstr "ページが見つかりません"
@@ -2774,27 +3522,30 @@ msgstr "ページが見つかりません"
msgid "Page Not Found"
msgstr "ページが見つかりません"
-#: src/view/com/auth/create/Step1.tsx:210
-#: src/view/com/auth/create/Step1.tsx:220
-#: src/view/com/auth/login/LoginForm.tsx:226
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:161
-#: src/view/com/modals/DeleteAccount.tsx:202
+#: src/screens/Login/LoginForm.tsx:178
+#: src/screens/Signup/StepInfo/index.tsx:101
+#: src/view/com/modals/DeleteAccount.tsx:194
+#: src/view/com/modals/DeleteAccount.tsx:201
msgid "Password"
msgstr "パスワード"
-#: src/view/com/auth/login/Login.tsx:157
+#: src/view/com/modals/ChangePassword.tsx:142
+msgid "Password Changed"
+msgstr "パスワードが変更されました"
+
+#: src/screens/Login/index.tsx:157
msgid "Password updated"
msgstr "パスワードが更新されました"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:28
+#: src/screens/Login/PasswordUpdatedForm.tsx:30
msgid "Password updated!"
msgstr "パスワードが更新されました!"
-#: src/Navigation.tsx:160
+#: src/Navigation.tsx:164
msgid "People followed by @{0}"
msgstr "@{0}がフォロー中のユーザー"
-#: src/Navigation.tsx:153
+#: src/Navigation.tsx:157
msgid "People following @{0}"
msgstr "@{0}をフォロー中のユーザー"
@@ -2811,79 +3562,95 @@ msgid "Pets"
msgstr "ペット"
#: src/view/com/auth/create/Step2.tsx:183
-msgid "Phone number"
-msgstr "電話番号"
+#~ msgid "Phone number"
+#~ msgstr "電話番号"
#: src/view/com/modals/SelfLabel.tsx:121
msgid "Pictures meant for adults."
msgstr "成人向けの画像です。"
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:292
+#: src/view/screens/ProfileList.tsx:563
msgid "Pin to home"
msgstr "ホームにピン留め"
+#: src/view/screens/ProfileFeed.tsx:295
+msgid "Pin to Home"
+msgstr "ホームにピン留め"
+
#: src/view/screens/SavedFeeds.tsx:88
msgid "Pinned Feeds"
msgstr "ピン留めされたフィード"
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:111
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:123
msgid "Play {0}"
msgstr "{0}を再生"
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:54
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:55
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:57
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:58
msgid "Play Video"
msgstr "動画を再生"
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:110
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:122
msgid "Plays the GIF"
msgstr "GIFを再生"
-#: src/view/com/auth/create/state.ts:177
+#: src/screens/Signup/state.ts:241
msgid "Please choose your handle."
msgstr "ハンドルをお選びください。"
-#: src/view/com/auth/create/state.ts:160
+#: src/screens/Signup/state.ts:234
msgid "Please choose your password."
msgstr "パスワードを選択してください。"
+#: src/screens/Signup/state.ts:251
+msgid "Please complete the verification captcha."
+msgstr "Captcha認証を完了してください。"
+
#: src/view/com/modals/ChangeEmail.tsx:67
msgid "Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed."
msgstr "変更する前にメールを確認してください。これは、メールアップデートツールが追加されている間の一時的な要件であり、まもなく削除されます。"
-#: src/view/com/modals/AddAppPasswords.tsx:90
+#: src/view/com/modals/AddAppPasswords.tsx:91
msgid "Please enter a name for your app password. All spaces is not allowed."
msgstr "アプリパスワードにつける名前を入力してください。すべてスペースとしてはいけません。"
#: src/view/com/auth/create/Step2.tsx:206
-msgid "Please enter a phone number that can receive SMS text messages."
-msgstr "SMSでテキストメッセージを受け取れる電話番号を入力してください。"
+#~ msgid "Please enter a phone number that can receive SMS text messages."
+#~ msgstr "SMSでテキストメッセージを受け取れる電話番号を入力してください。"
-#: src/view/com/modals/AddAppPasswords.tsx:145
+#: src/view/com/modals/AddAppPasswords.tsx:146
msgid "Please enter a unique name for this App Password or use our randomly generated one."
msgstr "このアプリパスワードに固有の名前を入力するか、ランダムに生成された名前を使用してください。"
+#: src/components/dialogs/MutedWords.tsx:67
+msgid "Please enter a valid word, tag, or phrase to mute"
+msgstr "ミュートにする有効な単語、タグ、フレーズを入力してください"
+
#: src/view/com/auth/create/state.ts:170
-msgid "Please enter the code you received by SMS."
-msgstr "SMSで受け取ったコードを入力してください。"
+#~ msgid "Please enter the code you received by SMS."
+#~ msgstr "SMSで受け取ったコードを入力してください。"
#: src/view/com/auth/create/Step2.tsx:282
-msgid "Please enter the verification code sent to {phoneNumberFormatted}."
-msgstr "{phoneNumberFormatted}に送った認証コードを入力してください。"
+#~ msgid "Please enter the verification code sent to {phoneNumberFormatted}."
+#~ msgstr "{phoneNumberFormatted}に送った認証コードを入力してください。"
-#: src/view/com/auth/create/state.ts:146
+#: src/screens/Signup/state.ts:220
msgid "Please enter your email."
msgstr "メールアドレスを入力してください。"
-#: src/view/com/modals/DeleteAccount.tsx:191
+#: src/view/com/modals/DeleteAccount.tsx:190
msgid "Please enter your password as well:"
msgstr "パスワードも入力してください:"
+#: src/components/moderation/LabelsOnMeDialog.tsx:221
+msgid "Please explain why you think this label was incorrectly applied by {0}"
+msgstr "{0}によって貼られたこのラベルが誤って適用されたと思われる理由を説明してください"
+
#: src/view/com/modals/AppealLabel.tsx:72
#: src/view/com/modals/AppealLabel.tsx:75
-msgid "Please tell us why you think this content warning was incorrectly applied!"
-msgstr "このコンテンツに対する警告が誤って適用されたと思われる理由を教えてください!"
+#~ msgid "Please tell us why you think this content warning was incorrectly applied!"
+#~ msgstr "このコンテンツに対する警告が誤って適用されたと思われる理由を教えてください!"
#: src/view/com/modals/AppealLabel.tsx:72
#: src/view/com/modals/AppealLabel.tsx:75
@@ -2894,9 +3661,9 @@ msgstr "このコンテンツに対する警告が誤って適用されたと思
msgid "Please Verify Your Email"
msgstr "メールアドレスを確認してください"
-#: src/view/com/composer/Composer.tsx:215
+#: src/view/com/composer/Composer.tsx:222
msgid "Please wait for your link card to finish loading"
-msgstr "リンクカードがロードされるまでお待ちください"
+msgstr "リンクカードが読み込まれるまでお待ちください"
#: src/screens/Onboarding/index.tsx:37
msgid "Politics"
@@ -2906,13 +3673,17 @@ msgstr "政治"
msgid "Porn"
msgstr "ポルノ"
-#: src/view/com/composer/Composer.tsx:350
-#: src/view/com/composer/Composer.tsx:358
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#~ msgid "Pornography"
+#~ msgstr "ポルノグラフィ"
+
+#: src/view/com/composer/Composer.tsx:367
+#: src/view/com/composer/Composer.tsx:375
msgctxt "action"
msgid "Post"
msgstr "投稿"
-#: src/view/com/post-thread/PostThread.tsx:246
+#: src/view/com/post-thread/PostThread.tsx:292
msgctxt "description"
msgid "Post"
msgstr "投稿"
@@ -2923,24 +3694,34 @@ msgstr "投稿"
#~ msgid "Post"
#~ msgstr "投稿"
-#: src/view/com/post-thread/PostThreadItem.tsx:174
+#: src/view/com/post-thread/PostThreadItem.tsx:175
msgid "Post by {0}"
msgstr "{0}による投稿"
-#: src/Navigation.tsx:172
-#: src/Navigation.tsx:179
-#: src/Navigation.tsx:186
+#: src/Navigation.tsx:176
+#: src/Navigation.tsx:183
+#: src/Navigation.tsx:190
msgid "Post by @{0}"
msgstr "@{0}による投稿"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:84
+#: src/view/com/util/forms/PostDropdownBtn.tsx:105
msgid "Post deleted"
msgstr "投稿を削除"
-#: src/view/com/post-thread/PostThread.tsx:398
+#: src/view/com/post-thread/PostThread.tsx:157
msgid "Post hidden"
msgstr "投稿を非表示"
+#: src/components/moderation/ModerationDetailsDialog.tsx:97
+#: src/lib/moderation/useModerationCauseDescription.ts:99
+msgid "Post Hidden by Muted Word"
+msgstr "ミュートしたワードによって投稿が表示されません"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:100
+#: src/lib/moderation/useModerationCauseDescription.ts:108
+msgid "Post Hidden by You"
+msgstr "あなたが非表示にした投稿"
+
#: src/view/com/composer/select-language/SelectLangBtn.tsx:87
msgid "Post language"
msgstr "投稿の言語"
@@ -2949,23 +3730,42 @@ msgstr "投稿の言語"
msgid "Post Languages"
msgstr "投稿の言語"
-#: src/view/com/post-thread/PostThread.tsx:450
+#: src/view/com/post-thread/PostThread.tsx:152
+#: src/view/com/post-thread/PostThread.tsx:164
msgid "Post not found"
msgstr "投稿が見つかりません"
-#: src/view/screens/Profile.tsx:180
+#: src/components/TagMenu/index.tsx:253
+msgid "posts"
+msgstr "投稿"
+
+#: src/view/screens/Profile.tsx:190
msgid "Posts"
msgstr "投稿"
+#: src/components/dialogs/MutedWords.tsx:89
+msgid "Posts can be muted based on their text, their tags, or both."
+msgstr "投稿はテキスト、タグ、またはその両方に基づいてミュートできます。"
+
#: src/view/com/posts/FeedErrorMessage.tsx:64
msgid "Posts hidden"
msgstr "非表示の投稿"
-#: src/view/com/modals/LinkWarning.tsx:46
+#: src/view/com/modals/LinkWarning.tsx:60
msgid "Potentially Misleading Link"
msgstr "誤解を招く可能性のあるリンク"
-#: src/view/com/lightbox/Lightbox.web.tsx:135
+#: src/components/forms/HostingProvider.tsx:45
+msgid "Press to change hosting provider"
+msgstr ""
+
+#: src/components/Error.tsx:74
+#: src/components/Lists.tsx:80
+#: src/screens/Signup/index.tsx:186
+msgid "Press to retry"
+msgstr "再実行する"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:150
msgid "Previous image"
msgstr "前の画像"
@@ -2977,39 +3777,45 @@ msgstr "第一言語"
msgid "Prioritize Your Follows"
msgstr "あなたのフォローを優先"
-#: src/view/screens/Settings/index.tsx:632
-#: src/view/shell/desktop/RightNav.tsx:80
+#: src/view/screens/Settings/index.tsx:652
+#: src/view/shell/desktop/RightNav.tsx:72
msgid "Privacy"
msgstr "プライバシー"
-#: src/Navigation.tsx:217
+#: src/Navigation.tsx:231
+#: src/screens/Signup/StepInfo/Policies.tsx:56
#: src/view/screens/PrivacyPolicy.tsx:29
-#: src/view/screens/Settings/index.tsx:891
-#: src/view/shell/Drawer.tsx:262
+#: src/view/screens/Settings/index.tsx:923
+#: src/view/shell/Drawer.tsx:265
msgid "Privacy Policy"
msgstr "プライバシーポリシー"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:198
+#: src/screens/Login/ForgotPasswordForm.tsx:156
msgid "Processing..."
msgstr "処理中..."
-#: src/view/shell/bottom-bar/BottomBar.tsx:247
-#: src/view/shell/desktop/LeftNav.tsx:415
+#: src/view/screens/DebugMod.tsx:888
+#: src/view/screens/Profile.tsx:342
+msgid "profile"
+msgstr "プロフィール"
+
+#: src/view/shell/bottom-bar/BottomBar.tsx:260
+#: src/view/shell/desktop/LeftNav.tsx:419
#: src/view/shell/Drawer.tsx:70
-#: src/view/shell/Drawer.tsx:546
-#: src/view/shell/Drawer.tsx:547
+#: src/view/shell/Drawer.tsx:549
+#: src/view/shell/Drawer.tsx:550
msgid "Profile"
msgstr "プロフィール"
-#: src/view/com/modals/EditProfile.tsx:128
+#: src/view/com/modals/EditProfile.tsx:129
msgid "Profile updated"
msgstr "プロフィールを更新しました"
-#: src/view/screens/Settings/index.tsx:949
+#: src/view/screens/Settings/index.tsx:981
msgid "Protect your account by verifying your email."
msgstr "メールアドレスを確認してアカウントを保護します。"
-#: src/screens/Onboarding/StepFinished.tsx:101
+#: src/screens/Onboarding/StepFinished.tsx:105
msgid "Public"
msgstr "公開されています"
@@ -3021,15 +3827,15 @@ msgstr "ユーザーを一括でミュートまたはブロックする、公開
msgid "Public, shareable lists which can drive feeds."
msgstr "フィードとして利用できる、公開された共有可能なリスト。"
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish post"
msgstr "投稿を公開"
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish reply"
msgstr "返信を公開"
-#: src/view/com/modals/Repost.tsx:65
+#: src/view/com/modals/Repost.tsx:66
msgctxt "action"
msgid "Quote post"
msgstr "引用"
@@ -3038,7 +3844,7 @@ msgstr "引用"
msgid "Quote post"
msgstr "引用"
-#: src/view/com/modals/Repost.tsx:70
+#: src/view/com/modals/Repost.tsx:71
msgctxt "action"
msgid "Quote Post"
msgstr "引用"
@@ -3051,10 +3857,14 @@ msgstr "引用"
msgid "Random (aka \"Poster's Roulette\")"
msgstr "ランダムな順番で表示(別名「投稿者のルーレット」)"
-#: src/view/com/modals/EditImage.tsx:236
+#: src/view/com/modals/EditImage.tsx:237
msgid "Ratios"
msgstr "比率"
+#: src/view/screens/Search/Search.tsx:777
+msgid "Recent Searches"
+msgstr "検索履歴"
+
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116
msgid "Recommended Feeds"
msgstr "おすすめのフィード"
@@ -3063,35 +3873,50 @@ msgstr "おすすめのフィード"
msgid "Recommended Users"
msgstr "おすすめのユーザー"
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/components/dialogs/MutedWords.tsx:286
+#: src/view/com/feeds/FeedSourceCard.tsx:283
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/SelfLabel.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/com/util/UserAvatar.tsx:285
-#: src/view/com/util/UserBanner.tsx:91
+#: src/view/com/posts/FeedErrorMessage.tsx:204
msgid "Remove"
msgstr "削除"
-#: src/view/com/feeds/FeedSourceCard.tsx:106
-msgid "Remove {0} from my feeds?"
-msgstr "マイフィードから{0}を削除しますか?"
+#: src/view/com/feeds/FeedSourceCard.tsx:108
+#~ msgid "Remove {0} from my feeds?"
+#~ msgstr "マイフィードから{0}を削除しますか?"
#: src/view/com/util/AccountDropdownBtn.tsx:22
msgid "Remove account"
msgstr "アカウントを削除"
-#: src/view/com/posts/FeedErrorMessage.tsx:131
-#: src/view/com/posts/FeedErrorMessage.tsx:166
+#: src/view/com/util/UserAvatar.tsx:358
+msgid "Remove Avatar"
+msgstr "アバターを削除"
+
+#: src/view/com/util/UserBanner.tsx:148
+msgid "Remove Banner"
+msgstr "バナーを削除"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:160
msgid "Remove feed"
msgstr "フィードを削除"
-#: src/view/com/feeds/FeedSourceCard.tsx:105
-#: src/view/com/feeds/FeedSourceCard.tsx:167
-#: src/view/com/feeds/FeedSourceCard.tsx:172
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/posts/FeedErrorMessage.tsx:201
+msgid "Remove feed?"
+msgstr "フィードを削除しますか?"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:173
+#: src/view/com/feeds/FeedSourceCard.tsx:233
+#: src/view/screens/ProfileFeed.tsx:335
+#: src/view/screens/ProfileFeed.tsx:341
msgid "Remove from my feeds"
msgstr "マイフィードから削除"
+#: src/view/com/feeds/FeedSourceCard.tsx:278
+msgid "Remove from my feeds?"
+msgstr "マイフィードから削除しますか?"
+
#: src/view/com/composer/photos/Gallery.tsx:167
msgid "Remove image"
msgstr "イメージを削除"
@@ -3100,33 +3925,44 @@ msgstr "イメージを削除"
msgid "Remove image preview"
msgstr "イメージプレビューを削除"
-#: src/view/com/modals/Repost.tsx:47
+#: src/components/dialogs/MutedWords.tsx:329
+msgid "Remove mute word from your list"
+msgstr "リストからミュートワードを削除"
+
+#: src/view/com/modals/Repost.tsx:48
msgid "Remove repost"
msgstr "リポストを削除"
-#: src/view/com/feeds/FeedSourceCard.tsx:173
-msgid "Remove this feed from my feeds?"
-msgstr "このフィードをマイフィードから削除しますか?"
+#: src/view/com/feeds/FeedSourceCard.tsx:175
+#~ msgid "Remove this feed from my feeds?"
+#~ msgstr "このフィードをマイフィードから削除しますか?"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:202
+msgid "Remove this feed from your saved feeds"
+msgstr "保存したフィードからこのフィードを削除"
#: src/view/com/posts/FeedErrorMessage.tsx:132
-msgid "Remove this feed from your saved feeds?"
-msgstr "保存したフィードからこのフィードを削除しますか?"
+#~ msgid "Remove this feed from your saved feeds?"
+#~ msgstr "保存したフィードからこのフィードを削除しますか?"
#: src/view/com/modals/ListAddRemoveUsers.tsx:199
#: src/view/com/modals/UserAddRemoveLists.tsx:152
msgid "Removed from list"
msgstr "リストから削除されました"
-#: src/view/com/feeds/FeedSourceCard.tsx:111
-#: src/view/com/feeds/FeedSourceCard.tsx:178
+#: src/view/com/feeds/FeedSourceCard.tsx:121
msgid "Removed from my feeds"
msgstr "フィードから削除しました"
+#: src/view/screens/ProfileFeed.tsx:209
+msgid "Removed from your feeds"
+msgstr "あなたのフィードから削除しました"
+
#: src/view/com/composer/ExternalEmbed.tsx:71
msgid "Removes default thumbnail from {0}"
msgstr "{0}からデフォルトのサムネイルを削除"
-#: src/view/screens/Profile.tsx:181
+#: src/view/screens/Profile.tsx:191
msgid "Replies"
msgstr "返信"
@@ -3134,45 +3970,71 @@ msgstr "返信"
msgid "Replies to this thread are disabled"
msgstr "このスレッドへの返信はできません"
-#: src/view/com/composer/Composer.tsx:348
+#: src/view/com/composer/Composer.tsx:365
msgctxt "action"
msgid "Reply"
msgstr "返信"
-#: src/view/screens/PreferencesHomeFeed.tsx:144
+#: src/view/screens/PreferencesFollowingFeed.tsx:144
msgid "Reply Filters"
msgstr "返信のフィルター"
#: src/view/com/post/Post.tsx:166
-#: src/view/com/posts/FeedItem.tsx:287
+#: src/view/com/posts/FeedItem.tsx:280
msgctxt "description"
msgid "Reply to <0/>"
msgstr "<0/>に返信"
#: src/view/com/modals/report/Modal.tsx:166
-msgid "Report {collectionName}"
-msgstr "{collectionName}を報告"
+#~ msgid "Report {collectionName}"
+#~ msgstr "{collectionName}を報告"
-#: src/view/com/profile/ProfileHeader.tsx:360
+#: src/view/com/profile/ProfileMenu.tsx:319
+#: src/view/com/profile/ProfileMenu.tsx:322
msgid "Report Account"
msgstr "アカウントを報告"
-#: src/view/screens/ProfileFeed.tsx:292
+#: src/components/ReportDialog/index.tsx:49
+msgid "Report dialog"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:352
+#: src/view/screens/ProfileFeed.tsx:354
msgid "Report feed"
msgstr "フィードを報告"
-#: src/view/screens/ProfileList.tsx:458
+#: src/view/screens/ProfileList.tsx:429
msgid "Report List"
msgstr "リストを報告"
-#: src/view/com/modals/report/SendReportButton.tsx:37
-#: src/view/com/util/forms/PostDropdownBtn.tsx:210
+#: src/view/com/util/forms/PostDropdownBtn.tsx:292
+#: src/view/com/util/forms/PostDropdownBtn.tsx:294
msgid "Report post"
msgstr "投稿を報告"
-#: src/view/com/modals/Repost.tsx:43
-#: src/view/com/modals/Repost.tsx:48
-#: src/view/com/modals/Repost.tsx:53
+#: src/components/ReportDialog/SelectReportOptionView.tsx:42
+msgid "Report this content"
+msgstr "このコンテンツを報告"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:55
+msgid "Report this feed"
+msgstr "このフィードを報告"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:52
+msgid "Report this list"
+msgstr "このリストを報告"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:49
+msgid "Report this post"
+msgstr "この投稿を報告"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:46
+msgid "Report this user"
+msgstr "このユーザーを報告"
+
+#: src/view/com/modals/Repost.tsx:44
+#: src/view/com/modals/Repost.tsx:49
+#: src/view/com/modals/Repost.tsx:54
#: src/view/com/util/post-ctrls/RepostButton.tsx:61
msgctxt "action"
msgid "Repost"
@@ -3195,7 +4057,7 @@ msgstr "リポストまたは引用"
msgid "Reposted By"
msgstr "リポストしたユーザー"
-#: src/view/com/posts/FeedItem.tsx:207
+#: src/view/com/posts/FeedItem.tsx:197
msgid "Reposted by {0}"
msgstr "{0}にリポストされた"
@@ -3203,11 +4065,11 @@ msgstr "{0}にリポストされた"
#~ msgid "Reposted by {0})"
#~ msgstr "{0}によるリポスト"
-#: src/view/com/posts/FeedItem.tsx:224
+#: src/view/com/posts/FeedItem.tsx:214
msgid "Reposted by <0/>"
msgstr "<0/>によるリポスト"
-#: src/view/com/notifications/FeedItem.tsx:162
+#: src/view/com/notifications/FeedItem.tsx:166
msgid "reposted your post"
msgstr "あなたの投稿はリポストされました"
@@ -3221,60 +4083,61 @@ msgid "Request Change"
msgstr "変更を要求"
#: src/view/com/auth/create/Step2.tsx:219
-msgid "Request code"
-msgstr "コードをリクエスト"
+#~ msgid "Request code"
+#~ msgstr "コードをリクエスト"
-#: src/view/com/modals/ChangePassword.tsx:239
#: src/view/com/modals/ChangePassword.tsx:241
+#: src/view/com/modals/ChangePassword.tsx:243
msgid "Request Code"
msgstr "コードをリクエスト"
-#: src/view/screens/Settings/index.tsx:456
+#: src/view/screens/Settings/index.tsx:475
msgid "Require alt text before posting"
msgstr "画像投稿時にALTテキストを必須とする"
-#: src/view/com/auth/create/Step1.tsx:149
+#: src/screens/Signup/StepInfo/index.tsx:69
msgid "Required for this provider"
msgstr "このプロバイダーに必要"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:124
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:136
+#: src/view/com/modals/ChangePassword.tsx:185
msgid "Reset code"
msgstr "コードをリセット"
-#: src/view/com/modals/ChangePassword.tsx:190
+#: src/view/com/modals/ChangePassword.tsx:192
msgid "Reset Code"
msgstr "コードをリセット"
#: src/view/screens/Settings/index.tsx:824
-msgid "Reset onboarding"
-msgstr "オンボーディングの状態をリセット"
+#~ msgid "Reset onboarding"
+#~ msgstr "オンボーディングの状態をリセット"
-#: src/view/screens/Settings/index.tsx:827
+#: src/view/screens/Settings/index.tsx:858
+#: src/view/screens/Settings/index.tsx:861
msgid "Reset onboarding state"
msgstr "オンボーディングの状態をリセット"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:104
+#: src/screens/Login/ForgotPasswordForm.tsx:86
msgid "Reset password"
msgstr "パスワードをリセット"
#: src/view/screens/Settings/index.tsx:814
-msgid "Reset preferences"
-msgstr "設定をリセット"
+#~ msgid "Reset preferences"
+#~ msgstr "設定をリセット"
-#: src/view/screens/Settings/index.tsx:817
+#: src/view/screens/Settings/index.tsx:848
+#: src/view/screens/Settings/index.tsx:851
msgid "Reset preferences state"
msgstr "設定をリセット"
-#: src/view/screens/Settings/index.tsx:825
+#: src/view/screens/Settings/index.tsx:859
msgid "Resets the onboarding state"
msgstr "オンボーディングの状態をリセットします"
-#: src/view/screens/Settings/index.tsx:815
+#: src/view/screens/Settings/index.tsx:849
msgid "Resets the preferences state"
msgstr "設定の状態をリセットします"
-#: src/view/com/auth/login/LoginForm.tsx:269
+#: src/screens/Login/LoginForm.tsx:235
msgid "Retries login"
msgstr "ログインをやり直す"
@@ -3283,109 +4146,154 @@ msgstr "ログインをやり直す"
msgid "Retries the last action, which errored out"
msgstr "エラーになった最後のアクションをやり直す"
-#: src/screens/Onboarding/StepInterests/index.tsx:221
-#: src/screens/Onboarding/StepInterests/index.tsx:224
-#: src/view/com/auth/create/CreateAccount.tsx:170
-#: src/view/com/auth/create/CreateAccount.tsx:175
-#: src/view/com/auth/create/Step2.tsx:255
-#: src/view/com/auth/login/LoginForm.tsx:268
-#: src/view/com/auth/login/LoginForm.tsx:271
+#: src/components/Error.tsx:79
+#: src/components/Lists.tsx:91
+#: src/screens/Login/LoginForm.tsx:234
+#: src/screens/Login/LoginForm.tsx:241
+#: src/screens/Onboarding/StepInterests/index.tsx:225
+#: src/screens/Onboarding/StepInterests/index.tsx:228
+#: src/screens/Signup/index.tsx:193
#: src/view/com/util/error/ErrorMessage.tsx:55
#: src/view/com/util/error/ErrorScreen.tsx:72
msgid "Retry"
msgstr "再試行"
#: src/view/com/auth/create/Step2.tsx:247
-msgid "Retry."
-msgstr "再試行"
+#~ msgid "Retry."
+#~ msgstr "再試行"
-#: src/view/screens/ProfileList.tsx:898
+#: src/components/Error.tsx:86
+#: src/view/screens/ProfileList.tsx:917
msgid "Return to previous page"
msgstr "前のページに戻る"
+#: src/view/screens/NotFound.tsx:59
+msgid "Returns to home page"
+msgstr "ホームページに戻る"
+
+#: src/view/screens/NotFound.tsx:58
+#: src/view/screens/ProfileFeed.tsx:113
+msgid "Returns to previous page"
+msgstr "前のページに戻る"
+
#: src/view/shell/desktop/RightNav.tsx:55
-msgid "SANDBOX. Posts and accounts are not permanent."
-msgstr "サンドボックス。投稿とアカウントは永久的なものではありません。"
+#~ msgid "SANDBOX. Posts and accounts are not permanent."
+#~ msgstr "サンドボックス。投稿とアカウントは永久的なものではありません。"
-#: src/view/com/lightbox/Lightbox.tsx:132
-#: src/view/com/modals/CreateOrEditList.tsx:345
-msgctxt "action"
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/view/com/modals/ChangeHandle.tsx:174
+#: src/view/com/modals/CreateOrEditList.tsx:338
+#: src/view/com/modals/EditProfile.tsx:225
msgid "Save"
msgstr "保存"
-#: src/view/com/modals/BirthDateSettings.tsx:94
-#: src/view/com/modals/BirthDateSettings.tsx:97
-#: src/view/com/modals/ChangeHandle.tsx:173
-#: src/view/com/modals/CreateOrEditList.tsx:337
-#: src/view/com/modals/EditProfile.tsx:224
-#: src/view/screens/ProfileFeed.tsx:345
+#: src/view/com/lightbox/Lightbox.tsx:132
+#: src/view/com/modals/CreateOrEditList.tsx:346
+msgctxt "action"
msgid "Save"
msgstr "保存"
-#: src/view/com/modals/AltImage.tsx:130
+#: src/view/com/modals/AltImage.tsx:131
msgid "Save alt text"
msgstr "ALTテキストを保存"
-#: src/view/com/modals/EditProfile.tsx:232
+#: src/components/dialogs/BirthDateSettings.tsx:119
+msgid "Save birthday"
+msgstr "誕生日を保存"
+
+#: src/view/com/modals/EditProfile.tsx:233
msgid "Save Changes"
msgstr "変更を保存"
-#: src/view/com/modals/ChangeHandle.tsx:170
+#: src/view/com/modals/ChangeHandle.tsx:171
msgid "Save handle change"
msgstr "ハンドルの変更を保存"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:144
+#: src/view/com/modals/crop-image/CropImage.web.tsx:145
msgid "Save image crop"
msgstr "画像の切り抜きを保存"
+#: src/view/screens/ProfileFeed.tsx:336
+#: src/view/screens/ProfileFeed.tsx:342
+msgid "Save to my feeds"
+msgstr "マイフィードに保存"
+
#: src/view/screens/SavedFeeds.tsx:122
msgid "Saved Feeds"
msgstr "保存されたフィード"
-#: src/view/com/modals/EditProfile.tsx:225
+#: src/view/com/lightbox/Lightbox.tsx:81
+msgid "Saved to your camera roll."
+msgstr "カメラロールに保存しました。"
+
+#: src/view/screens/ProfileFeed.tsx:213
+msgid "Saved to your feeds"
+msgstr "フィードを保存しました"
+
+#: src/view/com/modals/EditProfile.tsx:226
msgid "Saves any changes to your profile"
msgstr "プロフィールに加えた変更を保存します"
-#: src/view/com/modals/ChangeHandle.tsx:171
+#: src/view/com/modals/ChangeHandle.tsx:172
msgid "Saves handle change to {handle}"
msgstr "{handle}へのハンドルの変更を保存"
+#: src/view/com/modals/crop-image/CropImage.web.tsx:146
+msgid "Saves image crop settings"
+msgstr "画像の切り抜き設定を保存"
+
#: src/screens/Onboarding/index.tsx:36
msgid "Science"
msgstr "科学"
-#: src/view/screens/ProfileList.tsx:854
+#: src/view/screens/ProfileList.tsx:873
msgid "Scroll to top"
msgstr "一番上までスクロール"
-#: src/Navigation.tsx:437
-#: src/view/com/auth/LoggedOut.tsx:122
+#: src/Navigation.tsx:459
+#: src/view/com/auth/LoggedOut.tsx:123
#: src/view/com/modals/ListAddRemoveUsers.tsx:75
#: src/view/com/util/forms/SearchInput.tsx:67
#: src/view/com/util/forms/SearchInput.tsx:79
-#: src/view/screens/Search/Search.tsx:418
-#: src/view/screens/Search/Search.tsx:645
-#: src/view/screens/Search/Search.tsx:663
-#: src/view/shell/bottom-bar/BottomBar.tsx:159
-#: src/view/shell/desktop/LeftNav.tsx:324
-#: src/view/shell/desktop/Search.tsx:214
-#: src/view/shell/desktop/Search.tsx:223
-#: src/view/shell/Drawer.tsx:362
-#: src/view/shell/Drawer.tsx:363
+#: src/view/screens/Search/Search.tsx:421
+#: src/view/screens/Search/Search.tsx:670
+#: src/view/screens/Search/Search.tsx:688
+#: src/view/shell/bottom-bar/BottomBar.tsx:169
+#: src/view/shell/desktop/LeftNav.tsx:328
+#: src/view/shell/desktop/Search.tsx:215
+#: src/view/shell/desktop/Search.tsx:224
+#: src/view/shell/Drawer.tsx:365
+#: src/view/shell/Drawer.tsx:366
msgid "Search"
msgstr "検索"
-#: src/view/screens/Search/Search.tsx:712
-#: src/view/shell/desktop/Search.tsx:255
+#: src/view/screens/Search/Search.tsx:737
+#: src/view/shell/desktop/Search.tsx:256
msgid "Search for \"{query}\""
msgstr "「{query}」を検索"
+#: src/components/TagMenu/index.tsx:145
+msgid "Search for all posts by @{authorHandle} with tag {displayTag}"
+msgstr "{displayTag}のすべての投稿を検索(@{authorHandle}のみ)"
+
+#: src/components/TagMenu/index.tsx:145
+#~ msgid "Search for all posts by @{authorHandle} with tag {tag}"
+#~ msgstr "{tag}のすべての投稿を検索(@{authorHandle}のみ)"
+
+#: src/components/TagMenu/index.tsx:94
+msgid "Search for all posts with tag {displayTag}"
+msgstr "{displayTag}のすべての投稿を検索(すべてのユーザー)"
+
+#: src/components/TagMenu/index.tsx:90
+#~ msgid "Search for all posts with tag {tag}"
+#~ msgstr "{tag}のすべての投稿を検索(すべてのユーザー)"
+
#: src/view/screens/Search/Search.tsx:390
#~ msgid "Search for posts and users."
#~ msgstr "投稿とユーザーを検索します。"
-#: src/view/com/auth/LoggedOut.tsx:104
#: src/view/com/auth/LoggedOut.tsx:105
+#: src/view/com/auth/LoggedOut.tsx:106
#: src/view/com/modals/ListAddRemoveUsers.tsx:70
msgid "Search for users"
msgstr "ユーザーを検索"
@@ -3394,11 +4302,35 @@ msgstr "ユーザーを検索"
msgid "Security Step Required"
msgstr "必要なセキュリティの手順"
+#: src/components/TagMenu/index.web.tsx:66
+msgid "See {truncatedTag} posts"
+msgstr "{truncatedTag}の投稿を表示(すべてのユーザー)"
+
+#: src/components/TagMenu/index.web.tsx:83
+msgid "See {truncatedTag} posts by user"
+msgstr "{truncatedTag}の投稿を表示(このユーザーのみ)"
+
+#: src/components/TagMenu/index.tsx:128
+msgid "See <0>{displayTag}0> posts"
+msgstr "<0>{displayTag}0>の投稿を表示(すべてのユーザー)"
+
+#: src/components/TagMenu/index.tsx:187
+msgid "See <0>{displayTag}0> posts by this user"
+msgstr "<0>{displayTag}0>の投稿を表示(このユーザーのみ)"
+
+#: src/components/TagMenu/index.tsx:128
+#~ msgid "See <0>{tag}0> posts"
+#~ msgstr "<0>{tag}0>の投稿を表示(すべてのユーザー)"
+
+#: src/components/TagMenu/index.tsx:189
+#~ msgid "See <0>{tag}0> posts by this user"
+#~ msgstr "<0>{tag}0>の投稿を表示(このユーザーのみ)"
+
#: src/view/screens/SavedFeeds.tsx:163
msgid "See this guide"
msgstr "ガイドを見る"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:39
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:40
msgid "See what's next"
msgstr "次を見る"
@@ -3406,27 +4338,43 @@ msgstr "次を見る"
msgid "Select {item}"
msgstr "{item}を選択"
+#: src/screens/Login/ChooseAccountForm.tsx:61
+msgid "Select account"
+msgstr ""
+
#: src/view/com/modals/ServerInput.tsx:75
#~ msgid "Select Bluesky Social"
#~ msgstr "Bluesky Socialを選択"
-#: src/view/com/auth/login/Login.tsx:117
+#: src/screens/Login/index.tsx:120
msgid "Select from an existing account"
msgstr "既存のアカウントから選択"
+#: src/view/screens/LanguageSettings.tsx:299
+msgid "Select languages"
+msgstr "言語を選択"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:30
+msgid "Select moderator"
+msgstr "モデレーターを選択"
+
#: src/view/com/util/Selector.tsx:107
msgid "Select option {i} of {numItems}"
msgstr "{numItems}個中{i}個目のオプションを選択"
-#: src/view/com/auth/create/Step1.tsx:99
-#: src/view/com/auth/login/LoginForm.tsx:150
-msgid "Select service"
-msgstr "サービスを選択"
+#: src/view/com/auth/create/Step1.tsx:96
+#: src/view/com/auth/login/LoginForm.tsx:153
+#~ msgid "Select service"
+#~ msgstr "サービスを選択"
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:52
msgid "Select some accounts below to follow"
msgstr "次のアカウントを選択してフォローしてください"
+#: src/components/ReportDialog/SubmitView.tsx:135
+msgid "Select the moderation service(s) to report to"
+msgstr "報告先のモデレーションサービスを選んでください"
+
#: src/view/com/auth/server-input/index.tsx:82
msgid "Select the service that hosts your data."
msgstr "データをホストするサービスを選択します。"
@@ -3435,11 +4383,11 @@ msgstr "データをホストするサービスを選択します。"
#~ msgid "Select the types of content that you want to see (or not see), and we'll handle the rest."
#~ msgstr "表示したい(または表示したくない)コンテンツの種類を選択してください。あとは私たちにお任せください。"
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:90
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:100
msgid "Select topical feeds to follow from the list below"
msgstr "次のリストから話題のフィードを選択してフォローしてください"
-#: src/screens/Onboarding/StepModeration/index.tsx:75
+#: src/screens/Onboarding/StepModeration/index.tsx:63
msgid "Select what you want to see (or not see), and we’ll handle the rest."
msgstr "見たい(または見たくない)ものを選択してください。あとは私たちにお任せください。"
@@ -3448,39 +4396,47 @@ msgid "Select which languages you want your subscribed feeds to include. If none
msgstr "登録されたフィードに含める言語を選択します。選択されていない場合は、すべての言語が表示されます。"
#: src/view/screens/LanguageSettings.tsx:98
-msgid "Select your app language for the default text to display in the app"
+#~ msgid "Select your app language for the default text to display in the app"
+#~ msgstr "アプリに表示されるデフォルトのテキストの言語を選択"
+
+#: src/view/screens/LanguageSettings.tsx:98
+msgid "Select your app language for the default text to display in the app."
msgstr "アプリに表示されるデフォルトのテキストの言語を選択"
-#: src/screens/Onboarding/StepInterests/index.tsx:196
+#: src/screens/Signup/StepInfo/index.tsx:133
+msgid "Select your date of birth"
+msgstr ""
+
+#: src/screens/Onboarding/StepInterests/index.tsx:200
msgid "Select your interests from the options below"
msgstr "次のオプションから興味のあるものを選択してください"
#: src/view/com/auth/create/Step2.tsx:155
-msgid "Select your phone's country"
-msgstr "電話番号が登録されている国を選択"
+#~ msgid "Select your phone's country"
+#~ msgstr "電話番号が登録されている国を選択"
#: src/view/screens/LanguageSettings.tsx:190
msgid "Select your preferred language for translations in your feed."
msgstr "フィード内の翻訳に使用する言語を選択します。"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:116
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:117
msgid "Select your primary algorithmic feeds"
-msgstr "1番目のフィードのアルゴリズムを選択してください"
+msgstr "1番目のフィードのアルゴリズムを選択してください"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:142
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:133
msgid "Select your secondary algorithmic feeds"
-msgstr "2番目のフィードのアルゴリズムを選択してください"
+msgstr "2番目のフィードのアルゴリズムを選択してください"
#: src/view/com/modals/VerifyEmail.tsx:202
#: src/view/com/modals/VerifyEmail.tsx:204
msgid "Send Confirmation Email"
msgstr "確認のメールを送信"
-#: src/view/com/modals/DeleteAccount.tsx:131
+#: src/view/com/modals/DeleteAccount.tsx:130
msgid "Send email"
msgstr "メールを送信"
-#: src/view/com/modals/DeleteAccount.tsx:144
+#: src/view/com/modals/DeleteAccount.tsx:143
msgctxt "action"
msgid "Send Email"
msgstr "メールを送信"
@@ -3489,70 +4445,83 @@ msgstr "メールを送信"
#~ msgid "Send Email"
#~ msgstr "メールを送信"
-#: src/view/shell/Drawer.tsx:295
-#: src/view/shell/Drawer.tsx:316
+#: src/view/shell/Drawer.tsx:298
+#: src/view/shell/Drawer.tsx:319
msgid "Send feedback"
msgstr "フィードバックを送信"
-#: src/view/com/modals/report/SendReportButton.tsx:45
-msgid "Send Report"
+#: src/components/ReportDialog/SubmitView.tsx:214
+#: src/components/ReportDialog/SubmitView.tsx:218
+msgid "Send report"
msgstr "報告を送信"
-#: src/view/com/modals/DeleteAccount.tsx:133
+#: src/view/com/modals/report/SendReportButton.tsx:45
+#~ msgid "Send Report"
+#~ msgstr "報告を送信"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:44
+msgid "Send report to {0}"
+msgstr "{0}に報告を送信"
+
+#: src/view/com/modals/DeleteAccount.tsx:132
msgid "Sends email with confirmation code for account deletion"
msgstr "アカウントの削除の確認コードをメールに送信"
-#: src/view/com/auth/server-input/index.tsx:110
+#: src/view/com/auth/server-input/index.tsx:114
msgid "Server address"
-msgstr ""
+msgstr "サーバーアドレス"
#: src/view/com/modals/ContentFilteringSettings.tsx:311
-msgid "Set {value} for {labelGroup} content moderation policy"
-msgstr "{labelGroup}コンテンツのモデレーションポリシーを{value}に設定します"
+#~ msgid "Set {value} for {labelGroup} content moderation policy"
+#~ msgstr "{labelGroup}コンテンツのモデレーションポリシーを{value}に設定します"
#: src/view/com/modals/ContentFilteringSettings.tsx:160
#: src/view/com/modals/ContentFilteringSettings.tsx:179
-msgctxt "action"
-msgid "Set Age"
-msgstr "年齢を設定"
+#~ msgctxt "action"
+#~ msgid "Set Age"
+#~ msgstr "年齢を設定"
+
+#: src/screens/Moderation/index.tsx:304
+msgid "Set birthdate"
+msgstr "生年月日を設定"
#: src/view/screens/Settings/index.tsx:488
-msgid "Set color theme to dark"
-msgstr "カラーテーマを暗いものに設定します"
+#~ msgid "Set color theme to dark"
+#~ msgstr "カラーテーマをダークに設定します"
#: src/view/screens/Settings/index.tsx:481
-msgid "Set color theme to light"
-msgstr "カラーテーマをライトに設定します"
+#~ msgid "Set color theme to light"
+#~ msgstr "カラーテーマをライトに設定します"
#: src/view/screens/Settings/index.tsx:475
-msgid "Set color theme to system setting"
-msgstr "デバイスで設定したカラーテーマを使用するように設定します"
+#~ msgid "Set color theme to system setting"
+#~ msgstr "デバイスで設定したカラーテーマを使用するように設定します"
#: src/view/screens/Settings/index.tsx:514
-msgid "Set dark theme to the dark theme"
-msgstr "ダークテーマをダークに設定します"
+#~ msgid "Set dark theme to the dark theme"
+#~ msgstr "ダークテーマを暗いものに設定します"
#: src/view/screens/Settings/index.tsx:507
-msgid "Set dark theme to the dim theme"
-msgstr "ダークテーマを薄暗いものに設定します"
+#~ msgid "Set dark theme to the dim theme"
+#~ msgstr "ダークテーマを薄暗いものに設定します"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:104
+#: src/screens/Login/SetNewPasswordForm.tsx:102
msgid "Set new password"
msgstr "新しいパスワードを設定"
-#: src/view/com/auth/create/Step1.tsx:221
-msgid "Set password"
-msgstr "パスワードを設定"
+#: src/view/com/auth/create/Step1.tsx:202
+#~ msgid "Set password"
+#~ msgstr "パスワードを設定"
-#: src/view/screens/PreferencesHomeFeed.tsx:225
+#: src/view/screens/PreferencesFollowingFeed.tsx:225
msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible."
msgstr "フィード内の引用をすべて非表示にするには、この設定を「いいえ」にします。リポストは引き続き表示されます。"
-#: src/view/screens/PreferencesHomeFeed.tsx:122
+#: src/view/screens/PreferencesFollowingFeed.tsx:122
msgid "Set this setting to \"No\" to hide all replies from your feed."
msgstr "フィード内の返信をすべて非表示にするには、この設定を「いいえ」にします。"
-#: src/view/screens/PreferencesHomeFeed.tsx:191
+#: src/view/screens/PreferencesFollowingFeed.tsx:191
msgid "Set this setting to \"No\" to hide all reposts from your feed."
msgstr "フィード内のリポストをすべて非表示にするには、この設定を「いいえ」にします。"
@@ -3561,39 +4530,75 @@ msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is a
msgstr "スレッド表示で返信を表示するには、この設定を「はい」にします。これは実験的な機能です。"
#: src/view/screens/PreferencesHomeFeed.tsx:261
-msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
+#~ msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
+#~ msgstr "保存されたフィードから投稿を抽出してFollowingフィードに表示するには、この設定を「はい」にします。これは実験的な機能です。"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:261
+msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your Following feed. This is an experimental feature."
msgstr "保存されたフィードから投稿を抽出してFollowingフィードに表示するには、この設定を「はい」にします。これは実験的な機能です。"
-#: src/screens/Onboarding/Layout.tsx:50
+#: src/screens/Onboarding/Layout.tsx:48
msgid "Set up your account"
msgstr "アカウントを設定する"
-#: src/view/com/modals/ChangeHandle.tsx:266
+#: src/view/com/modals/ChangeHandle.tsx:267
msgid "Sets Bluesky username"
msgstr "Blueskyのユーザーネームを設定"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:157
+#: src/view/screens/Settings/index.tsx:507
+msgid "Sets color theme to dark"
+msgstr "カラーテーマをダークに設定します"
+
+#: src/view/screens/Settings/index.tsx:500
+msgid "Sets color theme to light"
+msgstr "カラーテーマをライトに設定します"
+
+#: src/view/screens/Settings/index.tsx:494
+msgid "Sets color theme to system setting"
+msgstr "デバイスで設定したカラーテーマを使用するように設定します"
+
+#: src/view/screens/Settings/index.tsx:533
+msgid "Sets dark theme to the dark theme"
+msgstr "ダークテーマを暗いものに設定します"
+
+#: src/view/screens/Settings/index.tsx:526
+msgid "Sets dark theme to the dim theme"
+msgstr "ダークテーマを薄暗いものに設定します"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:113
msgid "Sets email for password reset"
msgstr "パスワードをリセットするためのメールアドレスを入力"
#: src/view/com/auth/login/ForgotPasswordForm.tsx:122
-msgid "Sets hosting provider for password reset"
-msgstr "パスワードをリセットするためのホスティングプロバイダーを入力"
+#~ msgid "Sets hosting provider for password reset"
+#~ msgstr "パスワードをリセットするためのホスティングプロバイダーを入力"
#: src/view/com/auth/create/Step1.tsx:143
#~ msgid "Sets hosting provider to {label}"
#~ msgstr "ホスティングプロバイダーを{label}に設定"
-#: src/view/com/auth/create/Step1.tsx:100
-#: src/view/com/auth/login/LoginForm.tsx:151
-msgid "Sets server for the Bluesky client"
-msgstr "Blueskyのクライアントのサーバーを設定"
+#: src/view/com/modals/crop-image/CropImage.web.tsx:124
+msgid "Sets image aspect ratio to square"
+msgstr "画像のアスペクト比を正方形に設定"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:114
+msgid "Sets image aspect ratio to tall"
+msgstr "画像のアスペクト比を縦長に設定"
-#: src/Navigation.tsx:135
-#: src/view/screens/Settings/index.tsx:294
-#: src/view/shell/desktop/LeftNav.tsx:433
-#: src/view/shell/Drawer.tsx:567
-#: src/view/shell/Drawer.tsx:568
+#: src/view/com/modals/crop-image/CropImage.web.tsx:104
+msgid "Sets image aspect ratio to wide"
+msgstr "画像のアスペクト比をワイドに設定"
+
+#: src/view/com/auth/create/Step1.tsx:97
+#: src/view/com/auth/login/LoginForm.tsx:154
+#~ msgid "Sets server for the Bluesky client"
+#~ msgstr "Blueskyのクライアントのサーバーを設定"
+
+#: src/Navigation.tsx:139
+#: src/view/screens/Settings/index.tsx:313
+#: src/view/shell/desktop/LeftNav.tsx:437
+#: src/view/shell/Drawer.tsx:570
+#: src/view/shell/Drawer.tsx:571
msgid "Settings"
msgstr "設定"
@@ -3601,72 +4606,105 @@ msgstr "設定"
msgid "Sexual activity or erotic nudity."
msgstr "性的行為または性的なヌード。"
+#: src/lib/moderation/useGlobalLabelStrings.ts:38
+msgid "Sexually Suggestive"
+msgstr "性的にきわどい"
+
#: src/view/com/lightbox/Lightbox.tsx:141
msgctxt "action"
msgid "Share"
msgstr "共有"
-#: src/view/com/profile/ProfileHeader.tsx:294
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
-#: src/view/screens/ProfileList.tsx:417
+#: src/view/com/profile/ProfileMenu.tsx:215
+#: src/view/com/profile/ProfileMenu.tsx:224
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:235
+#: src/view/screens/ProfileList.tsx:388
msgid "Share"
msgstr "共有"
-#: src/view/screens/ProfileFeed.tsx:304
+#: src/view/com/profile/ProfileMenu.tsx:373
+#: src/view/com/util/forms/PostDropdownBtn.tsx:347
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:251
+msgid "Share anyway"
+msgstr "とにかく共有"
+
+#: src/view/screens/ProfileFeed.tsx:362
+#: src/view/screens/ProfileFeed.tsx:364
msgid "Share feed"
msgstr "フィードを共有"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:43
-#: src/view/com/modals/ContentFilteringSettings.tsx:266
-#: src/view/com/util/moderation/ContentHider.tsx:107
-#: src/view/com/util/moderation/PostHider.tsx:108
-#: src/view/screens/Settings/index.tsx:344
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
+msgid "Share Link"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:92
+msgid "Shares the linked website"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:136
+#: src/components/moderation/PostHider.tsx:107
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:54
+#: src/view/screens/Settings/index.tsx:363
msgid "Show"
msgstr "表示"
-#: src/view/screens/PreferencesHomeFeed.tsx:68
+#: src/view/screens/PreferencesFollowingFeed.tsx:68
msgid "Show all replies"
msgstr "すべての返信を表示"
-#: src/view/com/util/moderation/ScreenHider.tsx:132
+#: src/components/moderation/ScreenHider.tsx:169
+#: src/components/moderation/ScreenHider.tsx:172
msgid "Show anyway"
msgstr "とにかく表示"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:27
+#: src/lib/moderation/useLabelBehaviorDescription.ts:63
+msgid "Show badge"
+msgstr "バッジを表示"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:61
+msgid "Show badge and filter from feeds"
+msgstr "バッジの表示とフィードからのフィルタリング"
+
#: src/view/com/modals/EmbedConsent.tsx:87
-msgid "Show embeds from {0}"
-msgstr "{0}による埋め込みを表示"
+#~ msgid "Show embeds from {0}"
+#~ msgstr "{0}による埋め込みを表示"
-#: src/view/com/profile/ProfileHeader.tsx:458
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:200
msgid "Show follows similar to {0}"
msgstr "{0}に似たおすすめのフォロー候補を表示"
-#: src/view/com/post-thread/PostThreadItem.tsx:539
-#: src/view/com/post/Post.tsx:197
-#: src/view/com/posts/FeedItem.tsx:363
+#: src/view/com/post-thread/PostThreadItem.tsx:507
+#: src/view/com/post/Post.tsx:201
+#: src/view/com/posts/FeedItem.tsx:355
msgid "Show More"
msgstr "さらに表示"
-#: src/view/screens/PreferencesHomeFeed.tsx:258
+#: src/view/screens/PreferencesFollowingFeed.tsx:258
msgid "Show Posts from My Feeds"
msgstr "マイフィードからの投稿を表示"
-#: src/view/screens/PreferencesHomeFeed.tsx:222
+#: src/view/screens/PreferencesFollowingFeed.tsx:222
msgid "Show Quote Posts"
msgstr "引用を表示"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:118
+#: src/screens/Onboarding/StepFollowingFeed.tsx:119
msgid "Show quote-posts in Following feed"
msgstr "Followingフィードで引用を表示"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:134
+#: src/screens/Onboarding/StepFollowingFeed.tsx:135
msgid "Show quotes in Following"
msgstr "Followingフィードで引用を表示"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:94
+#: src/screens/Onboarding/StepFollowingFeed.tsx:95
msgid "Show re-posts in Following feed"
msgstr "Followingフィードでリポストを表示"
-#: src/view/screens/PreferencesHomeFeed.tsx:119
+#: src/view/screens/PreferencesFollowingFeed.tsx:119
msgid "Show Replies"
msgstr "返信を表示"
@@ -3674,87 +4712,98 @@ msgstr "返信を表示"
msgid "Show replies by people you follow before all other replies."
msgstr "自分がフォローしているユーザーからの返信を、他のすべての返信の前に表示します。"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:86
+#: src/screens/Onboarding/StepFollowingFeed.tsx:87
msgid "Show replies in Following"
msgstr "Followingフィードで返信を表示"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:70
+#: src/screens/Onboarding/StepFollowingFeed.tsx:71
msgid "Show replies in Following feed"
msgstr "Followingフィードで返信を表示"
-#: src/view/screens/PreferencesHomeFeed.tsx:70
+#: src/view/screens/PreferencesFollowingFeed.tsx:70
msgid "Show replies with at least {value} {0}"
msgstr "{value}個以上の{0}がついた返信を表示"
-#: src/view/screens/PreferencesHomeFeed.tsx:188
+#: src/view/screens/PreferencesFollowingFeed.tsx:188
msgid "Show Reposts"
msgstr "リポストを表示"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:110
+#: src/screens/Onboarding/StepFollowingFeed.tsx:111
msgid "Show reposts in Following"
msgstr "Followingフィードでリポストを表示"
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:68
+#: src/components/moderation/PostHider.tsx:64
msgid "Show the content"
msgstr "コンテンツを表示"
-#: src/view/com/notifications/FeedItem.tsx:346
+#: src/view/com/notifications/FeedItem.tsx:351
msgid "Show users"
msgstr "ユーザーを表示"
-#: src/view/com/profile/ProfileHeader.tsx:461
-msgid "Shows a list of users similar to this user."
-msgstr "このユーザーに似たユーザーのリストを表示します。"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:58
+msgid "Show warning"
+msgstr "警告を表示"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:56
+msgid "Show warning and filter from feeds"
+msgstr "警告の表示とフィードからのフィルタリング"
+
+#: src/view/com/profile/ProfileHeader.tsx:462
+#~ msgid "Shows a list of users similar to this user."
+#~ msgstr "このユーザーに似たユーザーのリストを表示します。"
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:124
-#: src/view/com/profile/ProfileHeader.tsx:505
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:130
msgid "Shows posts from {0} in your feed"
msgstr "マイフィード内の{0}からの投稿を表示します"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:70
-#: src/view/com/auth/login/Login.tsx:98
-#: src/view/com/auth/SplashScreen.tsx:54
-#: src/view/shell/bottom-bar/BottomBar.tsx:285
-#: src/view/shell/bottom-bar/BottomBar.tsx:286
-#: src/view/shell/bottom-bar/BottomBar.tsx:288
+#: src/screens/Login/index.tsx:100
+#: src/screens/Login/index.tsx:119
+#: src/screens/Login/LoginForm.tsx:131
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:73
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:83
+#: src/view/com/auth/SplashScreen.tsx:81
+#: src/view/com/auth/SplashScreen.tsx:90
+#: src/view/com/auth/SplashScreen.web.tsx:110
+#: src/view/com/auth/SplashScreen.web.tsx:119
+#: src/view/shell/bottom-bar/BottomBar.tsx:300
+#: src/view/shell/bottom-bar/BottomBar.tsx:301
+#: src/view/shell/bottom-bar/BottomBar.tsx:303
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:178
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:179
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:181
#: src/view/shell/NavSignupCard.tsx:58
#: src/view/shell/NavSignupCard.tsx:59
+#: src/view/shell/NavSignupCard.tsx:61
msgid "Sign in"
msgstr "サインイン"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:78
-#: src/view/com/auth/SplashScreen.tsx:57
-#: src/view/com/auth/SplashScreen.web.tsx:87
-msgid "Sign In"
-msgstr "サインイン"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:82
+#: src/view/com/auth/SplashScreen.tsx:86
+#: src/view/com/auth/SplashScreen.web.tsx:91
+#~ msgid "Sign In"
+#~ msgstr "サインイン"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:44
+#: src/components/AccountList.tsx:109
msgid "Sign in as {0}"
msgstr "{0}としてサインイン"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:118
-#: src/view/com/auth/login/Login.tsx:116
+#: src/screens/Login/ChooseAccountForm.tsx:64
msgid "Sign in as..."
msgstr "アカウントの選択"
-#: src/view/com/auth/login/LoginForm.tsx:137
-msgid "Sign into"
-msgstr "サインイン"
+#: src/view/com/auth/login/LoginForm.tsx:140
+#~ msgid "Sign into"
+#~ msgstr "サインイン"
-#: src/view/com/modals/SwitchAccount.tsx:64
-#: src/view/com/modals/SwitchAccount.tsx:69
-#: src/view/screens/Settings/index.tsx:100
-#: src/view/screens/Settings/index.tsx:103
+#: src/view/screens/Settings/index.tsx:107
+#: src/view/screens/Settings/index.tsx:110
msgid "Sign out"
msgstr "サインアウト"
-#: src/view/shell/bottom-bar/BottomBar.tsx:275
-#: src/view/shell/bottom-bar/BottomBar.tsx:276
-#: src/view/shell/bottom-bar/BottomBar.tsx:278
+#: src/view/shell/bottom-bar/BottomBar.tsx:290
+#: src/view/shell/bottom-bar/BottomBar.tsx:291
+#: src/view/shell/bottom-bar/BottomBar.tsx:293
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:168
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:169
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:171
@@ -3768,35 +4817,36 @@ msgstr "サインアップ"
msgid "Sign up or sign in to join the conversation"
msgstr "サインアップまたはサインインして会話に参加"
-#: src/view/com/util/moderation/ScreenHider.tsx:76
+#: src/components/moderation/ScreenHider.tsx:97
+#: src/lib/moderation/useGlobalLabelStrings.ts:28
msgid "Sign-in Required"
msgstr "サインインが必要"
-#: src/view/screens/Settings/index.tsx:355
+#: src/view/screens/Settings/index.tsx:374
msgid "Signed in as"
msgstr "サインイン済み"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:103
+#: src/screens/Login/ChooseAccountForm.tsx:48
msgid "Signed in as @{0}"
msgstr "@{0}でサインイン"
-#: src/view/com/modals/SwitchAccount.tsx:66
-msgid "Signs {0} out of Bluesky"
-msgstr "Blueskyから{0}をサインアウト"
+#: src/view/com/modals/SwitchAccount.tsx:70
+#~ msgid "Signs {0} out of Bluesky"
+#~ msgstr "Blueskyから{0}をサインアウト"
-#: src/screens/Onboarding/StepInterests/index.tsx:235
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:195
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:33
+#: src/screens/Onboarding/StepInterests/index.tsx:239
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:203
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:35
msgid "Skip"
msgstr "スキップ"
-#: src/screens/Onboarding/StepInterests/index.tsx:232
+#: src/screens/Onboarding/StepInterests/index.tsx:236
msgid "Skip this flow"
msgstr "この手順をスキップする"
#: src/view/com/auth/create/Step2.tsx:82
-msgid "SMS verification"
-msgstr "SMS認証"
+#~ msgid "SMS verification"
+#~ msgstr "SMS認証"
#: src/screens/Onboarding/index.tsx:40
msgid "Software Dev"
@@ -3804,15 +4854,25 @@ msgstr "ソフトウェア開発"
#: src/view/com/modals/ProfilePreview.tsx:62
#~ msgid "Something went wrong and we're not sure what."
-#~ msgstr "何かの問題が起きましたが、それが何なのかわかりません。"
+#~ msgstr "何かの問題が起きましたが、それがなんなのかわかりません。"
+
+#: src/components/ReportDialog/index.tsx:59
+#: src/screens/Moderation/index.tsx:114
+#: src/screens/Profile/Sections/Labels.tsx:76
+msgid "Something went wrong, please try again."
+msgstr "なにか間違っているようなので、もう一度お試しください。"
+
+#: src/components/Lists.tsx:203
+#~ msgid "Something went wrong!"
+#~ msgstr "なにかが間違っているようです!"
#: src/view/com/modals/Waitlist.tsx:51
-msgid "Something went wrong. Check your email and try again."
-msgstr "なんらかの問題が発生しました。メールアドレスを確認し、もう一度お試しください。"
+#~ msgid "Something went wrong. Check your email and try again."
+#~ msgstr "なんらかの問題が発生しました。メールアドレスを確認し、もう一度お試しください。"
-#: src/App.native.tsx:61
+#: src/App.native.tsx:66
msgid "Sorry! Your session expired. Please log in again."
-msgstr "申し訳ありません!セッションの有効期限が切れました。もう一度ログインしてください。"
+msgstr "大変申し訳ありません!セッションの有効期限が切れました。もう一度ログインしてください。"
#: src/view/screens/PreferencesThreads.tsx:69
msgid "Sort Replies"
@@ -3822,11 +4882,23 @@ msgstr "返信を並び替える"
msgid "Sort replies to the same post by:"
msgstr "次の方法で同じ投稿への返信を並び替えます。"
+#: src/components/moderation/LabelsOnMeDialog.tsx:146
+msgid "Source:"
+msgstr "ソース:"
+
+#: src/lib/moderation/useReportOptions.ts:65
+msgid "Spam"
+msgstr "スパム"
+
+#: src/lib/moderation/useReportOptions.ts:53
+msgid "Spam; excessive mentions or replies"
+msgstr "スパム、過剰なメンションや返信"
+
#: src/screens/Onboarding/index.tsx:30
msgid "Sports"
msgstr "スポーツ"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:122
+#: src/view/com/modals/crop-image/CropImage.web.tsx:123
msgid "Square"
msgstr "正方形"
@@ -3834,41 +4906,58 @@ msgstr "正方形"
#~ msgid "Staging"
#~ msgstr "ステージング"
-#: src/view/screens/Settings/index.tsx:871
+#: src/view/screens/Settings/index.tsx:903
msgid "Status page"
msgstr "ステータスページ"
+#: src/screens/Signup/index.tsx:142
+msgid "Step"
+msgstr ""
+
#: src/view/com/auth/create/StepHeader.tsx:22
-msgid "Step {0} of {numSteps}"
-msgstr "{numSteps}個中{0}個目のステップ"
+#~ msgid "Step {0} of {numSteps}"
+#~ msgstr "{numSteps}個中{0}個目のステップ"
#: src/view/com/auth/create/StepHeader.tsx:15
#~ msgid "Step {step} of 3"
#~ msgstr "3個中{step}個目のステップ"
-#: src/view/screens/Settings/index.tsx:274
+#: src/view/screens/Settings/index.tsx:292
msgid "Storage cleared, you need to restart the app now."
msgstr "ストレージがクリアされたため、今すぐアプリを再起動する必要があります。"
-#: src/Navigation.tsx:202
-#: src/view/screens/Settings/index.tsx:807
+#: src/Navigation.tsx:211
+#: src/view/screens/Settings/index.tsx:831
msgid "Storybook"
msgstr "ストーリーブック"
-#: src/view/com/modals/AppealLabel.tsx:101
+#: src/components/moderation/LabelsOnMeDialog.tsx:255
+#: src/components/moderation/LabelsOnMeDialog.tsx:256
msgid "Submit"
msgstr "送信"
-#: src/view/screens/ProfileList.tsx:607
+#: src/view/screens/ProfileList.tsx:590
msgid "Subscribe"
msgstr "登録"
-#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:173
+#: src/screens/Profile/Sections/Labels.tsx:180
+msgid "Subscribe to @{0} to use these labels:"
+msgstr "これらのラベルを使用するには@{0}を登録してください:"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:221
+msgid "Subscribe to Labeler"
+msgstr "ラベラーを登録する"
+
+#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:172
#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:307
msgid "Subscribe to the {0} feed"
-msgstr "「{0}」フィードを登録"
+msgstr "{0} フィードを登録"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:184
+msgid "Subscribe to this labeler"
+msgstr "このラベラーを登録"
-#: src/view/screens/ProfileList.tsx:603
+#: src/view/screens/ProfileList.tsx:586
msgid "Subscribe to this list"
msgstr "このリストに登録"
@@ -3876,11 +4965,11 @@ msgstr "このリストに登録"
#~ msgid "Subscribed"
#~ msgstr "登録済み"
-#: src/view/screens/Search/Search.tsx:373
+#: src/view/screens/Search/Search.tsx:376
msgid "Suggested Follows"
msgstr "おすすめのフォロー"
-#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:64
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:65
msgid "Suggested for you"
msgstr "あなたへのおすすめ"
@@ -3888,7 +4977,7 @@ msgstr "あなたへのおすすめ"
msgid "Suggestive"
msgstr "きわどい"
-#: src/Navigation.tsx:212
+#: src/Navigation.tsx:226
#: src/view/screens/Support.tsx:30
#: src/view/screens/Support.tsx:33
msgid "Support"
@@ -3898,29 +4987,40 @@ msgstr "サポート"
#~ msgid "Swipe up to see more"
#~ msgstr "上にスワイプしてさらに表示"
-#: src/view/com/modals/SwitchAccount.tsx:117
+#: src/components/dialogs/SwitchAccount.tsx:46
+#: src/components/dialogs/SwitchAccount.tsx:49
msgid "Switch Account"
msgstr "アカウントを切り替える"
-#: src/view/com/modals/SwitchAccount.tsx:97
-#: src/view/screens/Settings/index.tsx:130
+#: src/view/screens/Settings/index.tsx:139
msgid "Switch to {0}"
msgstr "{0}に切り替え"
-#: src/view/com/modals/SwitchAccount.tsx:98
-#: src/view/screens/Settings/index.tsx:131
+#: src/view/screens/Settings/index.tsx:140
msgid "Switches the account you are logged in to"
msgstr "ログインしているアカウントを切り替えます"
-#: src/view/screens/Settings/index.tsx:472
+#: src/view/screens/Settings/index.tsx:491
msgid "System"
msgstr "システム"
-#: src/view/screens/Settings/index.tsx:795
+#: src/view/screens/Settings/index.tsx:819
msgid "System log"
msgstr "システムログ"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:112
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "tag"
+msgstr "タグ"
+
+#: src/components/TagMenu/index.tsx:78
+msgid "Tag menu: {displayTag}"
+msgstr "タグメニュー:{displayTag}"
+
+#: src/components/TagMenu/index.tsx:74
+#~ msgid "Tag menu: {tag}"
+#~ msgstr "タグメニュー:{tag}"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:113
msgid "Tall"
msgstr "トール"
@@ -3932,26 +5032,53 @@ msgstr "タップして全体を表示"
msgid "Tech"
msgstr "テクノロジー"
-#: src/view/shell/desktop/RightNav.tsx:89
+#: src/view/shell/desktop/RightNav.tsx:81
msgid "Terms"
msgstr "条件"
-#: src/Navigation.tsx:222
-#: src/view/screens/Settings/index.tsx:885
+#: src/Navigation.tsx:236
+#: src/screens/Signup/StepInfo/Policies.tsx:49
+#: src/view/screens/Settings/index.tsx:917
#: src/view/screens/TermsOfService.tsx:29
-#: src/view/shell/Drawer.tsx:256
+#: src/view/shell/Drawer.tsx:259
msgid "Terms of Service"
msgstr "利用規約"
-#: src/view/com/modals/AppealLabel.tsx:70
-#: src/view/com/modals/report/InputIssueDetails.tsx:51
+#: src/lib/moderation/useReportOptions.ts:58
+#: src/lib/moderation/useReportOptions.ts:79
+#: src/lib/moderation/useReportOptions.ts:87
+msgid "Terms used violate community standards"
+msgstr "使用されている用語がコミュニティ基準に違反している"
+
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "text"
+msgstr "テキスト"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:219
msgid "Text input field"
msgstr "テキストの入力フィールド"
-#: src/view/com/profile/ProfileHeader.tsx:262
+#: src/components/ReportDialog/SubmitView.tsx:78
+msgid "Thank you. Your report has been sent."
+msgstr "ありがとうございます。あなたの報告は送信されました。"
+
+#: src/view/com/modals/ChangeHandle.tsx:465
+msgid "That contains the following:"
+msgstr "その内容は以下の通りです:"
+
+#: src/screens/Signup/index.tsx:84
+msgid "That handle is already taken."
+msgstr "そのハンドルはすでに使用されています。"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:283
+#: src/view/com/profile/ProfileMenu.tsx:349
msgid "The account will be able to interact with you after unblocking."
msgstr "このアカウントは、ブロック解除後にあなたとやり取りすることができます。"
+#: src/components/moderation/ModerationDetailsDialog.tsx:127
+msgid "the author"
+msgstr "投稿者"
+
#: src/view/screens/CommunityGuidelines.tsx:36
msgid "The Community Guidelines have been moved to <0/>"
msgstr "コミュニティーガイドラインは<0/>に移動しました"
@@ -3960,11 +5087,20 @@ msgstr "コミュニティーガイドラインは<0/>に移動しました"
msgid "The Copyright Policy has been moved to <0/>"
msgstr "著作権ポリシーは<0/>に移動しました"
-#: src/screens/Onboarding/Layout.tsx:60
+#: src/components/moderation/LabelsOnMeDialog.tsx:48
+msgid "The following labels were applied to your account."
+msgstr "以下のラベルがあなたのアカウントに適用されました。"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:49
+msgid "The following labels were applied to your content."
+msgstr "以下のラベルがあなたのコンテンツに適用されました。"
+
+#: src/screens/Onboarding/Layout.tsx:58
msgid "The following steps will help customize your Bluesky experience."
msgstr "次の手順であなたのBlueskyでの体験をカスタマイズできます。"
-#: src/view/com/post-thread/PostThread.tsx:453
+#: src/view/com/post-thread/PostThread.tsx:153
+#: src/view/com/post-thread/PostThread.tsx:165
msgid "The post may have been deleted."
msgstr "投稿が削除された可能性があります。"
@@ -3974,34 +5110,35 @@ msgstr "プライバシーポリシーは<0/>に移動しました"
#: src/view/screens/Support.tsx:36
msgid "The support form has been moved. If you need help, please <0/> or visit {HELP_DESK_URL} to get in touch with us."
-msgstr "サポートフォームは移動しました。サポートが必要な場合は、<0/>、または{HELP_DESK_URL}にアクセスしてご連絡ください。"
+msgstr "サポートフォームは移動しました。サポートが必要な場合は、<0/>または{HELP_DESK_URL}にアクセスしてご連絡ください。"
#: src/view/screens/Support.tsx:36
#~ msgid "The support form has been moved. If you need help, please<0/> or visit {HELP_DESK_URL} to get in touch with us."
-#~ msgstr "サポートフォームは移動しました。サポートが必要な場合は、<0/>、または{HELP_DESK_URL}にアクセスしてご連絡ください。"
+#~ msgstr "サポートフォームは移動しました。サポートが必要な場合は、<0/>または{HELP_DESK_URL}にアクセスしてご連絡ください。"
#: src/view/screens/TermsOfService.tsx:33
msgid "The Terms of Service have been moved to"
msgstr "サービス規約は移動しました"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:150
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:141
msgid "There are many feeds to try:"
msgstr "試せるフィードはたくさんあります:"
-#: src/view/screens/ProfileFeed.tsx:549
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:112
+#: src/view/screens/ProfileFeed.tsx:544
msgid "There was an an issue contacting the server, please check your internet connection and try again."
msgstr "サーバーへの問い合わせ中に問題が発生しました。インターネットへの接続を確認の上、もう一度お試しください。"
-#: src/view/com/posts/FeedErrorMessage.tsx:139
+#: src/view/com/posts/FeedErrorMessage.tsx:138
msgid "There was an an issue removing this feed. Please check your internet connection and try again."
msgstr "フィードの削除中に問題が発生しました。インターネットへの接続を確認の上、もう一度お試しください。"
-#: src/view/screens/ProfileFeed.tsx:209
+#: src/view/screens/ProfileFeed.tsx:218
msgid "There was an an issue updating your feeds, please check your internet connection and try again."
msgstr "フィードの更新中に問題が発生しました。インターネットへの接続を確認の上、もう一度お試しください。"
-#: src/view/screens/ProfileFeed.tsx:236
-#: src/view/screens/ProfileList.tsx:266
+#: src/view/screens/ProfileFeed.tsx:245
+#: src/view/screens/ProfileList.tsx:275
#: src/view/screens/SavedFeeds.tsx:209
#: src/view/screens/SavedFeeds.tsx:231
#: src/view/screens/SavedFeeds.tsx:252
@@ -4010,9 +5147,8 @@ msgstr "サーバーへの問い合わせ中に問題が発生しました"
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:57
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:66
-#: src/view/com/feeds/FeedSourceCard.tsx:113
-#: src/view/com/feeds/FeedSourceCard.tsx:127
-#: src/view/com/feeds/FeedSourceCard.tsx:181
+#: src/view/com/feeds/FeedSourceCard.tsx:110
+#: src/view/com/feeds/FeedSourceCard.tsx:123
msgid "There was an issue contacting your server"
msgstr "サーバーへの問い合わせ中に問題が発生しました"
@@ -4020,7 +5156,7 @@ msgstr "サーバーへの問い合わせ中に問題が発生しました"
msgid "There was an issue fetching notifications. Tap here to try again."
msgstr "通知の取得中に問題が発生しました。もう一度試すにはこちらをタップしてください。"
-#: src/view/com/posts/Feed.tsx:263
+#: src/view/com/posts/Feed.tsx:287
msgid "There was an issue fetching posts. Tap here to try again."
msgstr "投稿の取得中に問題が発生しました。もう一度試すにはこちらをタップしてください。"
@@ -4033,34 +5169,40 @@ msgstr "リストの取得中に問題が発生しました。もう一度試す
msgid "There was an issue fetching your lists. Tap here to try again."
msgstr "リストの取得中に問題が発生しました。もう一度試すにはこちらをタップしてください。"
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:63
-#: src/view/com/modals/ContentFilteringSettings.tsx:126
+#: src/components/ReportDialog/SubmitView.tsx:83
+msgid "There was an issue sending your report. Please check your internet connection."
+msgstr "報告の送信に問題が発生しました。インターネットの接続を確認してください。"
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:65
msgid "There was an issue syncing your preferences with the server"
msgstr "設定をサーバーと同期中に問題が発生しました"
-#: src/view/screens/AppPasswords.tsx:66
+#: src/view/screens/AppPasswords.tsx:68
msgid "There was an issue with fetching your app passwords"
msgstr "アプリパスワードの取得中に問題が発生しました"
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:93
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:105
-#: src/view/com/profile/ProfileHeader.tsx:156
-#: src/view/com/profile/ProfileHeader.tsx:177
-#: src/view/com/profile/ProfileHeader.tsx:216
-#: src/view/com/profile/ProfileHeader.tsx:229
-#: src/view/com/profile/ProfileHeader.tsx:249
-#: src/view/com/profile/ProfileHeader.tsx:271
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:105
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:127
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:99
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:111
+#: src/view/com/profile/ProfileMenu.tsx:106
+#: src/view/com/profile/ProfileMenu.tsx:117
+#: src/view/com/profile/ProfileMenu.tsx:132
+#: src/view/com/profile/ProfileMenu.tsx:143
+#: src/view/com/profile/ProfileMenu.tsx:157
+#: src/view/com/profile/ProfileMenu.tsx:170
msgid "There was an issue! {0}"
-msgstr "問題が発生しました!{0}"
+msgstr "問題が発生しました! {0}"
-#: src/view/screens/ProfileList.tsx:287
-#: src/view/screens/ProfileList.tsx:306
-#: src/view/screens/ProfileList.tsx:328
-#: src/view/screens/ProfileList.tsx:347
+#: src/view/screens/ProfileList.tsx:288
+#: src/view/screens/ProfileList.tsx:302
+#: src/view/screens/ProfileList.tsx:316
+#: src/view/screens/ProfileList.tsx:330
msgid "There was an issue. Please check your internet connection and try again."
msgstr "問題が発生しました。インターネットへの接続を確認の上、もう一度お試しください。"
-#: src/view/com/util/ErrorBoundary.tsx:36
+#: src/view/com/util/ErrorBoundary.tsx:51
msgid "There was an unexpected issue in the application. Please let us know if this happened to you!"
msgstr "アプリケーションに予期しない問題が発生しました。このようなことが繰り返した場合はサポートへお知らせください!"
@@ -4069,10 +5211,10 @@ msgid "There's been a rush of new users to Bluesky! We'll activate your account
msgstr "Blueskyに新規ユーザーが殺到しています!できるだけ早くアカウントを有効にできるよう努めます。"
#: src/view/com/auth/create/Step2.tsx:55
-msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
-msgstr "この電話番号は正しくありません。登録されている国を選択し、電話番号を省略せずに入力してください!"
+#~ msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
+#~ msgstr "この電話番号は正しくありません。登録されている国を選択し、電話番号を省略せずに入力してください!"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:138
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:146
msgid "These are popular accounts you might like:"
msgstr "これらは、あなたが好きかもしれない人気のあるアカウントです。"
@@ -4084,19 +5226,32 @@ msgstr "これらは、あなたが好きかもしれない人気のあるアカ
#~ msgid "This {0} has been labeled."
#~ msgstr "この{0}にはラベルが貼られています"
-#: src/view/com/util/moderation/ScreenHider.tsx:88
+#: src/components/moderation/ScreenHider.tsx:116
msgid "This {screenDescription} has been flagged:"
msgstr "この{screenDescription}にはフラグが設定されています:"
-#: src/view/com/util/moderation/ScreenHider.tsx:83
+#: src/components/moderation/ScreenHider.tsx:111
msgid "This account has requested that users sign in to view their profile."
msgstr "このアカウントを閲覧するためにはサインインが必要です。"
-#: src/view/com/modals/EmbedConsent.tsx:68
+#: src/components/moderation/LabelsOnMeDialog.tsx:204
+msgid "This appeal will be sent to <0>{0}0>."
+msgstr "この申し立ては<0>{0}0>に送られます。"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:19
+msgid "This content has been hidden by the moderators."
+msgstr "このコンテンツはモデレーターによって非表示になっています。"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:24
+msgid "This content has received a general warning from moderators."
+msgstr "このコンテンツはモデレーターから一般的な警告を受けています。"
+
+#: src/components/dialogs/EmbedConsent.tsx:64
msgid "This content is hosted by {0}. Do you want to enable external media?"
msgstr "このコンテンツは{0}によってホストされています。外部メディアを有効にしますか?"
-#: src/view/com/modals/ModerationDetails.tsx:67
+#: src/components/moderation/ModerationDetailsDialog.tsx:77
+#: src/lib/moderation/useModerationCauseDescription.ts:77
msgid "This content is not available because one of the users involved has blocked the other."
msgstr "このコンテンツは関係するユーザーの一方が他方をブロックしているため、利用できません。"
@@ -4105,16 +5260,20 @@ msgid "This content is not viewable without a Bluesky account."
msgstr "このコンテンツはBlueskyのアカウントがないと閲覧できません。"
#: src/view/screens/Settings/ExportCarDialog.tsx:75
-msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
-msgstr "この機能はベータ版です。 リポジトリのエクスポートの詳細については、以下を参照してください。<0>このブログ投稿0>"
+#~ msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
+#~ msgstr "この機能はベータ版です。リポジトリのエクスポートの詳細については、<0>このブログ投稿0>を参照してください。"
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:75
+msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost0>."
+msgstr "この機能はベータ版です。リポジトリのエクスポートの詳細については、<0>このブログ投稿0>を参照してください。"
#: src/view/com/posts/FeedErrorMessage.tsx:114
msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later."
msgstr "現在このフィードにはアクセスが集中しており、一時的にご利用いただけません。時間をおいてもう一度お試しください。"
-#: src/view/screens/Profile.tsx:420
-#: src/view/screens/ProfileFeed.tsx:475
-#: src/view/screens/ProfileList.tsx:660
+#: src/screens/Profile/Sections/Feed.tsx:50
+#: src/view/screens/ProfileFeed.tsx:477
+#: src/view/screens/ProfileList.tsx:675
msgid "This feed is empty!"
msgstr "このフィードは空です!"
@@ -4122,7 +5281,7 @@ msgstr "このフィードは空です!"
msgid "This feed is empty! You may need to follow more users or tune your language settings."
msgstr "このフィードは空です!もっと多くのユーザーをフォローするか、言語の設定を調整する必要があるかもしれません。"
-#: src/view/com/modals/BirthDateSettings.tsx:61
+#: src/components/dialogs/BirthDateSettings.tsx:41
msgid "This information is not shared with other users."
msgstr "この情報は他のユーザーと共有されません。"
@@ -4134,48 +5293,110 @@ msgstr "これは、メールアドレスの変更やパスワードのリセッ
#~ msgid "This is the service that keeps you online."
#~ msgstr "これはオンラインを維持するためのサービスです。"
-#: src/view/com/modals/LinkWarning.tsx:58
+#: src/components/moderation/ModerationDetailsDialog.tsx:124
+msgid "This label was applied by {0}."
+msgstr "{0}によって適用されたラベルです。"
+
+#: src/screens/Profile/Sections/Labels.tsx:167
+msgid "This labeler hasn't declared what labels it publishes, and may not be active."
+msgstr "このラベラーはどのようなラベルを発行しているか宣言しておらず、活動していない可能性もあります。"
+
+#: src/view/com/modals/LinkWarning.tsx:72
msgid "This link is taking you to the following website:"
msgstr "このリンクは次のウェブサイトへリンクしています:"
-#: src/view/screens/ProfileList.tsx:834
+#: src/view/screens/ProfileList.tsx:853
msgid "This list is empty!"
msgstr "このリストは空です!"
-#: src/view/com/modals/AddAppPasswords.tsx:106
+#: src/screens/Profile/ErrorState.tsx:40
+msgid "This moderation service is unavailable. See below for more details. If this issue persists, contact us."
+msgstr "このモデレーションのサービスはご利用できません。詳細は以下をご覧ください。この問題が解決しない場合は、サポートへお問い合わせください。"
+
+#: src/view/com/modals/AddAppPasswords.tsx:107
msgid "This name is already in use"
msgstr "この名前はすでに使用中です"
-#: src/view/com/post-thread/PostThreadItem.tsx:122
+#: src/view/com/post-thread/PostThreadItem.tsx:125
msgid "This post has been deleted."
msgstr "この投稿は削除されました。"
-#: src/view/com/modals/ModerationDetails.tsx:62
+#: src/view/com/util/forms/PostDropdownBtn.tsx:344
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:248
+msgid "This post is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr "この投稿はログインしているユーザーにのみ表示されます。ログインしていない方には見えません。"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:326
+msgid "This post will be hidden from feeds."
+msgstr "この投稿はフィードから非表示になります。"
+
+#: src/view/com/profile/ProfileMenu.tsx:370
+msgid "This profile is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr "このプロフィールはログインしているユーザーにのみ表示されます。ログインしていない方には見えません。"
+
+#: src/screens/Signup/StepInfo/Policies.tsx:37
+msgid "This service has not provided terms of service or a privacy policy."
+msgstr "このサービスには、利用規約もプライバシーポリシーもありません。"
+
+#: src/view/com/modals/ChangeHandle.tsx:445
+msgid "This should create a domain record at:"
+msgstr "右記にドメインレコードを作成されるはずです:"
+
+#: src/view/com/profile/ProfileFollowers.tsx:87
+msgid "This user doesn't have any followers."
+msgstr "このユーザーにはフォロワーがいません。"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:72
+#: src/lib/moderation/useModerationCauseDescription.ts:68
msgid "This user has blocked you. You cannot view their content."
msgstr "このユーザーはあなたをブロックしているため、あなたはこのユーザーのコンテンツを閲覧できません。"
+#: src/lib/moderation/useGlobalLabelStrings.ts:30
+msgid "This user has requested that their content only be shown to signed-in users."
+msgstr "このユーザーは自分のコンテンツをサインインしたユーザーにのみ表示するように求めています。"
+
#: src/view/com/modals/ModerationDetails.tsx:42
-msgid "This user is included in the <0/> list which you have blocked."
-msgstr "このユーザーは、あなたがブロックした<0/>リストに含まれています。"
+#~ msgid "This user is included in the <0/> list which you have blocked."
+#~ msgstr "このユーザーは、あなたがブロックした<0/>リストに含まれています。"
#: src/view/com/modals/ModerationDetails.tsx:74
-msgid "This user is included in the <0/> list which you have muted."
-msgstr "このユーザーは、あなたがミュートした<0/>リストに含まれています。"
+#~ msgid "This user is included in the <0/> list which you have muted."
+#~ msgstr "このユーザーは、あなたがミュートした<0/>リストに含まれています。"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:55
+msgid "This user is included in the <0>{0}0> list which you have blocked."
+msgstr "このユーザーはブロックした<0>{0}0>リストに含まれています。"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:84
+msgid "This user is included in the <0>{0}0> list which you have muted."
+msgstr "このユーザーはミュートした<0>{0}0>リストに含まれています。"
#: src/view/com/modals/ModerationDetails.tsx:74
#~ msgid "This user is included the <0/> list which you have muted."
#~ msgstr "このユーザーは、あなたがミュートした<0/>リストに含まれています。"
+#: src/view/com/profile/ProfileFollows.tsx:87
+msgid "This user isn't following anyone."
+msgstr "このユーザーは誰もフォローしていません。"
+
#: src/view/com/modals/SelfLabel.tsx:137
msgid "This warning is only available for posts with media attached."
msgstr "この警告は、メディアが添付されている投稿にのみ使用できます。"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:192
-msgid "This will hide this post from your feeds."
-msgstr "この投稿をあなたのフィードにおいて非表示にします。"
+#: src/components/dialogs/MutedWords.tsx:283
+msgid "This will delete {0} from your muted words. You can always add it back later."
+msgstr "ミュートしたワードから{0}が削除されます。あとでいつでも戻すことができます。"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:282
+#~ msgid "This will hide this post from your feeds."
+#~ msgstr "この投稿をあなたのフィードにおいて非表示にします。"
+
+#: src/view/screens/Settings/index.tsx:574
+msgid "Thread preferences"
+msgstr "スレッドの設定"
#: src/view/screens/PreferencesThreads.tsx:53
-#: src/view/screens/Settings/index.tsx:565
+#: src/view/screens/Settings/index.tsx:584
msgid "Thread Preferences"
msgstr "スレッドの設定"
@@ -4183,21 +5404,34 @@ msgstr "スレッドの設定"
msgid "Threaded Mode"
msgstr "スレッドモード"
-#: src/Navigation.tsx:252
+#: src/Navigation.tsx:269
msgid "Threads Preferences"
msgstr "スレッドの設定"
+#: src/components/ReportDialog/SelectLabelerView.tsx:33
+msgid "To whom would you like to send this report?"
+msgstr "この報告を誰に送りたいですか?"
+
+#: src/components/dialogs/MutedWords.tsx:112
+msgid "Toggle between muted word options."
+msgstr "ミュートしたワードのオプションを切り替えます。"
+
#: src/view/com/util/forms/DropdownButton.tsx:246
msgid "Toggle dropdown"
msgstr "ドロップダウンをトグル"
-#: src/view/com/modals/EditImage.tsx:271
+#: src/screens/Moderation/index.tsx:332
+msgid "Toggle to enable or disable adult content"
+msgstr "成人向けコンテンツの有効もしくは無効の切り替え"
+
+#: src/view/com/modals/EditImage.tsx:272
msgid "Transformations"
msgstr "変換"
-#: src/view/com/post-thread/PostThreadItem.tsx:686
-#: src/view/com/post-thread/PostThreadItem.tsx:688
-#: src/view/com/util/forms/PostDropdownBtn.tsx:125
+#: src/view/com/post-thread/PostThreadItem.tsx:644
+#: src/view/com/post-thread/PostThreadItem.tsx:646
+#: src/view/com/util/forms/PostDropdownBtn.tsx:212
+#: src/view/com/util/forms/PostDropdownBtn.tsx:214
msgid "Translate"
msgstr "翻訳"
@@ -4210,108 +5444,195 @@ msgstr "再試行"
#~ msgid "Try again"
#~ msgstr "再試行"
-#: src/view/screens/ProfileList.tsx:505
+#: src/view/com/modals/ChangeHandle.tsx:428
+msgid "Type:"
+msgstr "タイプ:"
+
+#: src/view/screens/ProfileList.tsx:478
msgid "Un-block list"
msgstr "リストでのブロックを解除"
-#: src/view/screens/ProfileList.tsx:490
+#: src/view/screens/ProfileList.tsx:461
msgid "Un-mute list"
msgstr "リストでのミュートを解除"
-#: src/view/com/auth/create/CreateAccount.tsx:66
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:87
-#: src/view/com/auth/login/Login.tsx:76
-#: src/view/com/auth/login/LoginForm.tsx:118
+#: src/screens/Login/ForgotPasswordForm.tsx:74
+#: src/screens/Login/index.tsx:78
+#: src/screens/Login/LoginForm.tsx:119
+#: src/screens/Login/SetNewPasswordForm.tsx:77
+#: src/screens/Signup/index.tsx:63
#: src/view/com/modals/ChangePassword.tsx:70
msgid "Unable to contact your service. Please check your Internet connection."
msgstr "あなたのサービスに接続できません。インターネットの接続を確認してください。"
-#: src/view/com/profile/ProfileHeader.tsx:432
-#: src/view/screens/ProfileList.tsx:589
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:181
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+#: src/view/screens/ProfileList.tsx:572
msgid "Unblock"
msgstr "ブロックを解除"
-#: src/view/com/profile/ProfileHeader.tsx:435
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:186
msgctxt "action"
msgid "Unblock"
msgstr "ブロックを解除"
-#: src/view/com/profile/ProfileHeader.tsx:260
-#: src/view/com/profile/ProfileHeader.tsx:344
+#: src/view/com/profile/ProfileMenu.tsx:299
+#: src/view/com/profile/ProfileMenu.tsx:305
msgid "Unblock Account"
msgstr "アカウントのブロックを解除"
-#: src/view/com/modals/Repost.tsx:42
-#: src/view/com/modals/Repost.tsx:55
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:281
+#: src/view/com/profile/ProfileMenu.tsx:343
+msgid "Unblock Account?"
+msgstr "アカウントのブロックを解除しますか?"
+
+#: src/view/com/modals/Repost.tsx:43
+#: src/view/com/modals/Repost.tsx:56
#: src/view/com/util/post-ctrls/RepostButton.tsx:60
#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
msgid "Undo repost"
msgstr "リポストを元に戻す"
-#: src/view/com/profile/FollowButton.tsx:55
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
+msgid "Unfollow"
+msgstr "フォローを解除"
+
+#: src/view/com/profile/FollowButton.tsx:60
msgctxt "action"
msgid "Unfollow"
-msgstr "フォローをやめる"
+msgstr "フォローを解除"
-#: src/view/com/profile/ProfileHeader.tsx:484
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:220
msgid "Unfollow {0}"
msgstr "{0}のフォローを解除"
-#: src/view/com/auth/create/state.ts:300
-msgid "Unfortunately, you do not meet the requirements to create an account."
-msgstr "残念ながら、アカウントを作成するための要件を満たしていません。"
+#: src/view/com/profile/ProfileMenu.tsx:241
+#: src/view/com/profile/ProfileMenu.tsx:251
+msgid "Unfollow Account"
+msgstr "アカウントのフォローを解除"
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/auth/create/state.ts:262
+#~ msgid "Unfortunately, you do not meet the requirements to create an account."
+#~ msgstr "残念ながら、アカウントを作成するための要件を満たしていません。"
+
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Unlike"
msgstr "いいねを外す"
-#: src/view/screens/ProfileList.tsx:596
+#: src/view/screens/ProfileFeed.tsx:573
+msgid "Unlike this feed"
+msgstr "このフィードからいいねを外す"
+
+#: src/components/TagMenu/index.tsx:249
+#: src/view/screens/ProfileList.tsx:579
msgid "Unmute"
msgstr "ミュートを解除"
-#: src/view/com/profile/ProfileHeader.tsx:325
+#: src/components/TagMenu/index.web.tsx:104
+msgid "Unmute {truncatedTag}"
+msgstr "{truncatedTag}のミュートを解除"
+
+#: src/view/com/profile/ProfileMenu.tsx:278
+#: src/view/com/profile/ProfileMenu.tsx:284
msgid "Unmute Account"
msgstr "アカウントのミュートを解除"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/components/TagMenu/index.tsx:208
+msgid "Unmute all {displayTag} posts"
+msgstr "{displayTag}のすべての投稿のミュートを解除"
+
+#: src/components/TagMenu/index.tsx:210
+#~ msgid "Unmute all {tag} posts"
+#~ msgstr "{tag}のすべての投稿のミュートを解除"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:256
msgid "Unmute thread"
msgstr "スレッドのミュートを解除"
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:295
+#: src/view/screens/ProfileList.tsx:563
msgid "Unpin"
msgstr "ピン留めを解除"
-#: src/view/screens/ProfileList.tsx:473
+#: src/view/screens/ProfileFeed.tsx:292
+msgid "Unpin from home"
+msgstr "ホームからピン留めを解除"
+
+#: src/view/screens/ProfileList.tsx:444
msgid "Unpin moderation list"
msgstr "モデレーションリストのピン留めを解除"
-#: src/view/screens/ProfileFeed.tsx:345
-msgid "Unsave"
-msgstr "保存を解除"
+#: src/view/screens/ProfileFeed.tsx:346
+#~ msgid "Unsave"
+#~ msgstr "保存を解除"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:219
+msgid "Unsubscribe"
+msgstr "登録を解除"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:183
+msgid "Unsubscribe from this labeler"
+msgstr "このラベラーの登録を解除"
+
+#: src/lib/moderation/useReportOptions.ts:70
+msgid "Unwanted Sexual Content"
+msgstr "望まない性的なコンテンツ"
#: src/view/com/modals/UserAddRemoveLists.tsx:70
msgid "Update {displayName} in Lists"
msgstr "リストの{displayName}を更新"
#: src/lib/hooks/useOTAUpdate.ts:15
-msgid "Update Available"
-msgstr "更新可能"
+#~ msgid "Update Available"
+#~ msgstr "更新可能"
+
+#: src/view/com/modals/ChangeHandle.tsx:508
+msgid "Update to {handle}"
+msgstr "{handle}に更新"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:204
+#: src/screens/Login/SetNewPasswordForm.tsx:186
msgid "Updating..."
msgstr "更新中…"
-#: src/view/com/modals/ChangeHandle.tsx:455
+#: src/view/com/modals/ChangeHandle.tsx:454
msgid "Upload a text file to:"
msgstr "テキストファイルのアップロード先:"
-#: src/view/screens/AppPasswords.tsx:195
+#: src/view/com/util/UserAvatar.tsx:326
+#: src/view/com/util/UserAvatar.tsx:329
+#: src/view/com/util/UserBanner.tsx:116
+#: src/view/com/util/UserBanner.tsx:119
+msgid "Upload from Camera"
+msgstr "カメラからアップロード"
+
+#: src/view/com/util/UserAvatar.tsx:343
+#: src/view/com/util/UserBanner.tsx:133
+msgid "Upload from Files"
+msgstr "ファイルからアップロード"
+
+#: src/view/com/util/UserAvatar.tsx:337
+#: src/view/com/util/UserAvatar.tsx:341
+#: src/view/com/util/UserBanner.tsx:127
+#: src/view/com/util/UserBanner.tsx:131
+msgid "Upload from Library"
+msgstr "ライブラリーからアップロード"
+
+#: src/view/com/modals/ChangeHandle.tsx:408
+msgid "Use a file on your server"
+msgstr "あなたのサーバーのファイルを使用"
+
+#: src/view/screens/AppPasswords.tsx:197
msgid "Use app passwords to login to other Bluesky clients without giving full access to your account or password."
msgstr "他のBlueskyクライアントにアカウントやパスワードに完全にアクセスする権限を与えずに、アプリパスワードを使ってログインします。"
-#: src/view/com/modals/ChangeHandle.tsx:515
+#: src/view/com/modals/ChangeHandle.tsx:517
+msgid "Use bsky.social as hosting provider"
+msgstr "ホスティングプロバイダーとしてbsky.socialを使用"
+
+#: src/view/com/modals/ChangeHandle.tsx:516
msgid "Use default provider"
msgstr "デフォルトプロバイダーを使用"
@@ -4325,7 +5646,11 @@ msgstr "アプリ内ブラウザーを使用"
msgid "Use my default browser"
msgstr "デフォルトのブラウザーを使用"
-#: src/view/com/modals/AddAppPasswords.tsx:155
+#: src/view/com/modals/ChangeHandle.tsx:400
+msgid "Use the DNS panel"
+msgstr "DNSパネルを使用"
+
+#: src/view/com/modals/AddAppPasswords.tsx:156
msgid "Use this to sign into the other app along with your handle."
msgstr "このアプリパスワードとハンドルを使って他のアプリにサインインします。"
@@ -4333,46 +5658,55 @@ msgstr "このアプリパスワードとハンドルを使って他のアプリ
#~ msgid "Use your domain as your Bluesky client service provider"
#~ msgstr "あなたのドメインをBlueskyのクライアントサービスプロバイダーとして使用"
-#: src/view/com/modals/InviteCodes.tsx:200
+#: src/view/com/modals/InviteCodes.tsx:201
msgid "Used by:"
msgstr "使用者:"
-#: src/view/com/modals/ModerationDetails.tsx:54
+#: src/components/moderation/ModerationDetailsDialog.tsx:64
+#: src/lib/moderation/useModerationCauseDescription.ts:56
msgid "User Blocked"
msgstr "ブロック中のユーザー"
-#: src/view/com/modals/ModerationDetails.tsx:40
+#: src/lib/moderation/useModerationCauseDescription.ts:48
+msgid "User Blocked by \"{0}\""
+msgstr "「{0}」によってブロックされたユーザー"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:53
msgid "User Blocked by List"
msgstr "リストによってブロック中のユーザー"
-#: src/view/com/modals/ModerationDetails.tsx:60
+#: src/lib/moderation/useModerationCauseDescription.ts:66
+msgid "User Blocking You"
+msgstr "あなたがブロック中のユーザー"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:70
msgid "User Blocks You"
msgstr "あなたをブロックしているユーザー"
-#: src/view/com/auth/create/Step3.tsx:41
-msgid "User handle"
-msgstr "ユーザーハンドル"
+#: src/view/com/auth/create/Step2.tsx:79
+#~ msgid "User handle"
+#~ msgstr "ユーザーハンドル"
-#: src/view/com/lists/ListCard.tsx:84
+#: src/view/com/lists/ListCard.tsx:85
#: src/view/com/modals/UserAddRemoveLists.tsx:198
msgid "User list by {0}"
msgstr "<0/>の作成したユーザーリスト"
-#: src/view/screens/ProfileList.tsx:762
+#: src/view/screens/ProfileList.tsx:777
msgid "User list by <0/>"
msgstr "<0/>の作成したユーザーリスト"
-#: src/view/com/lists/ListCard.tsx:82
+#: src/view/com/lists/ListCard.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:196
-#: src/view/screens/ProfileList.tsx:760
+#: src/view/screens/ProfileList.tsx:775
msgid "User list by you"
msgstr "あなたの作成したユーザーリスト"
-#: src/view/com/modals/CreateOrEditList.tsx:196
+#: src/view/com/modals/CreateOrEditList.tsx:197
msgid "User list created"
msgstr "ユーザーリストを作成しました"
-#: src/view/com/modals/CreateOrEditList.tsx:182
+#: src/view/com/modals/CreateOrEditList.tsx:183
msgid "User list updated"
msgstr "ユーザーリストを更新しました"
@@ -4380,12 +5714,11 @@ msgstr "ユーザーリストを更新しました"
msgid "User Lists"
msgstr "ユーザーリスト"
-#: src/view/com/auth/login/LoginForm.tsx:177
-#: src/view/com/auth/login/LoginForm.tsx:195
+#: src/screens/Login/LoginForm.tsx:151
msgid "Username or email address"
msgstr "ユーザー名またはメールアドレス"
-#: src/view/screens/ProfileList.tsx:796
+#: src/view/screens/ProfileList.tsx:811
msgid "Users"
msgstr "ユーザー"
@@ -4397,19 +5730,31 @@ msgstr "<0/>にフォローされているユーザー"
msgid "Users in \"{0}\""
msgstr "{0}のユーザー"
+#: src/components/LikesDialog.tsx:85
+msgid "Users that have liked this content or profile"
+msgstr "このコンテンツやプロフィールにいいねをしているユーザー"
+
+#: src/view/com/modals/ChangeHandle.tsx:436
+msgid "Value:"
+msgstr "値:"
+
#: src/view/com/auth/create/Step2.tsx:243
-msgid "Verification code"
-msgstr "認証コード"
+#~ msgid "Verification code"
+#~ msgstr "認証コード"
+
+#: src/view/com/modals/ChangeHandle.tsx:509
+msgid "Verify {0}"
+msgstr "{0}で認証"
-#: src/view/screens/Settings/index.tsx:910
+#: src/view/screens/Settings/index.tsx:942
msgid "Verify email"
msgstr "メールアドレスを確認"
-#: src/view/screens/Settings/index.tsx:935
+#: src/view/screens/Settings/index.tsx:967
msgid "Verify my email"
msgstr "メールアドレスを確認"
-#: src/view/screens/Settings/index.tsx:944
+#: src/view/screens/Settings/index.tsx:976
msgid "Verify My Email"
msgstr "メールアドレスを確認"
@@ -4422,11 +5767,15 @@ msgstr "新しいメールアドレスを確認"
msgid "Verify Your Email"
msgstr "メールアドレスを確認"
+#: src/view/screens/Settings/index.tsx:893
+msgid "Version {0}"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:42
msgid "Video Games"
msgstr "ビデオゲーム"
-#: src/view/com/profile/ProfileHeader.tsx:661
+#: src/screens/Profile/Header/Shell.tsx:107
msgid "View {0}'s avatar"
msgstr "{0}のアバターを表示"
@@ -4434,11 +5783,23 @@ msgstr "{0}のアバターを表示"
msgid "View debug entry"
msgstr "デバッグエントリーを表示"
-#: src/view/com/posts/FeedSlice.tsx:103
+#: src/components/ReportDialog/SelectReportOptionView.tsx:131
+msgid "View details"
+msgstr "詳細を表示"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:126
+msgid "View details for reporting a copyright violation"
+msgstr "著作権侵害の報告の詳細を見る"
+
+#: src/view/com/posts/FeedSlice.tsx:99
msgid "View full thread"
msgstr "スレッドをすべて表示"
-#: src/view/com/posts/FeedErrorMessage.tsx:172
+#: src/components/moderation/LabelsOnMe.tsx:51
+msgid "View information about these labels"
+msgstr "これらのラベルに関する情報を見る"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:166
msgid "View profile"
msgstr "プロフィールを表示"
@@ -4446,26 +5807,49 @@ msgstr "プロフィールを表示"
msgid "View the avatar"
msgstr "アバターを表示"
-#: src/view/com/modals/LinkWarning.tsx:75
+#: src/components/LabelingServiceCard/index.tsx:140
+msgid "View the labeling service provided by @{0}"
+msgstr "@{0}によって提供されるラベリングサービスを見る"
+
+#: src/view/screens/ProfileFeed.tsx:585
+msgid "View users who like this feed"
+msgstr "このフィードにいいねしたユーザーを見る"
+
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
msgid "Visit Site"
msgstr "サイトへアクセス"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:42
-#: src/view/com/modals/ContentFilteringSettings.tsx:259
+#: src/components/moderation/LabelPreference.tsx:135
+#: src/lib/moderation/useLabelBehaviorDescription.ts:17
+#: src/lib/moderation/useLabelBehaviorDescription.ts:22
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:53
msgid "Warn"
msgstr "警告"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:48
+msgid "Warn content"
+msgstr "コンテンツの警告"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:46
+msgid "Warn content and filter from feeds"
+msgstr "コンテンツの警告とフィードからのフィルタリング"
+
#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:134
-msgid "We also think you'll like \"For You\" by Skygaze:"
-msgstr "Skygazeによる「For You」フィードもおすすめ:"
+#~ msgid "We also think you'll like \"For You\" by Skygaze:"
+#~ msgstr "Skygazeによる「For You」フィードもおすすめ:"
+
+#: src/screens/Hashtag.tsx:133
+msgid "We couldn't find any results for that hashtag."
+msgstr "そのハッシュタグの検索結果は見つかりませんでした。"
#: src/screens/Deactivated.tsx:133
msgid "We estimate {estimatedTime} until your account is ready."
msgstr "あなたのアカウントが準備できるまで{estimatedTime}ほどかかります。"
-#: src/screens/Onboarding/StepFinished.tsx:93
+#: src/screens/Onboarding/StepFinished.tsx:97
msgid "We hope you have a wonderful time. Remember, Bluesky is:"
-msgstr "素敵なひとときをお過ごしください。 覚えておいてください、Blueskyは:"
+msgstr "素敵なひとときをお過ごしください。覚えておいてください、Blueskyは:"
#: src/view/com/posts/DiscoverFallbackHeader.tsx:29
#~ msgid "We ran out of posts from your follows. Here's the latest from"
@@ -4479,11 +5863,23 @@ msgstr "あなたのフォロー中のユーザーの投稿を読み終わりま
#~ msgid "We recommend \"For You\" by Skygaze:"
#~ msgstr "Skygazeによる「For You」フィードがおすすめ:"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:124
+#: src/components/dialogs/MutedWords.tsx:203
+msgid "We recommend avoiding common words that appear in many posts, since it can result in no posts being shown."
+msgstr "投稿が表示されなくなる可能性があるため、多くの投稿に使われる一般的なワードは避けることをおすすめします。"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:125
msgid "We recommend our \"Discover\" feed:"
msgstr "我々の「Discover」フィードがおすすめ:"
-#: src/screens/Onboarding/StepInterests/index.tsx:133
+#: src/components/dialogs/BirthDateSettings.tsx:52
+msgid "We were unable to load your birth date preferences. Please try again."
+msgstr "生年月日の設定を読み込むことはできませんでした。もう一度お試しください。"
+
+#: src/screens/Moderation/index.tsx:385
+msgid "We were unable to load your configured labelers at this time."
+msgstr "現在設定されたラベラーを読み込めません。"
+
+#: src/screens/Onboarding/StepInterests/index.tsx:137
msgid "We weren't able to connect. Please try again to continue setting up your account. If it continues to fail, you can skip this flow."
msgstr "接続できませんでした。アカウントの設定を続けるためにもう一度お試しください。繰り返し失敗する場合は、この手順をスキップすることもできます。"
@@ -4492,43 +5888,53 @@ msgid "We will let you know when your account is ready."
msgstr "アカウントの準備ができたらお知らせします。"
#: src/view/com/modals/AppealLabel.tsx:48
-msgid "We'll look into your appeal promptly."
-msgstr "私たちはあなたの申し立てを迅速に調査します。"
+#~ msgid "We'll look into your appeal promptly."
+#~ msgstr "私たちはあなたの申し立てを迅速に調査します。"
-#: src/screens/Onboarding/StepInterests/index.tsx:138
+#: src/screens/Onboarding/StepInterests/index.tsx:142
msgid "We'll use this to help customize your experience."
msgstr "これはあなたの体験をカスタマイズするために使用されます。"
-#: src/view/com/auth/create/CreateAccount.tsx:123
+#: src/screens/Signup/index.tsx:130
msgid "We're so excited to have you join us!"
msgstr "私たちはあなたが参加してくれることをとても楽しみにしています!"
-#: src/view/screens/ProfileList.tsx:85
+#: src/view/screens/ProfileList.tsx:89
msgid "We're sorry, but we were unable to resolve this list. If this persists, please contact the list creator, @{handleOrDid}."
msgstr "大変申し訳ありませんが、このリストを解決できませんでした。それでもこの問題が解決しない場合は、作成者の@{handleOrDid}までお問い合わせください。"
-#: src/view/screens/Search/Search.tsx:253
+#: src/components/dialogs/MutedWords.tsx:229
+msgid "We're sorry, but we weren't able to load your muted words at this time. Please try again."
+msgstr "大変申し訳ありませんが、現在ミュートされたワードを読み込むことができませんでした。もう一度お試しください。"
+
+#: src/view/screens/Search/Search.tsx:256
msgid "We're sorry, but your search could not be completed. Please try again in a few minutes."
msgstr "大変申し訳ありませんが、検索を完了できませんでした。数分後に再試行してください。"
+#: src/components/Lists.tsx:188
#: src/view/screens/NotFound.tsx:48
msgid "We're sorry! We can't find the page you were looking for."
-msgstr "大変申し訳ありません!お探しのページが見つかりません。"
+msgstr "大変申し訳ありません!お探しのページは見つかりません。"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:321
+msgid "We're sorry! You can only subscribe to ten labelers, and you've reached your limit of ten."
+msgstr "大変申し訳ありません!ラベラーは10までしか登録できず、すでに上限に達しています。"
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:46
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:48
msgid "Welcome to <0>Bluesky0>"
msgstr "<0>Bluesky0>へようこそ"
-#: src/screens/Onboarding/StepInterests/index.tsx:130
+#: src/screens/Onboarding/StepInterests/index.tsx:134
msgid "What are your interests?"
-msgstr "何に興味がありますか?"
+msgstr "なにに興味がありますか?"
#: src/view/com/modals/report/Modal.tsx:169
-msgid "What is the issue with this {collectionName}?"
-msgstr "この{collectionName}の問題は何ですか?"
+#~ msgid "What is the issue with this {collectionName}?"
+#~ msgstr "この{collectionName}の問題はなんですか?"
-#: src/view/com/auth/SplashScreen.tsx:34
-#: src/view/com/composer/Composer.tsx:279
+#: src/view/com/auth/SplashScreen.tsx:58
+#: src/view/com/auth/SplashScreen.web.tsx:84
+#: src/view/com/composer/Composer.tsx:296
msgid "What's up?"
msgstr "最近どう?"
@@ -4545,16 +5951,36 @@ msgstr "アルゴリズムによるフィードにはどの言語を使用しま
msgid "Who can reply"
msgstr "返信できるユーザー"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:102
+#: src/components/ReportDialog/SelectReportOptionView.tsx:43
+msgid "Why should this content be reviewed?"
+msgstr "なぜこのコンテンツをレビューする必要がありますか?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:56
+msgid "Why should this feed be reviewed?"
+msgstr "なぜこのフィードをレビューする必要がありますか?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:53
+msgid "Why should this list be reviewed?"
+msgstr "なぜこのリストをレビューする必要がありますか?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:50
+msgid "Why should this post be reviewed?"
+msgstr "なぜこの投稿をレビューする必要がありますか?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:47
+msgid "Why should this user be reviewed?"
+msgstr "なぜこのユーザーをレビューする必要がありますか?"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:103
msgid "Wide"
msgstr "ワイド"
-#: src/view/com/composer/Composer.tsx:415
+#: src/view/com/composer/Composer.tsx:436
msgid "Write post"
msgstr "投稿を書く"
-#: src/view/com/composer/Composer.tsx:278
-#: src/view/com/composer/Prompt.tsx:33
+#: src/view/com/composer/Composer.tsx:295
+#: src/view/com/composer/Prompt.tsx:37
msgid "Write your reply"
msgstr "返信を書く"
@@ -4563,14 +5989,14 @@ msgid "Writers"
msgstr "ライター"
#: src/view/com/auth/create/Step2.tsx:263
-msgid "XXXXXX"
-msgstr "XXXXXX"
+#~ msgid "XXXXXX"
+#~ msgstr "XXXXXX"
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:77
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:201
-#: src/view/screens/PreferencesHomeFeed.tsx:236
-#: src/view/screens/PreferencesHomeFeed.tsx:271
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:201
+#: src/view/screens/PreferencesFollowingFeed.tsx:236
+#: src/view/screens/PreferencesFollowingFeed.tsx:271
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "Yes"
@@ -4584,6 +6010,10 @@ msgstr "はい"
msgid "You are in line."
msgstr "あなたは並んでいます。"
+#: src/view/com/profile/ProfileFollows.tsx:86
+msgid "You are not following anyone."
+msgstr "あなたはまだだれもフォローしていません。"
+
#: src/view/com/posts/FollowingEmptyState.tsx:67
#: src/view/com/posts/FollowingEndOfFeed.tsx:68
msgid "You can also discover new Custom Feeds to follow."
@@ -4597,16 +6027,20 @@ msgstr "また、あなたはフォローすべき新しいカスタムフィー
#~ msgid "You can change hosting providers at any time."
#~ msgstr "ホスティングプロバイダはいつでも変更できます。"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:142
+#: src/screens/Onboarding/StepFollowingFeed.tsx:143
msgid "You can change these settings later."
msgstr "これらの設定はあとで変更できます。"
-#: src/view/com/auth/login/Login.tsx:158
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:31
+#: src/screens/Login/index.tsx:158
+#: src/screens/Login/PasswordUpdatedForm.tsx:33
msgid "You can now sign in with your new password."
msgstr "新しいパスワードでサインインできるようになりました。"
-#: src/view/com/modals/InviteCodes.tsx:66
+#: src/view/com/profile/ProfileFollowers.tsx:86
+msgid "You do not have any followers."
+msgstr "あなたはまだだれもフォロワーがいません。"
+
+#: src/view/com/modals/InviteCodes.tsx:67
msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer."
msgstr "まだ招待コードがありません!Blueskyをもうしばらく利用したらお送りします。"
@@ -4614,7 +6048,7 @@ msgstr "まだ招待コードがありません!Blueskyをもうしばらく
msgid "You don't have any pinned feeds."
msgstr "ピン留めされたフィードがありません。"
-#: src/view/screens/Feeds.tsx:451
+#: src/view/screens/Feeds.tsx:452
msgid "You don't have any saved feeds!"
msgstr "保存されたフィードがありません!"
@@ -4622,24 +6056,43 @@ msgstr "保存されたフィードがありません!"
msgid "You don't have any saved feeds."
msgstr "保存されたフィードがありません。"
-#: src/view/com/post-thread/PostThread.tsx:401
+#: src/view/com/post-thread/PostThread.tsx:159
msgid "You have blocked the author or you have been blocked by the author."
msgstr "あなたが投稿者をブロックしているか、または投稿者によってあなたはブロックされています。"
-#: src/view/com/modals/ModerationDetails.tsx:56
+#: src/components/moderation/ModerationDetailsDialog.tsx:66
+#: src/lib/moderation/useModerationCauseDescription.ts:50
+#: src/lib/moderation/useModerationCauseDescription.ts:58
msgid "You have blocked this user. You cannot view their content."
msgstr "あなたはこのユーザーをブロックしているため、コンテンツを閲覧できません。"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:57
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:92
+#: src/screens/Login/SetNewPasswordForm.tsx:54
+#: src/screens/Login/SetNewPasswordForm.tsx:91
#: src/view/com/modals/ChangePassword.tsx:87
#: src/view/com/modals/ChangePassword.tsx:121
msgid "You have entered an invalid code. It should look like XXXXX-XXXXX."
msgstr "無効なコードが入力されました。それはXXXXX-XXXXXのようになっているはずです。"
+#: src/lib/moderation/useModerationCauseDescription.ts:109
+msgid "You have hidden this post"
+msgstr "この投稿を非表示にしました"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:101
+msgid "You have hidden this post."
+msgstr "この投稿を非表示にしました。"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:94
+#: src/lib/moderation/useModerationCauseDescription.ts:92
+msgid "You have muted this account."
+msgstr "このアカウントをミュートしました。"
+
+#: src/lib/moderation/useModerationCauseDescription.ts:86
+msgid "You have muted this user"
+msgstr "このユーザーをミュートしました"
+
#: src/view/com/modals/ModerationDetails.tsx:87
-msgid "You have muted this user."
-msgstr "あなたはこのユーザーをミュートしています。"
+#~ msgid "You have muted this user."
+#~ msgstr "あなたはこのユーザーをミュートしています。"
#: src/view/com/feeds/ProfileFeedgens.tsx:136
msgid "You have no feeds."
@@ -4651,38 +6104,62 @@ msgid "You have no lists."
msgstr "リストがありません。"
#: src/view/screens/ModerationBlockedAccounts.tsx:132
-msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
+msgid "You have not blocked any accounts yet. To block an account, go to their profile and select \"Block account\" from the menu on their account."
msgstr "ブロック中のアカウントはまだありません。アカウントをブロックするには、ユーザーのプロフィールに移動し、アカウントメニューから「アカウントをブロック」を選択します。"
-#: src/view/screens/AppPasswords.tsx:87
+#: src/view/screens/ModerationBlockedAccounts.tsx:132
+#~ msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
+#~ msgstr "ブロック中のアカウントはまだありません。アカウントをブロックするには、ユーザーのプロフィールに移動し、アカウントメニューから「アカウントをブロック」を選択します。"
+
+#: src/view/screens/AppPasswords.tsx:89
msgid "You have not created any app passwords yet. You can create one by pressing the button below."
msgstr "アプリパスワードはまだ作成されていません。下のボタンを押すと作成できます。"
#: src/view/screens/ModerationMutedAccounts.tsx:131
-msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
+msgid "You have not muted any accounts yet. To mute an account, go to their profile and select \"Mute account\" from the menu on their account."
msgstr "ミュートしているアカウントはまだありません。アカウントをミュートするには、プロフィールに移動し、アカウントメニューから「アカウントをミュート」を選択します。"
+#: src/view/screens/ModerationMutedAccounts.tsx:131
+#~ msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
+#~ msgstr "ミュートしているアカウントはまだありません。アカウントをミュートするには、プロフィールに移動し、アカウントメニューから「アカウントをミュート」を選択します。"
+
+#: src/components/dialogs/MutedWords.tsx:249
+msgid "You haven't muted any words or tags yet"
+msgstr "まだワードやタグをミュートしていません"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:68
+msgid "You may appeal these labels if you feel they were placed in error."
+msgstr "これらのラベルが誤って貼られたと思った場合は、異議申し立てを行うことができます。"
+
+#: src/screens/Signup/StepInfo/Policies.tsx:79
+msgid "You must be 13 years of age or older to sign up."
+msgstr ""
+
#: src/view/com/modals/ContentFilteringSettings.tsx:175
-msgid "You must be 18 or older to enable adult content."
-msgstr "成人向けコンテンツを有効にするには、18歳以上である必要があります。"
+#~ msgid "You must be 18 or older to enable adult content."
+#~ msgstr "成人向けコンテンツを有効にするには、18歳以上である必要があります。"
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:103
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:110
msgid "You must be 18 years or older to enable adult content"
msgstr "成人向けコンテンツを有効にするには、18歳以上である必要があります。"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:98
+#: src/components/ReportDialog/SubmitView.tsx:205
+msgid "You must select at least one labeler for a report"
+msgstr "報告をするには少なくとも1つのラベラーを選択する必要があります"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:144
msgid "You will no longer receive notifications for this thread"
msgstr "これ以降、このスレッドに関する通知を受け取ることはできなくなります"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:147
msgid "You will now receive notifications for this thread"
msgstr "これ以降、このスレッドに関する通知を受け取ることができます"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:107
+#: src/screens/Login/SetNewPasswordForm.tsx:104
msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password."
msgstr "「リセットコード」が記載されたメールが届きます。ここにコードを入力し、新しいパスワードを入力します。"
-#: src/screens/Onboarding/StepModeration/index.tsx:72
+#: src/screens/Onboarding/StepModeration/index.tsx:60
msgid "You're in control"
msgstr "あなたがコントロールしています"
@@ -4692,47 +6169,52 @@ msgstr "あなたがコントロールしています"
msgid "You're in line"
msgstr "あなたは並んでいます。"
-#: src/screens/Onboarding/StepFinished.tsx:90
+#: src/screens/Onboarding/StepFinished.tsx:94
msgid "You're ready to go!"
msgstr "準備ができました!"
+#: src/components/moderation/ModerationDetailsDialog.tsx:98
+#: src/lib/moderation/useModerationCauseDescription.ts:101
+msgid "You've chosen to hide a word or tag within this post."
+msgstr "この投稿でワードまたはタグを隠すことを選択しました。"
+
#: src/view/com/posts/FollowingEndOfFeed.tsx:48
msgid "You've reached the end of your feed! Find some more accounts to follow."
msgstr "フィードはここまでです!もっとフォローするアカウントを見つけましょう。"
-#: src/view/com/auth/create/Step1.tsx:74
+#: src/screens/Signup/index.tsx:150
msgid "Your account"
msgstr "あなたのアカウント"
-#: src/view/com/modals/DeleteAccount.tsx:67
+#: src/view/com/modals/DeleteAccount.tsx:68
msgid "Your account has been deleted"
msgstr "あなたのアカウントは削除されました"
#: src/view/screens/Settings/ExportCarDialog.tsx:47
msgid "Your account repository, containing all public data records, can be downloaded as a \"CAR\" file. This file does not include media embeds, such as images, or your private data, which must be fetched separately."
-msgstr ""
+msgstr "あなたのアカウントの公開データの全記録を含むリポジトリは、「CAR」ファイルとしてダウンロードできます。このファイルには、画像などのメディア埋め込み、また非公開のデータは含まれていないため、それらは個別に取得する必要があります。"
-#: src/view/com/auth/create/Step1.tsx:234
+#: src/screens/Signup/StepInfo/index.tsx:121
msgid "Your birth date"
msgstr "生年月日"
#: src/view/com/modals/InAppBrowserConsent.tsx:47
msgid "Your choice will be saved, but can be changed later in settings."
-msgstr "ここで選択した内容は保存されますが、後から設定で変更できます。"
+msgstr "ここで選択した内容は保存されますが、あとから設定で変更できます。"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:61
+#: src/screens/Onboarding/StepFollowingFeed.tsx:62
msgid "Your default feed is \"Following\""
msgstr "あなたのデフォルトフィードは「Following」です"
-#: src/view/com/auth/create/state.ts:153
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:70
+#: src/screens/Login/ForgotPasswordForm.tsx:57
+#: src/screens/Signup/state.ts:227
#: src/view/com/modals/ChangePassword.tsx:54
msgid "Your email appears to be invalid."
msgstr "メールアドレスが無効なようです。"
#: src/view/com/modals/Waitlist.tsx:109
-msgid "Your email has been saved! We'll be in touch soon."
-msgstr "メールアドレスが保存されました!すぐにご連絡いたします。"
+#~ msgid "Your email has been saved! We'll be in touch soon."
+#~ msgstr "メールアドレスが保存されました!すぐにご連絡いたします。"
#: src/view/com/modals/ChangeEmail.tsx:125
msgid "Your email has been updated but not verified. As a next step, please verify your new email."
@@ -4746,11 +6228,11 @@ msgstr "メールアドレスはまだ確認されていません。これは、
msgid "Your following feed is empty! Follow more users to see what's happening."
msgstr "Followingフィードは空です!もっと多くのユーザーをフォローして、近況を確認しましょう。"
-#: src/view/com/auth/create/Step3.tsx:45
+#: src/screens/Signup/StepHandle.tsx:72
msgid "Your full handle will be"
msgstr "フルハンドルは"
-#: src/view/com/modals/ChangeHandle.tsx:270
+#: src/view/com/modals/ChangeHandle.tsx:271
msgid "Your full handle will be <0>@{0}0>"
msgstr "フルハンドルは<0>@{0}0>になります"
@@ -4764,22 +6246,25 @@ msgstr "フルハンドルは<0>@{0}0>になります"
#~ msgid "Your invite codes are hidden when logged in using an App Password"
#~ msgstr "アプリパスワードを使用してログインすると、招待コードは非表示になります。"
-#: src/view/com/modals/ChangePassword.tsx:155
+#: src/components/dialogs/MutedWords.tsx:220
+msgid "Your muted words"
+msgstr "ミュートしたワード"
+
+#: src/view/com/modals/ChangePassword.tsx:157
msgid "Your password has been changed successfully!"
msgstr "パスワードの変更が完了しました!"
-#: src/view/com/composer/Composer.tsx:267
+#: src/view/com/composer/Composer.tsx:284
msgid "Your post has been published"
msgstr "投稿を公開しました"
-#: src/screens/Onboarding/StepFinished.tsx:105
+#: src/screens/Onboarding/StepFinished.tsx:109
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:59
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:59
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:61
msgid "Your posts, likes, and blocks are public. Mutes are private."
msgstr "投稿、いいね、ブロックは公開されます。ミュートは非公開です。"
-#: src/view/com/modals/SwitchAccount.tsx:84
-#: src/view/screens/Settings/index.tsx:118
+#: src/view/screens/Settings/index.tsx:125
msgid "Your profile"
msgstr "あなたのプロフィール"
@@ -4787,10 +6272,10 @@ msgstr "あなたのプロフィール"
#~ msgid "Your profile and posts will not be visible to people visiting the Bluesky app or website without having an account and being logged in."
#~ msgstr "あなたのプロフィールと投稿は、アカウントを持っておらずログインしていない状態でBlueskyのアプリまたはウェブサイトを訪問する人々には表示されません。"
-#: src/view/com/composer/Composer.tsx:266
+#: src/view/com/composer/Composer.tsx:283
msgid "Your reply has been published"
msgstr "返信を公開しました"
-#: src/view/com/auth/create/Step3.tsx:28
+#: src/screens/Signup/index.tsx:152
msgid "Your user handle"
msgstr "あなたのユーザーハンドル"
diff --git a/src/locale/locales/ko/messages.po b/src/locale/locales/ko/messages.po
index cf68140ce1..48c7a235bd 100644
--- a/src/locale/locales/ko/messages.po
+++ b/src/locale/locales/ko/messages.po
@@ -10,44 +10,30 @@ msgstr ""
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: \n"
"Last-Translator: quiple\n"
-"Language-Team: quiple, lens0021, HaruChanHeart, hazzzi\n"
+"Language-Team: quiple, lens0021, HaruChanHeart, hazzzi, heartade\n"
"Plural-Forms: \n"
#: src/view/com/modals/VerifyEmail.tsx:142
msgid "(no email)"
msgstr "(이메일 없음)"
-#: src/view/shell/desktop/RightNav.tsx:168
-#~ msgid "{0, plural, one {# invite code available} other {# invite codes available}}"
-#~ msgstr "{0, plural, one {초대 코드 #개 사용 가능} other {초대 코드 #개 사용 가능}}"
-
-#: src/view/com/profile/ProfileHeader.tsx:592
+#: src/screens/Profile/Header/Metrics.tsx:44
msgid "{following} following"
msgstr "{following} 팔로우 중"
-#: src/view/shell/desktop/RightNav.tsx:151
-#~ msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}"
-#~ msgstr "{invitesAvailable, plural, one {초대 코드: #개 사용 가능} other {초대 코드: #개 사용 가능}}"
-
-#: src/view/screens/Settings.tsx:435
-#: src/view/shell/Drawer.tsx:664
-#~ msgid "{invitesAvailable} invite code available"
-#~ msgstr "초대 코드 {invitesAvailable}개 사용 가능"
-
-#: src/view/screens/Settings.tsx:437
-#: src/view/shell/Drawer.tsx:666
-#~ msgid "{invitesAvailable} invite codes available"
-#~ msgstr "초대 코드 {invitesAvailable}개 사용 가능"
-
-#: src/view/shell/Drawer.tsx:440
+#: src/view/shell/Drawer.tsx:443
msgid "{numUnreadNotifications} unread"
msgstr "{numUnreadNotifications}개 읽지 않음"
#: src/view/com/threadgate/WhoCanReply.tsx:158
msgid "<0/> members"
-msgstr "<0/> 멤버"
+msgstr "<0/>의 멤버"
-#: src/view/com/profile/ProfileHeader.tsx:594
+#: src/view/shell/Drawer.tsx:97
+msgid "<0>{0}0> following"
+msgstr "<0>{0}0> 팔로우 중"
+
+#: src/screens/Profile/Header/Metrics.tsx:45
msgid "<0>{following} 0><1>following1>"
msgstr "<0>{following} 0><1>팔로우 중1>"
@@ -63,51 +49,52 @@ msgstr "<1>추천 사용자1><0>팔로우하기0>"
msgid "<0>Welcome to0><1>Bluesky1>"
msgstr "<1>Bluesky1><0>에 오신 것을 환영합니다0>"
-#: src/view/com/profile/ProfileHeader.tsx:557
+#: src/screens/Profile/Header/Handle.tsx:42
msgid "⚠Invalid Handle"
-msgstr "⚠ 잘못된 핸들"
-
-#: src/view/com/util/moderation/LabelInfo.tsx:45
-msgid "A content warning has been applied to this {0}."
-msgstr "이 {0}에 콘텐츠 경고가 적용되었습니다."
+msgstr "⚠잘못된 핸들"
-#: src/lib/hooks/useOTAUpdate.ts:16
-msgid "A new version of the app is available. Please update to continue using the app."
-msgstr "새 버전의 앱을 사용할 수 있습니다. 앱을 계속 사용하려면 업데이트하세요."
-
-#: src/view/com/util/ViewHeader.tsx:83
-#: src/view/screens/Search/Search.tsx:624
+#: src/view/com/util/ViewHeader.tsx:89
+#: src/view/screens/Search/Search.tsx:649
msgid "Access navigation links and settings"
msgstr "탐색 링크 및 설정으로 이동합니다"
-#: src/view/com/pager/FeedsTabBarMobile.tsx:89
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:52
msgid "Access profile and other navigation links"
msgstr "프로필 및 기타 탐색 링크로 이동합니다"
-#: src/view/com/modals/EditImage.tsx:299
-#: src/view/screens/Settings/index.tsx:451
+#: src/view/com/modals/EditImage.tsx:300
+#: src/view/screens/Settings/index.tsx:470
msgid "Accessibility"
msgstr "접근성"
-#: src/view/com/auth/login/LoginForm.tsx:166
-#: src/view/screens/Settings/index.tsx:308
-#: src/view/screens/Settings/index.tsx:721
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "account"
+msgstr "계정"
+
+#: src/screens/Login/LoginForm.tsx:144
+#: src/view/screens/Settings/index.tsx:327
+#: src/view/screens/Settings/index.tsx:743
msgid "Account"
msgstr "계정"
-#: src/view/com/profile/ProfileHeader.tsx:245
+#: src/view/com/profile/ProfileMenu.tsx:139
msgid "Account blocked"
msgstr "계정 차단됨"
-#: src/view/com/profile/ProfileHeader.tsx:212
+#: src/view/com/profile/ProfileMenu.tsx:153
+msgid "Account followed"
+msgstr "계정 팔로우함"
+
+#: src/view/com/profile/ProfileMenu.tsx:113
msgid "Account muted"
msgstr "계정 뮤트됨"
-#: src/view/com/modals/ModerationDetails.tsx:86
+#: src/components/moderation/ModerationDetailsDialog.tsx:93
+#: src/lib/moderation/useModerationCauseDescription.ts:91
msgid "Account Muted"
msgstr "계정 뮤트됨"
-#: src/view/com/modals/ModerationDetails.tsx:72
+#: src/components/moderation/ModerationDetailsDialog.tsx:82
msgid "Account Muted by List"
msgstr "리스트로 계정 뮤트됨"
@@ -119,18 +106,24 @@ msgstr "계정 옵션"
msgid "Account removed from quick access"
msgstr "빠른 액세스에서 계정 제거"
-#: src/view/com/profile/ProfileHeader.tsx:267
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:137
+#: src/view/com/profile/ProfileMenu.tsx:128
msgid "Account unblocked"
msgstr "계정 차단 해제됨"
-#: src/view/com/profile/ProfileHeader.tsx:225
+#: src/view/com/profile/ProfileMenu.tsx:166
+msgid "Account unfollowed"
+msgstr "계정 언팔로우함"
+
+#: src/view/com/profile/ProfileMenu.tsx:102
msgid "Account unmuted"
msgstr "계정 언뮤트됨"
+#: src/components/dialogs/MutedWords.tsx:164
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:150
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/screens/ProfileList.tsx:812
+#: src/view/screens/ProfileList.tsx:827
msgid "Add"
msgstr "추가"
@@ -138,54 +131,54 @@ msgstr "추가"
msgid "Add a content warning"
msgstr "콘텐츠 경고 추가"
-#: src/view/screens/ProfileList.tsx:802
+#: src/view/screens/ProfileList.tsx:817
msgid "Add a user to this list"
msgstr "이 리스트에 사용자 추가"
-#: src/view/screens/Settings/index.tsx:383
-#: src/view/screens/Settings/index.tsx:392
+#: src/components/dialogs/SwitchAccount.tsx:55
+#: src/view/screens/Settings/index.tsx:402
+#: src/view/screens/Settings/index.tsx:411
msgid "Add account"
msgstr "계정 추가"
#: src/view/com/composer/photos/Gallery.tsx:119
#: src/view/com/composer/photos/Gallery.tsx:180
-#: src/view/com/modals/AltImage.tsx:116
+#: src/view/com/modals/AltImage.tsx:117
msgid "Add alt text"
msgstr "대체 텍스트 추가하기"
-#: src/view/screens/AppPasswords.tsx:102
-#: src/view/screens/AppPasswords.tsx:143
-#: src/view/screens/AppPasswords.tsx:156
+#: src/view/screens/AppPasswords.tsx:104
+#: src/view/screens/AppPasswords.tsx:145
+#: src/view/screens/AppPasswords.tsx:158
msgid "Add App Password"
msgstr "앱 비밀번호 추가"
-#: src/view/com/modals/report/InputIssueDetails.tsx:41
-#: src/view/com/modals/report/Modal.tsx:191
-msgid "Add details"
-msgstr "세부 정보 추가"
-
-#: src/view/com/modals/report/Modal.tsx:194
-msgid "Add details to report"
-msgstr "신고 세부 정보 추가"
-
-#: src/view/com/composer/Composer.tsx:446
+#: src/view/com/composer/Composer.tsx:467
msgid "Add link card"
msgstr "링크 카드 추가"
-#: src/view/com/composer/Composer.tsx:451
+#: src/view/com/composer/Composer.tsx:472
msgid "Add link card:"
msgstr "링크 카드 추가:"
-#: src/view/com/modals/ChangeHandle.tsx:417
+#: src/components/dialogs/MutedWords.tsx:157
+msgid "Add mute word for configured settings"
+msgstr "구성 설정에 뮤트 단어 추가"
+
+#: src/components/dialogs/MutedWords.tsx:86
+msgid "Add muted words and tags"
+msgstr "뮤트할 단어 및 태그 추가"
+
+#: src/view/com/modals/ChangeHandle.tsx:416
msgid "Add the following DNS record to your domain:"
msgstr "도메인에 다음 DNS 레코드를 추가하세요:"
-#: src/view/com/profile/ProfileHeader.tsx:309
+#: src/view/com/profile/ProfileMenu.tsx:263
+#: src/view/com/profile/ProfileMenu.tsx:266
msgid "Add to Lists"
msgstr "리스트에 추가"
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/feeds/FeedSourceCard.tsx:234
msgid "Add to my feeds"
msgstr "내 피드에 추가"
@@ -198,32 +191,39 @@ msgstr "추가됨"
msgid "Added to list"
msgstr "리스트에 추가됨"
-#: src/view/com/feeds/FeedSourceCard.tsx:125
+#: src/view/com/feeds/FeedSourceCard.tsx:108
msgid "Added to my feeds"
msgstr "내 피드에 추가됨"
-#: src/view/screens/PreferencesHomeFeed.tsx:173
+#: src/view/screens/PreferencesFollowingFeed.tsx:173
msgid "Adjust the number of likes a reply must have to be shown in your feed."
-msgstr "답글이 피드에 표시되기 위해 필요한 좋아요 표시 수를 조정합니다."
+msgstr "답글이 피드에 표시되기 위해 필요한 좋아요 수를 조정합니다."
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:117
#: src/view/com/modals/SelfLabel.tsx:75
msgid "Adult Content"
msgstr "성인 콘텐츠"
-#: src/view/com/modals/ContentFilteringSettings.tsx:141
-msgid "Adult content can only be enabled via the Web at <0/>."
-msgstr "성인 콘텐츠는 <0/>에서 웹을 통해서만 활성화할 수 있습니다."
+#: src/components/moderation/LabelPreference.tsx:242
+msgid "Adult content is disabled."
+msgstr "성인 콘텐츠가 비활성화되어 있습니다."
-#: src/view/screens/Settings/index.tsx:664
+#: src/screens/Moderation/index.tsx:375
+#: src/view/screens/Settings/index.tsx:684
msgid "Advanced"
msgstr "고급"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:221
-#: src/view/com/modals/ChangePassword.tsx:168
+#: src/view/screens/Feeds.tsx:666
+msgid "All the feeds you've saved, right in one place."
+msgstr "저장한 모든 피드를 한 곳에서 확인하세요."
+
+#: src/screens/Login/ForgotPasswordForm.tsx:178
+#: src/view/com/modals/ChangePassword.tsx:170
msgid "Already have a code?"
-msgstr ""
+msgstr "이미 코드가 있나요?"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:98
+#: src/screens/Login/ChooseAccountForm.tsx:39
msgid "Already signed in as @{0}"
msgstr "이미 @{0}(으)로 로그인했습니다"
@@ -231,7 +231,7 @@ msgstr "이미 @{0}(으)로 로그인했습니다"
msgid "ALT"
msgstr "ALT"
-#: src/view/com/modals/EditImage.tsx:315
+#: src/view/com/modals/EditImage.tsx:316
msgid "Alt text"
msgstr "대체 텍스트"
@@ -247,12 +247,18 @@ msgstr "{0}(으)로 이메일을 보냈습니다. 이 이메일에는 아래에
msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below."
msgstr "이전 주소인 {0}(으)로 이메일을 보냈습니다. 이 이메일에는 아래에 입력하는 확인 코드가 포함되어 있습니다."
-#: src/view/com/profile/FollowButton.tsx:30
-#: src/view/com/profile/FollowButton.tsx:40
+#: src/lib/moderation/useReportOptions.ts:26
+msgid "An issue not included in these options"
+msgstr "어떤 옵션에도 포함되지 않는 문제"
+
+#: src/view/com/profile/FollowButton.tsx:35
+#: src/view/com/profile/FollowButton.tsx:45
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:188
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:198
msgid "An issue occurred, please try again."
msgstr "문제가 발생했습니다. 다시 시도해 주세요."
-#: src/view/com/notifications/FeedItem.tsx:236
+#: src/view/com/notifications/FeedItem.tsx:240
#: src/view/com/threadgate/WhoCanReply.tsx:178
msgid "and"
msgstr "및"
@@ -261,72 +267,69 @@ msgstr "및"
msgid "Animals"
msgstr "동물"
+#: src/lib/moderation/useReportOptions.ts:31
+msgid "Anti-Social Behavior"
+msgstr "반사회적 행위"
+
#: src/view/screens/LanguageSettings.tsx:95
msgid "App Language"
msgstr "앱 언어"
-#: src/view/screens/AppPasswords.tsx:228
+#: src/view/screens/AppPasswords.tsx:223
msgid "App password deleted"
msgstr "앱 비밀번호 삭제됨"
-#: src/view/com/modals/AddAppPasswords.tsx:134
+#: src/view/com/modals/AddAppPasswords.tsx:135
msgid "App Password names can only contain letters, numbers, spaces, dashes, and underscores."
msgstr "앱 비밀번호 이름에는 문자, 숫자, 공백, 대시, 밑줄만 사용할 수 있습니다."
-#: src/view/com/modals/AddAppPasswords.tsx:99
+#: src/view/com/modals/AddAppPasswords.tsx:100
msgid "App Password names must be at least 4 characters long."
msgstr "앱 비밀번호 이름은 4자 이상이어야 합니다."
-#: src/view/screens/Settings/index.tsx:675
+#: src/view/screens/Settings/index.tsx:695
msgid "App password settings"
msgstr "앱 비밀번호 설정"
-#: src/view/screens/Settings.tsx:650
-#~ msgid "App passwords"
-#~ msgstr "앱 비밀번호"
-
-#: src/Navigation.tsx:237
-#: src/view/screens/AppPasswords.tsx:187
-#: src/view/screens/Settings/index.tsx:684
+#: src/Navigation.tsx:251
+#: src/view/screens/AppPasswords.tsx:189
+#: src/view/screens/Settings/index.tsx:704
msgid "App Passwords"
msgstr "앱 비밀번호"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:250
-msgid "Appeal content warning"
-msgstr "콘텐츠 경고 이의신청"
-
-#: src/view/com/modals/AppealLabel.tsx:65
-msgid "Appeal Content Warning"
-msgstr "콘텐츠 경고 이의신청"
+#: src/components/moderation/LabelsOnMeDialog.tsx:133
+#: src/components/moderation/LabelsOnMeDialog.tsx:136
+msgid "Appeal"
+msgstr "이의신청"
-#: src/view/com/util/moderation/LabelInfo.tsx:52
-msgid "Appeal this decision"
-msgstr "이 결정에 이의신청"
+#: src/components/moderation/LabelsOnMeDialog.tsx:201
+msgid "Appeal \"{0}\" label"
+msgstr "\"{0}\" 라벨 이의신청"
-#: src/view/com/util/moderation/LabelInfo.tsx:56
-msgid "Appeal this decision."
-msgstr "이 결정에 이의신청합니다."
+#: src/components/moderation/LabelsOnMeDialog.tsx:192
+msgid "Appeal submitted."
+msgstr "이의신청 제출함"
-#: src/view/screens/Settings/index.tsx:466
+#: src/view/screens/Settings/index.tsx:485
msgid "Appearance"
msgstr "모양"
-#: src/view/screens/AppPasswords.tsx:224
+#: src/view/screens/AppPasswords.tsx:265
msgid "Are you sure you want to delete the app password \"{name}\"?"
msgstr "앱 비밀번호 \"{name}\"을(를) 삭제하시겠습니까?"
-#: src/view/com/composer/Composer.tsx:143
+#: src/view/com/feeds/FeedSourceCard.tsx:280
+msgid "Are you sure you want to remove {0} from your feeds?"
+msgstr "피드에서 {0}을(를) 제거하시겠습니까?"
+
+#: src/view/com/composer/Composer.tsx:509
msgid "Are you sure you'd like to discard this draft?"
msgstr "이 초안을 삭제하시겠습니까?"
-#: src/view/screens/ProfileList.tsx:364
+#: src/components/dialogs/MutedWords.tsx:281
msgid "Are you sure?"
msgstr "정말인가요?"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:233
-msgid "Are you sure? This cannot be undone."
-msgstr "정말인가요? 되돌릴 수 없습니다."
-
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:60
msgid "Are you writing in <0>{0}0>?"
msgstr "{0}(으)로 쓰고 있나요?"
@@ -339,78 +342,84 @@ msgstr "예술"
msgid "Artistic or non-erotic nudity."
msgstr "선정적이지 않거나 예술적인 노출."
-#: src/view/com/auth/create/CreateAccount.tsx:147
-#: src/view/com/auth/login/ChooseAccountForm.tsx:151
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:174
-#: src/view/com/auth/login/LoginForm.tsx:259
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:179
-#: src/view/com/modals/report/InputIssueDetails.tsx:46
-#: src/view/com/post-thread/PostThread.tsx:408
-#: src/view/com/post-thread/PostThread.tsx:458
-#: src/view/com/post-thread/PostThread.tsx:466
-#: src/view/com/profile/ProfileHeader.tsx:648
-#: src/view/com/util/ViewHeader.tsx:81
-msgid "Back"
-msgstr "뒤로"
-
-#: src/view/com/post-thread/PostThread.tsx:416
-msgctxt "action"
+#: src/screens/Signup/StepHandle.tsx:118
+msgid "At least 3 characters"
+msgstr "3자 이상"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:246
+#: src/components/moderation/LabelsOnMeDialog.tsx:247
+#: src/screens/Login/ChooseAccountForm.tsx:73
+#: src/screens/Login/ChooseAccountForm.tsx:78
+#: src/screens/Login/ForgotPasswordForm.tsx:129
+#: src/screens/Login/ForgotPasswordForm.tsx:135
+#: src/screens/Login/LoginForm.tsx:221
+#: src/screens/Login/LoginForm.tsx:227
+#: src/screens/Login/SetNewPasswordForm.tsx:160
+#: src/screens/Login/SetNewPasswordForm.tsx:166
+#: src/screens/Profile/Header/Shell.tsx:96
+#: src/screens/Signup/index.tsx:179
+#: src/view/com/util/ViewHeader.tsx:87
msgid "Back"
msgstr "뒤로"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:136
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:144
msgid "Based on your interest in {interestsText}"
msgstr "{interestsText}에 대한 관심사 기반"
-#: src/view/screens/Settings/index.tsx:523
+#: src/view/screens/Settings/index.tsx:542
msgid "Basics"
msgstr "기본"
-#: src/view/com/auth/create/Step1.tsx:246
-#: src/view/com/modals/BirthDateSettings.tsx:73
+#: src/components/dialogs/BirthDateSettings.tsx:107
msgid "Birthday"
msgstr "생년월일"
-#: src/view/screens/Settings/index.tsx:340
+#: src/view/screens/Settings/index.tsx:359
msgid "Birthday:"
msgstr "생년월일:"
-#: src/view/com/profile/ProfileHeader.tsx:238
-#: src/view/com/profile/ProfileHeader.tsx:345
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+msgid "Block"
+msgstr "차단"
+
+#: src/view/com/profile/ProfileMenu.tsx:300
+#: src/view/com/profile/ProfileMenu.tsx:307
msgid "Block Account"
msgstr "계정 차단"
-#: src/view/screens/ProfileList.tsx:555
+#: src/view/com/profile/ProfileMenu.tsx:344
+msgid "Block Account?"
+msgstr "계정을 차단하시겠습니까?"
+
+#: src/view/screens/ProfileList.tsx:530
msgid "Block accounts"
msgstr "계정 차단"
-#: src/view/screens/ProfileList.tsx:505
+#: src/view/screens/ProfileList.tsx:478
+#: src/view/screens/ProfileList.tsx:634
msgid "Block list"
msgstr "리스트 차단"
-#: src/view/screens/ProfileList.tsx:315
+#: src/view/screens/ProfileList.tsx:629
msgid "Block these accounts?"
msgstr "이 계정들을 차단하시겠습니까?"
-#: src/view/screens/ProfileList.tsx:319
-msgid "Block this List"
-msgstr "이 리스트 차단"
-
-#: src/view/com/lists/ListCard.tsx:109
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:60
+#: src/view/com/lists/ListCard.tsx:110
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:55
msgid "Blocked"
msgstr "차단됨"
-#: src/view/screens/Moderation.tsx:123
+#: src/screens/Moderation/index.tsx:267
msgid "Blocked accounts"
msgstr "차단한 계정"
-#: src/Navigation.tsx:130
+#: src/Navigation.tsx:134
#: src/view/screens/ModerationBlockedAccounts.tsx:107
msgid "Blocked Accounts"
msgstr "차단한 계정"
-#: src/view/com/profile/ProfileHeader.tsx:240
+#: src/view/com/profile/ProfileMenu.tsx:356
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
msgstr "차단한 계정은 내 스레드에 답글을 달거나 나를 멘션하거나 기타 다른 방식으로 나와 상호작용할 수 없습니다."
@@ -418,168 +427,188 @@ msgstr "차단한 계정은 내 스레드에 답글을 달거나 나를 멘션
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours."
msgstr "차단한 계정은 내 스레드에 답글을 달거나 나를 멘션하거나 기타 다른 방식으로 나와 상호작용할 수 없습니다. 차단한 계정의 콘텐츠를 볼 수 없으며 해당 계정도 내 콘텐츠를 볼 수 없게 됩니다."
-#: src/view/com/post-thread/PostThread.tsx:267
+#: src/view/com/post-thread/PostThread.tsx:313
msgid "Blocked post."
msgstr "차단된 게시물."
-#: src/view/screens/ProfileList.tsx:317
+#: src/screens/Profile/Sections/Labels.tsx:152
+msgid "Blocking does not prevent this labeler from placing labels on your account."
+msgstr "차단하더라도 이 라벨러가 내 계정에 라벨을 붙이는 것을 막지는 못합니다."
+
+#: src/view/screens/ProfileList.tsx:631
msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
msgstr "차단 목록은 공개됩니다. 차단한 계정은 내 스레드에 답글을 달거나 나를 멘션하거나 기타 다른 방식으로 나와 상호작용할 수 없습니다."
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:93
+#: src/view/com/profile/ProfileMenu.tsx:353
+msgid "Blocking will not prevent labels from being applied on your account, but it will stop this account from replying in your threads or interacting with you."
+msgstr "차단하더라도 내 계정에 라벨이 붙는 것은 막지 못하지만, 이 계정이 내 스레드에 답글을 달거나 나와 상호작용하는 것은 중지됩니다."
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:98
+#: src/view/com/auth/SplashScreen.web.tsx:169
msgid "Blog"
msgstr "블로그"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:31
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:32
#: src/view/com/auth/server-input/index.tsx:89
-#: src/view/com/auth/server-input/index.tsx:90
+#: src/view/com/auth/server-input/index.tsx:91
msgid "Bluesky"
msgstr "Bluesky"
-#: src/view/com/auth/server-input/index.tsx:150
+#: src/view/com/auth/server-input/index.tsx:154
msgid "Bluesky is an open network where you can choose your hosting provider. Custom hosting is now available in beta for developers."
-msgstr ""
+msgstr "Bluesky는 호스팅 제공자를 선택할 수 있는 개방형 네트워크입니다. 개발자를 위한 사용자 지정 호스팅이 베타 버전으로 제공됩니다."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:80
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:80
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:82
msgid "Bluesky is flexible."
msgstr "Bluesky는 유연합니다."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:69
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:69
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:71
msgid "Bluesky is open."
msgstr "Bluesky는 열려 있습니다."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:56
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:56
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:58
msgid "Bluesky is public."
msgstr "Bluesky는 공개적입니다."
-#: src/view/com/modals/Waitlist.tsx:70
-msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
-msgstr "Bluesky는 더 건강한 커뮤니티를 구축하기 위해 초대 방식을 사용합니다. 초대해 준 사람이 없는 경우 대기자 명단에 등록하면 곧 초대를 보내겠습니다."
-
-#: src/view/screens/Moderation.tsx:226
+#: src/screens/Moderation/index.tsx:533
msgid "Bluesky will not show your profile and posts to logged-out users. Other apps may not honor this request. This does not make your account private."
msgstr "로그아웃한 사용자에게 내 프로필과 게시물을 표시하지 않습니다. 다른 앱에서는 이 설정을 따르지 않을 수 있습니다. 내 계정을 비공개로 전환하지는 않습니다."
-#: src/view/com/modals/ServerInput.tsx:78
-#~ msgid "Bluesky.Social"
-#~ msgstr "Bluesky.Social"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:53
+msgid "Blur images"
+msgstr "이미지 흐리게"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:51
+msgid "Blur images and filter from feeds"
+msgstr "이미지 흐리게 및 피드에서 필터링"
#: src/screens/Onboarding/index.tsx:33
msgid "Books"
msgstr "책"
-#: src/view/screens/Settings/index.tsx:859
-msgid "Build version {0} {1}"
-msgstr "빌드 버전 {0} {1}"
+#: src/view/screens/Settings/index.tsx:893
+#~ msgid "Build version {0} {1}"
+#~ msgstr "빌드 버전 {0} {1}"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:87
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:92
+#: src/view/com/auth/SplashScreen.web.tsx:166
msgid "Business"
msgstr "비즈니스"
-#: src/view/com/modals/ServerInput.tsx:115
-#~ msgid "Button disabled. Input custom domain to proceed."
-#~ msgstr "버튼이 비활성화되었습니다. 계속하려면 사용자 지정 도메인을 입력하세요"
-
#: src/view/com/profile/ProfileSubpageHeader.tsx:157
msgid "by —"
-msgstr "—"
+msgstr "— 님이 만듦"
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:100
msgid "by {0}"
msgstr "{0} 님이 만듦"
+#: src/components/LabelingServiceCard/index.tsx:57
+msgid "By {0}"
+msgstr "{0} 님이 만듦"
+
#: src/view/com/profile/ProfileSubpageHeader.tsx:161
msgid "by <0/>"
msgstr "<0/> 님이 만듦"
+#: src/screens/Signup/StepInfo/Policies.tsx:74
+msgid "By creating an account you agree to the {els}."
+msgstr "계정을 만들면 {els}에 동의하는 것입니다."
+
#: src/view/com/profile/ProfileSubpageHeader.tsx:159
msgid "by you"
msgstr "내가 만듦"
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:60
-#: src/view/com/util/UserAvatar.tsx:224
-#: src/view/com/util/UserBanner.tsx:40
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:77
msgid "Camera"
msgstr "카메라"
-#: src/view/com/modals/AddAppPasswords.tsx:216
+#: src/view/com/modals/AddAppPasswords.tsx:217
msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long."
msgstr "글자, 숫자, 공백, 대시, 밑줄만 포함할 수 있습니다. 길이는 4자 이상이어야 하고 32자를 넘지 않아야 합니다."
-#: src/components/Prompt.tsx:91
-#: src/view/com/composer/Composer.tsx:300
-#: src/view/com/composer/Composer.tsx:305
+#: src/components/Menu/index.tsx:213
+#: src/components/Prompt.tsx:113
+#: src/components/Prompt.tsx:115
+#: src/components/TagMenu/index.tsx:268
+#: src/view/com/composer/Composer.tsx:317
+#: src/view/com/composer/Composer.tsx:322
#: src/view/com/modals/ChangeEmail.tsx:218
#: src/view/com/modals/ChangeEmail.tsx:220
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
-#: src/view/com/modals/CreateOrEditList.tsx:355
-#: src/view/com/modals/EditImage.tsx:323
-#: src/view/com/modals/EditProfile.tsx:249
+#: src/view/com/modals/ChangeHandle.tsx:154
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
+#: src/view/com/modals/CreateOrEditList.tsx:356
+#: src/view/com/modals/crop-image/CropImage.web.tsx:138
+#: src/view/com/modals/EditImage.tsx:324
+#: src/view/com/modals/EditProfile.tsx:250
#: src/view/com/modals/InAppBrowserConsent.tsx:78
-#: src/view/com/modals/LinkWarning.tsx:87
-#: src/view/com/modals/Repost.tsx:87
+#: src/view/com/modals/InAppBrowserConsent.tsx:80
+#: src/view/com/modals/LinkWarning.tsx:105
+#: src/view/com/modals/LinkWarning.tsx:107
+#: src/view/com/modals/Repost.tsx:88
#: src/view/com/modals/VerifyEmail.tsx:247
#: src/view/com/modals/VerifyEmail.tsx:253
-#: src/view/com/modals/Waitlist.tsx:142
-#: src/view/screens/Search/Search.tsx:693
-#: src/view/shell/desktop/Search.tsx:238
+#: src/view/screens/Search/Search.tsx:718
+#: src/view/shell/desktop/Search.tsx:239
msgid "Cancel"
msgstr "취소"
-#: src/view/com/modals/Confirm.tsx:88
-#: src/view/com/modals/Confirm.tsx:91
-#: src/view/com/modals/CreateOrEditList.tsx:360
-#: src/view/com/modals/DeleteAccount.tsx:156
-#: src/view/com/modals/DeleteAccount.tsx:234
+#: src/view/com/modals/CreateOrEditList.tsx:361
+#: src/view/com/modals/DeleteAccount.tsx:155
+#: src/view/com/modals/DeleteAccount.tsx:233
msgctxt "action"
msgid "Cancel"
msgstr "취소"
-#: src/view/com/modals/DeleteAccount.tsx:152
-#: src/view/com/modals/DeleteAccount.tsx:230
+#: src/view/com/modals/DeleteAccount.tsx:151
+#: src/view/com/modals/DeleteAccount.tsx:229
msgid "Cancel account deletion"
msgstr "계정 삭제 취소"
-#: src/view/com/modals/ChangeHandle.tsx:149
+#: src/view/com/modals/ChangeHandle.tsx:150
msgid "Cancel change handle"
msgstr "핸들 변경 취소"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:134
+#: src/view/com/modals/crop-image/CropImage.web.tsx:135
msgid "Cancel image crop"
msgstr "이미지 자르기 취소"
-#: src/view/com/modals/EditProfile.tsx:244
+#: src/view/com/modals/EditProfile.tsx:245
msgid "Cancel profile editing"
msgstr "프로필 편집 취소"
-#: src/view/com/modals/Repost.tsx:78
+#: src/view/com/modals/Repost.tsx:79
msgid "Cancel quote post"
msgstr "게시물 인용 취소"
#: src/view/com/modals/ListAddRemoveUsers.tsx:87
-#: src/view/shell/desktop/Search.tsx:234
+#: src/view/shell/desktop/Search.tsx:235
msgid "Cancel search"
msgstr "검색 취소"
-#: src/view/com/modals/Waitlist.tsx:136
-msgid "Cancel waitlist signup"
-msgstr "대기자 명단 등록 취소"
+#: src/view/com/modals/LinkWarning.tsx:106
+msgid "Cancels opening the linked website"
+msgstr "연결된 웹사이트를 여는 것을 취소합니다"
+
+#: src/view/com/modals/VerifyEmail.tsx:152
+msgid "Change"
+msgstr "변경"
-#: src/view/screens/Settings/index.tsx:334
+#: src/view/screens/Settings/index.tsx:353
msgctxt "action"
msgid "Change"
msgstr "변경"
-#: src/view/screens/Settings/index.tsx:696
+#: src/view/screens/Settings/index.tsx:716
msgid "Change handle"
msgstr "핸들 변경"
-#: src/view/com/modals/ChangeHandle.tsx:161
-#: src/view/screens/Settings/index.tsx:705
+#: src/view/com/modals/ChangeHandle.tsx:162
+#: src/view/screens/Settings/index.tsx:727
msgid "Change Handle"
msgstr "핸들 변경"
@@ -587,22 +616,19 @@ msgstr "핸들 변경"
msgid "Change my email"
msgstr "내 이메일 변경하기"
-#: src/view/screens/Settings/index.tsx:732
+#: src/view/screens/Settings/index.tsx:754
msgid "Change password"
-msgstr ""
+msgstr "비밀번호 변경"
-#: src/view/screens/Settings/index.tsx:741
+#: src/view/com/modals/ChangePassword.tsx:141
+#: src/view/screens/Settings/index.tsx:765
msgid "Change Password"
-msgstr ""
+msgstr "비밀번호 변경"
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:73
msgid "Change post language to {0}"
msgstr "게시물 언어를 {0}(으)로 변경"
-#: src/view/screens/Settings/index.tsx:733
-msgid "Change your Bluesky password"
-msgstr ""
-
#: src/view/com/modals/ChangeEmail.tsx:109
msgid "Change Your Email"
msgstr "이메일 변경"
@@ -620,7 +646,7 @@ msgstr "몇 가지 추천 피드를 확인하세요. +를 탭하여 고정된
msgid "Check out some recommended users. Follow them to see similar users."
msgstr "추천 사용자를 확인하세요. 해당 사용자를 팔로우하여 비슷한 사용자를 만날 수 있습니다."
-#: src/view/com/modals/DeleteAccount.tsx:169
+#: src/view/com/modals/DeleteAccount.tsx:168
msgid "Check your inbox for an email with the confirmation code to enter below:"
msgstr "받은 편지함에서 아래에 입력하는 확인 코드가 포함된 이메일이 있는지 확인하세요:"
@@ -628,108 +654,124 @@ msgstr "받은 편지함에서 아래에 입력하는 확인 코드가 포함된
msgid "Choose \"Everybody\" or \"Nobody\""
msgstr "\"모두\" 또는 \"없음\"을 선택하세요."
-#: src/view/screens/Settings/index.tsx:697
-msgid "Choose a new Bluesky username or create"
-msgstr "새 Bluesky 사용자 이름을 선택하거나 만듭니다"
-
#: src/view/com/auth/server-input/index.tsx:79
msgid "Choose Service"
msgstr "서비스 선택"
-#: src/screens/Onboarding/StepFinished.tsx:135
+#: src/screens/Onboarding/StepFinished.tsx:139
msgid "Choose the algorithms that power your custom feeds."
msgstr "맞춤 피드를 구동할 알고리즘을 선택하세요."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:83
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:83
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:85
msgid "Choose the algorithms that power your experience with custom feeds."
-msgstr "맞춤 피드를 통해 사용자 경험을 강화하는 알고리즘을 선택합니다."
+msgstr "맞춤 피드를 통해 사용자 경험을 강화하는 알고리즘을 선택하세요."
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:103
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:104
msgid "Choose your main feeds"
msgstr "기본 피드 선택"
-#: src/view/com/auth/create/Step1.tsx:215
+#: src/screens/Signup/StepInfo/index.tsx:112
msgid "Choose your password"
msgstr "비밀번호를 입력하세요"
-#: src/view/screens/Settings/index.tsx:834
-#: src/view/screens/Settings/index.tsx:835
+#: src/view/screens/Settings/index.tsx:868
msgid "Clear all legacy storage data"
msgstr "모든 레거시 스토리지 데이터 지우기"
-#: src/view/screens/Settings/index.tsx:837
+#: src/view/screens/Settings/index.tsx:871
msgid "Clear all legacy storage data (restart after this)"
msgstr "모든 레거시 스토리지 데이터 지우기 (이후 다시 시작)"
-#: src/view/screens/Settings/index.tsx:846
-#: src/view/screens/Settings/index.tsx:847
+#: src/view/screens/Settings/index.tsx:880
msgid "Clear all storage data"
msgstr "모든 스토리지 데이터 지우기"
-#: src/view/screens/Settings/index.tsx:849
+#: src/view/screens/Settings/index.tsx:883
msgid "Clear all storage data (restart after this)"
msgstr "모든 스토리지 데이터 지우기 (이후 다시 시작)"
#: src/view/com/util/forms/SearchInput.tsx:88
-#: src/view/screens/Search/Search.tsx:674
+#: src/view/screens/Search/Search.tsx:699
msgid "Clear search query"
msgstr "검색어 지우기"
+#: src/view/screens/Settings/index.tsx:869
+msgid "Clears all legacy storage data"
+msgstr "모든 레거시 스토리지 데이터를 지웁니다"
+
+#: src/view/screens/Settings/index.tsx:881
+msgid "Clears all storage data"
+msgstr "모든 스토리지 데이터를 지웁니다"
+
#: src/view/screens/Support.tsx:40
msgid "click here"
msgstr "이곳을 클릭"
+#: src/components/TagMenu/index.web.tsx:138
+msgid "Click here to open tag menu for {tag}"
+msgstr "이곳을 클릭하여 {tag}의 태그 메뉴 열기"
+
+#: src/components/RichText.tsx:192
+msgid "Click here to open tag menu for #{tag}"
+msgstr "이곳을 클릭하여 #{tag}의 태그 메뉴 열기"
+
#: src/screens/Onboarding/index.tsx:35
msgid "Climate"
msgstr "기후"
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
msgid "Close"
-msgstr ""
+msgstr "닫기"
-#: src/components/Dialog/index.web.tsx:78
+#: src/components/Dialog/index.web.tsx:106
+#: src/components/Dialog/index.web.tsx:218
msgid "Close active dialog"
-msgstr "활성 대화 상자 닫기"
+msgstr "열려 있는 대화 상자 닫기"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:38
+#: src/screens/Login/PasswordUpdatedForm.tsx:38
msgid "Close alert"
msgstr "알림 닫기"
-#: src/view/com/util/BottomSheetCustomBackdrop.tsx:33
+#: src/view/com/util/BottomSheetCustomBackdrop.tsx:36
msgid "Close bottom drawer"
msgstr "하단 서랍 닫기"
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:26
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:36
msgid "Close image"
msgstr "이미지 닫기"
-#: src/view/com/lightbox/Lightbox.web.tsx:119
+#: src/view/com/lightbox/Lightbox.web.tsx:129
msgid "Close image viewer"
msgstr "이미지 뷰어 닫기"
-#: src/view/shell/index.web.tsx:49
+#: src/view/shell/index.web.tsx:55
msgid "Close navigation footer"
msgstr "탐색 푸터 닫기"
-#: src/view/shell/index.web.tsx:50
+#: src/components/Menu/index.tsx:207
+#: src/components/TagMenu/index.tsx:262
+msgid "Close this dialog"
+msgstr "이 대화 상자 닫기"
+
+#: src/view/shell/index.web.tsx:56
msgid "Closes bottom navigation bar"
msgstr "하단 탐색 막대를 닫습니다"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:39
+#: src/screens/Login/PasswordUpdatedForm.tsx:39
msgid "Closes password update alert"
msgstr "비밀번호 변경 알림을 닫습니다"
-#: src/view/com/composer/Composer.tsx:302
+#: src/view/com/composer/Composer.tsx:319
msgid "Closes post composer and discards post draft"
msgstr "게시물 작성 상자를 닫고 게시물 초안을 삭제합니다"
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:27
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:37
msgid "Closes viewer for header image"
msgstr "헤더 이미지 뷰어를 닫습니다"
-#: src/view/com/notifications/FeedItem.tsx:317
+#: src/view/com/notifications/FeedItem.tsx:321
msgid "Collapses list of users for a given notification"
msgstr "이 알림에 대한 사용자 목록을 축소합니다"
@@ -741,16 +783,20 @@ msgstr "코미디"
msgid "Comics"
msgstr "만화"
-#: src/Navigation.tsx:227
+#: src/Navigation.tsx:241
#: src/view/screens/CommunityGuidelines.tsx:32
msgid "Community Guidelines"
msgstr "커뮤니티 가이드라인"
-#: src/screens/Onboarding/StepFinished.tsx:148
+#: src/screens/Onboarding/StepFinished.tsx:152
msgid "Complete onboarding and start using your account"
msgstr "온보딩 완료 후 계정 사용 시작"
-#: src/view/com/composer/Composer.tsx:417
+#: src/screens/Signup/index.tsx:154
+msgid "Complete the challenge"
+msgstr "챌린지 완료하기"
+
+#: src/view/com/composer/Composer.tsx:438
msgid "Compose posts up to {MAX_GRAPHEME_LENGTH} characters in length"
msgstr "최대 {MAX_GRAPHEME_LENGTH}자 길이까지 글을 작성할 수 있습니다"
@@ -758,81 +804,90 @@ msgstr "최대 {MAX_GRAPHEME_LENGTH}자 길이까지 글을 작성할 수 있습
msgid "Compose reply"
msgstr "답글 작성하기"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:67
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:81
msgid "Configure content filtering setting for category: {0}"
-msgstr "{0} 카테고리에 대한 콘텐츠 필터링 설정 구성"
+msgstr "{0} 카테고리에 대한 콘텐츠 필터링 설정을 구성합니다."
-#: src/components/Prompt.tsx:113
-#: src/view/com/modals/AppealLabel.tsx:98
+#: src/components/moderation/LabelPreference.tsx:81
+msgid "Configure content filtering setting for category: {name}"
+msgstr "{name} 카테고리에 대한 콘텐츠 필터링 설정을 구성합니다."
+
+#: src/components/moderation/LabelPreference.tsx:244
+msgid "Configured in <0>moderation settings0>."
+msgstr "<0>검토 설정0>에서 설정합니다."
+
+#: src/components/Prompt.tsx:153
+#: src/components/Prompt.tsx:156
#: src/view/com/modals/SelfLabel.tsx:154
#: src/view/com/modals/VerifyEmail.tsx:231
#: src/view/com/modals/VerifyEmail.tsx:233
-#: src/view/screens/PreferencesHomeFeed.tsx:308
+#: src/view/screens/PreferencesFollowingFeed.tsx:308
#: src/view/screens/PreferencesThreads.tsx:159
msgid "Confirm"
msgstr "확인"
-#: src/view/com/modals/Confirm.tsx:75
-#: src/view/com/modals/Confirm.tsx:78
-msgctxt "action"
-msgid "Confirm"
-msgstr "확인"
-
#: src/view/com/modals/ChangeEmail.tsx:193
#: src/view/com/modals/ChangeEmail.tsx:195
msgid "Confirm Change"
msgstr "변경 확인"
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:34
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:35
msgid "Confirm content language settings"
msgstr "콘텐츠 언어 설정 확인"
-#: src/view/com/modals/DeleteAccount.tsx:220
+#: src/view/com/modals/DeleteAccount.tsx:219
msgid "Confirm delete account"
msgstr "계정 삭제 확인"
-#: src/view/com/modals/ContentFilteringSettings.tsx:156
-msgid "Confirm your age to enable adult content."
-msgstr "성인 콘텐츠를 사용하려면 나이를 확인하세요."
+#: src/screens/Moderation/index.tsx:301
+msgid "Confirm your age:"
+msgstr "나이를 확인하세요:"
+
+#: src/screens/Moderation/index.tsx:292
+msgid "Confirm your birthdate"
+msgstr "생년월일 확인"
#: src/view/com/modals/ChangeEmail.tsx:157
-#: src/view/com/modals/DeleteAccount.tsx:182
+#: src/view/com/modals/DeleteAccount.tsx:175
+#: src/view/com/modals/DeleteAccount.tsx:181
#: src/view/com/modals/VerifyEmail.tsx:165
msgid "Confirmation code"
msgstr "확인 코드"
-#: src/view/com/modals/Waitlist.tsx:120
-msgid "Confirms signing up {email} to the waitlist"
-msgstr "{email}을(를) 대기자 명단에 등록합니다"
-
-#: src/view/com/auth/create/CreateAccount.tsx:182
-#: src/view/com/auth/login/LoginForm.tsx:278
+#: src/screens/Login/LoginForm.tsx:248
msgid "Connecting..."
msgstr "연결 중…"
-#: src/view/com/auth/create/CreateAccount.tsx:202
+#: src/screens/Signup/index.tsx:219
msgid "Contact support"
msgstr "지원에 연락하기"
-#: src/view/screens/Moderation.tsx:81
-msgid "Content filtering"
-msgstr "콘텐츠 필터링"
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "content"
+msgstr "콘텐츠"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:18
+msgid "Content Blocked"
+msgstr "콘텐츠 차단됨"
-#: src/view/com/modals/ContentFilteringSettings.tsx:44
-msgid "Content Filtering"
-msgstr "콘텐츠 필터링"
+#: src/screens/Moderation/index.tsx:285
+msgid "Content filters"
+msgstr "콘텐츠 필터"
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74
#: src/view/screens/LanguageSettings.tsx:278
msgid "Content Languages"
msgstr "콘텐츠 언어"
-#: src/view/com/modals/ModerationDetails.tsx:65
+#: src/components/moderation/ModerationDetailsDialog.tsx:75
+#: src/lib/moderation/useModerationCauseDescription.ts:75
msgid "Content Not Available"
msgstr "콘텐츠를 사용할 수 없음"
-#: src/view/com/modals/ModerationDetails.tsx:33
-#: src/view/com/util/moderation/ScreenHider.tsx:78
+#: src/components/moderation/ModerationDetailsDialog.tsx:46
+#: src/components/moderation/ScreenHider.tsx:99
+#: src/lib/moderation/useGlobalLabelStrings.ts:22
+#: src/lib/moderation/useModerationCauseDescription.ts:38
msgid "Content Warning"
msgstr "콘텐츠 경고"
@@ -840,28 +895,38 @@ msgstr "콘텐츠 경고"
msgid "Content warnings"
msgstr "콘텐츠 경고"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:170
-#: src/screens/Onboarding/StepFollowingFeed.tsx:153
-#: src/screens/Onboarding/StepInterests/index.tsx:248
-#: src/screens/Onboarding/StepModeration/index.tsx:118
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:108
+#: src/components/Menu/index.web.tsx:84
+msgid "Context menu backdrop, click to close the menu."
+msgstr "컨텍스트 메뉴 배경을 클릭하여 메뉴를 닫습니다."
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:161
+#: src/screens/Onboarding/StepFollowingFeed.tsx:154
+#: src/screens/Onboarding/StepInterests/index.tsx:252
+#: src/screens/Onboarding/StepModeration/index.tsx:103
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:118
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:96
msgid "Continue"
msgstr "계속"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:150
-#: src/screens/Onboarding/StepInterests/index.tsx:245
-#: src/screens/Onboarding/StepModeration/index.tsx:115
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:105
+#: src/components/AccountList.tsx:108
+msgid "Continue as {0} (currently signed in)"
+msgstr "{0}(으)로 계속하기 (현재 로그인)"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:151
+#: src/screens/Onboarding/StepInterests/index.tsx:249
+#: src/screens/Onboarding/StepModeration/index.tsx:100
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:115
+#: src/screens/Signup/index.tsx:198
msgid "Continue to next step"
msgstr "다음 단계로 계속하기"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:167
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:158
msgid "Continue to the next step"
msgstr "다음 단계로 계속하기"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:191
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:199
msgid "Continue to the next step without following any accounts"
msgstr "계정을 팔로우하지 않고 다음 단계로 계속하기"
@@ -869,98 +934,94 @@ msgstr "계정을 팔로우하지 않고 다음 단계로 계속하기"
msgid "Cooking"
msgstr "요리"
-#: src/view/com/modals/AddAppPasswords.tsx:195
-#: src/view/com/modals/InviteCodes.tsx:182
+#: src/view/com/modals/AddAppPasswords.tsx:196
+#: src/view/com/modals/InviteCodes.tsx:183
msgid "Copied"
msgstr "복사됨"
-#: src/view/screens/Settings/index.tsx:241
+#: src/view/screens/Settings/index.tsx:251
msgid "Copied build version to clipboard"
msgstr "빌드 버전 클립보드에 복사됨"
-#: src/view/com/modals/AddAppPasswords.tsx:76
-#: src/view/com/modals/InviteCodes.tsx:152
-#: src/view/com/util/forms/PostDropdownBtn.tsx:112
+#: src/view/com/modals/AddAppPasswords.tsx:77
+#: src/view/com/modals/ChangeHandle.tsx:326
+#: src/view/com/modals/InviteCodes.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:158
msgid "Copied to clipboard"
msgstr "클립보드에 복사됨"
-#: src/view/com/modals/AddAppPasswords.tsx:189
+#: src/view/com/modals/AddAppPasswords.tsx:190
msgid "Copies app password"
msgstr "앱 비밀번호를 복사합니다"
-#: src/view/com/modals/AddAppPasswords.tsx:188
+#: src/view/com/modals/AddAppPasswords.tsx:189
msgid "Copy"
msgstr "복사"
-#: src/view/screens/ProfileList.tsx:417
+#: src/view/com/modals/ChangeHandle.tsx:480
+msgid "Copy {0}"
+msgstr "{0} 복사"
+
+#: src/view/screens/ProfileList.tsx:388
msgid "Copy link to list"
msgstr "리스트 링크 복사"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
msgid "Copy link to post"
msgstr "게시물 링크 복사"
-#: src/view/com/profile/ProfileHeader.tsx:294
-msgid "Copy link to profile"
-msgstr "프로필 링크 복사"
-
-#: src/view/com/util/forms/PostDropdownBtn.tsx:139
+#: src/view/com/util/forms/PostDropdownBtn.tsx:220
+#: src/view/com/util/forms/PostDropdownBtn.tsx:222
msgid "Copy post text"
msgstr "게시물 텍스트 복사"
-#: src/Navigation.tsx:232
+#: src/Navigation.tsx:246
#: src/view/screens/CopyrightPolicy.tsx:29
msgid "Copyright Policy"
msgstr "저작권 정책"
-#: src/view/screens/ProfileFeed.tsx:96
+#: src/view/screens/ProfileFeed.tsx:103
msgid "Could not load feed"
msgstr "피드를 불러올 수 없습니다"
-#: src/view/screens/ProfileList.tsx:888
+#: src/view/screens/ProfileList.tsx:907
msgid "Could not load list"
msgstr "리스트를 불러올 수 없습니다"
-#: src/view/com/auth/create/Step2.tsx:91
-msgid "Country"
-msgstr "국가"
-
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:62
-#: src/view/com/auth/SplashScreen.tsx:46
-#: src/view/com/auth/SplashScreen.web.tsx:77
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:65
+#: src/view/com/auth/SplashScreen.tsx:75
+#: src/view/com/auth/SplashScreen.web.tsx:104
msgid "Create a new account"
msgstr "새 계정 만들기"
-#: src/view/screens/Settings/index.tsx:384
+#: src/view/screens/Settings/index.tsx:403
msgid "Create a new Bluesky account"
msgstr "새 Bluesky 계정을 만듭니다"
-#: src/view/com/auth/create/CreateAccount.tsx:122
+#: src/screens/Signup/index.tsx:129
msgid "Create Account"
msgstr "계정 만들기"
-#: src/view/com/modals/AddAppPasswords.tsx:226
+#: src/view/com/modals/AddAppPasswords.tsx:227
msgid "Create App Password"
msgstr "앱 비밀번호 만들기"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:54
-#: src/view/com/auth/SplashScreen.tsx:43
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:55
+#: src/view/com/auth/SplashScreen.tsx:66
+#: src/view/com/auth/SplashScreen.web.tsx:95
msgid "Create new account"
msgstr "새 계정 만들기"
-#: src/view/screens/AppPasswords.tsx:249
-msgid "Created {0}"
-msgstr "{0} 생성됨"
-
-#: src/view/screens/ProfileFeed.tsx:616
-msgid "Created by <0/>"
-msgstr "<0/> 님이 만듦"
+#: src/components/ReportDialog/SelectReportOptionView.tsx:93
+msgid "Create report for {0}"
+msgstr "{0}에 대한 신고 작성하기"
-#: src/view/screens/ProfileFeed.tsx:614
-msgid "Created by you"
-msgstr "내가 만듦"
+#: src/view/screens/AppPasswords.tsx:246
+msgid "Created {0}"
+msgstr "{0}에 생성됨"
-#: src/view/com/composer/Composer.tsx:448
+#: src/view/com/composer/Composer.tsx:469
msgid "Creates a card with a thumbnail. The card links to {url}"
msgstr "미리보기 이미지가 있는 카드를 만듭니다. 카드가 {url}(으)로 연결됩니다"
@@ -968,16 +1029,17 @@ msgstr "미리보기 이미지가 있는 카드를 만듭니다. 카드가 {url}
msgid "Culture"
msgstr "문화"
-#: src/view/com/auth/server-input/index.tsx:95
-#: src/view/com/auth/server-input/index.tsx:96
+#: src/view/com/auth/server-input/index.tsx:97
+#: src/view/com/auth/server-input/index.tsx:99
msgid "Custom"
-msgstr ""
+msgstr "사용자 지정"
-#: src/view/com/modals/ChangeHandle.tsx:389
+#: src/view/com/modals/ChangeHandle.tsx:388
msgid "Custom domain"
msgstr "사용자 지정 도메인"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:107
+#: src/view/screens/Feeds.tsx:692
msgid "Custom feeds built by the community bring you new experiences and help you find the content you love."
msgstr "커뮤니티에서 구축한 맞춤 피드는 새로운 경험을 제공하고 좋아하는 콘텐츠를 찾을 수 있도록 도와줍니다."
@@ -985,12 +1047,8 @@ msgstr "커뮤니티에서 구축한 맞춤 피드는 새로운 경험을 제공
msgid "Customize media from external sites."
msgstr "외부 사이트 미디어를 사용자 지정합니다."
-#: src/view/screens/Settings.tsx:687
-#~ msgid "Danger Zone"
-#~ msgstr "위험 구역"
-
-#: src/view/screens/Settings/index.tsx:485
-#: src/view/screens/Settings/index.tsx:511
+#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:530
msgid "Dark"
msgstr "어두움"
@@ -998,88 +1056,109 @@ msgstr "어두움"
msgid "Dark mode"
msgstr "어두운 모드"
-#: src/view/screens/Settings/index.tsx:498
+#: src/view/screens/Settings/index.tsx:517
msgid "Dark Theme"
-msgstr ""
+msgstr "어두운 테마"
+
+#: src/screens/Signup/StepInfo/index.tsx:132
+msgid "Date of birth"
+msgstr "생년월일"
+
+#: src/view/screens/Settings/index.tsx:841
+msgid "Debug Moderation"
+msgstr "검토 디버그"
#: src/view/screens/Debug.tsx:83
msgid "Debug panel"
msgstr "디버그 패널"
-#: src/view/screens/Settings/index.tsx:772
+#: src/view/com/util/forms/PostDropdownBtn.tsx:319
+#: src/view/screens/AppPasswords.tsx:268
+#: src/view/screens/ProfileList.tsx:613
+msgid "Delete"
+msgstr "삭제"
+
+#: src/view/screens/Settings/index.tsx:796
msgid "Delete account"
msgstr "계정 삭제"
-#: src/view/com/modals/DeleteAccount.tsx:87
+#: src/view/com/modals/DeleteAccount.tsx:86
msgid "Delete Account"
msgstr "계정 삭제"
-#: src/view/screens/AppPasswords.tsx:222
-#: src/view/screens/AppPasswords.tsx:242
+#: src/view/screens/AppPasswords.tsx:239
msgid "Delete app password"
msgstr "앱 비밀번호 삭제"
-#: src/view/screens/ProfileList.tsx:363
-#: src/view/screens/ProfileList.tsx:444
+#: src/view/screens/AppPasswords.tsx:263
+msgid "Delete app password?"
+msgstr "앱 비밀번호를 삭제하시겠습니까?"
+
+#: src/view/screens/ProfileList.tsx:415
msgid "Delete List"
msgstr "리스트 삭제"
-#: src/view/com/modals/DeleteAccount.tsx:223
+#: src/view/com/modals/DeleteAccount.tsx:222
msgid "Delete my account"
msgstr "내 계정 삭제"
-#: src/view/screens/Settings.tsx:706
-#~ msgid "Delete my account…"
-#~ msgstr "내 계정 삭제…"
-
-#: src/view/screens/Settings/index.tsx:784
+#: src/view/screens/Settings/index.tsx:808
msgid "Delete My Account…"
-msgstr ""
+msgstr "내 계정 삭제…"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:302
+#: src/view/com/util/forms/PostDropdownBtn.tsx:304
msgid "Delete post"
msgstr "게시물 삭제"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:232
+#: src/view/screens/ProfileList.tsx:608
+msgid "Delete this list?"
+msgstr "이 리스트를 삭제하시겠습니까?"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:314
msgid "Delete this post?"
msgstr "이 게시물을 삭제하시겠습니까?"
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:69
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:64
msgid "Deleted"
msgstr "삭제됨"
-#: src/view/com/post-thread/PostThread.tsx:259
+#: src/view/com/post-thread/PostThread.tsx:305
msgid "Deleted post."
msgstr "삭제된 게시물."
-#: src/view/com/modals/CreateOrEditList.tsx:300
-#: src/view/com/modals/CreateOrEditList.tsx:321
-#: src/view/com/modals/EditProfile.tsx:198
-#: src/view/com/modals/EditProfile.tsx:210
+#: src/view/com/modals/CreateOrEditList.tsx:301
+#: src/view/com/modals/CreateOrEditList.tsx:322
+#: src/view/com/modals/EditProfile.tsx:199
+#: src/view/com/modals/EditProfile.tsx:211
msgid "Description"
msgstr "설명"
-#: src/view/screens/Settings.tsx:760
-#~ msgid "Developer Tools"
-#~ msgstr "개발자 도구"
-
-#: src/view/com/composer/Composer.tsx:211
+#: src/view/com/composer/Composer.tsx:218
msgid "Did you want to say anything?"
msgstr "하고 싶은 말이 있나요?"
-#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:523
msgid "Dim"
-msgstr ""
+msgstr "어둑함"
-#: src/view/com/composer/Composer.tsx:144
+#: src/lib/moderation/useLabelBehaviorDescription.ts:32
+#: src/lib/moderation/useLabelBehaviorDescription.ts:42
+#: src/lib/moderation/useLabelBehaviorDescription.ts:68
+#: src/screens/Moderation/index.tsx:341
+msgid "Disabled"
+msgstr "비활성화됨"
+
+#: src/view/com/composer/Composer.tsx:511
msgid "Discard"
msgstr "삭제"
-#: src/view/com/composer/Composer.tsx:138
-msgid "Discard draft"
+#: src/view/com/composer/Composer.tsx:508
+msgid "Discard draft?"
msgstr "초안 삭제"
-#: src/view/screens/Moderation.tsx:207
+#: src/screens/Moderation/index.tsx:518
+#: src/screens/Moderation/index.tsx:522
msgid "Discourage apps from showing my account to logged-out users"
msgstr "앱이 로그아웃한 사용자에게 내 계정을 표시하지 않도록 설정하기"
@@ -1088,28 +1167,58 @@ msgstr "앱이 로그아웃한 사용자에게 내 계정을 표시하지 않도
msgid "Discover new custom feeds"
msgstr "새로운 맞춤 피드 찾아보기"
-#: src/view/screens/Feeds.tsx:473
-msgid "Discover new feeds"
+#: src/view/screens/Feeds.tsx:689
+msgid "Discover New Feeds"
msgstr "새 피드 발견하기"
-#: src/view/com/modals/EditProfile.tsx:192
+#: src/view/com/modals/EditProfile.tsx:193
msgid "Display name"
msgstr "표시 이름"
-#: src/view/com/modals/EditProfile.tsx:180
+#: src/view/com/modals/EditProfile.tsx:181
msgid "Display Name"
msgstr "표시 이름"
-#: src/view/com/modals/ChangeHandle.tsx:487
+#: src/view/com/modals/ChangeHandle.tsx:397
+msgid "DNS Panel"
+msgstr "DNS 패널"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:39
+msgid "Does not include nudity."
+msgstr "노출을 포함하지 않습니다."
+
+#: src/screens/Signup/StepHandle.tsx:104
+msgid "Doesn't begin or end with a hyphen"
+msgstr "하이픈으로 시작하거나 끝나지 않음"
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "Domain Value"
+msgstr "도메인 값"
+
+#: src/view/com/modals/ChangeHandle.tsx:488
msgid "Domain verified!"
msgstr "도메인을 확인했습니다."
-#: src/view/com/auth/create/Step1.tsx:166
-msgid "Don't have an invite code?"
-msgstr "초대 코드가 없나요?"
+#: src/components/dialogs/BirthDateSettings.tsx:119
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/components/forms/DateField/index.tsx:74
+#: src/components/forms/DateField/index.tsx:80
+#: src/view/com/auth/server-input/index.tsx:169
+#: src/view/com/auth/server-input/index.tsx:170
+#: src/view/com/modals/AddAppPasswords.tsx:227
+#: src/view/com/modals/AltImage.tsx:140
+#: src/view/com/modals/crop-image/CropImage.web.tsx:153
+#: src/view/com/modals/InviteCodes.tsx:81
+#: src/view/com/modals/InviteCodes.tsx:124
+#: src/view/com/modals/ListAddRemoveUsers.tsx:142
+#: src/view/screens/PreferencesFollowingFeed.tsx:311
+#: src/view/screens/Settings/ExportCarDialog.tsx:94
+#: src/view/screens/Settings/ExportCarDialog.tsx:96
+msgid "Done"
+msgstr "완료"
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86
-#: src/view/com/modals/EditImage.tsx:333
+#: src/view/com/modals/EditImage.tsx:334
#: src/view/com/modals/ListAddRemoveUsers.tsx:144
#: src/view/com/modals/SelfLabel.tsx:157
#: src/view/com/modals/Threadgate.tsx:129
@@ -1121,72 +1230,60 @@ msgctxt "action"
msgid "Done"
msgstr "완료"
-#: src/view/com/auth/server-input/index.tsx:165
-#: src/view/com/auth/server-input/index.tsx:166
-#: src/view/com/modals/AddAppPasswords.tsx:226
-#: src/view/com/modals/AltImage.tsx:139
-#: src/view/com/modals/ContentFilteringSettings.tsx:88
-#: src/view/com/modals/ContentFilteringSettings.tsx:96
-#: src/view/com/modals/crop-image/CropImage.web.tsx:152
-#: src/view/com/modals/InviteCodes.tsx:80
-#: src/view/com/modals/InviteCodes.tsx:123
-#: src/view/com/modals/ListAddRemoveUsers.tsx:142
-#: src/view/screens/PreferencesHomeFeed.tsx:311
-#: src/view/screens/Settings/ExportCarDialog.tsx:93
-#: src/view/screens/Settings/ExportCarDialog.tsx:94
-msgid "Done"
-msgstr "완료"
-
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:42
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:43
msgid "Done{extraText}"
msgstr "완료{extraText}"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:45
-msgid "Double tap to sign in"
-msgstr "두 번 탭하여 로그인합니다"
-
-#: src/view/screens/Settings/index.tsx:755
-msgid "Download Bluesky account data (repository)"
-msgstr ""
-
#: src/view/screens/Settings/ExportCarDialog.tsx:59
#: src/view/screens/Settings/ExportCarDialog.tsx:63
msgid "Download CAR file"
-msgstr ""
+msgstr "CAR 파일 다운로드"
-#: src/view/com/composer/text-input/TextInput.web.tsx:247
+#: src/view/com/composer/text-input/TextInput.web.tsx:249
msgid "Drop to add images"
msgstr "드롭하여 이미지 추가"
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:111
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:120
msgid "Due to Apple policies, adult content can only be enabled on the web after completing sign up."
msgstr "Apple 정책으로 인해 성인 콘텐츠는 가입을 완료한 후에 웹에서만 사용 설정할 수 있습니다."
-#: src/view/com/modals/EditProfile.tsx:185
+#: src/view/com/modals/ChangeHandle.tsx:258
+msgid "e.g. alice"
+msgstr "예: alice"
+
+#: src/view/com/modals/EditProfile.tsx:186
msgid "e.g. Alice Roberts"
msgstr "예: 앨리스 로버츠"
-#: src/view/com/modals/EditProfile.tsx:203
+#: src/view/com/modals/ChangeHandle.tsx:380
+msgid "e.g. alice.com"
+msgstr "예: alice.com"
+
+#: src/view/com/modals/EditProfile.tsx:204
msgid "e.g. Artist, dog-lover, and avid reader."
msgstr "예: 예술가, 개 애호가, 독서광."
-#: src/view/com/modals/CreateOrEditList.tsx:283
+#: src/lib/moderation/useGlobalLabelStrings.ts:43
+msgid "E.g. artistic nudes."
+msgstr "예: 예술적인 노출."
+
+#: src/view/com/modals/CreateOrEditList.tsx:284
msgid "e.g. Great Posters"
msgstr "예: 멋진 포스터"
-#: src/view/com/modals/CreateOrEditList.tsx:284
+#: src/view/com/modals/CreateOrEditList.tsx:285
msgid "e.g. Spammers"
msgstr "예: 스팸 계정"
-#: src/view/com/modals/CreateOrEditList.tsx:312
+#: src/view/com/modals/CreateOrEditList.tsx:313
msgid "e.g. The posters who never miss."
msgstr "예: 놓칠 수 없는 포스터들."
-#: src/view/com/modals/CreateOrEditList.tsx:313
+#: src/view/com/modals/CreateOrEditList.tsx:314
msgid "e.g. Users that repeatedly reply with ads."
msgstr "예: 반복적으로 광고 답글을 다는 계정."
-#: src/view/com/modals/InviteCodes.tsx:96
+#: src/view/com/modals/InviteCodes.tsx:97
msgid "Each code works once. You'll receive more invite codes periodically."
msgstr "각 코드는 한 번만 사용할 수 있습니다. 주기적으로 더 많은 초대 코드를 받게 됩니다."
@@ -1195,50 +1292,58 @@ msgctxt "action"
msgid "Edit"
msgstr "편집"
+#: src/view/com/util/UserAvatar.tsx:299
+#: src/view/com/util/UserBanner.tsx:85
+msgid "Edit avatar"
+msgstr "아바타 편집"
+
#: src/view/com/composer/photos/Gallery.tsx:144
-#: src/view/com/modals/EditImage.tsx:207
+#: src/view/com/modals/EditImage.tsx:208
msgid "Edit image"
msgstr "이미지 편집"
-#: src/view/screens/ProfileList.tsx:432
+#: src/view/screens/ProfileList.tsx:403
msgid "Edit list details"
msgstr "리스트 세부 정보 편집"
-#: src/view/com/modals/CreateOrEditList.tsx:250
+#: src/view/com/modals/CreateOrEditList.tsx:251
msgid "Edit Moderation List"
msgstr "검토 리스트 편집"
-#: src/Navigation.tsx:242
+#: src/Navigation.tsx:256
#: src/view/screens/Feeds.tsx:434
#: src/view/screens/SavedFeeds.tsx:84
msgid "Edit My Feeds"
msgstr "내 피드 편집"
-#: src/view/com/modals/EditProfile.tsx:152
+#: src/view/com/modals/EditProfile.tsx:153
msgid "Edit my profile"
msgstr "내 프로필 편집"
-#: src/view/com/profile/ProfileHeader.tsx:417
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:171
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:168
msgid "Edit profile"
msgstr "프로필 편집"
-#: src/view/com/profile/ProfileHeader.tsx:422
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:174
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:171
msgid "Edit Profile"
msgstr "프로필 편집"
-#: src/view/screens/Feeds.tsx:356
+#: src/view/com/home/HomeHeaderLayout.web.tsx:62
+#: src/view/screens/Feeds.tsx:355
msgid "Edit Saved Feeds"
msgstr "저장된 피드 편집"
-#: src/view/com/modals/CreateOrEditList.tsx:245
+#: src/view/com/modals/CreateOrEditList.tsx:246
msgid "Edit User List"
msgstr "사용자 리스트 편집"
-#: src/view/com/modals/EditProfile.tsx:193
+#: src/view/com/modals/EditProfile.tsx:194
msgid "Edit your display name"
msgstr "내 표시 이름 편집"
-#: src/view/com/modals/EditProfile.tsx:211
+#: src/view/com/modals/EditProfile.tsx:212
msgid "Edit your profile description"
msgstr "내 프로필 설명 편집"
@@ -1246,17 +1351,12 @@ msgstr "내 프로필 설명 편집"
msgid "Education"
msgstr "교육"
-#: src/view/com/auth/create/Step1.tsx:195
-#: src/view/com/auth/create/Step2.tsx:194
-#: src/view/com/auth/create/Step2.tsx:269
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:156
+#: src/screens/Signup/StepInfo/index.tsx:80
#: src/view/com/modals/ChangeEmail.tsx:141
-#: src/view/com/modals/Waitlist.tsx:88
msgid "Email"
msgstr "이메일"
-#: src/view/com/auth/create/Step1.tsx:186
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:147
+#: src/screens/Login/ForgotPasswordForm.tsx:99
msgid "Email address"
msgstr "이메일 주소"
@@ -1273,69 +1373,91 @@ msgstr "이메일 변경됨"
msgid "Email verified"
msgstr "이메일 확인됨"
-#: src/view/screens/Settings/index.tsx:312
+#: src/view/screens/Settings/index.tsx:331
msgid "Email:"
msgstr "이메일:"
-#: src/view/com/modals/EmbedConsent.tsx:113
+#: src/components/dialogs/EmbedConsent.tsx:101
msgid "Enable {0} only"
msgstr "{0}만 사용"
-#: src/view/com/modals/ContentFilteringSettings.tsx:167
+#: src/screens/Moderation/index.tsx:329
+msgid "Enable adult content"
+msgstr "성인 콘텐츠 활성화"
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:94
msgid "Enable Adult Content"
msgstr "성인 콘텐츠 활성화"
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:76
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:77
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:79
msgid "Enable adult content in your feeds"
msgstr "피드에서 성인 콘텐츠 사용"
+#: src/components/dialogs/EmbedConsent.tsx:82
+#: src/components/dialogs/EmbedConsent.tsx:89
+msgid "Enable external media"
+msgstr ""
+
#: src/view/com/modals/EmbedConsent.tsx:97
-msgid "Enable External Media"
-msgstr "외부 미디어 사용"
+#~ msgid "Enable External Media"
+#~ msgstr "외부 미디어 사용"
#: src/view/screens/PreferencesExternalEmbeds.tsx:75
msgid "Enable media players for"
msgstr "미디어 플레이어를 사용할 외부 사이트"
-#: src/view/screens/PreferencesHomeFeed.tsx:147
+#: src/view/screens/PreferencesFollowingFeed.tsx:147
msgid "Enable this setting to only see replies between people you follow."
msgstr "내가 팔로우하는 사람들 간의 답글만 표시합니다."
-#: src/view/screens/Profile.tsx:455
+#: src/components/dialogs/EmbedConsent.tsx:94
+msgid "Enable this source only"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:339
+msgid "Enabled"
+msgstr "활성화됨"
+
+#: src/screens/Profile/Sections/Feed.tsx:84
msgid "End of feed"
msgstr "피드 끝"
-#: src/view/com/modals/AddAppPasswords.tsx:166
+#: src/view/com/modals/AddAppPasswords.tsx:167
msgid "Enter a name for this App Password"
-msgstr "이 앱 비밀번호의 이름을 입력하세요"
+msgstr "이 앱 비밀번호의 이름 입력"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:139
+msgid "Enter a password"
+msgstr "비밀번호 입력"
+
+#: src/components/dialogs/MutedWords.tsx:99
+#: src/components/dialogs/MutedWords.tsx:100
+msgid "Enter a word or tag"
+msgstr "단어 또는 태그 입력"
#: src/view/com/modals/VerifyEmail.tsx:105
msgid "Enter Confirmation Code"
msgstr "확인 코드 입력"
-#: src/view/com/modals/ChangePassword.tsx:151
+#: src/view/com/modals/ChangePassword.tsx:153
msgid "Enter the code you received to change your password."
-msgstr ""
+msgstr "비밀번호를 변경하려면 받은 코드를 입력하세요."
-#: src/view/com/modals/ChangeHandle.tsx:371
+#: src/view/com/modals/ChangeHandle.tsx:370
msgid "Enter the domain you want to use"
msgstr "사용할 도메인 입력"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:107
+#: src/screens/Login/ForgotPasswordForm.tsx:119
msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password."
-msgstr "계정을 만들 때 사용한 이메일을 입력합니다. 새 비밀번호를 설정할 수 있도록 \"재설정 코드\"를 보내드립니다."
+msgstr "계정을 만들 때 사용한 이메일을 입력하세요. 새 비밀번호를 설정할 수 있도록 \"재설정 코드\"를 보내드립니다."
-#: src/view/com/auth/create/Step1.tsx:247
-#: src/view/com/modals/BirthDateSettings.tsx:74
+#: src/components/dialogs/BirthDateSettings.tsx:108
msgid "Enter your birth date"
msgstr "생년월일을 입력하세요"
-#: src/view/com/modals/Waitlist.tsx:78
-msgid "Enter your email"
-msgstr "이메일을 입력하세요"
-
-#: src/view/com/auth/create/Step1.tsx:191
+#: src/screens/Login/ForgotPasswordForm.tsx:105
+#: src/screens/Signup/StepInfo/index.tsx:91
msgid "Enter your email address"
msgstr "이메일 주소를 입력하세요"
@@ -1347,15 +1469,15 @@ msgstr "새 이메일을 입력하세요"
msgid "Enter your new email address below."
msgstr "아래에 새 이메일 주소를 입력하세요."
-#: src/view/com/auth/create/Step2.tsx:188
-msgid "Enter your phone number"
-msgstr "전화번호를 입력하세요"
-
-#: src/view/com/auth/login/Login.tsx:99
+#: src/screens/Login/index.tsx:101
msgid "Enter your username and password"
msgstr "사용자 이름 및 비밀번호 입력"
-#: src/view/screens/Search/Search.tsx:109
+#: src/screens/Signup/StepCaptcha/index.tsx:49
+msgid "Error receiving captcha response."
+msgstr "캡차 응답을 수신하는 동안 오류가 발생했습니다."
+
+#: src/view/screens/Search/Search.tsx:111
msgid "Error:"
msgstr "오류:"
@@ -1363,24 +1485,32 @@ msgstr "오류:"
msgid "Everybody"
msgstr "모두"
-#: src/view/com/modals/ChangeHandle.tsx:150
+#: src/lib/moderation/useReportOptions.ts:66
+msgid "Excessive mentions or replies"
+msgstr "과도한 멘션 또는 답글"
+
+#: src/view/com/modals/DeleteAccount.tsx:230
+msgid "Exits account deletion process"
+msgstr "계정 삭제 프로세스를 종료합니다"
+
+#: src/view/com/modals/ChangeHandle.tsx:151
msgid "Exits handle change process"
msgstr "핸들 변경 프로세스를 종료합니다"
-#: src/view/com/lightbox/Lightbox.web.tsx:120
+#: src/view/com/modals/crop-image/CropImage.web.tsx:136
+msgid "Exits image cropping process"
+msgstr "이미지 자르기 프로세스를 종료합니다"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:130
msgid "Exits image view"
msgstr "이미지 보기를 종료합니다"
#: src/view/com/modals/ListAddRemoveUsers.tsx:88
-#: src/view/shell/desktop/Search.tsx:235
+#: src/view/shell/desktop/Search.tsx:236
msgid "Exits inputting search query"
msgstr "검색어 입력을 종료합니다"
-#: src/view/com/modals/Waitlist.tsx:138
-msgid "Exits signing up for waitlist with {email}"
-msgstr "{email}을(를) 대기자 명단에 등록하는 것을 종료합니다"
-
-#: src/view/com/lightbox/Lightbox.web.tsx:163
+#: src/view/com/lightbox/Lightbox.web.tsx:183
msgid "Expand alt text"
msgstr "대체 텍스트 확장"
@@ -1389,44 +1519,53 @@ msgstr "대체 텍스트 확장"
msgid "Expand or collapse the full post you are replying to"
msgstr "답글을 달고 있는 전체 게시물을 펼치거나 접습니다"
-#: src/view/screens/Settings/index.tsx:753
+#: src/lib/moderation/useGlobalLabelStrings.ts:47
+msgid "Explicit or potentially disturbing media."
+msgstr "노골적이거나 불쾌감을 줄 수 있는 미디어."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:35
+msgid "Explicit sexual images."
+msgstr "노골적인 성적 이미지."
+
+#: src/view/screens/Settings/index.tsx:777
msgid "Export my data"
-msgstr ""
+msgstr "내 데이터 내보내기"
#: src/view/screens/Settings/ExportCarDialog.tsx:44
-#: src/view/screens/Settings/index.tsx:764
+#: src/view/screens/Settings/index.tsx:788
msgid "Export My Data"
-msgstr ""
+msgstr "내 데이터 내보내기"
-#: src/view/com/modals/EmbedConsent.tsx:64
+#: src/components/dialogs/EmbedConsent.tsx:55
+#: src/components/dialogs/EmbedConsent.tsx:59
msgid "External Media"
msgstr "외부 미디어"
-#: src/view/com/modals/EmbedConsent.tsx:75
+#: src/components/dialogs/EmbedConsent.tsx:71
#: src/view/screens/PreferencesExternalEmbeds.tsx:66
msgid "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."
msgstr "외부 미디어는 웹사이트가 나와 내 기기에 대한 정보를 수집하도록 할 수 있습니다. \"재생\" 버튼을 누르기 전까지는 어떠한 정보도 전송되거나 요청되지 않습니다."
-#: src/Navigation.tsx:258
+#: src/Navigation.tsx:275
#: src/view/screens/PreferencesExternalEmbeds.tsx:52
-#: src/view/screens/Settings/index.tsx:657
+#: src/view/screens/Settings/index.tsx:677
msgid "External Media Preferences"
msgstr "외부 미디어 설정"
-#: src/view/screens/Settings/index.tsx:648
+#: src/view/screens/Settings/index.tsx:668
msgid "External media settings"
msgstr "외부 미디어 설정"
-#: src/view/com/modals/AddAppPasswords.tsx:115
-#: src/view/com/modals/AddAppPasswords.tsx:119
+#: src/view/com/modals/AddAppPasswords.tsx:116
+#: src/view/com/modals/AddAppPasswords.tsx:120
msgid "Failed to create app password."
msgstr "앱 비밀번호를 만들지 못했습니다."
-#: src/view/com/modals/CreateOrEditList.tsx:206
+#: src/view/com/modals/CreateOrEditList.tsx:207
msgid "Failed to create the list. Check your internet connection and try again."
msgstr "리스트를 만들지 못했습니다. 인터넷 연결을 확인한 후 다시 시도하세요."
-#: src/view/com/util/forms/PostDropdownBtn.tsx:88
+#: src/view/com/util/forms/PostDropdownBtn.tsx:125
msgid "Failed to delete post, please try again"
msgstr "게시물을 삭제하지 못했습니다. 다시 시도해 주세요"
@@ -1435,34 +1574,35 @@ msgstr "게시물을 삭제하지 못했습니다. 다시 시도해 주세요"
msgid "Failed to load recommended feeds"
msgstr "추천 피드를 불러오지 못했습니다"
-#: src/Navigation.tsx:192
+#: src/view/com/lightbox/Lightbox.tsx:83
+msgid "Failed to save image: {0}"
+msgstr "이미지를 저장하지 못함: {0}"
+
+#: src/Navigation.tsx:196
msgid "Feed"
msgstr "피드"
-#: src/view/com/feeds/FeedSourceCard.tsx:229
+#: src/view/com/feeds/FeedSourceCard.tsx:218
msgid "Feed by {0}"
msgstr "{0} 님의 피드"
-#: src/view/screens/Feeds.tsx:631
+#: src/view/screens/Feeds.tsx:605
msgid "Feed offline"
msgstr "피드 오프라인"
-#: src/view/com/feeds/FeedPage.tsx:143
-msgid "Feed Preferences"
-msgstr "피드 설정"
-
-#: src/view/shell/desktop/RightNav.tsx:69
-#: src/view/shell/Drawer.tsx:311
+#: src/view/shell/desktop/RightNav.tsx:61
+#: src/view/shell/Drawer.tsx:314
msgid "Feedback"
msgstr "피드백"
-#: src/Navigation.tsx:442
-#: src/view/screens/Feeds.tsx:548
-#: src/view/screens/Profile.tsx:184
-#: src/view/shell/bottom-bar/BottomBar.tsx:181
-#: src/view/shell/desktop/LeftNav.tsx:342
-#: src/view/shell/Drawer.tsx:476
-#: src/view/shell/Drawer.tsx:477
+#: src/Navigation.tsx:464
+#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:524
+#: src/view/screens/Profile.tsx:194
+#: src/view/shell/bottom-bar/BottomBar.tsx:191
+#: src/view/shell/desktop/LeftNav.tsx:346
+#: src/view/shell/Drawer.tsx:479
+#: src/view/shell/Drawer.tsx:480
msgid "Feeds"
msgstr "피드"
@@ -1472,13 +1612,21 @@ msgstr "피드는 콘텐츠를 큐레이션하기 위해 사용자에 의해 만
#: src/view/screens/SavedFeeds.tsx:156
msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information."
-msgstr "피드는 사용자가 약간의 코딩 전문 지식으로 구축할 수 있는 맞춤 알고리즘입니다. <0/>에서 자세한 내용을 확인하세요."
+msgstr "피드는 사용자가 약간의 코딩 전문 지식만으로 구축할 수 있는 맞춤 알고리즘입니다. <0/>에서 자세한 내용을 확인하세요."
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:70
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:80
msgid "Feeds can be topical as well!"
-msgstr "피드도 화제가 될 수 있습니다!"
+msgstr "주제 기반 피드도 있습니다!"
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "File Contents"
+msgstr "파일 콘텐츠"
-#: src/screens/Onboarding/StepFinished.tsx:151
+#: src/lib/moderation/useLabelBehaviorDescription.ts:66
+msgid "Filter from feeds"
+msgstr "피드에서 필터링"
+
+#: src/screens/Onboarding/StepFinished.tsx:155
msgid "Finalizing"
msgstr "마무리 중"
@@ -1488,73 +1636,84 @@ msgstr "마무리 중"
msgid "Find accounts to follow"
msgstr "팔로우할 계정 찾아보기"
-#: src/view/screens/Search/Search.tsx:439
+#: src/view/screens/Search/Search.tsx:442
msgid "Find users on Bluesky"
msgstr "Bluesky에서 사용자 찾기"
-#: src/view/screens/Search/Search.tsx:437
+#: src/view/screens/Search/Search.tsx:440
msgid "Find users with the search tool on the right"
msgstr "오른쪽의 검색 도구로 사용자 찾기"
-#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:155
msgid "Finding similar accounts..."
msgstr "유사한 계정을 찾는 중…"
-#: src/view/screens/PreferencesHomeFeed.tsx:111
-msgid "Fine-tune the content you see on your home screen."
-msgstr "홈 화면에 표시되는 콘텐츠를 미세 조정합니다."
+#: src/view/screens/PreferencesFollowingFeed.tsx:111
+msgid "Fine-tune the content you see on your Following feed."
+msgstr "팔로우 중 피드에 표시되는 콘텐츠를 미세 조정합니다."
#: src/view/screens/PreferencesThreads.tsx:60
msgid "Fine-tune the discussion threads."
-msgstr "토론 스레드를 미세 조정합니다."
+msgstr "대화 스레드를 미세 조정합니다."
#: src/screens/Onboarding/index.tsx:38
msgid "Fitness"
msgstr "건강"
-#: src/screens/Onboarding/StepFinished.tsx:131
+#: src/screens/Onboarding/StepFinished.tsx:135
msgid "Flexible"
msgstr "유연성"
-#: src/view/com/modals/EditImage.tsx:115
+#: src/view/com/modals/EditImage.tsx:116
msgid "Flip horizontal"
msgstr "가로로 뒤집기"
-#: src/view/com/modals/EditImage.tsx:120
-#: src/view/com/modals/EditImage.tsx:287
+#: src/view/com/modals/EditImage.tsx:121
+#: src/view/com/modals/EditImage.tsx:288
msgid "Flip vertically"
msgstr "세로로 뒤집기"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:181
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:512
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:189
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:236
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:146
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
msgid "Follow"
msgstr "팔로우"
-#: src/view/com/profile/FollowButton.tsx:64
+#: src/view/com/profile/FollowButton.tsx:69
msgctxt "action"
msgid "Follow"
msgstr "팔로우"
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:58
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:122
-#: src/view/com/profile/ProfileHeader.tsx:503
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:221
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:128
msgid "Follow {0}"
msgstr "{0} 님을 팔로우"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:179
+#: src/view/com/profile/ProfileMenu.tsx:242
+#: src/view/com/profile/ProfileMenu.tsx:253
+msgid "Follow Account"
+msgstr "계정 팔로우"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:187
msgid "Follow All"
msgstr "모두 팔로우"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:174
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:144
+msgid "Follow Back"
+msgstr ""
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:182
msgid "Follow selected accounts and continue to the next step"
msgstr "선택한 계정을 팔로우하고 다음 단계를 계속 진행합니다"
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:64
msgid "Follow some users to get started. We can recommend you more users based on who you find interesting."
-msgstr "일부 사용자를 팔로우하여 시작하세요. 관심 있는 사용자를 기반으로 더 많은 사용자를 추천해 드릴 수 있습니다."
+msgstr "시작하려면 사용자 몇 명을 팔로우해 보세요. 누구에게 관심이 있는지를 기반으로 더 많은 사용자를 추천해 드릴 수 있습니다."
-#: src/view/com/profile/ProfileCard.tsx:194
+#: src/view/com/profile/ProfileCard.tsx:216
msgid "Followed by {0}"
msgstr "{0} 님이 팔로우함"
@@ -1562,29 +1721,43 @@ msgstr "{0} 님이 팔로우함"
msgid "Followed users"
msgstr "팔로우한 사용자"
-#: src/view/screens/PreferencesHomeFeed.tsx:154
+#: src/view/screens/PreferencesFollowingFeed.tsx:154
msgid "Followed users only"
msgstr "팔로우한 사용자만"
-#: src/view/com/notifications/FeedItem.tsx:166
+#: src/view/com/notifications/FeedItem.tsx:170
msgid "followed you"
msgstr "님이 나를 팔로우했습니다"
+#: src/view/com/profile/ProfileFollowers.tsx:104
#: src/view/screens/ProfileFollowers.tsx:25
msgid "Followers"
msgstr "팔로워"
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:494
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:234
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:149
+#: src/view/com/profile/ProfileFollows.tsx:104
#: src/view/screens/ProfileFollows.tsx:25
msgid "Following"
msgstr "팔로우 중"
-#: src/view/com/profile/ProfileHeader.tsx:148
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:93
msgid "Following {0}"
-msgstr "{0} 팔로우 중"
+msgstr "{0} 님을 팔로우했습니다"
+
+#: src/view/screens/Settings/index.tsx:553
+msgid "Following feed preferences"
+msgstr "팔로우 중 피드 설정"
-#: src/view/com/profile/ProfileHeader.tsx:545
+#: src/Navigation.tsx:262
+#: src/view/com/home/HomeHeaderLayout.web.tsx:50
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:84
+#: src/view/screens/PreferencesFollowingFeed.tsx:104
+#: src/view/screens/Settings/index.tsx:562
+msgid "Following Feed Preferences"
+msgstr "팔로우 중 피드 설정"
+
+#: src/screens/Profile/Header/Handle.tsx:24
msgid "Follows you"
msgstr "나를 팔로우함"
@@ -1596,28 +1769,37 @@ msgstr "나를 팔로우함"
msgid "Food"
msgstr "음식"
-#: src/view/com/modals/DeleteAccount.tsx:111
+#: src/view/com/modals/DeleteAccount.tsx:110
msgid "For security reasons, we'll need to send a confirmation code to your email address."
msgstr "보안상의 이유로 이메일 주소로 확인 코드를 보내야 합니다."
-#: src/view/com/modals/AddAppPasswords.tsx:209
+#: src/view/com/modals/AddAppPasswords.tsx:210
msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one."
msgstr "보안상의 이유로 이 비밀번호는 다시 볼 수 없습니다. 이 비밀번호를 분실한 경우 새 비밀번호를 생성해야 합니다."
-#: src/view/com/auth/login/LoginForm.tsx:241
-msgid "Forgot"
+#: src/screens/Login/index.tsx:129
+#: src/screens/Login/index.tsx:144
+msgid "Forgot Password"
+msgstr "비밀번호 분실"
+
+#: src/screens/Login/LoginForm.tsx:201
+msgid "Forgot password?"
+msgstr "비밀번호를 잊으셨나요?"
+
+#: src/screens/Login/LoginForm.tsx:212
+msgid "Forgot?"
msgstr "분실"
-#: src/view/com/auth/login/LoginForm.tsx:238
-msgid "Forgot password"
-msgstr "비밀번호 분실"
+#: src/lib/moderation/useReportOptions.ts:52
+msgid "Frequently Posts Unwanted Content"
+msgstr "잦은 원치 않는 콘텐츠 게시"
-#: src/view/com/auth/login/Login.tsx:127
-#: src/view/com/auth/login/Login.tsx:143
-msgid "Forgot Password"
-msgstr "비밀번호 분실"
+#: src/screens/Hashtag.tsx:109
+#: src/screens/Hashtag.tsx:149
+msgid "From @{sanitizedAuthor}"
+msgstr "@{sanitizedAuthor} 님의 태그"
-#: src/view/com/posts/FeedItem.tsx:189
+#: src/view/com/posts/FeedItem.tsx:179
msgctxt "from-feed"
msgid "From <0/>"
msgstr "<0/>에서"
@@ -1631,101 +1813,137 @@ msgstr "갤러리"
msgid "Get Started"
msgstr "시작하기"
-#: src/view/com/auth/LoggedOut.tsx:81
+#: src/lib/moderation/useReportOptions.ts:37
+msgid "Glaring violations of law or terms of service"
+msgstr "명백한 법률 또는 서비스 이용약관 위반 행위"
+
+#: src/components/moderation/ScreenHider.tsx:151
+#: src/components/moderation/ScreenHider.tsx:160
#: src/view/com/auth/LoggedOut.tsx:82
-#: src/view/com/util/moderation/ScreenHider.tsx:123
-#: src/view/shell/desktop/LeftNav.tsx:104
+#: src/view/com/auth/LoggedOut.tsx:83
+#: src/view/screens/NotFound.tsx:55
+#: src/view/screens/ProfileFeed.tsx:112
+#: src/view/screens/ProfileList.tsx:916
+#: src/view/shell/desktop/LeftNav.tsx:108
msgid "Go back"
msgstr "뒤로"
-#: src/view/screens/ProfileFeed.tsx:105
-#: src/view/screens/ProfileFeed.tsx:110
-#: src/view/screens/ProfileList.tsx:897
-#: src/view/screens/ProfileList.tsx:902
+#: src/components/Error.tsx:91
+#: src/screens/Profile/ErrorState.tsx:62
+#: src/screens/Profile/ErrorState.tsx:66
+#: src/view/screens/NotFound.tsx:54
+#: src/view/screens/ProfileFeed.tsx:117
+#: src/view/screens/ProfileList.tsx:921
msgid "Go Back"
msgstr "뒤로"
-#: src/screens/Onboarding/Layout.tsx:104
-#: src/screens/Onboarding/Layout.tsx:193
+#: src/components/ReportDialog/SelectReportOptionView.tsx:73
+#: src/components/ReportDialog/SubmitView.tsx:104
+#: src/screens/Onboarding/Layout.tsx:102
+#: src/screens/Onboarding/Layout.tsx:191
+#: src/screens/Signup/index.tsx:173
msgid "Go back to previous step"
msgstr "이전 단계로 돌아가기"
-#: src/view/screens/Search/Search.tsx:724
-#: src/view/shell/desktop/Search.tsx:262
+#: src/view/screens/NotFound.tsx:55
+msgid "Go home"
+msgstr "홈으로 이동"
+
+#: src/view/screens/NotFound.tsx:54
+msgid "Go Home"
+msgstr "홈으로 이동"
+
+#: src/view/screens/Search/Search.tsx:749
+#: src/view/shell/desktop/Search.tsx:263
msgid "Go to @{queryMaybeHandle}"
msgstr "@{queryMaybeHandle}(으)로 이동"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:189
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:218
-#: src/view/com/auth/login/LoginForm.tsx:288
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:195
-#: src/view/com/modals/ChangePassword.tsx:165
+#: src/screens/Login/ForgotPasswordForm.tsx:172
+#: src/view/com/modals/ChangePassword.tsx:167
msgid "Go to next"
msgstr "다음"
-#: src/view/com/modals/ChangeHandle.tsx:265
+#: src/lib/moderation/useGlobalLabelStrings.ts:46
+msgid "Graphic Media"
+msgstr "그래픽 미디어"
+
+#: src/view/com/modals/ChangeHandle.tsx:266
msgid "Handle"
msgstr "핸들"
-#: src/view/com/auth/create/CreateAccount.tsx:197
+#: src/lib/moderation/useReportOptions.ts:32
+msgid "Harassment, trolling, or intolerance"
+msgstr "괴롭힘, 분쟁 유발 또는 차별"
+
+#: src/Navigation.tsx:282
+msgid "Hashtag"
+msgstr "해시태그"
+
+#: src/components/RichText.tsx:191
+msgid "Hashtag: #{tag}"
+msgstr "해시태그: #{tag}"
+
+#: src/screens/Signup/index.tsx:217
msgid "Having trouble?"
msgstr "문제가 있나요?"
-#: src/view/shell/desktop/RightNav.tsx:98
-#: src/view/shell/Drawer.tsx:321
+#: src/view/shell/desktop/RightNav.tsx:90
+#: src/view/shell/Drawer.tsx:324
msgid "Help"
msgstr "도움말"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:132
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:140
msgid "Here are some accounts for you to follow"
msgstr "팔로우할 만한 계정"
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:79
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:89
msgid "Here are some popular topical feeds. You can choose to follow as many as you like."
msgstr "다음은 인기 있는 화제 피드입니다. 원하는 만큼 피드를 팔로우할 수 있습니다."
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:74
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:84
msgid "Here are some topical feeds based on your interests: {interestsText}. You can choose to follow as many as you like."
msgstr "다음은 사용자의 관심사를 기반으로 한 몇 가지 주제별 피드입니다: {interestsText}. 원하는 만큼 많은 피드를 팔로우할 수 있습니다."
-#: src/view/com/modals/AddAppPasswords.tsx:153
+#: src/view/com/modals/AddAppPasswords.tsx:154
msgid "Here is your app password."
msgstr "앱 비밀번호입니다."
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:41
-#: src/view/com/modals/ContentFilteringSettings.tsx:251
-#: src/view/com/util/moderation/ContentHider.tsx:105
-#: src/view/com/util/moderation/PostHider.tsx:108
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:134
+#: src/components/moderation/PostHider.tsx:107
+#: src/lib/moderation/useLabelBehaviorDescription.ts:15
+#: src/lib/moderation/useLabelBehaviorDescription.ts:20
+#: src/lib/moderation/useLabelBehaviorDescription.ts:25
+#: src/lib/moderation/useLabelBehaviorDescription.ts:30
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:52
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:76
+#: src/view/com/util/forms/PostDropdownBtn.tsx:328
msgid "Hide"
msgstr "숨기기"
-#: src/view/com/modals/ContentFilteringSettings.tsx:224
-#: src/view/com/notifications/FeedItem.tsx:325
+#: src/view/com/notifications/FeedItem.tsx:329
msgctxt "action"
msgid "Hide"
msgstr "숨기기"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:187
+#: src/view/com/util/forms/PostDropdownBtn.tsx:276
+#: src/view/com/util/forms/PostDropdownBtn.tsx:278
msgid "Hide post"
msgstr "게시물 숨기기"
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:67
+#: src/components/moderation/PostHider.tsx:64
msgid "Hide the content"
msgstr "콘텐츠 숨기기"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:191
+#: src/view/com/util/forms/PostDropdownBtn.tsx:325
msgid "Hide this post?"
msgstr "이 게시물을 숨기시겠습니까?"
-#: src/view/com/notifications/FeedItem.tsx:315
+#: src/view/com/notifications/FeedItem.tsx:319
msgid "Hide user list"
msgstr "사용자 리스트 숨기기"
-#: src/view/com/profile/ProfileHeader.tsx:486
-msgid "Hides posts from {0} in your feed"
-msgstr "피드에서 {0} 님의 게시물을 숨깁니다"
-
#: src/view/com/posts/FeedErrorMessage.tsx:111
msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue."
msgstr "피드 서버에 연결하는 중 어떤 문제가 발생했습니다. 피드 소유자에게 이 문제에 대해 알려주세요."
@@ -1746,23 +1964,30 @@ msgstr "피드 서버에서 잘못된 응답을 보냈습니다. 피드 소유
msgid "Hmm, we're having trouble finding this feed. It may have been deleted."
msgstr "이 피드를 찾는 데 문제가 있습니다. 피드가 삭제되었을 수 있습니다."
-#: src/Navigation.tsx:432
-#: src/view/shell/bottom-bar/BottomBar.tsx:137
-#: src/view/shell/desktop/LeftNav.tsx:306
-#: src/view/shell/Drawer.tsx:398
-#: src/view/shell/Drawer.tsx:399
+#: src/screens/Moderation/index.tsx:59
+msgid "Hmmmm, it seems we're having trouble loading this data. See below for more details. If this issue persists, please contact us."
+msgstr "이 데이터를 불러오는 데 문제가 있는 것 같습니다. 자세한 내용은 아래를 참조하세요. 이 문제가 지속되면 문의해 주세요."
+
+#: src/screens/Profile/ErrorState.tsx:31
+msgid "Hmmmm, we couldn't load that moderation service."
+msgstr "검토 서비스를 불러올 수 없습니다."
+
+#: src/Navigation.tsx:454
+#: src/view/shell/bottom-bar/BottomBar.tsx:147
+#: src/view/shell/desktop/LeftNav.tsx:310
+#: src/view/shell/Drawer.tsx:401
+#: src/view/shell/Drawer.tsx:402
msgid "Home"
msgstr "홈"
-#: src/Navigation.tsx:247
-#: src/view/com/pager/FeedsTabBarMobile.tsx:123
-#: src/view/screens/PreferencesHomeFeed.tsx:104
-#: src/view/screens/Settings/index.tsx:543
-msgid "Home Feed Preferences"
-msgstr "홈 피드 설정"
+#: src/view/com/modals/ChangeHandle.tsx:420
+msgid "Host:"
+msgstr "호스트:"
-#: src/view/com/auth/create/Step1.tsx:78
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:120
+#: src/screens/Login/ForgotPasswordForm.tsx:89
+#: src/screens/Login/LoginForm.tsx:134
+#: src/screens/Signup/StepInfo/index.tsx:40
+#: src/view/com/modals/ChangeHandle.tsx:281
msgid "Hosting provider"
msgstr "호스팅 제공자"
@@ -1778,11 +2003,11 @@ msgstr "코드가 있습니다"
msgid "I have a confirmation code"
msgstr "확인 코드가 있습니다"
-#: src/view/com/modals/ChangeHandle.tsx:283
+#: src/view/com/modals/ChangeHandle.tsx:284
msgid "I have my own domain"
msgstr "내 도메인을 가지고 있습니다"
-#: src/view/com/lightbox/Lightbox.web.tsx:165
+#: src/view/com/lightbox/Lightbox.web.tsx:185
msgid "If alt text is long, toggles alt text expanded state"
msgstr "대체 텍스트가 긴 경우 대체 텍스트 확장 상태를 전환합니다"
@@ -1790,189 +2015,195 @@ msgstr "대체 텍스트가 긴 경우 대체 텍스트 확장 상태를 전환
msgid "If none are selected, suitable for all ages."
msgstr "아무것도 선택하지 않으면 모든 연령대에 적합하다는 뜻입니다."
-#: src/view/com/modals/ChangePassword.tsx:146
+#: src/screens/Signup/StepInfo/Policies.tsx:83
+msgid "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."
+msgstr "해당 국가의 법률에 따라 아직 성인이 아닌 경우, 부모 또는 법적 보호자가 대신 이 약관을 읽어야 합니다."
+
+#: src/view/screens/ProfileList.tsx:610
+msgid "If you delete this list, you won't be able to recover it."
+msgstr "이 리스트를 삭제하면 다시 복구할 수 없습니다."
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:316
+msgid "If you remove this post, you won't be able to recover it."
+msgstr "이 게시물을 삭제하면 다시 복구할 수 없습니다."
+
+#: src/view/com/modals/ChangePassword.tsx:148
msgid "If you want to change your password, we will send you a code to verify that this is your account."
-msgstr ""
+msgstr "비밀번호를 변경하고 싶다면 본인 계정임을 확인할 수 있는 코드를 보내드리겠습니다."
+
+#: src/lib/moderation/useReportOptions.ts:36
+msgid "Illegal and Urgent"
+msgstr "불법 및 긴급 사항"
#: src/view/com/util/images/Gallery.tsx:38
msgid "Image"
msgstr "이미지"
-#: src/view/com/modals/AltImage.tsx:120
+#: src/view/com/modals/AltImage.tsx:121
msgid "Image alt text"
msgstr "이미지 대체 텍스트"
-#: src/view/com/util/UserAvatar.tsx:311
-#: src/view/com/util/UserBanner.tsx:118
-msgid "Image options"
-msgstr "이미지 옵션"
+#: src/lib/moderation/useReportOptions.ts:47
+msgid "Impersonation or false claims about identity or affiliation"
+msgstr "신원 또는 소속에 대한 사칭 또는 허위 주장"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:138
+#: src/screens/Login/SetNewPasswordForm.tsx:127
msgid "Input code sent to your email for password reset"
msgstr "비밀번호 재설정을 위해 이메일로 전송된 코드를 입력합니다"
-#: src/view/com/modals/DeleteAccount.tsx:184
+#: src/view/com/modals/DeleteAccount.tsx:183
msgid "Input confirmation code for account deletion"
msgstr "계정 삭제를 위한 확인 코드를 입력합니다"
-#: src/view/com/auth/create/Step1.tsx:196
-msgid "Input email for Bluesky account"
-msgstr "Bluesky 계정에 사용할 이메일을 입력합니다"
-
-#: src/view/com/auth/create/Step1.tsx:154
-msgid "Input invite code to proceed"
-msgstr "진행하기 위해 초대 코드를 입력합니다"
-
-#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/AddAppPasswords.tsx:181
msgid "Input name for app password"
msgstr "앱 비밀번호의 이름을 입력합니다"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:162
+#: src/screens/Login/SetNewPasswordForm.tsx:151
msgid "Input new password"
msgstr "새 비밀번호를 입력합니다"
-#: src/view/com/modals/DeleteAccount.tsx:203
+#: src/view/com/modals/DeleteAccount.tsx:202
msgid "Input password for account deletion"
msgstr "계정을 삭제하기 위해 비밀번호를 입력합니다"
-#: src/view/com/auth/create/Step2.tsx:196
-msgid "Input phone number for SMS verification"
-msgstr "SMS 인증에 사용할 전화번호를 입력합니다"
-
-#: src/view/com/auth/login/LoginForm.tsx:230
+#: src/screens/Login/LoginForm.tsx:195
msgid "Input the password tied to {identifier}"
msgstr "{identifier}에 연결된 비밀번호를 입력합니다"
-#: src/view/com/auth/login/LoginForm.tsx:197
+#: src/screens/Login/LoginForm.tsx:168
msgid "Input the username or email address you used at signup"
msgstr "가입 시 사용한 사용자 이름 또는 이메일 주소를 입력합니다"
-#: src/view/com/auth/create/Step2.tsx:271
-msgid "Input the verification code we have texted to you"
-msgstr "문자 메시지로 전송된 인증 코드를 입력합니다"
-
-#: src/view/com/modals/Waitlist.tsx:90
-msgid "Input your email to get on the Bluesky waitlist"
-msgstr "Bluesky 대기자 명단에 등록하려면 이메일을 입력합니다"
-
-#: src/view/com/auth/login/LoginForm.tsx:229
+#: src/screens/Login/LoginForm.tsx:194
msgid "Input your password"
msgstr "비밀번호를 입력합니다"
-#: src/view/com/auth/create/Step3.tsx:42
+#: src/view/com/modals/ChangeHandle.tsx:389
+msgid "Input your preferred hosting provider"
+msgstr "선호하는 호스팅 제공자를 입력합니다"
+
+#: src/screens/Signup/StepHandle.tsx:62
msgid "Input your user handle"
msgstr "사용자 핸들을 입력합니다"
-#: src/view/com/post-thread/PostThreadItem.tsx:225
+#: src/view/com/post-thread/PostThreadItem.tsx:221
msgid "Invalid or unsupported post record"
msgstr "유효하지 않거나 지원되지 않는 게시물 기록"
-#: src/view/com/auth/login/LoginForm.tsx:113
+#: src/screens/Login/LoginForm.tsx:114
msgid "Invalid username or password"
msgstr "잘못된 사용자 이름 또는 비밀번호"
-#: src/view/screens/Settings.tsx:411
-#~ msgid "Invite"
-#~ msgstr "초대"
-
-#: src/view/com/modals/InviteCodes.tsx:93
+#: src/view/com/modals/InviteCodes.tsx:94
msgid "Invite a Friend"
msgstr "친구 초대하기"
-#: src/view/com/auth/create/Step1.tsx:144
-#: src/view/com/auth/create/Step1.tsx:153
+#: src/screens/Signup/StepInfo/index.tsx:58
msgid "Invite code"
msgstr "초대 코드"
-#: src/view/com/auth/create/state.ts:199
+#: src/screens/Signup/state.ts:278
msgid "Invite code not accepted. Check that you input it correctly and try again."
msgstr "초대 코드가 올바르지 않습니다. 코드를 올바르게 입력했는지 확인한 후 다시 시도하세요."
-#: src/view/com/modals/InviteCodes.tsx:170
+#: src/view/com/modals/InviteCodes.tsx:171
msgid "Invite codes: {0} available"
msgstr "초대 코드: {0}개 사용 가능"
-#: src/view/shell/Drawer.tsx:645
-#~ msgid "Invite codes: {invitesAvailable} available"
-#~ msgstr "초대 코드: {invitesAvailable}개 사용 가능"
-
-#: src/view/com/modals/InviteCodes.tsx:169
+#: src/view/com/modals/InviteCodes.tsx:170
msgid "Invite codes: 1 available"
msgstr "초대 코드: 1개 사용 가능"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:64
+#: src/screens/Onboarding/StepFollowingFeed.tsx:65
msgid "It shows posts from the people you follow as they happen."
msgstr "내가 팔로우하는 사람들의 게시물이 올라오는 대로 표시됩니다."
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:99
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:104
+#: src/view/com/auth/SplashScreen.web.tsx:172
msgid "Jobs"
msgstr "채용"
-#: src/view/com/modals/Waitlist.tsx:67
-msgid "Join the waitlist"
-msgstr "대기자 명단 등록"
-
-#: src/view/com/auth/create/Step1.tsx:170
-#: src/view/com/auth/create/Step1.tsx:174
-msgid "Join the waitlist."
-msgstr "대기자 명단에 등록하세요."
-
-#: src/view/com/modals/Waitlist.tsx:128
-msgid "Join Waitlist"
-msgstr "대기자 명단 등록"
-
#: src/screens/Onboarding/index.tsx:24
msgid "Journalism"
msgstr "저널리즘"
+#: src/components/moderation/LabelsOnMe.tsx:59
+msgid "label has been placed on this {labelTarget}"
+msgstr "이 {labelTarget}에 라벨이 지정되었습니다"
+
+#: src/components/moderation/ContentHider.tsx:144
+msgid "Labeled by {0}."
+msgstr "{0} 님이 라벨 지정함."
+
+#: src/components/moderation/ContentHider.tsx:142
+msgid "Labeled by the author."
+msgstr "작성자가 라벨 지정함."
+
+#: src/view/screens/Profile.tsx:188
+msgid "Labels"
+msgstr "라벨"
+
+#: src/screens/Profile/Sections/Labels.tsx:142
+msgid "Labels are annotations on users and content. They can be used to hide, warn, and categorize the network."
+msgstr "라벨은 사용자 및 콘텐츠에 대한 주석입니다. 네트워크를 숨기고, 경고하고, 분류하는 데 사용할 수 있습니다."
+
+#: src/components/moderation/LabelsOnMe.tsx:61
+msgid "labels have been placed on this {labelTarget}"
+msgstr "라벨이 {labelTarget}에 지정되었습니다"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:62
+msgid "Labels on your account"
+msgstr "내 계정의 라벨"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:64
+msgid "Labels on your content"
+msgstr "내 콘텐츠의 라벨"
+
#: src/view/com/composer/select-language/SelectLangBtn.tsx:104
msgid "Language selection"
msgstr "언어 선택"
-#: src/view/screens/Settings/index.tsx:594
+#: src/view/screens/Settings/index.tsx:614
msgid "Language settings"
msgstr "언어 설정"
-#: src/Navigation.tsx:140
+#: src/Navigation.tsx:144
#: src/view/screens/LanguageSettings.tsx:89
msgid "Language Settings"
msgstr "언어 설정"
-#: src/view/screens/Settings/index.tsx:603
+#: src/view/screens/Settings/index.tsx:623
msgid "Languages"
msgstr "언어"
-#: src/view/com/auth/create/StepHeader.tsx:20
-msgid "Last step!"
-msgstr "마지막 단계예요!"
-
-#: src/view/com/util/moderation/ContentHider.tsx:103
-msgid "Learn more"
-msgstr "더 알아보기"
-
-#: src/view/com/util/moderation/PostAlerts.tsx:47
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:65
-#: src/view/com/util/moderation/ScreenHider.tsx:104
+#: src/components/moderation/ScreenHider.tsx:136
msgid "Learn More"
msgstr "더 알아보기"
-#: src/view/com/util/moderation/ContentHider.tsx:85
-#: src/view/com/util/moderation/PostAlerts.tsx:40
-#: src/view/com/util/moderation/PostHider.tsx:78
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:49
-#: src/view/com/util/moderation/ScreenHider.tsx:101
+#: src/components/moderation/ContentHider.tsx:65
+#: src/components/moderation/ContentHider.tsx:128
+msgid "Learn more about the moderation applied to this content."
+msgstr "이 콘텐츠에 적용된 검토 설정에 대해 자세히 알아보세요."
+
+#: src/components/moderation/PostHider.tsx:85
+#: src/components/moderation/ScreenHider.tsx:125
msgid "Learn more about this warning"
msgstr "이 경고에 대해 더 알아보기"
-#: src/view/screens/Moderation.tsx:243
+#: src/screens/Moderation/index.tsx:549
msgid "Learn more about what is public on Bluesky."
msgstr "Bluesky에서 공개되는 항목에 대해 자세히 알아보세요."
+#: src/components/moderation/ContentHider.tsx:152
+msgid "Learn more."
+msgstr "더 알아보기"
+
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82
msgid "Leave them all unchecked to see any language."
msgstr "모든 언어를 보려면 모두 선택하지 않은 상태로 두세요."
-#: src/view/com/modals/LinkWarning.tsx:51
+#: src/view/com/modals/LinkWarning.tsx:65
msgid "Leaving Bluesky"
msgstr "Bluesky 떠나기"
@@ -1980,63 +2211,67 @@ msgstr "Bluesky 떠나기"
msgid "left to go."
msgstr "명 남았습니다."
-#: src/view/screens/Settings/index.tsx:278
+#: src/view/screens/Settings/index.tsx:296
msgid "Legacy storage cleared, you need to restart the app now."
msgstr "레거시 스토리지가 지워졌으며 지금 앱을 다시 시작해야 합니다."
-#: src/view/com/auth/login/Login.tsx:128
-#: src/view/com/auth/login/Login.tsx:144
+#: src/screens/Login/index.tsx:130
+#: src/screens/Login/index.tsx:145
msgid "Let's get your password reset!"
msgstr "비밀번호를 재설정해 봅시다!"
-#: src/screens/Onboarding/StepFinished.tsx:151
+#: src/screens/Onboarding/StepFinished.tsx:155
msgid "Let's go!"
msgstr "출발!"
-#: src/view/com/util/UserAvatar.tsx:248
-#: src/view/com/util/UserBanner.tsx:62
-msgid "Library"
-msgstr "라이브러리"
-
-#: src/view/screens/Settings/index.tsx:479
+#: src/view/screens/Settings/index.tsx:498
msgid "Light"
msgstr "밝음"
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Like"
msgstr "좋아요"
-#: src/view/screens/ProfileFeed.tsx:591
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:258
+#: src/view/screens/ProfileFeed.tsx:573
msgid "Like this feed"
msgstr "이 피드에 좋아요 표시"
-#: src/Navigation.tsx:197
+#: src/components/LikesDialog.tsx:87
+#: src/Navigation.tsx:201
+#: src/Navigation.tsx:206
msgid "Liked by"
msgstr "좋아요 표시한 사용자"
+#: src/screens/Profile/ProfileLabelerLikedBy.tsx:29
#: src/view/screens/PostLikedBy.tsx:27
#: src/view/screens/ProfileFeedLikedBy.tsx:27
msgid "Liked By"
msgstr "좋아요 표시한 사용자"
-#: src/view/com/feeds/FeedSourceCard.tsx:277
+#: src/view/com/feeds/FeedSourceCard.tsx:268
msgid "Liked by {0} {1}"
msgstr "{0}명의 사용자가 좋아함"
-#: src/view/screens/ProfileFeed.tsx:606
+#: src/components/LabelingServiceCard/index.tsx:72
+msgid "Liked by {count} {0}"
+msgstr "{count}명의 사용자가 좋아함"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:278
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:292
+#: src/view/screens/ProfileFeed.tsx:588
msgid "Liked by {likeCount} {0}"
msgstr "{likeCount}명의 사용자가 좋아함"
-#: src/view/com/notifications/FeedItem.tsx:170
+#: src/view/com/notifications/FeedItem.tsx:174
msgid "liked your custom feed"
msgstr "님이 내 맞춤 피드를 좋아합니다"
-#: src/view/com/notifications/FeedItem.tsx:155
+#: src/view/com/notifications/FeedItem.tsx:159
msgid "liked your post"
msgstr "님이 내 게시물을 좋아합니다"
-#: src/view/screens/Profile.tsx:183
+#: src/view/screens/Profile.tsx:193
msgid "Likes"
msgstr "좋아요"
@@ -2044,75 +2279,67 @@ msgstr "좋아요"
msgid "Likes on this post"
msgstr "이 게시물을 좋아요 표시합니다"
-#: src/Navigation.tsx:166
+#: src/Navigation.tsx:170
msgid "List"
msgstr "리스트"
-#: src/view/com/modals/CreateOrEditList.tsx:261
+#: src/view/com/modals/CreateOrEditList.tsx:262
msgid "List Avatar"
msgstr "리스트 아바타"
-#: src/view/screens/ProfileList.tsx:323
+#: src/view/screens/ProfileList.tsx:311
msgid "List blocked"
msgstr "리스트 차단됨"
-#: src/view/com/feeds/FeedSourceCard.tsx:231
+#: src/view/com/feeds/FeedSourceCard.tsx:220
msgid "List by {0}"
msgstr "{0} 님의 리스트"
-#: src/view/screens/ProfileList.tsx:377
+#: src/view/screens/ProfileList.tsx:355
msgid "List deleted"
msgstr "리스트 삭제됨"
-#: src/view/screens/ProfileList.tsx:282
+#: src/view/screens/ProfileList.tsx:283
msgid "List muted"
msgstr "리스트 뮤트됨"
-#: src/view/com/modals/CreateOrEditList.tsx:275
+#: src/view/com/modals/CreateOrEditList.tsx:276
msgid "List Name"
msgstr "리스트 이름"
-#: src/view/screens/ProfileList.tsx:342
+#: src/view/screens/ProfileList.tsx:325
msgid "List unblocked"
msgstr "리스트 차단 해제됨"
-#: src/view/screens/ProfileList.tsx:301
+#: src/view/screens/ProfileList.tsx:297
msgid "List unmuted"
msgstr "리스트 언뮤트됨"
-#: src/Navigation.tsx:110
-#: src/view/screens/Profile.tsx:185
-#: src/view/shell/desktop/LeftNav.tsx:379
-#: src/view/shell/Drawer.tsx:492
-#: src/view/shell/Drawer.tsx:493
+#: src/Navigation.tsx:114
+#: src/view/screens/Profile.tsx:189
+#: src/view/screens/Profile.tsx:195
+#: src/view/shell/desktop/LeftNav.tsx:383
+#: src/view/shell/Drawer.tsx:495
+#: src/view/shell/Drawer.tsx:496
msgid "Lists"
msgstr "리스트"
-#: src/view/com/post-thread/PostThread.tsx:276
-#: src/view/com/post-thread/PostThread.tsx:284
-msgid "Load more posts"
-msgstr "더 많은 게시물 불러오기"
-
#: src/view/screens/Notifications.tsx:159
msgid "Load new notifications"
msgstr "새 알림 불러오기"
-#: src/view/com/feeds/FeedPage.tsx:190
-#: src/view/screens/Profile.tsx:440
-#: src/view/screens/ProfileFeed.tsx:494
-#: src/view/screens/ProfileList.tsx:680
+#: src/screens/Profile/Sections/Feed.tsx:70
+#: src/view/com/feeds/FeedPage.tsx:138
+#: src/view/screens/ProfileFeed.tsx:496
+#: src/view/screens/ProfileList.tsx:695
msgid "Load new posts"
msgstr "새 게시물 불러오기"
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:99
msgid "Loading..."
msgstr "불러오는 중…"
-#: src/view/com/modals/ServerInput.tsx:50
-#~ msgid "Local dev server"
-#~ msgstr "로컬 개발 서버"
-
-#: src/Navigation.tsx:207
+#: src/Navigation.tsx:221
msgid "Log"
msgstr "로그"
@@ -2123,19 +2350,27 @@ msgstr "로그"
msgid "Log out"
msgstr "로그아웃"
-#: src/view/screens/Moderation.tsx:136
+#: src/screens/Moderation/index.tsx:442
msgid "Logged-out visibility"
msgstr "로그아웃 표시"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:133
+#: src/components/AccountList.tsx:54
msgid "Login to account that is not listed"
msgstr "목록에 없는 계정으로 로그인"
-#: src/view/com/modals/LinkWarning.tsx:65
+#: src/screens/Login/SetNewPasswordForm.tsx:116
+msgid "Looks like XXXXX-XXXXX"
+msgstr "XXXXX-XXXXX 형식"
+
+#: src/view/com/modals/LinkWarning.tsx:79
msgid "Make sure this is where you intend to go!"
msgstr "이곳이 당신이 가고자 하는 곳인지 확인하세요!"
-#: src/view/screens/Profile.tsx:182
+#: src/components/dialogs/MutedWords.tsx:82
+msgid "Manage your muted words and tags"
+msgstr "뮤트한 단어 및 태그 관리"
+
+#: src/view/screens/Profile.tsx:192
msgid "Media"
msgstr "미디어"
@@ -2147,115 +2382,162 @@ msgstr "멘션한 사용자"
msgid "Mentioned users"
msgstr "멘션한 사용자"
-#: src/view/com/util/ViewHeader.tsx:81
-#: src/view/screens/Search/Search.tsx:623
+#: src/view/com/util/ViewHeader.tsx:87
+#: src/view/screens/Search/Search.tsx:648
msgid "Menu"
msgstr "메뉴"
-#: src/view/com/posts/FeedErrorMessage.tsx:197
+#: src/view/com/posts/FeedErrorMessage.tsx:192
msgid "Message from server: {0}"
msgstr "서버에서 보낸 메시지: {0}"
-#: src/Navigation.tsx:115
-#: src/view/screens/Moderation.tsx:64
-#: src/view/screens/Settings/index.tsx:625
-#: src/view/shell/desktop/LeftNav.tsx:397
-#: src/view/shell/Drawer.tsx:511
-#: src/view/shell/Drawer.tsx:512
+#: src/lib/moderation/useReportOptions.ts:45
+msgid "Misleading Account"
+msgstr "오해의 소지가 있는 계정"
+
+#: src/Navigation.tsx:119
+#: src/screens/Moderation/index.tsx:104
+#: src/view/screens/Settings/index.tsx:645
+#: src/view/shell/desktop/LeftNav.tsx:401
+#: src/view/shell/Drawer.tsx:514
+#: src/view/shell/Drawer.tsx:515
msgid "Moderation"
msgstr "검토"
-#: src/view/com/lists/ListCard.tsx:92
+#: src/components/moderation/ModerationDetailsDialog.tsx:112
+msgid "Moderation details"
+msgstr "검토 세부 정보"
+
+#: src/view/com/lists/ListCard.tsx:93
#: src/view/com/modals/UserAddRemoveLists.tsx:206
msgid "Moderation list by {0}"
msgstr "{0} 님의 검토 리스트"
-#: src/view/screens/ProfileList.tsx:774
+#: src/view/screens/ProfileList.tsx:789
msgid "Moderation list by <0/>"
msgstr "<0/> 님의 검토 리스트"
-#: src/view/com/lists/ListCard.tsx:90
+#: src/view/com/lists/ListCard.tsx:91
#: src/view/com/modals/UserAddRemoveLists.tsx:204
-#: src/view/screens/ProfileList.tsx:772
+#: src/view/screens/ProfileList.tsx:787
msgid "Moderation list by you"
msgstr "내 검토 리스트"
-#: src/view/com/modals/CreateOrEditList.tsx:197
+#: src/view/com/modals/CreateOrEditList.tsx:198
msgid "Moderation list created"
msgstr "검토 리스트 생성됨"
-#: src/view/com/modals/CreateOrEditList.tsx:183
+#: src/view/com/modals/CreateOrEditList.tsx:184
msgid "Moderation list updated"
msgstr "검토 리스트 업데이트됨"
-#: src/view/screens/Moderation.tsx:95
+#: src/screens/Moderation/index.tsx:243
msgid "Moderation lists"
msgstr "검토 리스트"
-#: src/Navigation.tsx:120
+#: src/Navigation.tsx:124
#: src/view/screens/ModerationModlists.tsx:58
msgid "Moderation Lists"
msgstr "검토 리스트"
-#: src/view/screens/Settings/index.tsx:619
+#: src/view/screens/Settings/index.tsx:639
msgid "Moderation settings"
msgstr "검토 설정"
-#: src/view/com/modals/ModerationDetails.tsx:35
+#: src/Navigation.tsx:216
+msgid "Moderation states"
+msgstr "검토 상태"
+
+#: src/screens/Moderation/index.tsx:215
+msgid "Moderation tools"
+msgstr "검토 도구"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:48
+#: src/lib/moderation/useModerationCauseDescription.ts:40
msgid "Moderator has chosen to set a general warning on the content."
-msgstr "중재자가 콘텐츠에 일반 경고를 설정했습니다."
+msgstr "검토자가 콘텐츠에 일반 경고를 설정했습니다."
+
+#: src/view/com/post-thread/PostThreadItem.tsx:541
+msgid "More"
+msgstr "더 보기"
-#: src/view/shell/desktop/Feeds.tsx:63
+#: src/view/shell/desktop/Feeds.tsx:65
msgid "More feeds"
msgstr "피드 더 보기"
-#: src/view/com/profile/ProfileHeader.tsx:522
-#: src/view/screens/ProfileFeed.tsx:362
-#: src/view/screens/ProfileList.tsx:616
+#: src/view/screens/ProfileList.tsx:599
msgid "More options"
msgstr "옵션 더 보기"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:270
-msgid "More post options"
-msgstr "게시물 옵션 더 보기"
-
#: src/view/screens/PreferencesThreads.tsx:82
msgid "Most-liked replies first"
msgstr "좋아요 많은 순"
-#: src/view/com/profile/ProfileHeader.tsx:326
+#: src/components/TagMenu/index.tsx:249
+msgid "Mute"
+msgstr "뮤트"
+
+#: src/components/TagMenu/index.web.tsx:105
+msgid "Mute {truncatedTag}"
+msgstr "{truncatedTag} 뮤트"
+
+#: src/view/com/profile/ProfileMenu.tsx:279
+#: src/view/com/profile/ProfileMenu.tsx:286
msgid "Mute Account"
msgstr "계정 뮤트"
-#: src/view/screens/ProfileList.tsx:543
+#: src/view/screens/ProfileList.tsx:518
msgid "Mute accounts"
msgstr "계정 뮤트"
-#: src/view/screens/ProfileList.tsx:490
+#: src/components/TagMenu/index.tsx:209
+msgid "Mute all {displayTag} posts"
+msgstr "모든 {displayTag} 게시물 뮤트"
+
+#: src/components/dialogs/MutedWords.tsx:148
+msgid "Mute in tags only"
+msgstr "태그에서만 뮤트"
+
+#: src/components/dialogs/MutedWords.tsx:133
+msgid "Mute in text & tags"
+msgstr "글 및 태그에서 뮤트"
+
+#: src/view/screens/ProfileList.tsx:461
+#: src/view/screens/ProfileList.tsx:624
msgid "Mute list"
msgstr "리스트 뮤트"
-#: src/view/screens/ProfileList.tsx:274
+#: src/view/screens/ProfileList.tsx:619
msgid "Mute these accounts?"
msgstr "이 계정들을 뮤트하시겠습니까?"
-#: src/view/screens/ProfileList.tsx:278
-msgid "Mute this List"
-msgstr "이 리스트 뮤트"
+#: src/components/dialogs/MutedWords.tsx:126
+msgid "Mute this word in post text and tags"
+msgstr "게시물 글 및 태그에서 이 단어 뮤트하기"
+
+#: src/components/dialogs/MutedWords.tsx:141
+msgid "Mute this word in tags only"
+msgstr "태그에서만 이 단어 뮤트하기"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:257
msgid "Mute thread"
msgstr "스레드 뮤트"
-#: src/view/com/lists/ListCard.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:267
+#: src/view/com/util/forms/PostDropdownBtn.tsx:269
+msgid "Mute words & tags"
+msgstr "단어 및 태그 뮤트"
+
+#: src/view/com/lists/ListCard.tsx:102
msgid "Muted"
msgstr "뮤트됨"
-#: src/view/screens/Moderation.tsx:109
+#: src/screens/Moderation/index.tsx:255
msgid "Muted accounts"
msgstr "뮤트한 계정"
-#: src/Navigation.tsx:125
+#: src/Navigation.tsx:129
#: src/view/screens/ModerationMutedAccounts.tsx:107
msgid "Muted Accounts"
msgstr "뮤트한 계정"
@@ -2264,15 +2546,24 @@ msgstr "뮤트한 계정"
msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private."
msgstr "계정을 뮤트하면 피드와 알림에서 해당 계정의 게시물이 사라집니다. 뮤트 목록은 완전히 비공개로 유지됩니다."
-#: src/view/screens/ProfileList.tsx:276
+#: src/lib/moderation/useModerationCauseDescription.ts:85
+msgid "Muted by \"{0}\""
+msgstr "\"{0}\" 님이 뮤트함"
+
+#: src/screens/Moderation/index.tsx:231
+msgid "Muted words & tags"
+msgstr "뮤트한 단어 및 태그"
+
+#: src/view/screens/ProfileList.tsx:621
msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them."
msgstr "뮤트 목록은 비공개입니다. 뮤트한 계정은 나와 상호작용할 수 있지만 해당 계정의 게시물을 보거나 해당 계정으로부터 알림을 받을 수 없습니다."
-#: src/view/com/modals/BirthDateSettings.tsx:56
+#: src/components/dialogs/BirthDateSettings.tsx:35
+#: src/components/dialogs/BirthDateSettings.tsx:38
msgid "My Birthday"
msgstr "내 생년월일"
-#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:663
msgid "My Feeds"
msgstr "내 피드"
@@ -2280,32 +2571,36 @@ msgstr "내 피드"
msgid "My Profile"
msgstr "내 프로필"
-#: src/view/screens/Settings/index.tsx:582
-msgid "My Saved Feeds"
+#: src/view/screens/Settings/index.tsx:596
+msgid "My saved feeds"
msgstr "내 저장된 피드"
-#: src/view/com/auth/server-input/index.tsx:118
-msgid "my-server.com"
-msgstr ""
+#: src/view/screens/Settings/index.tsx:602
+msgid "My Saved Feeds"
+msgstr "내 저장된 피드"
-#: src/view/com/modals/AddAppPasswords.tsx:179
-#: src/view/com/modals/CreateOrEditList.tsx:290
+#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/CreateOrEditList.tsx:291
msgid "Name"
msgstr "이름"
-#: src/view/com/modals/CreateOrEditList.tsx:145
+#: src/view/com/modals/CreateOrEditList.tsx:146
msgid "Name is required"
msgstr "이름을 입력하세요"
+#: src/lib/moderation/useReportOptions.ts:57
+#: src/lib/moderation/useReportOptions.ts:78
+#: src/lib/moderation/useReportOptions.ts:86
+msgid "Name or Description Violates Community Standards"
+msgstr "이름 또는 설명이 커뮤니티 기준을 위반함"
+
#: src/screens/Onboarding/index.tsx:25
msgid "Nature"
msgstr "자연"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:190
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:219
-#: src/view/com/auth/login/LoginForm.tsx:289
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:196
-#: src/view/com/modals/ChangePassword.tsx:166
+#: src/screens/Login/ForgotPasswordForm.tsx:173
+#: src/screens/Login/LoginForm.tsx:254
+#: src/view/com/modals/ChangePassword.tsx:168
msgid "Navigates to the next screen"
msgstr "다음 화면으로 이동합니다"
@@ -2313,19 +2608,27 @@ msgstr "다음 화면으로 이동합니다"
msgid "Navigates to your profile"
msgstr "내 프로필로 이동합니다"
+#: src/components/ReportDialog/SelectReportOptionView.tsx:122
+msgid "Need to report a copyright violation?"
+msgstr "저작권 위반을 신고해야 하나요?"
+
#: src/view/com/modals/EmbedConsent.tsx:107
#: src/view/com/modals/EmbedConsent.tsx:123
-msgid "Never load embeds from {0}"
-msgstr "{0}에서 임베드를 불러오지 않습니다"
+#~ msgid "Never load embeds from {0}"
+#~ msgstr "{0}에서 임베드를 불러오지 않습니다"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:72
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:72
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:74
msgid "Never lose access to your followers and data."
-msgstr "팔로워와 데이터에 대한 접근 권한을 잃지 않습니다."
+msgstr "팔로워와 데이터에 대한 접근 권한을 잃지 마세요."
-#: src/screens/Onboarding/StepFinished.tsx:119
+#: src/screens/Onboarding/StepFinished.tsx:123
msgid "Never lose access to your followers or data."
-msgstr "팔로워 또는 데이터에 대한 접근 권한을 잃지 않습니다."
+msgstr "팔로워 또는 데이터에 대한 접근 권한을 잃지 마세요."
+
+#: src/view/com/modals/ChangeHandle.tsx:519
+msgid "Nevermind, create a handle for me"
+msgstr "취소하고 내 핸들 만들기"
#: src/view/screens/Lists.tsx:76
msgctxt "action"
@@ -2336,39 +2639,39 @@ msgstr "새로 만들기"
msgid "New"
msgstr "새로 만들기"
-#: src/view/com/modals/CreateOrEditList.tsx:252
+#: src/view/com/modals/CreateOrEditList.tsx:253
msgid "New Moderation List"
msgstr "새 검토 리스트"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:150
+#: src/view/com/modals/ChangePassword.tsx:212
msgid "New password"
msgstr "새 비밀번호"
-#: src/view/com/modals/ChangePassword.tsx:215
+#: src/view/com/modals/ChangePassword.tsx:217
msgid "New Password"
-msgstr ""
+msgstr "새 비밀번호"
-#: src/view/com/feeds/FeedPage.tsx:201
+#: src/view/com/feeds/FeedPage.tsx:149
msgctxt "action"
msgid "New post"
msgstr "새 게시물"
-#: src/view/screens/Feeds.tsx:581
+#: src/view/screens/Feeds.tsx:555
#: src/view/screens/Notifications.tsx:168
-#: src/view/screens/Profile.tsx:382
-#: src/view/screens/ProfileFeed.tsx:432
-#: src/view/screens/ProfileList.tsx:195
-#: src/view/screens/ProfileList.tsx:223
-#: src/view/shell/desktop/LeftNav.tsx:248
+#: src/view/screens/Profile.tsx:452
+#: src/view/screens/ProfileFeed.tsx:434
+#: src/view/screens/ProfileList.tsx:199
+#: src/view/screens/ProfileList.tsx:227
+#: src/view/shell/desktop/LeftNav.tsx:252
msgid "New post"
msgstr "새 게시물"
-#: src/view/shell/desktop/LeftNav.tsx:258
+#: src/view/shell/desktop/LeftNav.tsx:262
msgctxt "action"
msgid "New Post"
msgstr "새 게시물"
-#: src/view/com/modals/CreateOrEditList.tsx:247
+#: src/view/com/modals/CreateOrEditList.tsx:248
msgid "New User List"
msgstr "새 사용자 리스트"
@@ -2380,15 +2683,16 @@ msgstr "새로운 순"
msgid "News"
msgstr "뉴스"
-#: src/view/com/auth/create/CreateAccount.tsx:161
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:182
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:192
-#: src/view/com/auth/login/LoginForm.tsx:291
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:187
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:198
+#: src/screens/Login/ForgotPasswordForm.tsx:143
+#: src/screens/Login/ForgotPasswordForm.tsx:150
+#: src/screens/Login/LoginForm.tsx:253
+#: src/screens/Login/LoginForm.tsx:260
+#: src/screens/Login/SetNewPasswordForm.tsx:174
+#: src/screens/Login/SetNewPasswordForm.tsx:180
+#: src/screens/Signup/index.tsx:205
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79
-#: src/view/com/modals/ChangePassword.tsx:251
#: src/view/com/modals/ChangePassword.tsx:253
+#: src/view/com/modals/ChangePassword.tsx:255
msgid "Next"
msgstr "다음"
@@ -2397,61 +2701,83 @@ msgctxt "action"
msgid "Next"
msgstr "다음"
-#: src/view/com/lightbox/Lightbox.web.tsx:149
+#: src/view/com/lightbox/Lightbox.web.tsx:169
msgid "Next image"
msgstr "다음 이미지"
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:200
-#: src/view/screens/PreferencesHomeFeed.tsx:235
-#: src/view/screens/PreferencesHomeFeed.tsx:272
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:200
+#: src/view/screens/PreferencesFollowingFeed.tsx:235
+#: src/view/screens/PreferencesFollowingFeed.tsx:272
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "No"
msgstr "아니요"
-#: src/view/screens/ProfileFeed.tsx:584
-#: src/view/screens/ProfileList.tsx:754
+#: src/view/screens/ProfileFeed.tsx:562
+#: src/view/screens/ProfileList.tsx:769
msgid "No description"
msgstr "설명 없음"
-#: src/view/com/profile/ProfileHeader.tsx:169
+#: src/view/com/modals/ChangeHandle.tsx:405
+msgid "No DNS Panel"
+msgstr "DNS 패널 없음"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:118
msgid "No longer following {0}"
msgstr "더 이상 {0} 님을 팔로우하지 않음"
+#: src/screens/Signup/StepHandle.tsx:114
+msgid "No longer than 253 characters"
+msgstr "253자를 초과하지 않음"
+
#: src/view/com/notifications/Feed.tsx:109
msgid "No notifications yet!"
msgstr "아직 알림이 없습니다."
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:97
-#: src/view/com/composer/text-input/web/Autocomplete.tsx:191
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:101
+#: src/view/com/composer/text-input/web/Autocomplete.tsx:195
msgid "No result"
msgstr "결과 없음"
-#: src/view/screens/Feeds.tsx:524
+#: src/components/Lists.tsx:183
+msgid "No results found"
+msgstr "결과를 찾을 수 없음"
+
+#: src/view/screens/Feeds.tsx:495
msgid "No results found for \"{query}\""
msgstr "\"{query}\"에 대한 결과를 찾을 수 없습니다"
#: src/view/com/modals/ListAddRemoveUsers.tsx:127
-#: src/view/screens/Search/Search.tsx:280
-#: src/view/screens/Search/Search.tsx:308
+#: src/view/screens/Search/Search.tsx:283
+#: src/view/screens/Search/Search.tsx:311
msgid "No results found for {query}"
msgstr "{query}에 대한 결과를 찾을 수 없습니다"
-#: src/view/com/modals/EmbedConsent.tsx:129
+#: src/components/dialogs/EmbedConsent.tsx:105
+#: src/components/dialogs/EmbedConsent.tsx:112
msgid "No thanks"
-msgstr "괜찮습니다"
+msgstr "사용하지 않음"
#: src/view/com/modals/Threadgate.tsx:82
msgid "Nobody"
msgstr "없음"
+#: src/components/LikedByList.tsx:79
+#: src/components/LikesDialog.tsx:99
+msgid "Nobody has liked this yet. Maybe you should be the first!"
+msgstr "아직 아무도 좋아요를 누르지 않았습니다. 첫 번째가 되어 보세요!"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:42
+msgid "Non-sexual Nudity"
+msgstr "선정적이지 않은 노출"
+
#: src/view/com/modals/SelfLabel.tsx:135
msgid "Not Applicable."
msgstr "해당 없음."
-#: src/Navigation.tsx:105
-#: src/view/screens/Profile.tsx:106
+#: src/Navigation.tsx:109
+#: src/view/screens/Profile.tsx:99
msgid "Not Found"
msgstr "찾을 수 없음"
@@ -2460,17 +2786,23 @@ msgstr "찾을 수 없음"
msgid "Not right now"
msgstr "나중에 하기"
-#: src/view/screens/Moderation.tsx:233
+#: src/view/com/profile/ProfileMenu.tsx:368
+#: src/view/com/util/forms/PostDropdownBtn.tsx:342
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:246
+msgid "Note about sharing"
+msgstr "공유 관련 참고 사항"
+
+#: src/screens/Moderation/index.tsx:540
msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites."
msgstr "참고: Bluesky는 개방형 공개 네트워크입니다. 이 설정은 Bluesky 앱과 웹사이트에서만 내 콘텐츠가 표시되는 것을 제한하며, 다른 앱에서는 이 설정을 준수하지 않을 수 있습니다. 다른 앱과 웹사이트에서는 로그아웃한 사용자에게 내 콘텐츠가 계속 표시될 수 있습니다."
-#: src/Navigation.tsx:447
+#: src/Navigation.tsx:469
#: src/view/screens/Notifications.tsx:124
#: src/view/screens/Notifications.tsx:148
-#: src/view/shell/bottom-bar/BottomBar.tsx:205
-#: src/view/shell/desktop/LeftNav.tsx:361
-#: src/view/shell/Drawer.tsx:435
-#: src/view/shell/Drawer.tsx:436
+#: src/view/shell/bottom-bar/BottomBar.tsx:215
+#: src/view/shell/desktop/LeftNav.tsx:365
+#: src/view/shell/Drawer.tsx:438
+#: src/view/shell/Drawer.tsx:439
msgid "Notifications"
msgstr "알림"
@@ -2478,15 +2810,36 @@ msgstr "알림"
msgid "Nudity"
msgstr "노출"
-#: src/view/com/util/ErrorBoundary.tsx:35
+#: src/lib/moderation/useReportOptions.ts:71
+msgid "Nudity or adult content not labeled as such"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:71
+#~ msgid "Nudity or pornography not labeled as such"
+#~ msgstr "누드 또는 음란물로 설정되지 않은 콘텐츠"
+
+#: src/screens/Signup/index.tsx:142
+msgid "of"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:11
+msgid "Off"
+msgstr "끄기"
+
+#: src/view/com/util/ErrorBoundary.tsx:49
msgid "Oh no!"
-msgstr "안 돼!"
+msgstr "이런!"
-#: src/screens/Onboarding/StepInterests/index.tsx:128
+#: src/screens/Onboarding/StepInterests/index.tsx:132
msgid "Oh no! Something went wrong."
msgstr "이런! 뭔가 잘못되었습니다."
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:41
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:126
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:327
+msgid "OK"
+msgstr "확인"
+
+#: src/screens/Login/PasswordUpdatedForm.tsx:44
msgid "Okay"
msgstr "확인"
@@ -2494,11 +2847,11 @@ msgstr "확인"
msgid "Oldest replies first"
msgstr "오래된 순"
-#: src/view/screens/Settings/index.tsx:234
+#: src/view/screens/Settings/index.tsx:244
msgid "Onboarding reset"
msgstr "온보딩 재설정"
-#: src/view/com/composer/Composer.tsx:375
+#: src/view/com/composer/Composer.tsx:392
msgid "One or more images is missing alt text."
msgstr "하나 이상의 이미지에 대체 텍스트가 누락되었습니다."
@@ -2506,32 +2859,58 @@ msgstr "하나 이상의 이미지에 대체 텍스트가 누락되었습니다.
msgid "Only {0} can reply."
msgstr "{0}만 답글을 달 수 있습니다."
-#: src/view/screens/AppPasswords.tsx:65
-#: src/view/screens/Profile.tsx:106
+#: src/screens/Signup/StepHandle.tsx:97
+msgid "Only contains letters, numbers, and hyphens"
+msgstr "문자, 숫자, 하이픈만 포함"
+
+#: src/components/Lists.tsx:75
+msgid "Oops, something went wrong!"
+msgstr "이런, 뭔가 잘못되었습니다!"
+
+#: src/components/Lists.tsx:170
+#: src/view/screens/AppPasswords.tsx:67
+#: src/view/screens/Profile.tsx:99
msgid "Oops!"
msgstr "이런!"
-#: src/screens/Onboarding/StepFinished.tsx:115
+#: src/screens/Onboarding/StepFinished.tsx:119
msgid "Open"
msgstr "공개성"
-#: src/view/com/composer/Composer.tsx:470
-#: src/view/com/composer/Composer.tsx:471
+#: src/view/com/composer/Composer.tsx:491
+#: src/view/com/composer/Composer.tsx:492
msgid "Open emoji picker"
msgstr "이모티콘 선택기 열기"
-#: src/view/screens/Settings/index.tsx:712
+#: src/view/screens/ProfileFeed.tsx:300
+msgid "Open feed options menu"
+msgstr "피드 옵션 메뉴 열기"
+
+#: src/view/screens/Settings/index.tsx:734
msgid "Open links with in-app browser"
-msgstr "링크를 인앱 브라우저로 엽니다"
+msgstr "링크를 인앱 브라우저로 열기"
+
+#: src/screens/Moderation/index.tsx:227
+msgid "Open muted words and tags settings"
+msgstr "뮤트한 단어 및 태그 설정 열기"
-#: src/view/com/pager/FeedsTabBarMobile.tsx:87
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:50
msgid "Open navigation"
msgstr "내비게이션 열기"
-#: src/view/screens/Settings/index.tsx:804
+#: src/view/com/util/forms/PostDropdownBtn.tsx:183
+msgid "Open post options menu"
+msgstr "게시물 옵션 메뉴 열기"
+
+#: src/view/screens/Settings/index.tsx:828
+#: src/view/screens/Settings/index.tsx:838
msgid "Open storybook page"
msgstr "스토리북 페이지 열기"
+#: src/view/screens/Settings/index.tsx:816
+msgid "Open system log"
+msgstr "시스템 로그 열기"
+
#: src/view/com/util/forms/DropdownButton.tsx:154
msgid "Opens {numItems} options"
msgstr "{numItems}번째 옵션을 엽니다"
@@ -2540,11 +2919,11 @@ msgstr "{numItems}번째 옵션을 엽니다"
msgid "Opens additional details for a debug entry"
msgstr "디버그 항목에 대한 추가 세부 정보를 엽니다"
-#: src/view/com/notifications/FeedItem.tsx:348
+#: src/view/com/notifications/FeedItem.tsx:353
msgid "Opens an expanded list of users in this notification"
msgstr "이 알림에서 확장된 사용자 목록을 엽니다"
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:61
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:78
msgid "Opens camera on device"
msgstr "기기에서 카메라를 엽니다"
@@ -2552,7 +2931,7 @@ msgstr "기기에서 카메라를 엽니다"
msgid "Opens composer"
msgstr "답글 작성 상자를 엽니다"
-#: src/view/screens/Settings/index.tsx:595
+#: src/view/screens/Settings/index.tsx:615
msgid "Opens configurable language settings"
msgstr "구성 가능한 언어 설정을 엽니다"
@@ -2560,71 +2939,89 @@ msgstr "구성 가능한 언어 설정을 엽니다"
msgid "Opens device photo gallery"
msgstr "기기의 사진 갤러리를 엽니다"
-#: src/view/com/profile/ProfileHeader.tsx:419
-msgid "Opens editor for profile display name, avatar, background image, and description"
-msgstr "프로필 표시 이름, 아바타, 배경 이미지 및 설명 편집기를 엽니다"
-
-#: src/view/screens/Settings/index.tsx:649
+#: src/view/screens/Settings/index.tsx:669
msgid "Opens external embeds settings"
msgstr "외부 임베드 설정을 엽니다"
-#: src/view/com/profile/ProfileHeader.tsx:574
-msgid "Opens followers list"
-msgstr "팔로워 목록을 엽니다"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:57
+#: src/view/com/auth/SplashScreen.tsx:68
+#: src/view/com/auth/SplashScreen.web.tsx:97
+msgid "Opens flow to create a new Bluesky account"
+msgstr "새 Bluesky 계정을 만드는 플로를 엽니다"
-#: src/view/com/profile/ProfileHeader.tsx:593
-msgid "Opens following list"
-msgstr "팔로우 중 목록을 엽니다"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:75
+#: src/view/com/auth/SplashScreen.tsx:83
+#: src/view/com/auth/SplashScreen.web.tsx:112
+msgid "Opens flow to sign into your existing Bluesky account"
+msgstr "존재하는 Bluesky 계정에 로그인하는 플로를 엽니다"
-#: src/view/screens/Settings.tsx:412
-#~ msgid "Opens invite code list"
-#~ msgstr "초대 코드 목록을 엽니다"
-
-#: src/view/com/modals/InviteCodes.tsx:172
+#: src/view/com/modals/InviteCodes.tsx:173
msgid "Opens list of invite codes"
msgstr "초대 코드 목록을 엽니다"
-#: src/view/screens/Settings/index.tsx:774
-msgid "Opens modal for account deletion confirmation. Requires email code."
+#: src/view/screens/Settings/index.tsx:798
+msgid "Opens modal for account deletion confirmation. Requires email code"
msgstr "계정 삭제 확인을 위한 대화 상자를 엽니다. 이메일 코드가 필요합니다"
-#: src/view/com/modals/ChangeHandle.tsx:281
+#: src/view/screens/Settings/index.tsx:756
+msgid "Opens modal for changing your Bluesky password"
+msgstr "Bluesky 비밀번호 변경을 위한 대화 상자를 엽니다"
+
+#: src/view/screens/Settings/index.tsx:718
+msgid "Opens modal for choosing a new Bluesky handle"
+msgstr "새로운 Bluesky 핸들을 선택하기 위한 대화 상자를 엽니다"
+
+#: src/view/screens/Settings/index.tsx:779
+msgid "Opens modal for downloading your Bluesky account data (repository)"
+msgstr "Bluesky 계정 데이터(저장소)를 다운로드하기 위한 대화 상자를 엽니다"
+
+#: src/view/screens/Settings/index.tsx:968
+msgid "Opens modal for email verification"
+msgstr "이메일 인증을 위한 대화 상자를 엽니다"
+
+#: src/view/com/modals/ChangeHandle.tsx:282
msgid "Opens modal for using custom domain"
msgstr "사용자 지정 도메인을 사용하기 위한 대화 상자를 엽니다"
-#: src/view/screens/Settings/index.tsx:620
+#: src/view/screens/Settings/index.tsx:640
msgid "Opens moderation settings"
msgstr "검토 설정을 엽니다"
-#: src/view/com/auth/login/LoginForm.tsx:239
+#: src/screens/Login/LoginForm.tsx:202
msgid "Opens password reset form"
msgstr "비밀번호 재설정 양식을 엽니다"
-#: src/view/screens/Feeds.tsx:357
+#: src/view/com/home/HomeHeaderLayout.web.tsx:63
+#: src/view/screens/Feeds.tsx:356
msgid "Opens screen to edit Saved Feeds"
msgstr "저장된 피드를 편집할 수 있는 화면을 엽니다"
-#: src/view/screens/Settings/index.tsx:576
+#: src/view/screens/Settings/index.tsx:597
msgid "Opens screen with all saved feeds"
msgstr "모든 저장된 피드 화면을 엽니다"
-#: src/view/screens/Settings/index.tsx:676
-msgid "Opens the app password settings page"
-msgstr "비밀번호 설정 페이지를 엽니다"
+#: src/view/screens/Settings/index.tsx:696
+msgid "Opens the app password settings"
+msgstr "비밀번호 설정을 엽니다"
+
+#: src/view/screens/Settings/index.tsx:554
+msgid "Opens the Following feed preferences"
+msgstr "팔로우 중 피드 설정을 엽니다"
-#: src/view/screens/Settings/index.tsx:535
-msgid "Opens the home feed preferences"
-msgstr "홈 피드 설정을 엽니다"
+#: src/view/com/modals/LinkWarning.tsx:93
+msgid "Opens the linked website"
+msgstr "연결된 웹사이트를 엽니다"
-#: src/view/screens/Settings/index.tsx:805
+#: src/view/screens/Settings/index.tsx:829
+#: src/view/screens/Settings/index.tsx:839
msgid "Opens the storybook page"
msgstr "스토리북 페이지를 엽니다"
-#: src/view/screens/Settings/index.tsx:793
+#: src/view/screens/Settings/index.tsx:817
msgid "Opens the system log page"
msgstr "시스템 로그 페이지를 엽니다"
-#: src/view/screens/Settings/index.tsx:556
+#: src/view/screens/Settings/index.tsx:575
msgid "Opens the threads preferences"
msgstr "스레드 설정을 엽니다"
@@ -2632,22 +3029,27 @@ msgstr "스레드 설정을 엽니다"
msgid "Option {0} of {numItems}"
msgstr "{numItems}개 중 {0}번째 옵션"
+#: src/components/ReportDialog/SubmitView.tsx:162
+msgid "Optionally provide additional information below:"
+msgstr "선택 사항으로 아래에 추가 정보를 입력하세요:"
+
#: src/view/com/modals/Threadgate.tsx:89
msgid "Or combine these options:"
msgstr "또는 다음 옵션을 결합하세요:"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:138
+#: src/lib/moderation/useReportOptions.ts:25
+msgid "Other"
+msgstr "기타"
+
+#: src/components/AccountList.tsx:73
msgid "Other account"
msgstr "다른 계정"
-#: src/view/com/modals/ServerInput.tsx:88
-#~ msgid "Other service"
-#~ msgstr "다른 서비스"
-
#: src/view/com/composer/select-language/SelectLangBtn.tsx:91
msgid "Other..."
msgstr "기타…"
+#: src/components/Lists.tsx:184
#: src/view/screens/NotFound.tsx:45
msgid "Page not found"
msgstr "페이지를 찾을 수 없음"
@@ -2656,27 +3058,30 @@ msgstr "페이지를 찾을 수 없음"
msgid "Page Not Found"
msgstr "페이지를 찾을 수 없음"
-#: src/view/com/auth/create/Step1.tsx:210
-#: src/view/com/auth/create/Step1.tsx:220
-#: src/view/com/auth/login/LoginForm.tsx:226
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:161
-#: src/view/com/modals/DeleteAccount.tsx:202
+#: src/screens/Login/LoginForm.tsx:178
+#: src/screens/Signup/StepInfo/index.tsx:101
+#: src/view/com/modals/DeleteAccount.tsx:194
+#: src/view/com/modals/DeleteAccount.tsx:201
msgid "Password"
msgstr "비밀번호"
-#: src/view/com/auth/login/Login.tsx:157
+#: src/view/com/modals/ChangePassword.tsx:142
+msgid "Password Changed"
+msgstr "비밀번호 변경됨"
+
+#: src/screens/Login/index.tsx:157
msgid "Password updated"
msgstr "비밀번호 변경됨"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:28
+#: src/screens/Login/PasswordUpdatedForm.tsx:30
msgid "Password updated!"
msgstr "비밀번호 변경됨"
-#: src/Navigation.tsx:160
+#: src/Navigation.tsx:164
msgid "People followed by @{0}"
msgstr "@{0} 님이 팔로우한 사람들"
-#: src/Navigation.tsx:153
+#: src/Navigation.tsx:157
msgid "People following @{0}"
msgstr "@{0} 님을 팔로우하는 사람들"
@@ -2692,86 +3097,81 @@ msgstr "앨범에 접근할 수 있는 권한이 거부되었습니다. 시스
msgid "Pets"
msgstr "반려동물"
-#: src/view/com/auth/create/Step2.tsx:183
-msgid "Phone number"
-msgstr "전화번호"
-
#: src/view/com/modals/SelfLabel.tsx:121
msgid "Pictures meant for adults."
msgstr "성인용 사진."
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:292
+#: src/view/screens/ProfileList.tsx:563
msgid "Pin to home"
msgstr "홈에 고정"
+#: src/view/screens/ProfileFeed.tsx:295
+msgid "Pin to Home"
+msgstr "홈에 고정"
+
#: src/view/screens/SavedFeeds.tsx:88
msgid "Pinned Feeds"
msgstr "고정된 피드"
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:111
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:123
msgid "Play {0}"
msgstr "{0} 재생"
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:54
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:55
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:57
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:58
msgid "Play Video"
msgstr "동영상 재생"
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:110
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:122
msgid "Plays the GIF"
msgstr "GIF를 재생합니다"
-#: src/view/com/auth/create/state.ts:177
+#: src/screens/Signup/state.ts:241
msgid "Please choose your handle."
msgstr "핸들을 입력하세요."
-#: src/view/com/auth/create/state.ts:160
+#: src/screens/Signup/state.ts:234
msgid "Please choose your password."
msgstr "비밀번호를 입력하세요."
+#: src/screens/Signup/state.ts:251
+msgid "Please complete the verification captcha."
+msgstr "인증 캡차를 완료해 주세요."
+
#: src/view/com/modals/ChangeEmail.tsx:67
msgid "Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed."
msgstr "이메일을 변경하기 전에 이메일을 확인해 주세요. 이는 이메일 변경 도구가 추가되는 동안 일시적으로 요구되는 사항이며 곧 제거될 예정입니다."
-#: src/view/com/modals/AddAppPasswords.tsx:90
+#: src/view/com/modals/AddAppPasswords.tsx:91
msgid "Please enter a name for your app password. All spaces is not allowed."
msgstr "앱 비밀번호의 이름을 입력하세요. 모든 공백 문자는 허용되지 않습니다."
-#: src/view/com/auth/create/Step2.tsx:206
-msgid "Please enter a phone number that can receive SMS text messages."
-msgstr "SMS 문자 메시지를 받을 수 있는 휴대폰 번호를 입력하세요."
-
-#: src/view/com/modals/AddAppPasswords.tsx:145
+#: src/view/com/modals/AddAppPasswords.tsx:146
msgid "Please enter a unique name for this App Password or use our randomly generated one."
msgstr "이 앱 비밀번호에 대해 고유한 이름을 입력하거나 무작위로 생성된 이름을 사용합니다."
-#: src/view/com/auth/create/state.ts:170
-msgid "Please enter the code you received by SMS."
-msgstr "SMS로 받은 코드를 입력하세요."
+#: src/components/dialogs/MutedWords.tsx:67
+msgid "Please enter a valid word, tag, or phrase to mute"
+msgstr "뮤트할 단어나 태그 또는 문구를 입력하세요"
-#: src/view/com/auth/create/Step2.tsx:282
-msgid "Please enter the verification code sent to {phoneNumberFormatted}."
-msgstr "{phoneNumberFormatted}(으)로 보내진 인증 코드를 입력하세요."
-
-#: src/view/com/auth/create/state.ts:146
+#: src/screens/Signup/state.ts:220
msgid "Please enter your email."
msgstr "이메일을 입력하세요."
-#: src/view/com/modals/DeleteAccount.tsx:191
+#: src/view/com/modals/DeleteAccount.tsx:190
msgid "Please enter your password as well:"
msgstr "비밀번호도 입력해 주세요:"
-#: src/view/com/modals/AppealLabel.tsx:72
-#: src/view/com/modals/AppealLabel.tsx:75
-msgid "Please tell us why you think this content warning was incorrectly applied!"
-msgstr "이 콘텐츠 경고가 잘못 적용되었다고 생각하는 이유를 알려주세요!"
+#: src/components/moderation/LabelsOnMeDialog.tsx:221
+msgid "Please explain why you think this label was incorrectly applied by {0}"
+msgstr "{0} 님이 이 라벨을 잘못 적용했다고 생각하는 이유를 설명해 주세요"
#: src/view/com/modals/VerifyEmail.tsx:101
msgid "Please Verify Your Email"
msgstr "이메일 인증하기"
-#: src/view/com/composer/Composer.tsx:215
+#: src/view/com/composer/Composer.tsx:222
msgid "Please wait for your link card to finish loading"
msgstr "링크 카드를 완전히 불러올 때까지 기다려주세요"
@@ -2781,37 +3181,51 @@ msgstr "정치"
#: src/view/com/modals/SelfLabel.tsx:111
msgid "Porn"
-msgstr "포르노"
+msgstr "음란물"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#~ msgid "Pornography"
+#~ msgstr "음란물"
-#: src/view/com/composer/Composer.tsx:350
-#: src/view/com/composer/Composer.tsx:358
+#: src/view/com/composer/Composer.tsx:367
+#: src/view/com/composer/Composer.tsx:375
msgctxt "action"
msgid "Post"
msgstr "게시하기"
-#: src/view/com/post-thread/PostThread.tsx:246
+#: src/view/com/post-thread/PostThread.tsx:292
msgctxt "description"
msgid "Post"
msgstr "게시물"
-#: src/view/com/post-thread/PostThreadItem.tsx:174
+#: src/view/com/post-thread/PostThreadItem.tsx:175
msgid "Post by {0}"
msgstr "{0} 님의 게시물"
-#: src/Navigation.tsx:172
-#: src/Navigation.tsx:179
-#: src/Navigation.tsx:186
+#: src/Navigation.tsx:176
+#: src/Navigation.tsx:183
+#: src/Navigation.tsx:190
msgid "Post by @{0}"
msgstr "@{0} 님의 게시물"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:84
+#: src/view/com/util/forms/PostDropdownBtn.tsx:105
msgid "Post deleted"
msgstr "게시물 삭제됨"
-#: src/view/com/post-thread/PostThread.tsx:398
+#: src/view/com/post-thread/PostThread.tsx:157
msgid "Post hidden"
msgstr "게시물 숨김"
+#: src/components/moderation/ModerationDetailsDialog.tsx:97
+#: src/lib/moderation/useModerationCauseDescription.ts:99
+msgid "Post Hidden by Muted Word"
+msgstr "뮤트한 단어로 숨겨진 게시물"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:100
+#: src/lib/moderation/useModerationCauseDescription.ts:108
+msgid "Post Hidden by You"
+msgstr "내가 숨긴 게시물"
+
#: src/view/com/composer/select-language/SelectLangBtn.tsx:87
msgid "Post language"
msgstr "게시물 언어"
@@ -2820,23 +3234,42 @@ msgstr "게시물 언어"
msgid "Post Languages"
msgstr "게시물 언어"
-#: src/view/com/post-thread/PostThread.tsx:450
+#: src/view/com/post-thread/PostThread.tsx:152
+#: src/view/com/post-thread/PostThread.tsx:164
msgid "Post not found"
msgstr "게시물을 찾을 수 없음"
-#: src/view/screens/Profile.tsx:180
+#: src/components/TagMenu/index.tsx:253
+msgid "posts"
+msgstr "게시물"
+
+#: src/view/screens/Profile.tsx:190
msgid "Posts"
msgstr "게시물"
+#: src/components/dialogs/MutedWords.tsx:89
+msgid "Posts can be muted based on their text, their tags, or both."
+msgstr "게시물의 글 및 태그에 따라 게시물을 뮤트할 수 있습니다."
+
#: src/view/com/posts/FeedErrorMessage.tsx:64
msgid "Posts hidden"
msgstr "게시물 숨겨짐"
-#: src/view/com/modals/LinkWarning.tsx:46
+#: src/view/com/modals/LinkWarning.tsx:60
msgid "Potentially Misleading Link"
msgstr "오해의 소지가 있는 링크"
-#: src/view/com/lightbox/Lightbox.web.tsx:135
+#: src/components/forms/HostingProvider.tsx:45
+msgid "Press to change hosting provider"
+msgstr "호스팅 제공자를 변경하려면 누릅니다"
+
+#: src/components/Error.tsx:74
+#: src/components/Lists.tsx:80
+#: src/screens/Signup/index.tsx:186
+msgid "Press to retry"
+msgstr "눌러서 다시 시도하기"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:150
msgid "Previous image"
msgstr "이전 이미지"
@@ -2848,39 +3281,45 @@ msgstr "주 언어"
msgid "Prioritize Your Follows"
msgstr "내 팔로우 먼저 표시"
-#: src/view/screens/Settings/index.tsx:632
-#: src/view/shell/desktop/RightNav.tsx:80
+#: src/view/screens/Settings/index.tsx:652
+#: src/view/shell/desktop/RightNav.tsx:72
msgid "Privacy"
msgstr "개인정보"
-#: src/Navigation.tsx:217
+#: src/Navigation.tsx:231
+#: src/screens/Signup/StepInfo/Policies.tsx:56
#: src/view/screens/PrivacyPolicy.tsx:29
-#: src/view/screens/Settings/index.tsx:891
-#: src/view/shell/Drawer.tsx:262
+#: src/view/screens/Settings/index.tsx:923
+#: src/view/shell/Drawer.tsx:265
msgid "Privacy Policy"
msgstr "개인정보 처리방침"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:198
+#: src/screens/Login/ForgotPasswordForm.tsx:156
msgid "Processing..."
msgstr "처리 중…"
-#: src/view/shell/bottom-bar/BottomBar.tsx:247
-#: src/view/shell/desktop/LeftNav.tsx:415
+#: src/view/screens/DebugMod.tsx:888
+#: src/view/screens/Profile.tsx:342
+msgid "profile"
+msgstr "프로필"
+
+#: src/view/shell/bottom-bar/BottomBar.tsx:260
+#: src/view/shell/desktop/LeftNav.tsx:419
#: src/view/shell/Drawer.tsx:70
-#: src/view/shell/Drawer.tsx:546
-#: src/view/shell/Drawer.tsx:547
+#: src/view/shell/Drawer.tsx:549
+#: src/view/shell/Drawer.tsx:550
msgid "Profile"
msgstr "프로필"
-#: src/view/com/modals/EditProfile.tsx:128
+#: src/view/com/modals/EditProfile.tsx:129
msgid "Profile updated"
msgstr "프로필 업데이트됨"
-#: src/view/screens/Settings/index.tsx:949
+#: src/view/screens/Settings/index.tsx:981
msgid "Protect your account by verifying your email."
msgstr "이메일을 인증하여 계정을 보호하세요."
-#: src/screens/Onboarding/StepFinished.tsx:101
+#: src/screens/Onboarding/StepFinished.tsx:105
msgid "Public"
msgstr "공공성"
@@ -2892,15 +3331,15 @@ msgstr "일괄 뮤트하거나 차단할 수 있는 공개적이고 공유 가
msgid "Public, shareable lists which can drive feeds."
msgstr "피드를 탐색할 수 있는 공개적이고 공유 가능한 목록입니다."
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish post"
msgstr "게시물 게시하기"
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish reply"
msgstr "답글 게시하기"
-#: src/view/com/modals/Repost.tsx:65
+#: src/view/com/modals/Repost.tsx:66
msgctxt "action"
msgid "Quote post"
msgstr "게시물 인용"
@@ -2909,7 +3348,7 @@ msgstr "게시물 인용"
msgid "Quote post"
msgstr "게시물 인용"
-#: src/view/com/modals/Repost.tsx:70
+#: src/view/com/modals/Repost.tsx:71
msgctxt "action"
msgid "Quote Post"
msgstr "게시물 인용"
@@ -2918,10 +3357,14 @@ msgstr "게시물 인용"
msgid "Random (aka \"Poster's Roulette\")"
msgstr "무작위"
-#: src/view/com/modals/EditImage.tsx:236
+#: src/view/com/modals/EditImage.tsx:237
msgid "Ratios"
msgstr "비율"
+#: src/view/screens/Search/Search.tsx:777
+msgid "Recent Searches"
+msgstr "최근 검색"
+
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116
msgid "Recommended Feeds"
msgstr "추천 피드"
@@ -2930,35 +3373,46 @@ msgstr "추천 피드"
msgid "Recommended Users"
msgstr "추천 사용자"
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/components/dialogs/MutedWords.tsx:286
+#: src/view/com/feeds/FeedSourceCard.tsx:283
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/SelfLabel.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/com/util/UserAvatar.tsx:285
-#: src/view/com/util/UserBanner.tsx:91
+#: src/view/com/posts/FeedErrorMessage.tsx:204
msgid "Remove"
msgstr "제거"
-#: src/view/com/feeds/FeedSourceCard.tsx:106
-msgid "Remove {0} from my feeds?"
-msgstr "{0}을(를) 내 피드에서 제거하시겠습니까?"
-
#: src/view/com/util/AccountDropdownBtn.tsx:22
msgid "Remove account"
msgstr "계정 제거"
-#: src/view/com/posts/FeedErrorMessage.tsx:131
-#: src/view/com/posts/FeedErrorMessage.tsx:166
+#: src/view/com/util/UserAvatar.tsx:358
+msgid "Remove Avatar"
+msgstr "아바타 제거"
+
+#: src/view/com/util/UserBanner.tsx:148
+msgid "Remove Banner"
+msgstr "배너 제거"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:160
msgid "Remove feed"
msgstr "피드 제거"
-#: src/view/com/feeds/FeedSourceCard.tsx:105
-#: src/view/com/feeds/FeedSourceCard.tsx:167
-#: src/view/com/feeds/FeedSourceCard.tsx:172
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/posts/FeedErrorMessage.tsx:201
+msgid "Remove feed?"
+msgstr "피드를 제거하시겠습니까?"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:173
+#: src/view/com/feeds/FeedSourceCard.tsx:233
+#: src/view/screens/ProfileFeed.tsx:335
+#: src/view/screens/ProfileFeed.tsx:341
msgid "Remove from my feeds"
msgstr "내 피드에서 제거"
+#: src/view/com/feeds/FeedSourceCard.tsx:278
+msgid "Remove from my feeds?"
+msgstr "내 피드에서 제거하시겠습니까?"
+
#: src/view/com/composer/photos/Gallery.tsx:167
msgid "Remove image"
msgstr "이미지 제거"
@@ -2967,33 +3421,36 @@ msgstr "이미지 제거"
msgid "Remove image preview"
msgstr "이미지 미리보기 제거"
-#: src/view/com/modals/Repost.tsx:47
+#: src/components/dialogs/MutedWords.tsx:329
+msgid "Remove mute word from your list"
+msgstr "목록에서 뮤트한 단어 제거"
+
+#: src/view/com/modals/Repost.tsx:48
msgid "Remove repost"
msgstr "재게시를 취소합니다"
-#: src/view/com/feeds/FeedSourceCard.tsx:173
-msgid "Remove this feed from my feeds?"
-msgstr "이 피드를 내 피드에서 제거하시겠습니까?"
-
-#: src/view/com/posts/FeedErrorMessage.tsx:132
-msgid "Remove this feed from your saved feeds?"
-msgstr "이 피드를 저장된 피드에서 제거하시겠습니까?"
+#: src/view/com/posts/FeedErrorMessage.tsx:202
+msgid "Remove this feed from your saved feeds"
+msgstr "저장된 피드에서 이 피드를 제거합니다"
#: src/view/com/modals/ListAddRemoveUsers.tsx:199
#: src/view/com/modals/UserAddRemoveLists.tsx:152
msgid "Removed from list"
msgstr "리스트에서 제거됨"
-#: src/view/com/feeds/FeedSourceCard.tsx:111
-#: src/view/com/feeds/FeedSourceCard.tsx:178
+#: src/view/com/feeds/FeedSourceCard.tsx:121
msgid "Removed from my feeds"
msgstr "내 피드에서 제거됨"
+#: src/view/screens/ProfileFeed.tsx:209
+msgid "Removed from your feeds"
+msgstr "내 피드에서 제거됨"
+
#: src/view/com/composer/ExternalEmbed.tsx:71
msgid "Removes default thumbnail from {0}"
msgstr "{0}에서 기본 미리보기 이미지를 제거합니다"
-#: src/view/screens/Profile.tsx:181
+#: src/view/screens/Profile.tsx:191
msgid "Replies"
msgstr "답글"
@@ -3001,45 +3458,67 @@ msgstr "답글"
msgid "Replies to this thread are disabled"
msgstr "이 스레드에 대한 답글이 비활성화됩니다."
-#: src/view/com/composer/Composer.tsx:348
+#: src/view/com/composer/Composer.tsx:365
msgctxt "action"
msgid "Reply"
msgstr "답글"
-#: src/view/screens/PreferencesHomeFeed.tsx:144
+#: src/view/screens/PreferencesFollowingFeed.tsx:144
msgid "Reply Filters"
msgstr "답글 필터"
#: src/view/com/post/Post.tsx:166
-#: src/view/com/posts/FeedItem.tsx:287
+#: src/view/com/posts/FeedItem.tsx:280
msgctxt "description"
msgid "Reply to <0/>"
msgstr "<0/> 님에게 보내는 답글"
-#: src/view/com/modals/report/Modal.tsx:166
-msgid "Report {collectionName}"
-msgstr "{collectionName} 신고"
-
-#: src/view/com/profile/ProfileHeader.tsx:360
+#: src/view/com/profile/ProfileMenu.tsx:319
+#: src/view/com/profile/ProfileMenu.tsx:322
msgid "Report Account"
msgstr "계정 신고"
-#: src/view/screens/ProfileFeed.tsx:292
+#: src/components/ReportDialog/index.tsx:49
+msgid "Report dialog"
+msgstr "신고 대화 상자"
+
+#: src/view/screens/ProfileFeed.tsx:352
+#: src/view/screens/ProfileFeed.tsx:354
msgid "Report feed"
msgstr "피드 신고"
-#: src/view/screens/ProfileList.tsx:458
+#: src/view/screens/ProfileList.tsx:429
msgid "Report List"
msgstr "리스트 신고"
-#: src/view/com/modals/report/SendReportButton.tsx:37
-#: src/view/com/util/forms/PostDropdownBtn.tsx:210
+#: src/view/com/util/forms/PostDropdownBtn.tsx:292
+#: src/view/com/util/forms/PostDropdownBtn.tsx:294
msgid "Report post"
msgstr "게시물 신고"
-#: src/view/com/modals/Repost.tsx:43
-#: src/view/com/modals/Repost.tsx:48
-#: src/view/com/modals/Repost.tsx:53
+#: src/components/ReportDialog/SelectReportOptionView.tsx:42
+msgid "Report this content"
+msgstr "이 콘텐츠 신고하기"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:55
+msgid "Report this feed"
+msgstr "이 피드 신고하기"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:52
+msgid "Report this list"
+msgstr "이 리스트 신고하기"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:49
+msgid "Report this post"
+msgstr "이 게시물 신고하기"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:46
+msgid "Report this user"
+msgstr "이 사용자 신고하기"
+
+#: src/view/com/modals/Repost.tsx:44
+#: src/view/com/modals/Repost.tsx:49
+#: src/view/com/modals/Repost.tsx:54
#: src/view/com/util/post-ctrls/RepostButton.tsx:61
msgctxt "action"
msgid "Repost"
@@ -3058,15 +3537,15 @@ msgstr "재게시 또는 게시물 인용"
msgid "Reposted By"
msgstr "재게시한 사용자"
-#: src/view/com/posts/FeedItem.tsx:207
+#: src/view/com/posts/FeedItem.tsx:197
msgid "Reposted by {0}"
msgstr "{0} 님이 재게시함"
-#: src/view/com/posts/FeedItem.tsx:224
+#: src/view/com/posts/FeedItem.tsx:214
msgid "Reposted by <0/>"
msgstr "<0/> 님이 재게시함"
-#: src/view/com/notifications/FeedItem.tsx:162
+#: src/view/com/notifications/FeedItem.tsx:166
msgid "reposted your post"
msgstr "님이 내 게시물을 재게시했습니다"
@@ -3079,61 +3558,50 @@ msgstr "이 게시물의 재게시"
msgid "Request Change"
msgstr "변경 요청"
-#: src/view/com/auth/create/Step2.tsx:219
-msgid "Request code"
-msgstr "코드 요청"
-
-#: src/view/com/modals/ChangePassword.tsx:239
#: src/view/com/modals/ChangePassword.tsx:241
+#: src/view/com/modals/ChangePassword.tsx:243
msgid "Request Code"
-msgstr ""
+msgstr "코드 요청"
-#: src/view/screens/Settings/index.tsx:456
+#: src/view/screens/Settings/index.tsx:475
msgid "Require alt text before posting"
msgstr "게시하기 전 대체 텍스트 필수"
-#: src/view/com/auth/create/Step1.tsx:149
+#: src/screens/Signup/StepInfo/index.tsx:69
msgid "Required for this provider"
msgstr "이 제공자에서 필수"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:124
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:136
+#: src/view/com/modals/ChangePassword.tsx:185
msgid "Reset code"
msgstr "재설정 코드"
-#: src/view/com/modals/ChangePassword.tsx:190
+#: src/view/com/modals/ChangePassword.tsx:192
msgid "Reset Code"
-msgstr ""
-
-#: src/view/screens/Settings/index.tsx:824
-msgid "Reset onboarding"
-msgstr "온보딩 초기화"
+msgstr "재설정 코드"
-#: src/view/screens/Settings/index.tsx:827
+#: src/view/screens/Settings/index.tsx:858
+#: src/view/screens/Settings/index.tsx:861
msgid "Reset onboarding state"
msgstr "온보딩 상태 초기화"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:104
+#: src/screens/Login/ForgotPasswordForm.tsx:86
msgid "Reset password"
msgstr "비밀번호 재설정"
-#: src/view/screens/Settings/index.tsx:814
-msgid "Reset preferences"
-msgstr "설정 초기화"
-
-#: src/view/screens/Settings/index.tsx:817
+#: src/view/screens/Settings/index.tsx:848
+#: src/view/screens/Settings/index.tsx:851
msgid "Reset preferences state"
msgstr "설정 상태 초기화"
-#: src/view/screens/Settings/index.tsx:825
+#: src/view/screens/Settings/index.tsx:859
msgid "Resets the onboarding state"
msgstr "온보딩 상태 초기화"
-#: src/view/screens/Settings/index.tsx:815
+#: src/view/screens/Settings/index.tsx:849
msgid "Resets the preferences state"
msgstr "설정 상태 초기화"
-#: src/view/com/auth/login/LoginForm.tsx:269
+#: src/screens/Login/LoginForm.tsx:235
msgid "Retries login"
msgstr "로그인을 다시 시도합니다"
@@ -3142,105 +3610,134 @@ msgstr "로그인을 다시 시도합니다"
msgid "Retries the last action, which errored out"
msgstr "오류가 발생한 마지막 작업을 다시 시도합니다"
-#: src/screens/Onboarding/StepInterests/index.tsx:221
-#: src/screens/Onboarding/StepInterests/index.tsx:224
-#: src/view/com/auth/create/CreateAccount.tsx:170
-#: src/view/com/auth/create/CreateAccount.tsx:175
-#: src/view/com/auth/create/Step2.tsx:255
-#: src/view/com/auth/login/LoginForm.tsx:268
-#: src/view/com/auth/login/LoginForm.tsx:271
+#: src/components/Error.tsx:79
+#: src/components/Lists.tsx:91
+#: src/screens/Login/LoginForm.tsx:234
+#: src/screens/Login/LoginForm.tsx:241
+#: src/screens/Onboarding/StepInterests/index.tsx:225
+#: src/screens/Onboarding/StepInterests/index.tsx:228
+#: src/screens/Signup/index.tsx:193
#: src/view/com/util/error/ErrorMessage.tsx:55
#: src/view/com/util/error/ErrorScreen.tsx:72
msgid "Retry"
msgstr "다시 시도"
-#: src/view/com/auth/create/Step2.tsx:247
-msgid "Retry."
-msgstr "다시 시도하기"
-
-#: src/view/screens/ProfileList.tsx:898
+#: src/components/Error.tsx:86
+#: src/view/screens/ProfileList.tsx:917
msgid "Return to previous page"
msgstr "이전 페이지로 돌아갑니다"
-#: src/view/shell/desktop/RightNav.tsx:55
-msgid "SANDBOX. Posts and accounts are not permanent."
-msgstr "샌드박스. 글과 계정은 영구적이지 않습니다."
+#: src/view/screens/NotFound.tsx:59
+msgid "Returns to home page"
+msgstr "홈 페이지로 돌아갑니다"
-#: src/view/com/lightbox/Lightbox.tsx:132
-#: src/view/com/modals/CreateOrEditList.tsx:345
-msgctxt "action"
+#: src/view/screens/NotFound.tsx:58
+#: src/view/screens/ProfileFeed.tsx:113
+msgid "Returns to previous page"
+msgstr "이전 페이지로 돌아갑니다"
+
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/view/com/modals/ChangeHandle.tsx:174
+#: src/view/com/modals/CreateOrEditList.tsx:338
+#: src/view/com/modals/EditProfile.tsx:225
msgid "Save"
msgstr "저장"
-#: src/view/com/modals/BirthDateSettings.tsx:94
-#: src/view/com/modals/BirthDateSettings.tsx:97
-#: src/view/com/modals/ChangeHandle.tsx:173
-#: src/view/com/modals/CreateOrEditList.tsx:337
-#: src/view/com/modals/EditProfile.tsx:224
-#: src/view/screens/ProfileFeed.tsx:345
+#: src/view/com/lightbox/Lightbox.tsx:132
+#: src/view/com/modals/CreateOrEditList.tsx:346
+msgctxt "action"
msgid "Save"
msgstr "저장"
-#: src/view/com/modals/AltImage.tsx:130
+#: src/view/com/modals/AltImage.tsx:131
msgid "Save alt text"
msgstr "대체 텍스트 저장"
-#: src/view/com/modals/EditProfile.tsx:232
+#: src/components/dialogs/BirthDateSettings.tsx:119
+msgid "Save birthday"
+msgstr "생년월일 저장"
+
+#: src/view/com/modals/EditProfile.tsx:233
msgid "Save Changes"
msgstr "변경 사항 저장"
-#: src/view/com/modals/ChangeHandle.tsx:170
+#: src/view/com/modals/ChangeHandle.tsx:171
msgid "Save handle change"
msgstr "핸들 변경 저장"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:144
+#: src/view/com/modals/crop-image/CropImage.web.tsx:145
msgid "Save image crop"
msgstr "이미지 자르기 저장"
+#: src/view/screens/ProfileFeed.tsx:336
+#: src/view/screens/ProfileFeed.tsx:342
+msgid "Save to my feeds"
+msgstr "내 피드에 저장"
+
#: src/view/screens/SavedFeeds.tsx:122
msgid "Saved Feeds"
msgstr "저장된 피드"
-#: src/view/com/modals/EditProfile.tsx:225
+#: src/view/com/lightbox/Lightbox.tsx:81
+msgid "Saved to your camera roll."
+msgstr "내 앨범에 저장됨"
+
+#: src/view/screens/ProfileFeed.tsx:213
+msgid "Saved to your feeds"
+msgstr "내 피드에 저장됨"
+
+#: src/view/com/modals/EditProfile.tsx:226
msgid "Saves any changes to your profile"
msgstr "프로필에 대한 모든 변경 사항을 저장합니다"
-#: src/view/com/modals/ChangeHandle.tsx:171
+#: src/view/com/modals/ChangeHandle.tsx:172
msgid "Saves handle change to {handle}"
msgstr "핸들을 {handle}(으)로 변경합니다"
+#: src/view/com/modals/crop-image/CropImage.web.tsx:146
+msgid "Saves image crop settings"
+msgstr "이미지 자르기 설정을 저장합니다"
+
#: src/screens/Onboarding/index.tsx:36
msgid "Science"
msgstr "과학"
-#: src/view/screens/ProfileList.tsx:854
+#: src/view/screens/ProfileList.tsx:873
msgid "Scroll to top"
msgstr "맨 위로 스크롤"
-#: src/Navigation.tsx:437
-#: src/view/com/auth/LoggedOut.tsx:122
+#: src/Navigation.tsx:459
+#: src/view/com/auth/LoggedOut.tsx:123
#: src/view/com/modals/ListAddRemoveUsers.tsx:75
#: src/view/com/util/forms/SearchInput.tsx:67
#: src/view/com/util/forms/SearchInput.tsx:79
-#: src/view/screens/Search/Search.tsx:418
-#: src/view/screens/Search/Search.tsx:645
-#: src/view/screens/Search/Search.tsx:663
-#: src/view/shell/bottom-bar/BottomBar.tsx:159
-#: src/view/shell/desktop/LeftNav.tsx:324
-#: src/view/shell/desktop/Search.tsx:214
-#: src/view/shell/desktop/Search.tsx:223
-#: src/view/shell/Drawer.tsx:362
-#: src/view/shell/Drawer.tsx:363
+#: src/view/screens/Search/Search.tsx:421
+#: src/view/screens/Search/Search.tsx:670
+#: src/view/screens/Search/Search.tsx:688
+#: src/view/shell/bottom-bar/BottomBar.tsx:169
+#: src/view/shell/desktop/LeftNav.tsx:328
+#: src/view/shell/desktop/Search.tsx:215
+#: src/view/shell/desktop/Search.tsx:224
+#: src/view/shell/Drawer.tsx:365
+#: src/view/shell/Drawer.tsx:366
msgid "Search"
msgstr "검색"
-#: src/view/screens/Search/Search.tsx:712
-#: src/view/shell/desktop/Search.tsx:255
+#: src/view/screens/Search/Search.tsx:737
+#: src/view/shell/desktop/Search.tsx:256
msgid "Search for \"{query}\""
msgstr "\"{query}\"에 대한 검색 결과"
-#: src/view/com/auth/LoggedOut.tsx:104
+#: src/components/TagMenu/index.tsx:145
+msgid "Search for all posts by @{authorHandle} with tag {displayTag}"
+msgstr "{displayTag} 태그를 사용한 @{authorHandle} 님의 모든 게시물 검색"
+
+#: src/components/TagMenu/index.tsx:94
+msgid "Search for all posts with tag {displayTag}"
+msgstr "{displayTag} 태그를 사용한 모든 게시물 검색"
+
#: src/view/com/auth/LoggedOut.tsx:105
+#: src/view/com/auth/LoggedOut.tsx:106
#: src/view/com/modals/ListAddRemoveUsers.tsx:70
msgid "Search for users"
msgstr "사용자 검색하기"
@@ -3249,11 +3746,27 @@ msgstr "사용자 검색하기"
msgid "Security Step Required"
msgstr "보안 단계 필요"
+#: src/components/TagMenu/index.web.tsx:66
+msgid "See {truncatedTag} posts"
+msgstr "{truncatedTag} 게시물 보기"
+
+#: src/components/TagMenu/index.web.tsx:83
+msgid "See {truncatedTag} posts by user"
+msgstr "이 사용자의 {truncatedTag} 게시물 보기"
+
+#: src/components/TagMenu/index.tsx:128
+msgid "See <0>{displayTag}0> posts"
+msgstr "<0>{displayTag}0> 게시물 보기"
+
+#: src/components/TagMenu/index.tsx:187
+msgid "See <0>{displayTag}0> posts by this user"
+msgstr "이 사용자의 <0>{displayTag}0> 게시물 보기"
+
#: src/view/screens/SavedFeeds.tsx:163
msgid "See this guide"
msgstr "이 가이드"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:39
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:40
msgid "See what's next"
msgstr "See what's next"
@@ -3261,36 +3774,43 @@ msgstr "See what's next"
msgid "Select {item}"
msgstr "{item} 선택"
-#: src/view/com/modals/ServerInput.tsx:75
-#~ msgid "Select Bluesky Social"
-#~ msgstr "Bluesky Social 선택"
+#: src/screens/Login/ChooseAccountForm.tsx:61
+msgid "Select account"
+msgstr "계정 선택"
-#: src/view/com/auth/login/Login.tsx:117
+#: src/screens/Login/index.tsx:120
msgid "Select from an existing account"
msgstr "기존 계정에서 선택"
+#: src/view/screens/LanguageSettings.tsx:299
+msgid "Select languages"
+msgstr "언어 선택"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:30
+msgid "Select moderator"
+msgstr "검토자 선택"
+
#: src/view/com/util/Selector.tsx:107
msgid "Select option {i} of {numItems}"
msgstr "{numItems}개 중 {i}번째 옵션을 선택합니다"
-#: src/view/com/auth/create/Step1.tsx:99
-#: src/view/com/auth/login/LoginForm.tsx:150
-msgid "Select service"
-msgstr "서비스 선택"
-
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:52
msgid "Select some accounts below to follow"
msgstr "아래에서 팔로우할 계정을 선택하세요"
+#: src/components/ReportDialog/SubmitView.tsx:135
+msgid "Select the moderation service(s) to report to"
+msgstr "신고할 검토 서비스를 선택하세요."
+
#: src/view/com/auth/server-input/index.tsx:82
msgid "Select the service that hosts your data."
-msgstr ""
+msgstr "데이터를 호스팅할 서비스를 선택하세요."
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:90
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:100
msgid "Select topical feeds to follow from the list below"
msgstr "아래 목록에서 팔로우할 화제 피드를 선택하세요"
-#: src/screens/Onboarding/StepModeration/index.tsx:75
+#: src/screens/Onboarding/StepModeration/index.tsx:63
msgid "Select what you want to see (or not see), and we’ll handle the rest."
msgstr "보고 싶거나 보고 싶지 않은 항목을 선택하면 나머지는 알아서 처리해 드립니다."
@@ -3299,26 +3819,26 @@ msgid "Select which languages you want your subscribed feeds to include. If none
msgstr "구독하는 피드에 포함할 언어를 선택합니다. 선택하지 않으면 모든 언어가 표시됩니다."
#: src/view/screens/LanguageSettings.tsx:98
-msgid "Select your app language for the default text to display in the app"
+msgid "Select your app language for the default text to display in the app."
msgstr "앱에 표시되는 기본 텍스트 언어를 선택합니다."
-#: src/screens/Onboarding/StepInterests/index.tsx:196
+#: src/screens/Signup/StepInfo/index.tsx:133
+msgid "Select your date of birth"
+msgstr "생년월일을 선택하세요"
+
+#: src/screens/Onboarding/StepInterests/index.tsx:200
msgid "Select your interests from the options below"
msgstr "아래 옵션에서 관심사를 선택하세요"
-#: src/view/com/auth/create/Step2.tsx:155
-msgid "Select your phone's country"
-msgstr "전화번호 국가 선택"
-
#: src/view/screens/LanguageSettings.tsx:190
msgid "Select your preferred language for translations in your feed."
msgstr "피드에서 번역을 위해 선호하는 언어를 선택합니다."
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:116
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:117
msgid "Select your primary algorithmic feeds"
msgstr "기본 알고리즘 피드를 선택하세요"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:142
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:133
msgid "Select your secondary algorithmic feeds"
msgstr "보조 알고리즘 피드를 선택하세요"
@@ -3327,79 +3847,54 @@ msgstr "보조 알고리즘 피드를 선택하세요"
msgid "Send Confirmation Email"
msgstr "확인 이메일 보내기"
-#: src/view/com/modals/DeleteAccount.tsx:131
+#: src/view/com/modals/DeleteAccount.tsx:130
msgid "Send email"
msgstr "이메일 보내기"
-#: src/view/com/modals/DeleteAccount.tsx:144
+#: src/view/com/modals/DeleteAccount.tsx:143
msgctxt "action"
msgid "Send Email"
msgstr "이메일 보내기"
-#: src/view/shell/Drawer.tsx:295
-#: src/view/shell/Drawer.tsx:316
+#: src/view/shell/Drawer.tsx:298
+#: src/view/shell/Drawer.tsx:319
msgid "Send feedback"
msgstr "피드백 보내기"
-#: src/view/com/modals/report/SendReportButton.tsx:45
-msgid "Send Report"
+#: src/components/ReportDialog/SubmitView.tsx:214
+#: src/components/ReportDialog/SubmitView.tsx:218
+msgid "Send report"
msgstr "신고 보내기"
-#: src/view/com/modals/DeleteAccount.tsx:133
+#: src/components/ReportDialog/SelectLabelerView.tsx:44
+msgid "Send report to {0}"
+msgstr "{0} 님에게 신고 보내기"
+
+#: src/view/com/modals/DeleteAccount.tsx:132
msgid "Sends email with confirmation code for account deletion"
msgstr "계정 삭제를 위한 확인 코드가 포함된 이메일을 전송합니다"
-#: src/view/com/auth/server-input/index.tsx:110
+#: src/view/com/auth/server-input/index.tsx:114
msgid "Server address"
-msgstr ""
-
-#: src/view/com/modals/ContentFilteringSettings.tsx:311
-msgid "Set {value} for {labelGroup} content moderation policy"
-msgstr "{labelGroup} 콘텐츠 관리 정책에 대해 {value}을(를) 설정합니다"
-
-#: src/view/com/modals/ContentFilteringSettings.tsx:160
-#: src/view/com/modals/ContentFilteringSettings.tsx:179
-msgctxt "action"
-msgid "Set Age"
-msgstr "나이 설정"
+msgstr "서버 주소"
-#: src/view/screens/Settings/index.tsx:488
-msgid "Set color theme to dark"
-msgstr "색상 테마를 어두움으로 설정합니다"
-
-#: src/view/screens/Settings/index.tsx:481
-msgid "Set color theme to light"
-msgstr "색상 테마를 밝음으로 설정합니다"
+#: src/screens/Moderation/index.tsx:304
+msgid "Set birthdate"
+msgstr "생년월일 설정"
-#: src/view/screens/Settings/index.tsx:475
-msgid "Set color theme to system setting"
-msgstr "색상 테마를 시스템 설정에 맞춥니다"
-
-#: src/view/screens/Settings/index.tsx:514
-msgid "Set dark theme to the dark theme"
-msgstr ""
-
-#: src/view/screens/Settings/index.tsx:507
-msgid "Set dark theme to the dim theme"
-msgstr ""
-
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:104
+#: src/screens/Login/SetNewPasswordForm.tsx:102
msgid "Set new password"
msgstr "새 비밀번호 설정"
-#: src/view/com/auth/create/Step1.tsx:221
-msgid "Set password"
-msgstr "비밀번호 설정"
-
-#: src/view/screens/PreferencesHomeFeed.tsx:225
+#: src/view/screens/PreferencesFollowingFeed.tsx:225
msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible."
msgstr "피드에서 모든 인용 게시물을 숨기려면 이 설정을 \"아니요\"로 설정합니다. 재게시는 계속 표시됩니다."
-#: src/view/screens/PreferencesHomeFeed.tsx:122
+#: src/view/screens/PreferencesFollowingFeed.tsx:122
msgid "Set this setting to \"No\" to hide all replies from your feed."
msgstr "피드에서 모든 답글을 숨기려면 이 설정을 \"아니요\"로 설정합니다."
-#: src/view/screens/PreferencesHomeFeed.tsx:191
+#: src/view/screens/PreferencesFollowingFeed.tsx:191
msgid "Set this setting to \"No\" to hide all reposts from your feed."
msgstr "피드에서 모든 재게시를 숨기려면 이 설정을 \"아니요\"로 설정합니다."
@@ -3407,36 +3902,59 @@ msgstr "피드에서 모든 재게시를 숨기려면 이 설정을 \"아니요\
msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature."
msgstr "스레드 보기에 답글을 표시하려면 이 설정을 \"예\"로 설정합니다. 이는 실험적인 기능입니다."
-#: src/view/screens/PreferencesHomeFeed.tsx:261
-msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
-msgstr "팔로우한 피드에 저장된 피드 샘플을 표시하려면 이 설정을 \"예\"로 설정합니다. 이는 실험적인 기능입니다."
+#: src/view/screens/PreferencesFollowingFeed.tsx:261
+msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your Following feed. This is an experimental feature."
+msgstr "팔로우 중 피드에 저장된 피드 샘플을 표시하려면 이 설정을 \"예\"로 설정합니다. 이는 실험적인 기능입니다."
-#: src/screens/Onboarding/Layout.tsx:50
+#: src/screens/Onboarding/Layout.tsx:48
msgid "Set up your account"
msgstr "계정 설정하기"
-#: src/view/com/modals/ChangeHandle.tsx:266
+#: src/view/com/modals/ChangeHandle.tsx:267
msgid "Sets Bluesky username"
msgstr "Bluesky 사용자 이름을 설정합니다"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:157
+#: src/view/screens/Settings/index.tsx:507
+msgid "Sets color theme to dark"
+msgstr "색상 테마를 어두움으로 설정합니다"
+
+#: src/view/screens/Settings/index.tsx:500
+msgid "Sets color theme to light"
+msgstr "색상 테마를 밝음으로 설정합니다"
+
+#: src/view/screens/Settings/index.tsx:494
+msgid "Sets color theme to system setting"
+msgstr "색상 테마를 시스템 설정에 맞춥니다"
+
+#: src/view/screens/Settings/index.tsx:533
+msgid "Sets dark theme to the dark theme"
+msgstr "어두운 테마를 완전히 어둡게 설정합니다"
+
+#: src/view/screens/Settings/index.tsx:526
+msgid "Sets dark theme to the dim theme"
+msgstr "어두운 테마를 살짝 밝게 설정합니다"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:113
msgid "Sets email for password reset"
msgstr "비밀번호 재설정을 위한 이메일을 설정합니다"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:122
-msgid "Sets hosting provider for password reset"
-msgstr "비밀번호 재설정을 위한 호스팅 제공자를 설정합니다"
+#: src/view/com/modals/crop-image/CropImage.web.tsx:124
+msgid "Sets image aspect ratio to square"
+msgstr "이미지 비율을 정사각형으로 설정합니다"
-#: src/view/com/auth/create/Step1.tsx:100
-#: src/view/com/auth/login/LoginForm.tsx:151
-msgid "Sets server for the Bluesky client"
-msgstr "Bluesky 클라이언트를 위한 서버를 설정합니다"
+#: src/view/com/modals/crop-image/CropImage.web.tsx:114
+msgid "Sets image aspect ratio to tall"
+msgstr "이미지 비율을 세로로 길게 설정합니다"
-#: src/Navigation.tsx:135
-#: src/view/screens/Settings/index.tsx:294
-#: src/view/shell/desktop/LeftNav.tsx:433
-#: src/view/shell/Drawer.tsx:567
-#: src/view/shell/Drawer.tsx:568
+#: src/view/com/modals/crop-image/CropImage.web.tsx:104
+msgid "Sets image aspect ratio to wide"
+msgstr "이미지 비율을 가로로 길게 설정합니다"
+
+#: src/Navigation.tsx:139
+#: src/view/screens/Settings/index.tsx:313
+#: src/view/shell/desktop/LeftNav.tsx:437
+#: src/view/shell/Drawer.tsx:570
+#: src/view/shell/Drawer.tsx:571
msgid "Settings"
msgstr "설정"
@@ -3444,72 +3962,105 @@ msgstr "설정"
msgid "Sexual activity or erotic nudity."
msgstr "성행위 또는 선정적인 노출."
+#: src/lib/moderation/useGlobalLabelStrings.ts:38
+msgid "Sexually Suggestive"
+msgstr "외설적"
+
#: src/view/com/lightbox/Lightbox.tsx:141
msgctxt "action"
msgid "Share"
msgstr "공유"
-#: src/view/com/profile/ProfileHeader.tsx:294
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
-#: src/view/screens/ProfileList.tsx:417
+#: src/view/com/profile/ProfileMenu.tsx:215
+#: src/view/com/profile/ProfileMenu.tsx:224
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:235
+#: src/view/screens/ProfileList.tsx:388
msgid "Share"
msgstr "공유"
-#: src/view/screens/ProfileFeed.tsx:304
+#: src/view/com/profile/ProfileMenu.tsx:373
+#: src/view/com/util/forms/PostDropdownBtn.tsx:347
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:251
+msgid "Share anyway"
+msgstr "무시하고 공유"
+
+#: src/view/screens/ProfileFeed.tsx:362
+#: src/view/screens/ProfileFeed.tsx:364
msgid "Share feed"
msgstr "피드 공유"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:43
-#: src/view/com/modals/ContentFilteringSettings.tsx:266
-#: src/view/com/util/moderation/ContentHider.tsx:107
-#: src/view/com/util/moderation/PostHider.tsx:108
-#: src/view/screens/Settings/index.tsx:344
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
+msgid "Share Link"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:92
+msgid "Shares the linked website"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:136
+#: src/components/moderation/PostHider.tsx:107
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:54
+#: src/view/screens/Settings/index.tsx:363
msgid "Show"
msgstr "표시"
-#: src/view/screens/PreferencesHomeFeed.tsx:68
+#: src/view/screens/PreferencesFollowingFeed.tsx:68
msgid "Show all replies"
msgstr "모든 답글 표시"
-#: src/view/com/util/moderation/ScreenHider.tsx:132
+#: src/components/moderation/ScreenHider.tsx:169
+#: src/components/moderation/ScreenHider.tsx:172
msgid "Show anyway"
msgstr "무시하고 표시"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:27
+#: src/lib/moderation/useLabelBehaviorDescription.ts:63
+msgid "Show badge"
+msgstr "배지 표시"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:61
+msgid "Show badge and filter from feeds"
+msgstr "배지 표시 및 피드에서 필터링"
+
#: src/view/com/modals/EmbedConsent.tsx:87
-msgid "Show embeds from {0}"
-msgstr "{0} 임베드 표시"
+#~ msgid "Show embeds from {0}"
+#~ msgstr "{0} 임베드 표시"
-#: src/view/com/profile/ProfileHeader.tsx:458
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:200
msgid "Show follows similar to {0}"
msgstr "{0} 님과 비슷한 팔로우 표시"
-#: src/view/com/post-thread/PostThreadItem.tsx:539
-#: src/view/com/post/Post.tsx:197
-#: src/view/com/posts/FeedItem.tsx:363
+#: src/view/com/post-thread/PostThreadItem.tsx:507
+#: src/view/com/post/Post.tsx:201
+#: src/view/com/posts/FeedItem.tsx:355
msgid "Show More"
msgstr "더 보기"
-#: src/view/screens/PreferencesHomeFeed.tsx:258
+#: src/view/screens/PreferencesFollowingFeed.tsx:258
msgid "Show Posts from My Feeds"
msgstr "내 피드에서 게시물 표시"
-#: src/view/screens/PreferencesHomeFeed.tsx:222
+#: src/view/screens/PreferencesFollowingFeed.tsx:222
msgid "Show Quote Posts"
msgstr "인용 게시물 표시"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:118
+#: src/screens/Onboarding/StepFollowingFeed.tsx:119
msgid "Show quote-posts in Following feed"
-msgstr "팔로우 중인 피드에 인용 게시물 표시"
+msgstr "팔로우 중 피드에 인용 게시물 표시"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:134
+#: src/screens/Onboarding/StepFollowingFeed.tsx:135
msgid "Show quotes in Following"
-msgstr "팔로우 중인 피드에 인용 표시"
+msgstr "팔로우 중 피드에 인용 표시"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:94
+#: src/screens/Onboarding/StepFollowingFeed.tsx:95
msgid "Show re-posts in Following feed"
-msgstr "팔로우 중인 피드에 재게시 표시"
+msgstr "팔로우 중 피드에 재게시 표시"
-#: src/view/screens/PreferencesHomeFeed.tsx:119
+#: src/view/screens/PreferencesFollowingFeed.tsx:119
msgid "Show Replies"
msgstr "답글 표시"
@@ -3517,87 +4068,90 @@ msgstr "답글 표시"
msgid "Show replies by people you follow before all other replies."
msgstr "내가 팔로우하는 사람들의 답글을 다른 모든 답글보다 먼저 표시합니다."
-#: src/screens/Onboarding/StepFollowingFeed.tsx:86
+#: src/screens/Onboarding/StepFollowingFeed.tsx:87
msgid "Show replies in Following"
-msgstr "팔로우 중인 피드에 답글 표시"
+msgstr "팔로우 중 피드에 답글 표시"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:70
+#: src/screens/Onboarding/StepFollowingFeed.tsx:71
msgid "Show replies in Following feed"
-msgstr "팔로우 중인 피드에 답글 표시"
+msgstr "팔로우 중 피드에 답글 표시"
-#: src/view/screens/PreferencesHomeFeed.tsx:70
+#: src/view/screens/PreferencesFollowingFeed.tsx:70
msgid "Show replies with at least {value} {0}"
msgstr "좋아요가 {value}개 이상인 답글 표시"
-#: src/view/screens/PreferencesHomeFeed.tsx:188
+#: src/view/screens/PreferencesFollowingFeed.tsx:188
msgid "Show Reposts"
msgstr "재게시 표시"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:110
+#: src/screens/Onboarding/StepFollowingFeed.tsx:111
msgid "Show reposts in Following"
-msgstr "팔로우 중인 피드에 재게시 표시"
+msgstr "팔로우 중 피드에 재게시 표시"
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:68
+#: src/components/moderation/PostHider.tsx:64
msgid "Show the content"
msgstr "콘텐츠 표시"
-#: src/view/com/notifications/FeedItem.tsx:346
+#: src/view/com/notifications/FeedItem.tsx:351
msgid "Show users"
msgstr "사용자 표시"
-#: src/view/com/profile/ProfileHeader.tsx:461
-msgid "Shows a list of users similar to this user."
-msgstr "이 사용자와 유사한 사용자 목록을 표시합니다"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:58
+msgid "Show warning"
+msgstr "경고 표시"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:56
+msgid "Show warning and filter from feeds"
+msgstr "경고 표시 및 피드에서 필터링"
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:124
-#: src/view/com/profile/ProfileHeader.tsx:505
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:130
msgid "Shows posts from {0} in your feed"
msgstr "피드에 {0} 님의 게시물을 표시합니다"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:70
-#: src/view/com/auth/login/Login.tsx:98
-#: src/view/com/auth/SplashScreen.tsx:54
-#: src/view/shell/bottom-bar/BottomBar.tsx:285
-#: src/view/shell/bottom-bar/BottomBar.tsx:286
-#: src/view/shell/bottom-bar/BottomBar.tsx:288
+#: src/screens/Login/index.tsx:100
+#: src/screens/Login/index.tsx:119
+#: src/screens/Login/LoginForm.tsx:131
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:73
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:83
+#: src/view/com/auth/SplashScreen.tsx:81
+#: src/view/com/auth/SplashScreen.tsx:90
+#: src/view/com/auth/SplashScreen.web.tsx:110
+#: src/view/com/auth/SplashScreen.web.tsx:119
+#: src/view/shell/bottom-bar/BottomBar.tsx:300
+#: src/view/shell/bottom-bar/BottomBar.tsx:301
+#: src/view/shell/bottom-bar/BottomBar.tsx:303
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:178
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:179
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:181
#: src/view/shell/NavSignupCard.tsx:58
#: src/view/shell/NavSignupCard.tsx:59
+#: src/view/shell/NavSignupCard.tsx:61
msgid "Sign in"
msgstr "로그인"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:78
-#: src/view/com/auth/SplashScreen.tsx:57
-#: src/view/com/auth/SplashScreen.web.tsx:87
-msgid "Sign In"
-msgstr "로그인"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:82
+#: src/view/com/auth/SplashScreen.tsx:90
+#: src/view/com/auth/SplashScreen.web.tsx:118
+#~ msgid "Sign In"
+#~ msgstr "로그인"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:44
+#: src/components/AccountList.tsx:109
msgid "Sign in as {0}"
msgstr "{0}(으)로 로그인"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:118
-#: src/view/com/auth/login/Login.tsx:116
+#: src/screens/Login/ChooseAccountForm.tsx:64
msgid "Sign in as..."
msgstr "로그인"
-#: src/view/com/auth/login/LoginForm.tsx:137
-msgid "Sign into"
-msgstr "로그인"
-
-#: src/view/com/modals/SwitchAccount.tsx:64
-#: src/view/com/modals/SwitchAccount.tsx:69
-#: src/view/screens/Settings/index.tsx:100
-#: src/view/screens/Settings/index.tsx:103
+#: src/view/screens/Settings/index.tsx:107
+#: src/view/screens/Settings/index.tsx:110
msgid "Sign out"
msgstr "로그아웃"
-#: src/view/shell/bottom-bar/BottomBar.tsx:275
-#: src/view/shell/bottom-bar/BottomBar.tsx:276
-#: src/view/shell/bottom-bar/BottomBar.tsx:278
+#: src/view/shell/bottom-bar/BottomBar.tsx:290
+#: src/view/shell/bottom-bar/BottomBar.tsx:291
+#: src/view/shell/bottom-bar/BottomBar.tsx:293
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:168
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:169
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:171
@@ -3611,49 +4165,44 @@ msgstr "가입하기"
msgid "Sign up or sign in to join the conversation"
msgstr "가입 또는 로그인하여 대화에 참여하세요"
-#: src/view/com/util/moderation/ScreenHider.tsx:76
+#: src/components/moderation/ScreenHider.tsx:97
+#: src/lib/moderation/useGlobalLabelStrings.ts:28
msgid "Sign-in Required"
msgstr "로그인 필요"
-#: src/view/screens/Settings/index.tsx:355
+#: src/view/screens/Settings/index.tsx:374
msgid "Signed in as"
msgstr "로그인한 계정"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:103
+#: src/screens/Login/ChooseAccountForm.tsx:48
msgid "Signed in as @{0}"
msgstr "@{0}(으)로 로그인했습니다"
-#: src/view/com/modals/SwitchAccount.tsx:66
-msgid "Signs {0} out of Bluesky"
-msgstr "Bluesky에서 {0}을(를) 로그아웃합니다"
+#: src/view/com/modals/SwitchAccount.tsx:71
+#~ msgid "Signs {0} out of Bluesky"
+#~ msgstr "Bluesky에서 {0}을(를) 로그아웃합니다"
-#: src/screens/Onboarding/StepInterests/index.tsx:235
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:195
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:33
+#: src/screens/Onboarding/StepInterests/index.tsx:239
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:203
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:35
msgid "Skip"
msgstr "건너뛰기"
-#: src/screens/Onboarding/StepInterests/index.tsx:232
+#: src/screens/Onboarding/StepInterests/index.tsx:236
msgid "Skip this flow"
msgstr "이 단계 건너뛰기"
-#: src/view/com/auth/create/Step2.tsx:82
-msgid "SMS verification"
-msgstr "SMS 인증"
-
#: src/screens/Onboarding/index.tsx:40
msgid "Software Dev"
msgstr "소프트웨어 개발"
-#: src/view/com/modals/ProfilePreview.tsx:62
-#~ msgid "Something went wrong and we're not sure what."
-#~ msgstr "문제가 발생했지만 원인을 알 수 없습니다."
-
-#: src/view/com/modals/Waitlist.tsx:51
-msgid "Something went wrong. Check your email and try again."
-msgstr "문제가 발생했습니다. 이메일을 확인한 후 다시 시도하세요."
+#: src/components/ReportDialog/index.tsx:59
+#: src/screens/Moderation/index.tsx:114
+#: src/screens/Profile/Sections/Labels.tsx:76
+msgid "Something went wrong, please try again."
+msgstr "뭔가 잘못되었습니다. 다시 시도해 주세요."
-#: src/App.native.tsx:61
+#: src/App.native.tsx:66
msgid "Sorry! Your session expired. Please log in again."
msgstr "죄송합니다. 세션이 만료되었습니다. 다시 로그인해 주세요."
@@ -3665,57 +4214,78 @@ msgstr "답글 정렬"
msgid "Sort replies to the same post by:"
msgstr "동일한 게시물에 대한 답글을 정렬하는 기준입니다."
+#: src/components/moderation/LabelsOnMeDialog.tsx:146
+msgid "Source:"
+msgstr "출처:"
+
+#: src/lib/moderation/useReportOptions.ts:65
+msgid "Spam"
+msgstr "스팸"
+
+#: src/lib/moderation/useReportOptions.ts:53
+msgid "Spam; excessive mentions or replies"
+msgstr "스팸, 과도한 멘션 또는 답글"
+
#: src/screens/Onboarding/index.tsx:30
msgid "Sports"
msgstr "스포츠"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:122
+#: src/view/com/modals/crop-image/CropImage.web.tsx:123
msgid "Square"
msgstr "정사각형"
-#: src/view/com/modals/ServerInput.tsx:62
-#~ msgid "Staging"
-#~ msgstr "스테이징"
-
-#: src/view/screens/Settings/index.tsx:871
+#: src/view/screens/Settings/index.tsx:903
msgid "Status page"
msgstr "상태 페이지"
-#: src/view/com/auth/create/StepHeader.tsx:22
-msgid "Step {0} of {numSteps}"
-msgstr "{numSteps}단계 중 {0}단계"
+#: src/screens/Signup/index.tsx:142
+msgid "Step"
+msgstr ""
-#: src/view/screens/Settings/index.tsx:274
+#: src/view/screens/Settings/index.tsx:292
msgid "Storage cleared, you need to restart the app now."
msgstr "스토리지가 지워졌으며 지금 앱을 다시 시작해야 합니다."
-#: src/Navigation.tsx:202
-#: src/view/screens/Settings/index.tsx:807
+#: src/Navigation.tsx:211
+#: src/view/screens/Settings/index.tsx:831
msgid "Storybook"
msgstr "스토리북"
-#: src/view/com/modals/AppealLabel.tsx:101
+#: src/components/moderation/LabelsOnMeDialog.tsx:255
+#: src/components/moderation/LabelsOnMeDialog.tsx:256
msgid "Submit"
msgstr "확인"
-#: src/view/screens/ProfileList.tsx:607
+#: src/view/screens/ProfileList.tsx:590
msgid "Subscribe"
msgstr "구독"
-#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:173
+#: src/screens/Profile/Sections/Labels.tsx:180
+msgid "Subscribe to @{0} to use these labels:"
+msgstr "이 라벨을 사용하려면 @{0} 님을 구독하세요:"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:221
+msgid "Subscribe to Labeler"
+msgstr "라벨러 구독"
+
+#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:172
#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:307
msgid "Subscribe to the {0} feed"
msgstr "{0} 피드 구독하기"
-#: src/view/screens/ProfileList.tsx:603
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:184
+msgid "Subscribe to this labeler"
+msgstr "이 라벨러 구독하기"
+
+#: src/view/screens/ProfileList.tsx:586
msgid "Subscribe to this list"
msgstr "이 리스트 구독하기"
-#: src/view/screens/Search/Search.tsx:373
+#: src/view/screens/Search/Search.tsx:376
msgid "Suggested Follows"
msgstr "팔로우 추천"
-#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:64
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:65
msgid "Suggested for you"
msgstr "나를 위한 추천"
@@ -3723,39 +4293,42 @@ msgstr "나를 위한 추천"
msgid "Suggestive"
msgstr "외설적"
-#: src/Navigation.tsx:212
+#: src/Navigation.tsx:226
#: src/view/screens/Support.tsx:30
#: src/view/screens/Support.tsx:33
msgid "Support"
msgstr "지원"
-#: src/view/com/modals/ProfilePreview.tsx:110
-#~ msgid "Swipe up to see more"
-#~ msgstr "위로 스와이프하여 더 보기"
-
-#: src/view/com/modals/SwitchAccount.tsx:117
+#: src/components/dialogs/SwitchAccount.tsx:46
+#: src/components/dialogs/SwitchAccount.tsx:49
msgid "Switch Account"
msgstr "계정 전환"
-#: src/view/com/modals/SwitchAccount.tsx:97
-#: src/view/screens/Settings/index.tsx:130
+#: src/view/screens/Settings/index.tsx:139
msgid "Switch to {0}"
msgstr "{0}(으)로 전환"
-#: src/view/com/modals/SwitchAccount.tsx:98
-#: src/view/screens/Settings/index.tsx:131
+#: src/view/screens/Settings/index.tsx:140
msgid "Switches the account you are logged in to"
msgstr "로그인한 계정을 전환합니다"
-#: src/view/screens/Settings/index.tsx:472
+#: src/view/screens/Settings/index.tsx:491
msgid "System"
msgstr "시스템"
-#: src/view/screens/Settings/index.tsx:795
+#: src/view/screens/Settings/index.tsx:819
msgid "System log"
msgstr "시스템 로그"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:112
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "tag"
+msgstr "태그"
+
+#: src/components/TagMenu/index.tsx:78
+msgid "Tag menu: {displayTag}"
+msgstr "태그 메뉴: {displayTag}"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:113
msgid "Tall"
msgstr "세로"
@@ -3767,25 +4340,52 @@ msgstr "탭하여 전체 크기로 봅니다"
msgid "Tech"
msgstr "기술"
-#: src/view/shell/desktop/RightNav.tsx:89
+#: src/view/shell/desktop/RightNav.tsx:81
msgid "Terms"
msgstr "이용약관"
-#: src/Navigation.tsx:222
-#: src/view/screens/Settings/index.tsx:885
+#: src/Navigation.tsx:236
+#: src/screens/Signup/StepInfo/Policies.tsx:49
+#: src/view/screens/Settings/index.tsx:917
#: src/view/screens/TermsOfService.tsx:29
-#: src/view/shell/Drawer.tsx:256
+#: src/view/shell/Drawer.tsx:259
msgid "Terms of Service"
msgstr "서비스 이용약관"
-#: src/view/com/modals/AppealLabel.tsx:70
-#: src/view/com/modals/report/InputIssueDetails.tsx:51
+#: src/lib/moderation/useReportOptions.ts:58
+#: src/lib/moderation/useReportOptions.ts:79
+#: src/lib/moderation/useReportOptions.ts:87
+msgid "Terms used violate community standards"
+msgstr "커뮤니티 기준을 위반하는 용어 사용"
+
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "text"
+msgstr "글"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:219
msgid "Text input field"
msgstr "텍스트 입력 필드"
-#: src/view/com/profile/ProfileHeader.tsx:262
+#: src/components/ReportDialog/SubmitView.tsx:78
+msgid "Thank you. Your report has been sent."
+msgstr "감사합니다. 신고를 전송했습니다."
+
+#: src/view/com/modals/ChangeHandle.tsx:465
+msgid "That contains the following:"
+msgstr "텍스트 파일 내용:"
+
+#: src/screens/Signup/index.tsx:84
+msgid "That handle is already taken."
+msgstr "이 핸들은 이미 사용 중입니다."
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:283
+#: src/view/com/profile/ProfileMenu.tsx:349
msgid "The account will be able to interact with you after unblocking."
-msgstr "차단을 해제하면 해당 계정이 나와 상호작용할 수 있게 됩니다."
+msgstr "차단을 해제하면 이 계정이 나와 상호작용할 수 있게 됩니다."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:127
+msgid "the author"
+msgstr "작성자"
#: src/view/screens/CommunityGuidelines.tsx:36
msgid "The Community Guidelines have been moved to <0/>"
@@ -3795,11 +4395,20 @@ msgstr "커뮤니티 가이드라인을 <0/>(으)로 이동했습니다"
msgid "The Copyright Policy has been moved to <0/>"
msgstr "저작권 정책을 <0/>(으)로 이동했습니다"
-#: src/screens/Onboarding/Layout.tsx:60
+#: src/components/moderation/LabelsOnMeDialog.tsx:48
+msgid "The following labels were applied to your account."
+msgstr "내 계정에 다음 라벨이 적용되었습니다."
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:49
+msgid "The following labels were applied to your content."
+msgstr "내 콘텐츠에 다음 라벨이 적용되었습니다."
+
+#: src/screens/Onboarding/Layout.tsx:58
msgid "The following steps will help customize your Bluesky experience."
msgstr "다음 단계는 Bluesky 환경을 맞춤 설정하는 데 도움이 됩니다."
-#: src/view/com/post-thread/PostThread.tsx:453
+#: src/view/com/post-thread/PostThread.tsx:153
+#: src/view/com/post-thread/PostThread.tsx:165
msgid "The post may have been deleted."
msgstr "게시물이 삭제되었을 수 있습니다."
@@ -3815,24 +4424,25 @@ msgstr "지원 양식을 이동했습니다. 도움이 필요하다면 <0/>하
msgid "The Terms of Service have been moved to"
msgstr "서비스 이용약관을 다음으로 이동했습니다:"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:150
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:141
msgid "There are many feeds to try:"
msgstr "시도해 볼 만한 피드:"
-#: src/view/screens/ProfileFeed.tsx:549
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:112
+#: src/view/screens/ProfileFeed.tsx:544
msgid "There was an an issue contacting the server, please check your internet connection and try again."
msgstr "서버에 연결하는 동안 문제가 발생했습니다. 인터넷 연결을 확인한 후 다시 시도하세요."
-#: src/view/com/posts/FeedErrorMessage.tsx:139
+#: src/view/com/posts/FeedErrorMessage.tsx:138
msgid "There was an an issue removing this feed. Please check your internet connection and try again."
msgstr "이 피드를 삭제하는 동안 문제가 발생했습니다. 인터넷 연결을 확인한 후 다시 시도하세요."
-#: src/view/screens/ProfileFeed.tsx:209
+#: src/view/screens/ProfileFeed.tsx:218
msgid "There was an an issue updating your feeds, please check your internet connection and try again."
msgstr "피드를 업데이트하는 동안 문제가 발생했습니다. 인터넷 연결을 확인한 후 다시 시도하세요."
-#: src/view/screens/ProfileFeed.tsx:236
-#: src/view/screens/ProfileList.tsx:266
+#: src/view/screens/ProfileFeed.tsx:245
+#: src/view/screens/ProfileList.tsx:275
#: src/view/screens/SavedFeeds.tsx:209
#: src/view/screens/SavedFeeds.tsx:231
#: src/view/screens/SavedFeeds.tsx:252
@@ -3841,9 +4451,8 @@ msgstr "서버에 연결하는 동안 문제가 발생했습니다"
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:57
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:66
-#: src/view/com/feeds/FeedSourceCard.tsx:113
-#: src/view/com/feeds/FeedSourceCard.tsx:127
-#: src/view/com/feeds/FeedSourceCard.tsx:181
+#: src/view/com/feeds/FeedSourceCard.tsx:110
+#: src/view/com/feeds/FeedSourceCard.tsx:123
msgid "There was an issue contacting your server"
msgstr "서버에 연결하는 동안 문제가 발생했습니다"
@@ -3851,7 +4460,7 @@ msgstr "서버에 연결하는 동안 문제가 발생했습니다"
msgid "There was an issue fetching notifications. Tap here to try again."
msgstr "알림을 가져오는 동안 문제가 발생했습니다. 이곳을 탭하여 다시 시도하세요."
-#: src/view/com/posts/Feed.tsx:263
+#: src/view/com/posts/Feed.tsx:287
msgid "There was an issue fetching posts. Tap here to try again."
msgstr "게시물을 가져오는 동안 문제가 발생했습니다. 이곳을 탭하여 다시 시도하세요."
@@ -3864,34 +4473,40 @@ msgstr "리스트를 가져오는 동안 문제가 발생했습니다. 이곳을
msgid "There was an issue fetching your lists. Tap here to try again."
msgstr "리스트를 가져오는 동안 문제가 발생했습니다. 이곳을 탭하여 다시 시도하세요."
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:63
-#: src/view/com/modals/ContentFilteringSettings.tsx:126
+#: src/components/ReportDialog/SubmitView.tsx:83
+msgid "There was an issue sending your report. Please check your internet connection."
+msgstr "신고를 전송하는 동안 문제가 발생했습니다. 인터넷 연결을 확인해 주세요."
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:65
msgid "There was an issue syncing your preferences with the server"
msgstr "설정을 서버와 동기화하는 동안 문제가 발생했습니다"
-#: src/view/screens/AppPasswords.tsx:66
+#: src/view/screens/AppPasswords.tsx:68
msgid "There was an issue with fetching your app passwords"
msgstr "앱 비밀번호를 가져오는 동안 문제가 발생했습니다"
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:93
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:105
-#: src/view/com/profile/ProfileHeader.tsx:156
-#: src/view/com/profile/ProfileHeader.tsx:177
-#: src/view/com/profile/ProfileHeader.tsx:216
-#: src/view/com/profile/ProfileHeader.tsx:229
-#: src/view/com/profile/ProfileHeader.tsx:249
-#: src/view/com/profile/ProfileHeader.tsx:271
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:105
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:127
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:99
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:111
+#: src/view/com/profile/ProfileMenu.tsx:106
+#: src/view/com/profile/ProfileMenu.tsx:117
+#: src/view/com/profile/ProfileMenu.tsx:132
+#: src/view/com/profile/ProfileMenu.tsx:143
+#: src/view/com/profile/ProfileMenu.tsx:157
+#: src/view/com/profile/ProfileMenu.tsx:170
msgid "There was an issue! {0}"
msgstr "문제가 발생했습니다! {0}"
-#: src/view/screens/ProfileList.tsx:287
-#: src/view/screens/ProfileList.tsx:306
-#: src/view/screens/ProfileList.tsx:328
-#: src/view/screens/ProfileList.tsx:347
+#: src/view/screens/ProfileList.tsx:288
+#: src/view/screens/ProfileList.tsx:302
+#: src/view/screens/ProfileList.tsx:316
+#: src/view/screens/ProfileList.tsx:330
msgid "There was an issue. Please check your internet connection and try again."
msgstr "문제가 발생했습니다. 인터넷 연결을 확인한 후 다시 시도하세요."
-#: src/view/com/util/ErrorBoundary.tsx:36
+#: src/view/com/util/ErrorBoundary.tsx:51
msgid "There was an unexpected issue in the application. Please let us know if this happened to you!"
msgstr "애플리케이션에 예기치 않은 문제가 발생했습니다. 이런 일이 발생하면 저희에게 알려주세요!"
@@ -3899,27 +4514,36 @@ msgstr "애플리케이션에 예기치 않은 문제가 발생했습니다. 이
msgid "There's been a rush of new users to Bluesky! We'll activate your account as soon as we can."
msgstr "Bluesky에 신규 사용자가 몰리고 있습니다! 최대한 빨리 계정을 활성화해 드리겠습니다."
-#: src/view/com/auth/create/Step2.tsx:55
-msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
-msgstr "잘못된 번호입니다. 국가를 선택하고 전체 전화번호를 입력하세요."
-
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:138
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:146
msgid "These are popular accounts you might like:"
msgstr "내가 좋아할 만한 인기 계정입니다:"
-#: src/view/com/util/moderation/ScreenHider.tsx:88
+#: src/components/moderation/ScreenHider.tsx:116
msgid "This {screenDescription} has been flagged:"
-msgstr "이 {screenDescription}에 플래그가 지정되었습니다:"
+msgstr "이 {screenDescription}에 다음 플래그가 지정되었습니다:"
-#: src/view/com/util/moderation/ScreenHider.tsx:83
+#: src/components/moderation/ScreenHider.tsx:111
msgid "This account has requested that users sign in to view their profile."
msgstr "이 계정의 프로필을 보려면 로그인해야 합니다."
-#: src/view/com/modals/EmbedConsent.tsx:68
+#: src/components/moderation/LabelsOnMeDialog.tsx:204
+msgid "This appeal will be sent to <0>{0}0>."
+msgstr "이 이의신청은 <0>{0}0>에게 보내집니다."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:19
+msgid "This content has been hidden by the moderators."
+msgstr "이 콘텐츠는 검토자에 의해 숨겨졌습니다."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:24
+msgid "This content has received a general warning from moderators."
+msgstr "이 콘텐츠는 검토자로부터 일반 경고를 받았습니다."
+
+#: src/components/dialogs/EmbedConsent.tsx:64
msgid "This content is hosted by {0}. Do you want to enable external media?"
msgstr "이 콘텐츠는 {0}에서 호스팅됩니다. 외부 미디어를 사용하시겠습니까?"
-#: src/view/com/modals/ModerationDetails.tsx:67
+#: src/components/moderation/ModerationDetailsDialog.tsx:77
+#: src/lib/moderation/useModerationCauseDescription.ts:77
msgid "This content is not available because one of the users involved has blocked the other."
msgstr "관련 사용자 중 한 명이 다른 사용자를 차단했기 때문에 이 콘텐츠를 사용할 수 없습니다."
@@ -3928,16 +4552,16 @@ msgid "This content is not viewable without a Bluesky account."
msgstr "이 콘텐츠는 Bluesky 계정이 없으면 볼 수 없습니다."
#: src/view/screens/Settings/ExportCarDialog.tsx:75
-msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
-msgstr ""
+msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost0>."
+msgstr "이 기능은 베타 버전입니다. 저장소 내보내기에 대한 자세한 내용은 <0>이 블로그 글0>에서 확인할 수 있습니다."
#: src/view/com/posts/FeedErrorMessage.tsx:114
msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later."
msgstr "이 피드는 현재 트래픽이 많아 일시적으로 사용할 수 없습니다. 나중에 다시 시도해 주세요."
-#: src/view/screens/Profile.tsx:420
-#: src/view/screens/ProfileFeed.tsx:475
-#: src/view/screens/ProfileList.tsx:660
+#: src/screens/Profile/Sections/Feed.tsx:50
+#: src/view/screens/ProfileFeed.tsx:477
+#: src/view/screens/ProfileList.tsx:675
msgid "This feed is empty!"
msgstr "이 피드는 비어 있습니다."
@@ -3945,7 +4569,7 @@ msgstr "이 피드는 비어 있습니다."
msgid "This feed is empty! You may need to follow more users or tune your language settings."
msgstr "이 피드는 비어 있습니다. 더 많은 사용자를 팔로우하거나 언어 설정을 조정해 보세요."
-#: src/view/com/modals/BirthDateSettings.tsx:61
+#: src/components/dialogs/BirthDateSettings.tsx:41
msgid "This information is not shared with other users."
msgstr "이 정보는 다른 사용자와 공유되지 않습니다."
@@ -3953,48 +4577,94 @@ msgstr "이 정보는 다른 사용자와 공유되지 않습니다."
msgid "This is important in case you ever need to change your email or reset your password."
msgstr "이는 이메일을 변경하거나 비밀번호를 재설정해야 할 때 중요한 정보입니다."
-#: src/view/com/modals/LinkWarning.tsx:58
+#: src/components/moderation/ModerationDetailsDialog.tsx:124
+msgid "This label was applied by {0}."
+msgstr "이 라벨은 {0}이(가) 적용했습니다."
+
+#: src/screens/Profile/Sections/Labels.tsx:167
+msgid "This labeler hasn't declared what labels it publishes, and may not be active."
+msgstr "이 라벨러는 라벨을 게시하지 않았으며 활성화되어 있지 않을 수 있습니다."
+
+#: src/view/com/modals/LinkWarning.tsx:72
msgid "This link is taking you to the following website:"
msgstr "이 링크를 클릭하면 다음 웹사이트로 이동합니다:"
-#: src/view/screens/ProfileList.tsx:834
+#: src/view/screens/ProfileList.tsx:853
msgid "This list is empty!"
msgstr "이 리스트는 비어 있습니다."
-#: src/view/com/modals/AddAppPasswords.tsx:106
+#: src/screens/Profile/ErrorState.tsx:40
+msgid "This moderation service is unavailable. See below for more details. If this issue persists, contact us."
+msgstr "이 검토 서비스는 사용할 수 없습니다. 자세한 내용은 아래를 참조하세요. 이 문제가 지속되면 문의해 주세요."
+
+#: src/view/com/modals/AddAppPasswords.tsx:107
msgid "This name is already in use"
msgstr "이 이름은 이미 사용 중입니다"
-#: src/view/com/post-thread/PostThreadItem.tsx:122
+#: src/view/com/post-thread/PostThreadItem.tsx:125
msgid "This post has been deleted."
msgstr "이 게시물은 삭제되었습니다."
-#: src/view/com/modals/ModerationDetails.tsx:62
+#: src/view/com/util/forms/PostDropdownBtn.tsx:344
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:248
+msgid "This post is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr "이 게시물은 로그인한 사용자에게만 표시됩니다. 로그인하지 않은 사용자에게는 표시되지 않습니다."
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:326
+msgid "This post will be hidden from feeds."
+msgstr "이 게시물을 피드에서 숨깁니다."
+
+#: src/view/com/profile/ProfileMenu.tsx:370
+msgid "This profile is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr "이 프로필은 로그인한 사용자에게만 표시됩니다. 로그인하지 않은 사용자에게는 표시되지 않습니다."
+
+#: src/screens/Signup/StepInfo/Policies.tsx:37
+msgid "This service has not provided terms of service or a privacy policy."
+msgstr "이 서비스는 서비스 이용약관이나 개인정보 처리방침을 제공하지 않습니다."
+
+#: src/view/com/modals/ChangeHandle.tsx:445
+msgid "This should create a domain record at:"
+msgstr "이 도메인에 레코드가 추가됩니다:"
+
+#: src/view/com/profile/ProfileFollowers.tsx:87
+msgid "This user doesn't have any followers."
+msgstr "이 사용자는 팔로워가 없습니다."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:72
+#: src/lib/moderation/useModerationCauseDescription.ts:68
msgid "This user has blocked you. You cannot view their content."
msgstr "이 사용자는 나를 차단했습니다. 이 사용자의 콘텐츠를 볼 수 없습니다."
-#: src/view/com/modals/ModerationDetails.tsx:42
-msgid "This user is included in the <0/> list which you have blocked."
-msgstr "이 사용자는 차단한 <0/> 리스트에 포함되어 있습니다."
+#: src/lib/moderation/useGlobalLabelStrings.ts:30
+msgid "This user has requested that their content only be shown to signed-in users."
+msgstr "이 사용자는 자신의 콘텐츠가 로그인한 사용자에게만 표시되도록 요청했습니다."
-#: src/view/com/modals/ModerationDetails.tsx:74
-msgid "This user is included in the <0/> list which you have muted."
-msgstr ""
+#: src/components/moderation/ModerationDetailsDialog.tsx:55
+msgid "This user is included in the <0>{0}0> list which you have blocked."
+msgstr "이 사용자는 내가 차단한 <0>{0}0> 리스트에 포함되어 있습니다."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:84
+msgid "This user is included in the <0>{0}0> list which you have muted."
+msgstr "이 사용자는 내가 뮤트한 <0>{0}0> 리스트에 포함되어 있습니다."
-#: src/view/com/modals/ModerationDetails.tsx:74
-#~ msgid "This user is included the <0/> list which you have muted."
-#~ msgstr "이 사용자는 뮤트한 <0/> 리스트에 포함되어 있습니다."
+#: src/view/com/profile/ProfileFollows.tsx:87
+msgid "This user isn't following anyone."
+msgstr "이 사용자는 아무도 팔로우하지 않았습니다."
#: src/view/com/modals/SelfLabel.tsx:137
msgid "This warning is only available for posts with media attached."
msgstr "이 경고는 미디어가 첨부된 게시물에만 사용할 수 있습니다."
-#: src/view/com/util/forms/PostDropdownBtn.tsx:192
-msgid "This will hide this post from your feeds."
-msgstr "피드에서 이 게시물을 숨깁니다."
+#: src/components/dialogs/MutedWords.tsx:283
+msgid "This will delete {0} from your muted words. You can always add it back later."
+msgstr "뮤트한 단어에서 {0}이(가) 삭제됩니다. 나중에 언제든지 다시 추가할 수 있습니다."
+
+#: src/view/screens/Settings/index.tsx:574
+msgid "Thread preferences"
+msgstr "스레드 설정"
#: src/view/screens/PreferencesThreads.tsx:53
-#: src/view/screens/Settings/index.tsx:565
+#: src/view/screens/Settings/index.tsx:584
msgid "Thread Preferences"
msgstr "스레드 설정"
@@ -4002,21 +4672,34 @@ msgstr "스레드 설정"
msgid "Threaded Mode"
msgstr "스레드 모드"
-#: src/Navigation.tsx:252
+#: src/Navigation.tsx:269
msgid "Threads Preferences"
msgstr "스레드 설정"
+#: src/components/ReportDialog/SelectLabelerView.tsx:33
+msgid "To whom would you like to send this report?"
+msgstr "이 신고를 누구에게 보내시겠습니까?"
+
+#: src/components/dialogs/MutedWords.tsx:112
+msgid "Toggle between muted word options."
+msgstr "뮤트한 단어 옵션 사이를 전환합니다."
+
#: src/view/com/util/forms/DropdownButton.tsx:246
msgid "Toggle dropdown"
msgstr "드롭다운 열기 및 닫기"
-#: src/view/com/modals/EditImage.tsx:271
+#: src/screens/Moderation/index.tsx:332
+msgid "Toggle to enable or disable adult content"
+msgstr "성인 콘텐츠 활성화 또는 비활성화 전환"
+
+#: src/view/com/modals/EditImage.tsx:272
msgid "Transformations"
msgstr "변형"
-#: src/view/com/post-thread/PostThreadItem.tsx:686
-#: src/view/com/post-thread/PostThreadItem.tsx:688
-#: src/view/com/util/forms/PostDropdownBtn.tsx:125
+#: src/view/com/post-thread/PostThreadItem.tsx:644
+#: src/view/com/post-thread/PostThreadItem.tsx:646
+#: src/view/com/util/forms/PostDropdownBtn.tsx:212
+#: src/view/com/util/forms/PostDropdownBtn.tsx:214
msgid "Translate"
msgstr "번역"
@@ -4025,108 +4708,179 @@ msgctxt "action"
msgid "Try again"
msgstr "다시 시도"
-#: src/view/screens/ProfileList.tsx:505
+#: src/view/com/modals/ChangeHandle.tsx:428
+msgid "Type:"
+msgstr "유형:"
+
+#: src/view/screens/ProfileList.tsx:478
msgid "Un-block list"
msgstr "리스트 차단 해제"
-#: src/view/screens/ProfileList.tsx:490
+#: src/view/screens/ProfileList.tsx:461
msgid "Un-mute list"
msgstr "리스트 언뮤트"
-#: src/view/com/auth/create/CreateAccount.tsx:66
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:87
-#: src/view/com/auth/login/Login.tsx:76
-#: src/view/com/auth/login/LoginForm.tsx:118
+#: src/screens/Login/ForgotPasswordForm.tsx:74
+#: src/screens/Login/index.tsx:78
+#: src/screens/Login/LoginForm.tsx:119
+#: src/screens/Login/SetNewPasswordForm.tsx:77
+#: src/screens/Signup/index.tsx:63
#: src/view/com/modals/ChangePassword.tsx:70
msgid "Unable to contact your service. Please check your Internet connection."
msgstr "서비스에 연결할 수 없습니다. 인터넷 연결을 확인하세요."
-#: src/view/com/profile/ProfileHeader.tsx:432
-#: src/view/screens/ProfileList.tsx:589
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:181
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+#: src/view/screens/ProfileList.tsx:572
msgid "Unblock"
msgstr "차단 해제"
-#: src/view/com/profile/ProfileHeader.tsx:435
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:186
msgctxt "action"
msgid "Unblock"
msgstr "차단 해제"
-#: src/view/com/profile/ProfileHeader.tsx:260
-#: src/view/com/profile/ProfileHeader.tsx:344
+#: src/view/com/profile/ProfileMenu.tsx:299
+#: src/view/com/profile/ProfileMenu.tsx:305
msgid "Unblock Account"
msgstr "계정 차단 해제"
-#: src/view/com/modals/Repost.tsx:42
-#: src/view/com/modals/Repost.tsx:55
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:281
+#: src/view/com/profile/ProfileMenu.tsx:343
+msgid "Unblock Account?"
+msgstr "계정을 차단 해제하시겠습니까?"
+
+#: src/view/com/modals/Repost.tsx:43
+#: src/view/com/modals/Repost.tsx:56
#: src/view/com/util/post-ctrls/RepostButton.tsx:60
#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
msgid "Undo repost"
msgstr "재게시 취소"
-#: src/view/com/profile/FollowButton.tsx:55
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
+msgid "Unfollow"
+msgstr "언팔로우"
+
+#: src/view/com/profile/FollowButton.tsx:60
msgctxt "action"
msgid "Unfollow"
msgstr "언팔로우"
-#: src/view/com/profile/ProfileHeader.tsx:484
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:220
msgid "Unfollow {0}"
msgstr "{0} 님을 언팔로우"
-#: src/view/com/auth/create/state.ts:300
-msgid "Unfortunately, you do not meet the requirements to create an account."
-msgstr "아쉽지만 계정을 만들 수 있는 요건을 충족하지 못했습니다."
+#: src/view/com/profile/ProfileMenu.tsx:241
+#: src/view/com/profile/ProfileMenu.tsx:251
+msgid "Unfollow Account"
+msgstr "계정 언팔로우"
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Unlike"
msgstr "좋아요 취소"
-#: src/view/screens/ProfileList.tsx:596
+#: src/view/screens/ProfileFeed.tsx:573
+msgid "Unlike this feed"
+msgstr "이 피드 좋아요 취소"
+
+#: src/components/TagMenu/index.tsx:249
+#: src/view/screens/ProfileList.tsx:579
msgid "Unmute"
msgstr "언뮤트"
-#: src/view/com/profile/ProfileHeader.tsx:325
+#: src/components/TagMenu/index.web.tsx:104
+msgid "Unmute {truncatedTag}"
+msgstr "{truncatedTag} 언뮤트"
+
+#: src/view/com/profile/ProfileMenu.tsx:278
+#: src/view/com/profile/ProfileMenu.tsx:284
msgid "Unmute Account"
msgstr "계정 언뮤트"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/components/TagMenu/index.tsx:208
+msgid "Unmute all {displayTag} posts"
+msgstr "모든 {tag} 게시물 언뮤트"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:256
msgid "Unmute thread"
msgstr "스레드 언뮤트"
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:295
+#: src/view/screens/ProfileList.tsx:563
msgid "Unpin"
msgstr "고정 해제"
-#: src/view/screens/ProfileList.tsx:473
+#: src/view/screens/ProfileFeed.tsx:292
+msgid "Unpin from home"
+msgstr "홈에서 고정 해제"
+
+#: src/view/screens/ProfileList.tsx:444
msgid "Unpin moderation list"
msgstr "검토 리스트 고정 해제"
-#: src/view/screens/ProfileFeed.tsx:345
-msgid "Unsave"
-msgstr "저장 해제"
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:219
+msgid "Unsubscribe"
+msgstr "구독 취소"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:183
+msgid "Unsubscribe from this labeler"
+msgstr "이 라벨러 구독 취소하기"
+
+#: src/lib/moderation/useReportOptions.ts:70
+msgid "Unwanted Sexual Content"
+msgstr "원치 않는 성적 콘텐츠"
#: src/view/com/modals/UserAddRemoveLists.tsx:70
msgid "Update {displayName} in Lists"
msgstr "리스트에서 {displayName} 업데이트"
-#: src/lib/hooks/useOTAUpdate.ts:15
-msgid "Update Available"
-msgstr "업데이트 사용 가능"
+#: src/view/com/modals/ChangeHandle.tsx:508
+msgid "Update to {handle}"
+msgstr "{handle}로 변경"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:204
+#: src/screens/Login/SetNewPasswordForm.tsx:186
msgid "Updating..."
msgstr "업데이트 중…"
-#: src/view/com/modals/ChangeHandle.tsx:455
+#: src/view/com/modals/ChangeHandle.tsx:454
msgid "Upload a text file to:"
msgstr "텍스트 파일 업로드 경로:"
-#: src/view/screens/AppPasswords.tsx:195
+#: src/view/com/util/UserAvatar.tsx:326
+#: src/view/com/util/UserAvatar.tsx:329
+#: src/view/com/util/UserBanner.tsx:116
+#: src/view/com/util/UserBanner.tsx:119
+msgid "Upload from Camera"
+msgstr "카메라에서 업로드"
+
+#: src/view/com/util/UserAvatar.tsx:343
+#: src/view/com/util/UserBanner.tsx:133
+msgid "Upload from Files"
+msgstr "파일에서 업로드"
+
+#: src/view/com/util/UserAvatar.tsx:337
+#: src/view/com/util/UserAvatar.tsx:341
+#: src/view/com/util/UserBanner.tsx:127
+#: src/view/com/util/UserBanner.tsx:131
+msgid "Upload from Library"
+msgstr "라이브러리에서 업로드"
+
+#: src/view/com/modals/ChangeHandle.tsx:408
+msgid "Use a file on your server"
+msgstr "서버에 있는 파일을 사용합니다"
+
+#: src/view/screens/AppPasswords.tsx:197
msgid "Use app passwords to login to other Bluesky clients without giving full access to your account or password."
msgstr "앱 비밀번호를 사용하면 계정이나 비밀번호에 대한 전체 접근 권한을 제공하지 않고도 다른 Bluesky 클라이언트에 로그인할 수 있습니다."
-#: src/view/com/modals/ChangeHandle.tsx:515
+#: src/view/com/modals/ChangeHandle.tsx:517
+msgid "Use bsky.social as hosting provider"
+msgstr "호스팅 제공자로 bsky.social을 사용합니다"
+
+#: src/view/com/modals/ChangeHandle.tsx:516
msgid "Use default provider"
msgstr "기본 제공자 사용"
@@ -4140,54 +4894,59 @@ msgstr "인앱 브라우저 사용"
msgid "Use my default browser"
msgstr "내 기본 브라우저 사용"
-#: src/view/com/modals/AddAppPasswords.tsx:155
+#: src/view/com/modals/ChangeHandle.tsx:400
+msgid "Use the DNS panel"
+msgstr "DNS 패널을 사용합니다"
+
+#: src/view/com/modals/AddAppPasswords.tsx:156
msgid "Use this to sign into the other app along with your handle."
msgstr "이 비밀번호와 핸들을 사용하여 다른 앱에 로그인하세요."
-#: src/view/com/modals/ServerInput.tsx:105
-#~ msgid "Use your domain as your Bluesky client service provider"
-#~ msgstr "내 도메인을 Bluesky 클라이언트 서비스 공급자로 사용합니다"
-
-#: src/view/com/modals/InviteCodes.tsx:200
+#: src/view/com/modals/InviteCodes.tsx:201
msgid "Used by:"
msgstr "사용 계정:"
-#: src/view/com/modals/ModerationDetails.tsx:54
+#: src/components/moderation/ModerationDetailsDialog.tsx:64
+#: src/lib/moderation/useModerationCauseDescription.ts:56
msgid "User Blocked"
msgstr "사용자 차단됨"
-#: src/view/com/modals/ModerationDetails.tsx:40
+#: src/lib/moderation/useModerationCauseDescription.ts:48
+msgid "User Blocked by \"{0}\""
+msgstr " \"{0}\"에서 차단된 사용자"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:53
msgid "User Blocked by List"
msgstr "리스트로 사용자 차단됨"
-#: src/view/com/modals/ModerationDetails.tsx:60
-msgid "User Blocks You"
-msgstr "사용자가 나를 차단함"
+#: src/lib/moderation/useModerationCauseDescription.ts:66
+msgid "User Blocking You"
+msgstr "나를 차단한 사용자"
-#: src/view/com/auth/create/Step3.tsx:41
-msgid "User handle"
-msgstr "사용자 핸들"
+#: src/components/moderation/ModerationDetailsDialog.tsx:70
+msgid "User Blocks You"
+msgstr "나를 차단한 사용자"
-#: src/view/com/lists/ListCard.tsx:84
+#: src/view/com/lists/ListCard.tsx:85
#: src/view/com/modals/UserAddRemoveLists.tsx:198
msgid "User list by {0}"
msgstr "{0} 님의 사용자 리스트"
-#: src/view/screens/ProfileList.tsx:762
+#: src/view/screens/ProfileList.tsx:777
msgid "User list by <0/>"
msgstr "<0/> 님의 사용자 리스트"
-#: src/view/com/lists/ListCard.tsx:82
+#: src/view/com/lists/ListCard.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:196
-#: src/view/screens/ProfileList.tsx:760
+#: src/view/screens/ProfileList.tsx:775
msgid "User list by you"
msgstr "내 사용자 리스트"
-#: src/view/com/modals/CreateOrEditList.tsx:196
+#: src/view/com/modals/CreateOrEditList.tsx:197
msgid "User list created"
msgstr "사용자 리스트 생성됨"
-#: src/view/com/modals/CreateOrEditList.tsx:182
+#: src/view/com/modals/CreateOrEditList.tsx:183
msgid "User list updated"
msgstr "사용자 리스트 업데이트됨"
@@ -4195,12 +4954,11 @@ msgstr "사용자 리스트 업데이트됨"
msgid "User Lists"
msgstr "사용자 리스트"
-#: src/view/com/auth/login/LoginForm.tsx:177
-#: src/view/com/auth/login/LoginForm.tsx:195
+#: src/screens/Login/LoginForm.tsx:151
msgid "Username or email address"
msgstr "사용자 이름 또는 이메일 주소"
-#: src/view/screens/ProfileList.tsx:796
+#: src/view/screens/ProfileList.tsx:811
msgid "Users"
msgstr "사용자"
@@ -4212,19 +4970,27 @@ msgstr "<0/> 님이 팔로우한 사용자"
msgid "Users in \"{0}\""
msgstr "\"{0}\"에 있는 사용자"
-#: src/view/com/auth/create/Step2.tsx:243
-msgid "Verification code"
-msgstr "인증 코드"
+#: src/components/LikesDialog.tsx:85
+msgid "Users that have liked this content or profile"
+msgstr "이 콘텐츠 또는 프로필을 좋아하는 사용자"
+
+#: src/view/com/modals/ChangeHandle.tsx:436
+msgid "Value:"
+msgstr "값:"
-#: src/view/screens/Settings/index.tsx:910
+#: src/view/com/modals/ChangeHandle.tsx:509
+msgid "Verify {0}"
+msgstr "{0} 확인"
+
+#: src/view/screens/Settings/index.tsx:942
msgid "Verify email"
msgstr "이메일 인증"
-#: src/view/screens/Settings/index.tsx:935
+#: src/view/screens/Settings/index.tsx:967
msgid "Verify my email"
msgstr "내 이메일 인증하기"
-#: src/view/screens/Settings/index.tsx:944
+#: src/view/screens/Settings/index.tsx:976
msgid "Verify My Email"
msgstr "내 이메일 인증하기"
@@ -4237,11 +5003,15 @@ msgstr "새 이메일 인증"
msgid "Verify Your Email"
msgstr "이메일 인증하기"
+#: src/view/screens/Settings/index.tsx:893
+msgid "Version {0}"
+msgstr "버전 {0}"
+
#: src/screens/Onboarding/index.tsx:42
msgid "Video Games"
msgstr "비디오 게임"
-#: src/view/com/profile/ProfileHeader.tsx:661
+#: src/screens/Profile/Header/Shell.tsx:107
msgid "View {0}'s avatar"
msgstr "{0} 님의 아바타를 봅니다"
@@ -4249,11 +5019,23 @@ msgstr "{0} 님의 아바타를 봅니다"
msgid "View debug entry"
msgstr "디버그 항목 보기"
-#: src/view/com/posts/FeedSlice.tsx:103
+#: src/components/ReportDialog/SelectReportOptionView.tsx:131
+msgid "View details"
+msgstr "세부 정보 보기"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:126
+msgid "View details for reporting a copyright violation"
+msgstr "저작권 위반 신고에 대한 세부 정보 보기"
+
+#: src/view/com/posts/FeedSlice.tsx:99
msgid "View full thread"
msgstr "전체 스레드 보기"
-#: src/view/com/posts/FeedErrorMessage.tsx:172
+#: src/components/moderation/LabelsOnMe.tsx:51
+msgid "View information about these labels"
+msgstr "이 라벨에 대한 정보 보기"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:166
msgid "View profile"
msgstr "프로필 보기"
@@ -4261,24 +5043,47 @@ msgstr "프로필 보기"
msgid "View the avatar"
msgstr "아바타 보기"
-#: src/view/com/modals/LinkWarning.tsx:75
+#: src/components/LabelingServiceCard/index.tsx:140
+msgid "View the labeling service provided by @{0}"
+msgstr "{0} 님이 제공하는 라벨링 서비스 보기"
+
+#: src/view/screens/ProfileFeed.tsx:585
+msgid "View users who like this feed"
+msgstr "이 피드를 좋아하는 사용자 보기"
+
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
msgid "Visit Site"
msgstr "사이트 방문"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:42
-#: src/view/com/modals/ContentFilteringSettings.tsx:259
+#: src/components/moderation/LabelPreference.tsx:135
+#: src/lib/moderation/useLabelBehaviorDescription.ts:17
+#: src/lib/moderation/useLabelBehaviorDescription.ts:22
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:53
msgid "Warn"
msgstr "경고"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:134
-msgid "We also think you'll like \"For You\" by Skygaze:"
-msgstr "Skygaze의 \"For You\"를 사용해 볼 수도 있습니다:"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:48
+msgid "Warn content"
+msgstr "콘텐츠 경고"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:46
+msgid "Warn content and filter from feeds"
+msgstr "콘텐츠 경고 및 피드에서 필터링"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:140
+#~ msgid "We also think you'll like \"For You\" by Skygaze:"
+#~ msgstr "Skygaze의 \"For You\"를 사용해 볼 수도 있습니다:"
+
+#: src/screens/Hashtag.tsx:133
+msgid "We couldn't find any results for that hashtag."
+msgstr "해당 해시태그에 대한 결과를 찾을 수 없습니다."
#: src/screens/Deactivated.tsx:133
msgid "We estimate {estimatedTime} until your account is ready."
msgstr "계정이 준비될 때까지 {estimatedTime}이(가) 걸릴 것으로 예상됩니다."
-#: src/screens/Onboarding/StepFinished.tsx:93
+#: src/screens/Onboarding/StepFinished.tsx:97
msgid "We hope you have a wonderful time. Remember, Bluesky is:"
msgstr "즐거운 시간 되시기 바랍니다. Bluesky의 다음 특징을 기억하세요:"
@@ -4286,11 +5091,23 @@ msgstr "즐거운 시간 되시기 바랍니다. Bluesky의 다음 특징을 기
msgid "We ran out of posts from your follows. Here's the latest from <0/>."
msgstr "팔로우한 사용자의 게시물이 부족합니다. 대신 <0/>의 최신 게시물을 표시합니다."
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:124
+#: src/components/dialogs/MutedWords.tsx:203
+msgid "We recommend avoiding common words that appear in many posts, since it can result in no posts being shown."
+msgstr "게시물이 표시되지 않을 수 있으므로 많은 게시물에 자주 등장하는 단어는 피하는 것이 좋습니다."
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:125
msgid "We recommend our \"Discover\" feed:"
msgstr "\"Discover\" 피드를 권장합니다:"
-#: src/screens/Onboarding/StepInterests/index.tsx:133
+#: src/components/dialogs/BirthDateSettings.tsx:52
+msgid "We were unable to load your birth date preferences. Please try again."
+msgstr "생년월일 설정을 불러올 수 없습니다. 다시 시도해 주세요."
+
+#: src/screens/Moderation/index.tsx:385
+msgid "We were unable to load your configured labelers at this time."
+msgstr "현재 구성된 라벨러를 불러올 수 없습니다."
+
+#: src/screens/Onboarding/StepInterests/index.tsx:137
msgid "We weren't able to connect. Please try again to continue setting up your account. If it continues to fail, you can skip this flow."
msgstr "연결하지 못했습니다. 계정 설정을 계속하려면 다시 시도해 주세요. 계속 실패하면 이 과정을 건너뛸 수 있습니다."
@@ -4298,44 +5115,46 @@ msgstr "연결하지 못했습니다. 계정 설정을 계속하려면 다시
msgid "We will let you know when your account is ready."
msgstr "계정이 준비되면 알려드리겠습니다."
-#: src/view/com/modals/AppealLabel.tsx:48
-msgid "We'll look into your appeal promptly."
-msgstr "이의신청을 즉시 검토하겠습니다."
-
-#: src/screens/Onboarding/StepInterests/index.tsx:138
+#: src/screens/Onboarding/StepInterests/index.tsx:142
msgid "We'll use this to help customize your experience."
msgstr "이를 통해 사용자 환경을 맞춤 설정할 수 있습니다."
-#: src/view/com/auth/create/CreateAccount.tsx:123
+#: src/screens/Signup/index.tsx:130
msgid "We're so excited to have you join us!"
-msgstr "당신과 함께하게 되어 정말 기쁘네요!"
+msgstr "함께하게 되어 정말 기뻐요!"
-#: src/view/screens/ProfileList.tsx:85
+#: src/view/screens/ProfileList.tsx:89
msgid "We're sorry, but we were unable to resolve this list. If this persists, please contact the list creator, @{handleOrDid}."
msgstr "죄송하지만 이 리스트를 불러올 수 없습니다. 이 문제가 계속되면 리스트 작성자인 @{handleOrDid}에게 문의하세요."
-#: src/view/screens/Search/Search.tsx:253
+#: src/components/dialogs/MutedWords.tsx:229
+msgid "We're sorry, but we weren't able to load your muted words at this time. Please try again."
+msgstr "죄송하지만 현재 뮤트한 단어를 불러올 수 없습니다. 다시 시도해 주세요."
+
+#: src/view/screens/Search/Search.tsx:256
msgid "We're sorry, but your search could not be completed. Please try again in a few minutes."
msgstr "죄송하지만 검색을 완료할 수 없습니다. 몇 분 후에 다시 시도해 주세요."
+#: src/components/Lists.tsx:188
#: src/view/screens/NotFound.tsx:48
msgid "We're sorry! We can't find the page you were looking for."
msgstr "죄송합니다. 페이지를 찾을 수 없습니다."
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:46
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:321
+msgid "We're sorry! You can only subscribe to ten labelers, and you've reached your limit of ten."
+msgstr "죄송합니다. 라벨러는 10개까지만 구독할 수 있으며 10개에 도달했습니다."
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:48
msgid "Welcome to <0>Bluesky0>"
msgstr "<0>Bluesky0>에 오신 것을 환영합니다"
-#: src/screens/Onboarding/StepInterests/index.tsx:130
+#: src/screens/Onboarding/StepInterests/index.tsx:134
msgid "What are your interests?"
-msgstr "관심사가 어떻게 되나요?"
-
-#: src/view/com/modals/report/Modal.tsx:169
-msgid "What is the issue with this {collectionName}?"
-msgstr "이 {collectionName}에 어떤 문제가 있나요?"
+msgstr "어떤 관심사가 있으신가요?"
-#: src/view/com/auth/SplashScreen.tsx:34
-#: src/view/com/composer/Composer.tsx:279
+#: src/view/com/auth/SplashScreen.tsx:58
+#: src/view/com/auth/SplashScreen.web.tsx:84
+#: src/view/com/composer/Composer.tsx:296
msgid "What's up?"
msgstr "무슨 일이 일어나고 있나요?"
@@ -4352,16 +5171,36 @@ msgstr "알고리즘 피드에 어떤 언어를 표시하시겠습니까?"
msgid "Who can reply"
msgstr "답글을 달 수 있는 사람"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:102
+#: src/components/ReportDialog/SelectReportOptionView.tsx:43
+msgid "Why should this content be reviewed?"
+msgstr "이 콘텐츠를 검토해야 하는 이유는 무엇인가요?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:56
+msgid "Why should this feed be reviewed?"
+msgstr "이 피드를 검토해야 하는 이유는 무엇인가요?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:53
+msgid "Why should this list be reviewed?"
+msgstr "이 리스트를 검토해야 하는 이유는 무엇인가요?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:50
+msgid "Why should this post be reviewed?"
+msgstr "이 게시물을 검토해야 하는 이유는 무엇인가요?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:47
+msgid "Why should this user be reviewed?"
+msgstr "이 사용자를 검토해야 하는 이유는 무엇인가요?"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:103
msgid "Wide"
msgstr "가로"
-#: src/view/com/composer/Composer.tsx:415
+#: src/view/com/composer/Composer.tsx:436
msgid "Write post"
msgstr "게시물 작성"
-#: src/view/com/composer/Composer.tsx:278
-#: src/view/com/composer/Prompt.tsx:33
+#: src/view/com/composer/Composer.tsx:295
+#: src/view/com/composer/Prompt.tsx:37
msgid "Write your reply"
msgstr "답글 작성하기"
@@ -4369,15 +5208,11 @@ msgstr "답글 작성하기"
msgid "Writers"
msgstr "작가"
-#: src/view/com/auth/create/Step2.tsx:263
-msgid "XXXXXX"
-msgstr "XXXXXX"
-
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:77
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:201
-#: src/view/screens/PreferencesHomeFeed.tsx:236
-#: src/view/screens/PreferencesHomeFeed.tsx:271
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:201
+#: src/view/screens/PreferencesFollowingFeed.tsx:236
+#: src/view/screens/PreferencesFollowingFeed.tsx:271
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "Yes"
@@ -4387,21 +5222,29 @@ msgstr "예"
msgid "You are in line."
msgstr "대기 중입니다."
+#: src/view/com/profile/ProfileFollows.tsx:86
+msgid "You are not following anyone."
+msgstr "아무도 팔로우하지 않았습니다."
+
#: src/view/com/posts/FollowingEmptyState.tsx:67
#: src/view/com/posts/FollowingEndOfFeed.tsx:68
msgid "You can also discover new Custom Feeds to follow."
msgstr "팔로우할 새로운 맞춤 피드를 찾을 수도 있습니다."
-#: src/screens/Onboarding/StepFollowingFeed.tsx:142
+#: src/screens/Onboarding/StepFollowingFeed.tsx:143
msgid "You can change these settings later."
msgstr "이 설정은 나중에 변경할 수 있습니다."
-#: src/view/com/auth/login/Login.tsx:158
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:31
+#: src/screens/Login/index.tsx:158
+#: src/screens/Login/PasswordUpdatedForm.tsx:33
msgid "You can now sign in with your new password."
msgstr "이제 새 비밀번호로 로그인할 수 있습니다."
-#: src/view/com/modals/InviteCodes.tsx:66
+#: src/view/com/profile/ProfileFollowers.tsx:86
+msgid "You do not have any followers."
+msgstr "팔로워가 없습니다."
+
+#: src/view/com/modals/InviteCodes.tsx:67
msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer."
msgstr "아직 초대 코드가 없습니다! Bluesky를 좀 더 오래 사용하신 후에 보내드리겠습니다."
@@ -4409,7 +5252,7 @@ msgstr "아직 초대 코드가 없습니다! Bluesky를 좀 더 오래 사용
msgid "You don't have any pinned feeds."
msgstr "고정된 피드가 없습니다."
-#: src/view/screens/Feeds.tsx:451
+#: src/view/screens/Feeds.tsx:452
msgid "You don't have any saved feeds!"
msgstr "저장된 피드가 없습니다!"
@@ -4417,24 +5260,39 @@ msgstr "저장된 피드가 없습니다!"
msgid "You don't have any saved feeds."
msgstr "저장된 피드가 없습니다."
-#: src/view/com/post-thread/PostThread.tsx:401
+#: src/view/com/post-thread/PostThread.tsx:159
msgid "You have blocked the author or you have been blocked by the author."
msgstr "작성자를 차단했거나 작성자가 나를 차단했습니다."
-#: src/view/com/modals/ModerationDetails.tsx:56
+#: src/components/moderation/ModerationDetailsDialog.tsx:66
+#: src/lib/moderation/useModerationCauseDescription.ts:50
+#: src/lib/moderation/useModerationCauseDescription.ts:58
msgid "You have blocked this user. You cannot view their content."
msgstr "이 사용자를 차단했습니다. 해당 사용자의 콘텐츠를 볼 수 없습니다."
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:57
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:92
+#: src/screens/Login/SetNewPasswordForm.tsx:54
+#: src/screens/Login/SetNewPasswordForm.tsx:91
#: src/view/com/modals/ChangePassword.tsx:87
#: src/view/com/modals/ChangePassword.tsx:121
msgid "You have entered an invalid code. It should look like XXXXX-XXXXX."
-msgstr ""
+msgstr "잘못된 코드를 입력했습니다. XXXXX-XXXXX와 같은 형식이어야 합니다."
+
+#: src/lib/moderation/useModerationCauseDescription.ts:109
+msgid "You have hidden this post"
+msgstr "내가 이 게시물을 숨겼습니다"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:101
+msgid "You have hidden this post."
+msgstr "내가 이 게시물을 숨겼습니다."
-#: src/view/com/modals/ModerationDetails.tsx:87
-msgid "You have muted this user."
-msgstr "이 사용자를 뮤트했습니다."
+#: src/components/moderation/ModerationDetailsDialog.tsx:94
+#: src/lib/moderation/useModerationCauseDescription.ts:92
+msgid "You have muted this account."
+msgstr "내가 이 계정을 뮤트했습니다."
+
+#: src/lib/moderation/useModerationCauseDescription.ts:86
+msgid "You have muted this user"
+msgstr "내가 이 사용자를 뮤트했습니다"
#: src/view/com/feeds/ProfileFeedgens.tsx:136
msgid "You have no feeds."
@@ -4446,38 +5304,50 @@ msgid "You have no lists."
msgstr "리스트가 없습니다."
#: src/view/screens/ModerationBlockedAccounts.tsx:132
-msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
+msgid "You have not blocked any accounts yet. To block an account, go to their profile and select \"Block account\" from the menu on their account."
msgstr "아직 어떤 계정도 차단하지 않았습니다. 계정을 차단하려면 해당 계정의 프로필로 이동하여 계정 메뉴에서 \"계정 차단\"을 선택하세요."
-#: src/view/screens/AppPasswords.tsx:87
+#: src/view/screens/AppPasswords.tsx:89
msgid "You have not created any app passwords yet. You can create one by pressing the button below."
msgstr "아직 앱 비밀번호를 생성하지 않았습니다. 아래 버튼을 눌러 생성할 수 있습니다."
#: src/view/screens/ModerationMutedAccounts.tsx:131
-msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
+msgid "You have not muted any accounts yet. To mute an account, go to their profile and select \"Mute account\" from the menu on their account."
msgstr "아직 어떤 계정도 뮤트하지 않았습니다. 계정을 뮤트하려면 해당 계정의 프로필로 이동하여 계정 메뉴에서 \"계정 뮤트\"를 선택하세요."
-#: src/view/com/modals/ContentFilteringSettings.tsx:175
-msgid "You must be 18 or older to enable adult content."
-msgstr "성인 콘텐츠를 활성화하려면 18세 이상이어야 합니다."
+#: src/components/dialogs/MutedWords.tsx:249
+msgid "You haven't muted any words or tags yet"
+msgstr "아직 어떤 단어나 태그도 뮤트하지 않았습니다"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:68
+msgid "You may appeal these labels if you feel they were placed in error."
+msgstr "이 라벨이 잘못 지정되었다고 생각되면 이의신청할 수 있습니다."
+
+#: src/screens/Signup/StepInfo/Policies.tsx:79
+msgid "You must be 13 years of age or older to sign up."
+msgstr "가입하려면 만 13세 이상이어야 합니다."
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:103
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:110
msgid "You must be 18 years or older to enable adult content"
msgstr "성인 콘텐츠를 사용하려면 만 18세 이상이어야 합니다."
-#: src/view/com/util/forms/PostDropdownBtn.tsx:98
+#: src/components/ReportDialog/SubmitView.tsx:205
+msgid "You must select at least one labeler for a report"
+msgstr "신고하려면 하나 이상의 라벨을 선택해야 합니다."
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:144
msgid "You will no longer receive notifications for this thread"
msgstr "이 스레드에 대한 알림을 더 이상 받지 않습니다"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:147
msgid "You will now receive notifications for this thread"
msgstr "이제 이 스레드에 대한 알림을 받습니다"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:107
+#: src/screens/Login/SetNewPasswordForm.tsx:104
msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password."
msgstr "\"재설정 코드\"가 포함된 이메일을 받게 되면 여기에 해당 코드를 입력한 다음 새 비밀번호를 입력합니다."
-#: src/screens/Onboarding/StepModeration/index.tsx:72
+#: src/screens/Onboarding/StepModeration/index.tsx:60
msgid "You're in control"
msgstr "직접 제어하세요"
@@ -4487,27 +5357,32 @@ msgstr "직접 제어하세요"
msgid "You're in line"
msgstr "대기 중입니다"
-#: src/screens/Onboarding/StepFinished.tsx:90
+#: src/screens/Onboarding/StepFinished.tsx:94
msgid "You're ready to go!"
msgstr "준비가 끝났습니다!"
+#: src/components/moderation/ModerationDetailsDialog.tsx:98
+#: src/lib/moderation/useModerationCauseDescription.ts:101
+msgid "You've chosen to hide a word or tag within this post."
+msgstr "이 글에서 단어 또는 태그를 숨기도록 설정했습니다."
+
#: src/view/com/posts/FollowingEndOfFeed.tsx:48
msgid "You've reached the end of your feed! Find some more accounts to follow."
msgstr "피드 끝에 도달했습니다! 팔로우할 계정을 더 찾아보세요."
-#: src/view/com/auth/create/Step1.tsx:74
+#: src/screens/Signup/index.tsx:150
msgid "Your account"
msgstr "내 계정"
-#: src/view/com/modals/DeleteAccount.tsx:67
+#: src/view/com/modals/DeleteAccount.tsx:68
msgid "Your account has been deleted"
msgstr "계정을 삭제했습니다"
#: src/view/screens/Settings/ExportCarDialog.tsx:47
msgid "Your account repository, containing all public data records, can be downloaded as a \"CAR\" file. This file does not include media embeds, such as images, or your private data, which must be fetched separately."
-msgstr ""
+msgstr "모든 공개 데이터 레코드가 포함된 계정 저장소를 \"CAR\" 파일로 다운로드할 수 있습니다. 이 파일에는 이미지와 같은 미디어 임베드나 별도로 가져와야 하는 비공개 데이터는 포함되지 않습니다."
-#: src/view/com/auth/create/Step1.tsx:234
+#: src/screens/Signup/StepInfo/index.tsx:121
msgid "Your birth date"
msgstr "생년월일"
@@ -4515,20 +5390,16 @@ msgstr "생년월일"
msgid "Your choice will be saved, but can be changed later in settings."
msgstr "선택 사항은 저장되며 나중에 설정에서 변경할 수 있습니다."
-#: src/screens/Onboarding/StepFollowingFeed.tsx:61
+#: src/screens/Onboarding/StepFollowingFeed.tsx:62
msgid "Your default feed is \"Following\""
msgstr "기본 피드는 \"팔로우 중\"입니다"
-#: src/view/com/auth/create/state.ts:153
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:70
+#: src/screens/Login/ForgotPasswordForm.tsx:57
+#: src/screens/Signup/state.ts:227
#: src/view/com/modals/ChangePassword.tsx:54
msgid "Your email appears to be invalid."
msgstr "이메일이 잘못된 것 같습니다."
-#: src/view/com/modals/Waitlist.tsx:109
-msgid "Your email has been saved! We'll be in touch soon."
-msgstr "이메일이 저장되었습니다! 가까운 시일 내에 연락드리겠습니다."
-
#: src/view/com/modals/ChangeEmail.tsx:125
msgid "Your email has been updated but not verified. As a next step, please verify your new email."
msgstr "이메일이 변경되었지만 인증되지 않았습니다. 다음 단계로 새 이메일을 인증해 주세요."
@@ -4539,45 +5410,42 @@ msgstr "이메일이 아직 인증되지 않았습니다. 이는 중요한 보
#: src/view/com/posts/FollowingEmptyState.tsx:47
msgid "Your following feed is empty! Follow more users to see what's happening."
-msgstr "팔로우 중인 피드가 비어 있습니다! 더 많은 사용자를 팔로우하여 무슨 일이 일어나고 있는지 확인하세요."
+msgstr "팔로우 중 피드가 비어 있습니다! 더 많은 사용자를 팔로우하여 무슨 일이 일어나고 있는지 확인하세요."
-#: src/view/com/auth/create/Step3.tsx:45
+#: src/screens/Signup/StepHandle.tsx:72
msgid "Your full handle will be"
msgstr "내 전체 핸들:"
-#: src/view/com/modals/ChangeHandle.tsx:270
+#: src/view/com/modals/ChangeHandle.tsx:271
msgid "Your full handle will be <0>@{0}0>"
msgstr "내 전체 핸들: <0>@{0}0>"
-#: src/view/screens/Settings.tsx:430
-#: src/view/shell/desktop/RightNav.tsx:137
-#: src/view/shell/Drawer.tsx:660
-#~ msgid "Your invite codes are hidden when logged in using an App Password"
-#~ msgstr "앱 비밀번호를 사용하여 로그인하면 초대 코드가 숨겨집니다"
+#: src/components/dialogs/MutedWords.tsx:220
+msgid "Your muted words"
+msgstr "뮤트한 단어"
-#: src/view/com/modals/ChangePassword.tsx:155
+#: src/view/com/modals/ChangePassword.tsx:157
msgid "Your password has been changed successfully!"
-msgstr ""
+msgstr "비밀번호를 성공적으로 변경했습니다."
-#: src/view/com/composer/Composer.tsx:267
+#: src/view/com/composer/Composer.tsx:284
msgid "Your post has been published"
msgstr "게시물을 게시했습니다"
-#: src/screens/Onboarding/StepFinished.tsx:105
+#: src/screens/Onboarding/StepFinished.tsx:109
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:59
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:59
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:61
msgid "Your posts, likes, and blocks are public. Mutes are private."
msgstr "게시물, 좋아요, 차단 목록은 공개됩니다. 뮤트 목록은 공개되지 않습니다."
-#: src/view/com/modals/SwitchAccount.tsx:84
-#: src/view/screens/Settings/index.tsx:118
+#: src/view/screens/Settings/index.tsx:125
msgid "Your profile"
msgstr "내 프로필"
-#: src/view/com/composer/Composer.tsx:266
+#: src/view/com/composer/Composer.tsx:283
msgid "Your reply has been published"
msgstr "내 답글을 게시했습니다"
-#: src/view/com/auth/create/Step3.tsx:28
+#: src/screens/Signup/index.tsx:152
msgid "Your user handle"
msgstr "내 사용자 핸들"
diff --git a/src/locale/locales/pt-BR/messages.po b/src/locale/locales/pt-BR/messages.po
index 030df276a4..6fcc18894a 100644
--- a/src/locale/locales/pt-BR/messages.po
+++ b/src/locale/locales/pt-BR/messages.po
@@ -8,8 +8,8 @@ msgstr ""
"Language: pt-BR\n"
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2024-02-08 19:59\n"
-"Last-Translator: maisondasilva\n"
+"PO-Revision-Date: 2024-03-22 11:51\n"
+"Last-Translator: gildaswise\n"
"Language-Team: maisondasilva, MightyLoggor, gildaswise, gleydson, faeriarum\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -17,29 +17,11 @@ msgstr ""
msgid "(no email)"
msgstr "(sem email)"
-#: src/view/shell/desktop/RightNav.tsx:168
-#~ msgid "{0, plural, one {# invite code available} other {# invite codes available}}"
-#~ msgstr "{0, plural, one {# convite disponível} other {# convites disponíveis}}"
-
-#: src/view/com/profile/ProfileHeader.tsx:592
+#: src/screens/Profile/Header/Metrics.tsx:44
msgid "{following} following"
msgstr "{following} seguindo"
-#: src/view/shell/desktop/RightNav.tsx:151
-#~ msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}"
-#~ msgstr "{invitesAvailable, plural, one {Convites: # disponível} other {Convites: # disponíveis}}"
-
-#: src/view/screens/Settings.tsx:435
-#: src/view/shell/Drawer.tsx:664
-#~ msgid "{invitesAvailable} invite code available"
-#~ msgstr "{invitesAvailable} convite disponível"
-
-#: src/view/screens/Settings.tsx:437
-#: src/view/shell/Drawer.tsx:666
-#~ msgid "{invitesAvailable} invite codes available"
-#~ msgstr "{invitesAvailable} convites disponíveis"
-
-#: src/view/shell/Drawer.tsx:440
+#: src/view/shell/Drawer.tsx:443
msgid "{numUnreadNotifications} unread"
msgstr "{numUnreadNotifications} não lidas"
@@ -47,7 +29,11 @@ msgstr "{numUnreadNotifications} não lidas"
msgid "<0/> members"
msgstr "<0/> membros"
-#: src/view/com/profile/ProfileHeader.tsx:594
+#: src/view/shell/Drawer.tsx:97
+msgid "<0>{0}0> following"
+msgstr "<0>{0}0> seguindo"
+
+#: src/screens/Profile/Header/Metrics.tsx:45
msgid "<0>{following} 0><1>following1>"
msgstr "<0>{following} 0><1>seguindo1>"
@@ -63,51 +49,60 @@ msgstr "<0>Siga alguns0><2>Usuários2><1>recomendados1>"
msgid "<0>Welcome to0><1>Bluesky1>"
msgstr "<0>Bem-vindo ao0><1>Bluesky1>"
-#: src/view/com/profile/ProfileHeader.tsx:557
+#: src/screens/Profile/Header/Handle.tsx:42
msgid "⚠Invalid Handle"
msgstr "⚠Usuário Inválido"
#: src/view/com/util/moderation/LabelInfo.tsx:45
-msgid "A content warning has been applied to this {0}."
-msgstr "Um aviso de conteúdo foi aplicado a este {0}."
+#~ msgid "A content warning has been applied to this {0}."
+#~ msgstr "Um aviso de conteúdo foi aplicado a este {0}."
#: src/lib/hooks/useOTAUpdate.ts:16
-msgid "A new version of the app is available. Please update to continue using the app."
-msgstr "Uma nova versão do aplicativo está disponível. Por favor, atualize para continuar usando o aplicativo."
+#~ msgid "A new version of the app is available. Please update to continue using the app."
+#~ msgstr "Uma nova versão do aplicativo está disponível. Por favor, atualize para continuar usando o aplicativo."
-#: src/view/com/util/ViewHeader.tsx:83
-#: src/view/screens/Search/Search.tsx:624
+#: src/view/com/util/ViewHeader.tsx:89
+#: src/view/screens/Search/Search.tsx:649
msgid "Access navigation links and settings"
msgstr "Acessar links de navegação e configurações"
-#: src/view/com/pager/FeedsTabBarMobile.tsx:89
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:52
msgid "Access profile and other navigation links"
msgstr "Acessar perfil e outros links de navegação"
-#: src/view/com/modals/EditImage.tsx:299
-#: src/view/screens/Settings/index.tsx:451
+#: src/view/com/modals/EditImage.tsx:300
+#: src/view/screens/Settings/index.tsx:470
msgid "Accessibility"
msgstr "Acessibilidade"
-#: src/view/com/auth/login/LoginForm.tsx:166
-#: src/view/screens/Settings/index.tsx:308
-#: src/view/screens/Settings/index.tsx:721
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "account"
+msgstr "conta"
+
+#: src/screens/Login/LoginForm.tsx:144
+#: src/view/screens/Settings/index.tsx:327
+#: src/view/screens/Settings/index.tsx:743
msgid "Account"
msgstr "Conta"
-#: src/view/com/profile/ProfileHeader.tsx:245
+#: src/view/com/profile/ProfileMenu.tsx:139
msgid "Account blocked"
msgstr "Conta bloqueada"
-#: src/view/com/profile/ProfileHeader.tsx:212
+#: src/view/com/profile/ProfileMenu.tsx:153
+msgid "Account followed"
+msgstr "Você está seguindo esta conta"
+
+#: src/view/com/profile/ProfileMenu.tsx:113
msgid "Account muted"
msgstr "Conta silenciada"
-#: src/view/com/modals/ModerationDetails.tsx:86
+#: src/components/moderation/ModerationDetailsDialog.tsx:93
+#: src/lib/moderation/useModerationCauseDescription.ts:91
msgid "Account Muted"
msgstr "Conta Silenciada"
-#: src/view/com/modals/ModerationDetails.tsx:72
+#: src/components/moderation/ModerationDetailsDialog.tsx:82
msgid "Account Muted by List"
msgstr "Conta Silenciada por Lista"
@@ -119,18 +114,24 @@ msgstr "Configurações da conta"
msgid "Account removed from quick access"
msgstr "Conta removida do acesso rápido"
-#: src/view/com/profile/ProfileHeader.tsx:267
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:137
+#: src/view/com/profile/ProfileMenu.tsx:128
msgid "Account unblocked"
msgstr "Conta desbloqueada"
-#: src/view/com/profile/ProfileHeader.tsx:225
+#: src/view/com/profile/ProfileMenu.tsx:166
+msgid "Account unfollowed"
+msgstr "Você não segue mais esta conta"
+
+#: src/view/com/profile/ProfileMenu.tsx:102
msgid "Account unmuted"
msgstr "Conta dessilenciada"
+#: src/components/dialogs/MutedWords.tsx:164
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:150
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/screens/ProfileList.tsx:812
+#: src/view/screens/ProfileList.tsx:827
msgid "Add"
msgstr "Adicionar"
@@ -138,54 +139,63 @@ msgstr "Adicionar"
msgid "Add a content warning"
msgstr "Adicionar um aviso de conteúdo"
-#: src/view/screens/ProfileList.tsx:802
+#: src/view/screens/ProfileList.tsx:817
msgid "Add a user to this list"
msgstr "Adicionar um usuário a esta lista"
-#: src/view/screens/Settings/index.tsx:383
-#: src/view/screens/Settings/index.tsx:392
+#: src/components/dialogs/SwitchAccount.tsx:55
+#: src/view/screens/Settings/index.tsx:402
+#: src/view/screens/Settings/index.tsx:411
msgid "Add account"
msgstr "Adicionar conta"
#: src/view/com/composer/photos/Gallery.tsx:119
#: src/view/com/composer/photos/Gallery.tsx:180
-#: src/view/com/modals/AltImage.tsx:116
+#: src/view/com/modals/AltImage.tsx:117
msgid "Add alt text"
msgstr "Adicionar texto alternativo"
-#: src/view/screens/AppPasswords.tsx:102
-#: src/view/screens/AppPasswords.tsx:143
-#: src/view/screens/AppPasswords.tsx:156
+#: src/view/screens/AppPasswords.tsx:104
+#: src/view/screens/AppPasswords.tsx:145
+#: src/view/screens/AppPasswords.tsx:158
msgid "Add App Password"
msgstr "Adicionar Senha de Aplicativo"
#: src/view/com/modals/report/InputIssueDetails.tsx:41
#: src/view/com/modals/report/Modal.tsx:191
-msgid "Add details"
-msgstr "Adicionar detalhes"
+#~ msgid "Add details"
+#~ msgstr "Adicionar detalhes"
#: src/view/com/modals/report/Modal.tsx:194
-msgid "Add details to report"
-msgstr "Adicionar detalhes à denúncia"
+#~ msgid "Add details to report"
+#~ msgstr "Adicionar detalhes à denúncia"
-#: src/view/com/composer/Composer.tsx:446
+#: src/view/com/composer/Composer.tsx:467
msgid "Add link card"
msgstr "Adicionar prévia de link"
-#: src/view/com/composer/Composer.tsx:451
+#: src/view/com/composer/Composer.tsx:472
msgid "Add link card:"
msgstr "Adicionar prévia de link:"
-#: src/view/com/modals/ChangeHandle.tsx:417
+#: src/components/dialogs/MutedWords.tsx:157
+msgid "Add mute word for configured settings"
+msgstr "Adicionar palavra silenciada para as configurações selecionadas"
+
+#: src/components/dialogs/MutedWords.tsx:86
+msgid "Add muted words and tags"
+msgstr "Adicionar palavras/tags silenciadas"
+
+#: src/view/com/modals/ChangeHandle.tsx:416
msgid "Add the following DNS record to your domain:"
msgstr "Adicione o seguinte registro DNS ao seu domínio:"
-#: src/view/com/profile/ProfileHeader.tsx:309
+#: src/view/com/profile/ProfileMenu.tsx:263
+#: src/view/com/profile/ProfileMenu.tsx:266
msgid "Add to Lists"
msgstr "Adicionar às Listas"
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/feeds/FeedSourceCard.tsx:234
msgid "Add to my feeds"
msgstr "Adicionar aos meus feeds"
@@ -198,44 +208,51 @@ msgstr "Adicionado"
msgid "Added to list"
msgstr "Adicionado à lista"
-#: src/view/com/feeds/FeedSourceCard.tsx:125
+#: src/view/com/feeds/FeedSourceCard.tsx:108
msgid "Added to my feeds"
msgstr "Adicionado aos meus feeds"
-#: src/view/screens/PreferencesHomeFeed.tsx:173
+#: src/view/screens/PreferencesFollowingFeed.tsx:173
msgid "Adjust the number of likes a reply must have to be shown in your feed."
msgstr "Ajuste o número de curtidas para que uma resposta apareça no seu feed."
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:117
#: src/view/com/modals/SelfLabel.tsx:75
msgid "Adult Content"
msgstr "Conteúdo Adulto"
#: src/view/com/modals/ContentFilteringSettings.tsx:141
-msgid "Adult content can only be enabled via the Web at <0/>."
-msgstr "Conteúdo adulto só pode ser habilitado no site: <0/>."
+#~ msgid "Adult content can only be enabled via the Web at <0/>."
+#~ msgstr "Conteúdo adulto só pode ser habilitado no site: <0/>."
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
-#~ msgid "Adult content can only be enabled via the Web at <0>bsky.app0>."
-#~ msgstr "Conteúdo adulto só pode ser habilitado no site: <0>bsky.app0>."
+#: src/components/moderation/LabelPreference.tsx:242
+msgid "Adult content is disabled."
+msgstr "O conteúdo adulto está desabilitado."
-#: src/view/screens/Settings/index.tsx:664
+#: src/screens/Moderation/index.tsx:375
+#: src/view/screens/Settings/index.tsx:684
msgid "Advanced"
msgstr "Avançado"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:221
-#: src/view/com/modals/ChangePassword.tsx:168
+#: src/view/screens/Feeds.tsx:666
+msgid "All the feeds you've saved, right in one place."
+msgstr "Todos os feeds que você salvou, em um único lugar."
+
+#: src/screens/Login/ForgotPasswordForm.tsx:178
+#: src/view/com/modals/ChangePassword.tsx:170
msgid "Already have a code?"
msgstr "Já tem um código?"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:98
+#: src/screens/Login/ChooseAccountForm.tsx:39
msgid "Already signed in as @{0}"
-msgstr "Já logado como @{0}"
+msgstr "Já autenticado como @{0}"
#: src/view/com/composer/photos/Gallery.tsx:130
msgid "ALT"
msgstr "ALT"
-#: src/view/com/modals/EditImage.tsx:315
+#: src/view/com/modals/EditImage.tsx:316
msgid "Alt text"
msgstr "Texto alternativo"
@@ -251,12 +268,18 @@ msgstr "Um email foi enviado para {0}. Ele inclui um código de confirmação qu
msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below."
msgstr "Um email foi enviado para seu email anterior, {0}. Ele inclui um código de confirmação que você pode inserir abaixo."
-#: src/view/com/profile/FollowButton.tsx:30
-#: src/view/com/profile/FollowButton.tsx:40
+#: src/lib/moderation/useReportOptions.ts:26
+msgid "An issue not included in these options"
+msgstr "Outro problema"
+
+#: src/view/com/profile/FollowButton.tsx:35
+#: src/view/com/profile/FollowButton.tsx:45
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:188
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:198
msgid "An issue occurred, please try again."
msgstr "Ocorreu um problema, por favor tente novamente."
-#: src/view/com/notifications/FeedItem.tsx:236
+#: src/view/com/notifications/FeedItem.tsx:240
#: src/view/com/threadgate/WhoCanReply.tsx:178
msgid "and"
msgstr "e"
@@ -265,23 +288,27 @@ msgstr "e"
msgid "Animals"
msgstr "Animais"
+#: src/lib/moderation/useReportOptions.ts:31
+msgid "Anti-Social Behavior"
+msgstr "Comportamento anti-social"
+
#: src/view/screens/LanguageSettings.tsx:95
msgid "App Language"
msgstr "Idioma do aplicativo"
-#: src/view/screens/AppPasswords.tsx:228
+#: src/view/screens/AppPasswords.tsx:223
msgid "App password deleted"
msgstr "Senha de Aplicativo excluída"
-#: src/view/com/modals/AddAppPasswords.tsx:134
+#: src/view/com/modals/AddAppPasswords.tsx:135
msgid "App Password names can only contain letters, numbers, spaces, dashes, and underscores."
msgstr "O nome da Senha de Aplicativo só pode conter letras, números, traços e sublinhados."
-#: src/view/com/modals/AddAppPasswords.tsx:99
+#: src/view/com/modals/AddAppPasswords.tsx:100
msgid "App Password names must be at least 4 characters long."
msgstr "O nome da Senha de Aplicativo precisa ter no mínimo 4 caracteres."
-#: src/view/screens/Settings/index.tsx:675
+#: src/view/screens/Settings/index.tsx:695
msgid "App password settings"
msgstr "Configurações de Senha de Aplicativo"
@@ -289,47 +316,65 @@ msgstr "Configurações de Senha de Aplicativo"
#~ msgid "App passwords"
#~ msgstr "Senhas de aplicativos"
-#: src/Navigation.tsx:237
-#: src/view/screens/AppPasswords.tsx:187
-#: src/view/screens/Settings/index.tsx:684
+#: src/Navigation.tsx:251
+#: src/view/screens/AppPasswords.tsx:189
+#: src/view/screens/Settings/index.tsx:704
msgid "App Passwords"
msgstr "Senhas de Aplicativos"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:250
-msgid "Appeal content warning"
-msgstr "Contestar aviso de conteúdo"
+#: src/components/moderation/LabelsOnMeDialog.tsx:133
+#: src/components/moderation/LabelsOnMeDialog.tsx:136
+msgid "Appeal"
+msgstr "Contestar"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:201
+msgid "Appeal \"{0}\" label"
+msgstr "Contestar rótulo \"{0}\""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:337
+#: src/view/com/util/forms/PostDropdownBtn.tsx:346
+#~ msgid "Appeal content warning"
+#~ msgstr "Contestar aviso de conteúdo"
#: src/view/com/modals/AppealLabel.tsx:65
-msgid "Appeal Content Warning"
-msgstr "Contestar aviso de conteúdo"
+#~ msgid "Appeal Content Warning"
+#~ msgstr "Contestar aviso de conteúdo"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:192
+msgid "Appeal submitted."
+msgstr "Contestação enviada."
#: src/view/com/util/moderation/LabelInfo.tsx:52
-msgid "Appeal this decision"
-msgstr "Contestar esta decisão"
+#~ msgid "Appeal this decision"
+#~ msgstr "Contestar esta decisão"
#: src/view/com/util/moderation/LabelInfo.tsx:56
-msgid "Appeal this decision."
-msgstr "Contestar esta decisão."
+#~ msgid "Appeal this decision."
+#~ msgstr "Contestar esta decisão."
-#: src/view/screens/Settings/index.tsx:466
+#: src/view/screens/Settings/index.tsx:485
msgid "Appearance"
msgstr "Aparência"
-#: src/view/screens/AppPasswords.tsx:224
+#: src/view/screens/AppPasswords.tsx:265
msgid "Are you sure you want to delete the app password \"{name}\"?"
msgstr "Tem certeza de que deseja excluir a senha do aplicativo \"{name}\"?"
-#: src/view/com/composer/Composer.tsx:143
+#: src/view/com/feeds/FeedSourceCard.tsx:280
+msgid "Are you sure you want to remove {0} from your feeds?"
+msgstr "Tem certeza que deseja remover {0} dos seus feeds?"
+
+#: src/view/com/composer/Composer.tsx:509
msgid "Are you sure you'd like to discard this draft?"
msgstr "Tem certeza que deseja descartar este rascunho?"
-#: src/view/screens/ProfileList.tsx:364
+#: src/components/dialogs/MutedWords.tsx:281
msgid "Are you sure?"
msgstr "Tem certeza?"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:233
-msgid "Are you sure? This cannot be undone."
-msgstr "Tem certeza? Esta ação não poderá ser desfeita."
+#: src/view/com/util/forms/PostDropdownBtn.tsx:322
+#~ msgid "Are you sure? This cannot be undone."
+#~ msgstr "Tem certeza? Esta ação não poderá ser desfeita."
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:60
msgid "Are you writing in <0>{0}0>?"
@@ -343,78 +388,93 @@ msgstr "Arte"
msgid "Artistic or non-erotic nudity."
msgstr "Nudez artística ou não erótica."
-#: src/view/com/auth/create/CreateAccount.tsx:147
-#: src/view/com/auth/login/ChooseAccountForm.tsx:151
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:174
-#: src/view/com/auth/login/LoginForm.tsx:259
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:179
-#: src/view/com/modals/report/InputIssueDetails.tsx:46
-#: src/view/com/post-thread/PostThread.tsx:408
-#: src/view/com/post-thread/PostThread.tsx:458
-#: src/view/com/post-thread/PostThread.tsx:466
-#: src/view/com/profile/ProfileHeader.tsx:648
-#: src/view/com/util/ViewHeader.tsx:81
-msgid "Back"
-msgstr "Voltar"
+#: src/screens/Signup/StepHandle.tsx:118
+msgid "At least 3 characters"
+msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:416
-msgctxt "action"
+#: src/components/moderation/LabelsOnMeDialog.tsx:246
+#: src/components/moderation/LabelsOnMeDialog.tsx:247
+#: src/screens/Login/ChooseAccountForm.tsx:73
+#: src/screens/Login/ChooseAccountForm.tsx:78
+#: src/screens/Login/ForgotPasswordForm.tsx:129
+#: src/screens/Login/ForgotPasswordForm.tsx:135
+#: src/screens/Login/LoginForm.tsx:221
+#: src/screens/Login/LoginForm.tsx:227
+#: src/screens/Login/SetNewPasswordForm.tsx:160
+#: src/screens/Login/SetNewPasswordForm.tsx:166
+#: src/screens/Profile/Header/Shell.tsx:96
+#: src/screens/Signup/index.tsx:179
+#: src/view/com/util/ViewHeader.tsx:87
msgid "Back"
msgstr "Voltar"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:136
+#: src/view/com/post-thread/PostThread.tsx:480
+#~ msgctxt "action"
+#~ msgid "Back"
+#~ msgstr "Voltar"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:144
msgid "Based on your interest in {interestsText}"
msgstr "Com base no seu interesse em {interestsText}"
-#: src/view/screens/Settings/index.tsx:523
+#: src/view/screens/Settings/index.tsx:542
msgid "Basics"
msgstr "Básicos"
-#: src/view/com/auth/create/Step1.tsx:246
-#: src/view/com/modals/BirthDateSettings.tsx:73
+#: src/components/dialogs/BirthDateSettings.tsx:107
msgid "Birthday"
msgstr "Aniversário"
-#: src/view/screens/Settings/index.tsx:340
+#: src/view/screens/Settings/index.tsx:359
msgid "Birthday:"
msgstr "Aniversário:"
-#: src/view/com/profile/ProfileHeader.tsx:238
-#: src/view/com/profile/ProfileHeader.tsx:345
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+msgid "Block"
+msgstr "Bloquear"
+
+#: src/view/com/profile/ProfileMenu.tsx:300
+#: src/view/com/profile/ProfileMenu.tsx:307
msgid "Block Account"
msgstr "Bloquear Conta"
-#: src/view/screens/ProfileList.tsx:555
+#: src/view/com/profile/ProfileMenu.tsx:344
+msgid "Block Account?"
+msgstr "Bloquear Conta?"
+
+#: src/view/screens/ProfileList.tsx:530
msgid "Block accounts"
msgstr "Bloquear contas"
-#: src/view/screens/ProfileList.tsx:505
+#: src/view/screens/ProfileList.tsx:478
+#: src/view/screens/ProfileList.tsx:634
msgid "Block list"
msgstr "Lista de bloqueio"
-#: src/view/screens/ProfileList.tsx:315
+#: src/view/screens/ProfileList.tsx:629
msgid "Block these accounts?"
msgstr "Bloquear estas contas?"
-#: src/view/screens/ProfileList.tsx:319
-msgid "Block this List"
-msgstr "Bloquear esta Lista"
+#: src/view/screens/ProfileList.tsx:320
+#~ msgid "Block this List"
+#~ msgstr "Bloquear esta Lista"
-#: src/view/com/lists/ListCard.tsx:109
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:60
+#: src/view/com/lists/ListCard.tsx:110
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:55
msgid "Blocked"
msgstr "Bloqueado"
-#: src/view/screens/Moderation.tsx:123
+#: src/screens/Moderation/index.tsx:267
msgid "Blocked accounts"
msgstr "Contas bloqueadas"
-#: src/Navigation.tsx:130
+#: src/Navigation.tsx:134
#: src/view/screens/ModerationBlockedAccounts.tsx:107
msgid "Blocked Accounts"
msgstr "Contas Bloqueadas"
-#: src/view/com/profile/ProfileHeader.tsx:240
+#: src/view/com/profile/ProfileMenu.tsx:356
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
msgstr "Contas bloqueadas não podem te responder, mencionar ou interagir com você."
@@ -422,71 +482,81 @@ msgstr "Contas bloqueadas não podem te responder, mencionar ou interagir com vo
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours."
msgstr "Contas bloqueadas não podem te responder, mencionar ou interagir com você. Você não verá o conteúdo deles e eles serão impedidos de ver o seu."
-#: src/view/com/post-thread/PostThread.tsx:267
+#: src/view/com/post-thread/PostThread.tsx:313
msgid "Blocked post."
msgstr "Post bloqueado."
-#: src/view/screens/ProfileList.tsx:317
+#: src/screens/Profile/Sections/Labels.tsx:152
+msgid "Blocking does not prevent this labeler from placing labels on your account."
+msgstr "Bloquear não previne este rotulador de rotular a sua conta."
+
+#: src/view/screens/ProfileList.tsx:631
msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
msgstr "Bloqueios são públicos. Contas bloqueadas não podem te responder, mencionar ou interagir com você."
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:93
+#: src/view/com/profile/ProfileMenu.tsx:353
+msgid "Blocking will not prevent labels from being applied on your account, but it will stop this account from replying in your threads or interacting with you."
+msgstr "Bloquear não previne rótulos de serem aplicados na sua conta, mas vai impedir esta conta de interagir com você."
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:98
+#: src/view/com/auth/SplashScreen.web.tsx:169
msgid "Blog"
msgstr "Blog"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:31
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:32
#: src/view/com/auth/server-input/index.tsx:89
-#: src/view/com/auth/server-input/index.tsx:90
+#: src/view/com/auth/server-input/index.tsx:91
msgid "Bluesky"
msgstr "Bluesky"
-#: src/view/com/auth/server-input/index.tsx:150
+#: src/view/com/auth/server-input/index.tsx:154
msgid "Bluesky is an open network where you can choose your hosting provider. Custom hosting is now available in beta for developers."
-msgstr ""
+msgstr "Bluesky é uma rede aberta que permite a escolha do seu provedor de hospedagem. Desenvolvedores já conseguem utilizar a versão beta de hospedagem própria."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:80
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:80
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:82
msgid "Bluesky is flexible."
msgstr "Bluesky é flexível."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:69
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:69
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:71
msgid "Bluesky is open."
msgstr "Bluesky é aberto."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:56
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:56
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:58
msgid "Bluesky is public."
msgstr "Bluesky é público."
#: src/view/com/modals/Waitlist.tsx:70
-msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
-msgstr "O Bluesky usa convites para criar uma comunidade mais saudável. Se você não conhece ninguém que tenha um convite, inscreva-se na lista de espera e em breve enviaremos um para você."
+#~ msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
+#~ msgstr "O Bluesky usa convites para criar uma comunidade mais saudável. Se você não conhece ninguém que tenha um convite, inscreva-se na lista de espera e em breve enviaremos um para você."
-#: src/view/screens/Moderation.tsx:226
+#: src/screens/Moderation/index.tsx:533
msgid "Bluesky will not show your profile and posts to logged-out users. Other apps may not honor this request. This does not make your account private."
msgstr "O Bluesky não mostrará seu perfil e publicações para usuários desconectados. Outros aplicativos podem não honrar esta solicitação. Isso não torna a sua conta privada."
-#: src/view/com/modals/ServerInput.tsx:78
-#~ msgid "Bluesky.Social"
-#~ msgstr "Bluesky.Social"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:53
+msgid "Blur images"
+msgstr "Desfocar imagens"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:51
+msgid "Blur images and filter from feeds"
+msgstr "Desfocar imagens e filtrar dos feeds"
#: src/screens/Onboarding/index.tsx:33
msgid "Books"
msgstr "Livros"
-#: src/view/screens/Settings/index.tsx:859
-msgid "Build version {0} {1}"
-msgstr "Versão {0} {1}"
+#: src/view/screens/Settings/index.tsx:893
+#~ msgid "Build version {0} {1}"
+#~ msgstr "Versão {0} {1}"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:87
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:92
+#: src/view/com/auth/SplashScreen.web.tsx:166
msgid "Business"
msgstr "Empresarial"
-#: src/view/com/modals/ServerInput.tsx:115
-#~ msgid "Button disabled. Input custom domain to proceed."
-#~ msgstr "Botão desabilitado. Utilize um domínio personalizado para continuar."
-
#: src/view/com/profile/ProfileSubpageHeader.tsx:157
msgid "by —"
msgstr "por -"
@@ -495,95 +565,113 @@ msgstr "por -"
msgid "by {0}"
msgstr "por {0}"
+#: src/components/LabelingServiceCard/index.tsx:57
+msgid "By {0}"
+msgstr "Por {0}"
+
#: src/view/com/profile/ProfileSubpageHeader.tsx:161
msgid "by <0/>"
msgstr "por <0/>"
+#: src/screens/Signup/StepInfo/Policies.tsx:74
+msgid "By creating an account you agree to the {els}."
+msgstr "Ao criar uma conta, você concorda com os {els}."
+
#: src/view/com/profile/ProfileSubpageHeader.tsx:159
msgid "by you"
msgstr "por você"
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:60
-#: src/view/com/util/UserAvatar.tsx:224
-#: src/view/com/util/UserBanner.tsx:40
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:77
msgid "Camera"
msgstr "Câmera"
-#: src/view/com/modals/AddAppPasswords.tsx:216
+#: src/view/com/modals/AddAppPasswords.tsx:217
msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long."
msgstr "Só pode conter letras, números, espaços, traços e sublinhados. Deve ter pelo menos 4 caracteres, mas não mais de 32 caracteres."
-#: src/components/Prompt.tsx:91
-#: src/view/com/composer/Composer.tsx:300
-#: src/view/com/composer/Composer.tsx:305
+#: src/components/Menu/index.tsx:213
+#: src/components/Prompt.tsx:113
+#: src/components/Prompt.tsx:115
+#: src/components/TagMenu/index.tsx:268
+#: src/view/com/composer/Composer.tsx:317
+#: src/view/com/composer/Composer.tsx:322
#: src/view/com/modals/ChangeEmail.tsx:218
#: src/view/com/modals/ChangeEmail.tsx:220
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
-#: src/view/com/modals/CreateOrEditList.tsx:355
-#: src/view/com/modals/EditImage.tsx:323
-#: src/view/com/modals/EditProfile.tsx:249
+#: src/view/com/modals/ChangeHandle.tsx:154
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
+#: src/view/com/modals/CreateOrEditList.tsx:356
+#: src/view/com/modals/crop-image/CropImage.web.tsx:138
+#: src/view/com/modals/EditImage.tsx:324
+#: src/view/com/modals/EditProfile.tsx:250
#: src/view/com/modals/InAppBrowserConsent.tsx:78
-#: src/view/com/modals/LinkWarning.tsx:87
-#: src/view/com/modals/Repost.tsx:87
+#: src/view/com/modals/InAppBrowserConsent.tsx:80
+#: src/view/com/modals/LinkWarning.tsx:105
+#: src/view/com/modals/LinkWarning.tsx:107
+#: src/view/com/modals/Repost.tsx:88
#: src/view/com/modals/VerifyEmail.tsx:247
#: src/view/com/modals/VerifyEmail.tsx:253
-#: src/view/com/modals/Waitlist.tsx:142
-#: src/view/screens/Search/Search.tsx:693
-#: src/view/shell/desktop/Search.tsx:238
+#: src/view/screens/Search/Search.tsx:718
+#: src/view/shell/desktop/Search.tsx:239
msgid "Cancel"
msgstr "Cancelar"
-#: src/view/com/modals/Confirm.tsx:88
-#: src/view/com/modals/Confirm.tsx:91
-#: src/view/com/modals/CreateOrEditList.tsx:360
-#: src/view/com/modals/DeleteAccount.tsx:156
-#: src/view/com/modals/DeleteAccount.tsx:234
+#: src/view/com/modals/CreateOrEditList.tsx:361
+#: src/view/com/modals/DeleteAccount.tsx:155
+#: src/view/com/modals/DeleteAccount.tsx:233
msgctxt "action"
msgid "Cancel"
msgstr "Cancelar"
-#: src/view/com/modals/DeleteAccount.tsx:152
-#: src/view/com/modals/DeleteAccount.tsx:230
+#: src/view/com/modals/DeleteAccount.tsx:151
+#: src/view/com/modals/DeleteAccount.tsx:229
msgid "Cancel account deletion"
msgstr "Cancelar exclusão da conta"
-#: src/view/com/modals/ChangeHandle.tsx:149
+#: src/view/com/modals/ChangeHandle.tsx:150
msgid "Cancel change handle"
msgstr "Cancelar alteração de usuário"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:134
+#: src/view/com/modals/crop-image/CropImage.web.tsx:135
msgid "Cancel image crop"
msgstr "Cancelar corte da imagem"
-#: src/view/com/modals/EditProfile.tsx:244
+#: src/view/com/modals/EditProfile.tsx:245
msgid "Cancel profile editing"
msgstr "Cancelar edição do perfil"
-#: src/view/com/modals/Repost.tsx:78
+#: src/view/com/modals/Repost.tsx:79
msgid "Cancel quote post"
msgstr "Cancelar citação"
#: src/view/com/modals/ListAddRemoveUsers.tsx:87
-#: src/view/shell/desktop/Search.tsx:234
+#: src/view/shell/desktop/Search.tsx:235
msgid "Cancel search"
msgstr "Cancelar busca"
#: src/view/com/modals/Waitlist.tsx:136
-msgid "Cancel waitlist signup"
-msgstr "Cancelar inscrição na lista de espera"
+#~ msgid "Cancel waitlist signup"
+#~ msgstr "Cancelar inscrição na lista de espera"
+
+#: src/view/com/modals/LinkWarning.tsx:106
+msgid "Cancels opening the linked website"
+msgstr "Cancela a abertura do link"
-#: src/view/screens/Settings/index.tsx:334
+#: src/view/com/modals/VerifyEmail.tsx:152
+msgid "Change"
+msgstr "Trocar"
+
+#: src/view/screens/Settings/index.tsx:353
msgctxt "action"
msgid "Change"
msgstr "Alterar"
-#: src/view/screens/Settings/index.tsx:696
+#: src/view/screens/Settings/index.tsx:716
msgid "Change handle"
msgstr "Alterar usuário"
-#: src/view/com/modals/ChangeHandle.tsx:161
-#: src/view/screens/Settings/index.tsx:705
+#: src/view/com/modals/ChangeHandle.tsx:162
+#: src/view/screens/Settings/index.tsx:727
msgid "Change Handle"
msgstr "Alterar Usuário"
@@ -591,11 +679,12 @@ msgstr "Alterar Usuário"
msgid "Change my email"
msgstr "Alterar meu email"
-#: src/view/screens/Settings/index.tsx:732
+#: src/view/screens/Settings/index.tsx:754
msgid "Change password"
msgstr "Alterar senha"
-#: src/view/screens/Settings/index.tsx:741
+#: src/view/com/modals/ChangePassword.tsx:141
+#: src/view/screens/Settings/index.tsx:765
msgid "Change Password"
msgstr "Alterar Senha"
@@ -604,8 +693,8 @@ msgid "Change post language to {0}"
msgstr "Trocar idioma do post para {0}"
#: src/view/screens/Settings/index.tsx:733
-msgid "Change your Bluesky password"
-msgstr "Alterar sua senha do Bluesky"
+#~ msgid "Change your Bluesky password"
+#~ msgstr "Alterar sua senha do Bluesky"
#: src/view/com/modals/ChangeEmail.tsx:109
msgid "Change Your Email"
@@ -624,7 +713,7 @@ msgstr "Confira alguns feeds recomendados. Toque em + para adicioná-los à sua
msgid "Check out some recommended users. Follow them to see similar users."
msgstr "Confira alguns usuários recomendados. Siga-os para ver usuários semelhantes."
-#: src/view/com/modals/DeleteAccount.tsx:169
+#: src/view/com/modals/DeleteAccount.tsx:168
msgid "Check your inbox for an email with the confirmation code to enter below:"
msgstr "Verifique em sua caixa de entrada um e-mail com o código de confirmação abaixo:"
@@ -633,111 +722,127 @@ msgid "Choose \"Everybody\" or \"Nobody\""
msgstr "Escolha \"Todos\" ou \"Ninguém\""
#: src/view/screens/Settings/index.tsx:697
-msgid "Choose a new Bluesky username or create"
-msgstr "Crie ou escolha um novo usuário no Bluesky"
+#~ msgid "Choose a new Bluesky username or create"
+#~ msgstr "Crie ou escolha um novo usuário no Bluesky"
#: src/view/com/auth/server-input/index.tsx:79
msgid "Choose Service"
msgstr "Escolher Serviço"
-#: src/screens/Onboarding/StepFinished.tsx:135
+#: src/screens/Onboarding/StepFinished.tsx:139
msgid "Choose the algorithms that power your custom feeds."
msgstr "Escolha os algoritmos que geram seus feeds customizados."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:83
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:83
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:85
msgid "Choose the algorithms that power your experience with custom feeds."
msgstr "Escolha os algoritmos que fazem sentido para você com os feeds personalizados."
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:103
-#~ msgid "Choose your algorithmic feeds"
-#~ msgstr "Escolha seus feeds algoritmicos"
-
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:103
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:104
msgid "Choose your main feeds"
msgstr "Escolha seus feeds principais"
-#: src/view/com/auth/create/Step1.tsx:215
+#: src/screens/Signup/StepInfo/index.tsx:112
msgid "Choose your password"
msgstr "Escolha sua senha"
-#: src/view/screens/Settings/index.tsx:834
-#: src/view/screens/Settings/index.tsx:835
+#: src/view/screens/Settings/index.tsx:868
msgid "Clear all legacy storage data"
msgstr "Limpar todos os dados de armazenamento legados"
-#: src/view/screens/Settings/index.tsx:837
+#: src/view/screens/Settings/index.tsx:871
msgid "Clear all legacy storage data (restart after this)"
msgstr "Limpar todos os dados de armazenamento legados (reinicie em seguida)"
-#: src/view/screens/Settings/index.tsx:846
-#: src/view/screens/Settings/index.tsx:847
+#: src/view/screens/Settings/index.tsx:880
msgid "Clear all storage data"
msgstr "Limpar todos os dados de armazenamento"
-#: src/view/screens/Settings/index.tsx:849
+#: src/view/screens/Settings/index.tsx:883
msgid "Clear all storage data (restart after this)"
msgstr "Limpar todos os dados de armazenamento (reinicie em seguida)"
#: src/view/com/util/forms/SearchInput.tsx:88
-#: src/view/screens/Search/Search.tsx:674
+#: src/view/screens/Search/Search.tsx:699
msgid "Clear search query"
msgstr "Limpar busca"
+#: src/view/screens/Settings/index.tsx:869
+msgid "Clears all legacy storage data"
+msgstr "Limpa todos os dados antigos"
+
+#: src/view/screens/Settings/index.tsx:881
+msgid "Clears all storage data"
+msgstr "Limpa todos os dados antigos"
+
#: src/view/screens/Support.tsx:40
msgid "click here"
msgstr "clique aqui"
+#: src/components/TagMenu/index.web.tsx:138
+msgid "Click here to open tag menu for {tag}"
+msgstr "Clique aqui para abrir o menu da tag {tag}"
+
+#: src/components/RichText.tsx:192
+msgid "Click here to open tag menu for #{tag}"
+msgstr "Clique aqui para abrir o menu da tag #{tag}"
+
#: src/screens/Onboarding/index.tsx:35
msgid "Climate"
msgstr "Clima e tempo"
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
msgid "Close"
msgstr "Fechar"
-#: src/components/Dialog/index.web.tsx:78
+#: src/components/Dialog/index.web.tsx:106
+#: src/components/Dialog/index.web.tsx:218
msgid "Close active dialog"
msgstr "Fechar janela ativa"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:38
+#: src/screens/Login/PasswordUpdatedForm.tsx:38
msgid "Close alert"
msgstr "Fechar alerta"
-#: src/view/com/util/BottomSheetCustomBackdrop.tsx:33
+#: src/view/com/util/BottomSheetCustomBackdrop.tsx:36
msgid "Close bottom drawer"
msgstr "Fechar parte inferior"
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:26
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:36
msgid "Close image"
msgstr "Fechar imagem"
-#: src/view/com/lightbox/Lightbox.web.tsx:119
+#: src/view/com/lightbox/Lightbox.web.tsx:129
msgid "Close image viewer"
msgstr "Fechar visualizador de imagens"
-#: src/view/shell/index.web.tsx:49
+#: src/view/shell/index.web.tsx:55
msgid "Close navigation footer"
msgstr "Fechar o painel de navegação"
-#: src/view/shell/index.web.tsx:50
+#: src/components/Menu/index.tsx:207
+#: src/components/TagMenu/index.tsx:262
+msgid "Close this dialog"
+msgstr "Fechar esta janela"
+
+#: src/view/shell/index.web.tsx:56
msgid "Closes bottom navigation bar"
msgstr "Fecha barra de navegação inferior"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:39
+#: src/screens/Login/PasswordUpdatedForm.tsx:39
msgid "Closes password update alert"
msgstr "Fecha alerta de troca de senha"
-#: src/view/com/composer/Composer.tsx:302
+#: src/view/com/composer/Composer.tsx:319
msgid "Closes post composer and discards post draft"
msgstr "Fecha o editor de post e descarta o rascunho"
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:27
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:37
msgid "Closes viewer for header image"
msgstr "Fechar o visualizador de banner"
-#: src/view/com/notifications/FeedItem.tsx:317
+#: src/view/com/notifications/FeedItem.tsx:321
msgid "Collapses list of users for a given notification"
msgstr "Fecha lista de usuários da notificação"
@@ -749,16 +854,20 @@ msgstr "Comédia"
msgid "Comics"
msgstr "Quadrinhos"
-#: src/Navigation.tsx:227
+#: src/Navigation.tsx:241
#: src/view/screens/CommunityGuidelines.tsx:32
msgid "Community Guidelines"
msgstr "Diretrizes da Comunidade"
-#: src/screens/Onboarding/StepFinished.tsx:148
+#: src/screens/Onboarding/StepFinished.tsx:152
msgid "Complete onboarding and start using your account"
msgstr "Completar e começar a usar sua conta"
-#: src/view/com/composer/Composer.tsx:417
+#: src/screens/Signup/index.tsx:154
+msgid "Complete the challenge"
+msgstr "Complete o captcha"
+
+#: src/view/com/composer/Composer.tsx:438
msgid "Compose posts up to {MAX_GRAPHEME_LENGTH} characters in length"
msgstr "Escreva posts de até {MAX_GRAPHEME_LENGTH} caracteres"
@@ -766,81 +875,112 @@ msgstr "Escreva posts de até {MAX_GRAPHEME_LENGTH} caracteres"
msgid "Compose reply"
msgstr "Escrever resposta"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:67
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:81
msgid "Configure content filtering setting for category: {0}"
msgstr "Configure o filtro de conteúdo por categoria: {0}"
-#: src/components/Prompt.tsx:113
-#: src/view/com/modals/AppealLabel.tsx:98
+#: src/components/moderation/LabelPreference.tsx:81
+msgid "Configure content filtering setting for category: {name}"
+msgstr ""
+
+#: src/components/moderation/LabelPreference.tsx:244
+msgid "Configured in <0>moderation settings0>."
+msgstr "Configure no <0>painel de moderação0>."
+
+#: src/components/Prompt.tsx:153
+#: src/components/Prompt.tsx:156
#: src/view/com/modals/SelfLabel.tsx:154
#: src/view/com/modals/VerifyEmail.tsx:231
#: src/view/com/modals/VerifyEmail.tsx:233
-#: src/view/screens/PreferencesHomeFeed.tsx:308
+#: src/view/screens/PreferencesFollowingFeed.tsx:308
#: src/view/screens/PreferencesThreads.tsx:159
msgid "Confirm"
msgstr "Confirmar"
#: src/view/com/modals/Confirm.tsx:75
#: src/view/com/modals/Confirm.tsx:78
-msgctxt "action"
-msgid "Confirm"
-msgstr "Confirmar"
+#~ msgctxt "action"
+#~ msgid "Confirm"
+#~ msgstr "Confirmar"
#: src/view/com/modals/ChangeEmail.tsx:193
#: src/view/com/modals/ChangeEmail.tsx:195
msgid "Confirm Change"
msgstr "Confirmar Alterações"
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:34
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:35
msgid "Confirm content language settings"
msgstr "Confirmar configurações de idioma de conteúdo"
-#: src/view/com/modals/DeleteAccount.tsx:220
+#: src/view/com/modals/DeleteAccount.tsx:219
msgid "Confirm delete account"
msgstr "Confirmar a exclusão da conta"
#: src/view/com/modals/ContentFilteringSettings.tsx:156
-msgid "Confirm your age to enable adult content."
-msgstr "Confirme sua idade para habilitar conteúdo adulto."
+#~ msgid "Confirm your age to enable adult content."
+#~ msgstr "Confirme sua idade para habilitar conteúdo adulto."
+
+#: src/screens/Moderation/index.tsx:301
+msgid "Confirm your age:"
+msgstr "Confirme sua idade:"
+
+#: src/screens/Moderation/index.tsx:292
+msgid "Confirm your birthdate"
+msgstr "Confirme sua data de nascimento"
#: src/view/com/modals/ChangeEmail.tsx:157
-#: src/view/com/modals/DeleteAccount.tsx:182
+#: src/view/com/modals/DeleteAccount.tsx:175
+#: src/view/com/modals/DeleteAccount.tsx:181
#: src/view/com/modals/VerifyEmail.tsx:165
msgid "Confirmation code"
msgstr "Código de confirmação"
#: src/view/com/modals/Waitlist.tsx:120
-msgid "Confirms signing up {email} to the waitlist"
-msgstr "Confirma adição de {email} à lista de espera"
+#~ msgid "Confirms signing up {email} to the waitlist"
+#~ msgstr "Confirma adição de {email} à lista de espera"
-#: src/view/com/auth/create/CreateAccount.tsx:182
-#: src/view/com/auth/login/LoginForm.tsx:278
+#: src/screens/Login/LoginForm.tsx:248
msgid "Connecting..."
msgstr "Conectando..."
-#: src/view/com/auth/create/CreateAccount.tsx:202
+#: src/screens/Signup/index.tsx:219
msgid "Contact support"
msgstr "Contatar suporte"
-#: src/view/screens/Moderation.tsx:81
-msgid "Content filtering"
-msgstr "Filtragem do conteúdo"
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "content"
+msgstr "conteúdo"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:18
+msgid "Content Blocked"
+msgstr "Conteúdo bloqueado"
+
+#: src/view/screens/Moderation.tsx:83
+#~ msgid "Content filtering"
+#~ msgstr "Filtragem do conteúdo"
#: src/view/com/modals/ContentFilteringSettings.tsx:44
-msgid "Content Filtering"
-msgstr "Filtragem do Conteúdo"
+#~ msgid "Content Filtering"
+#~ msgstr "Filtragem do Conteúdo"
+
+#: src/screens/Moderation/index.tsx:285
+msgid "Content filters"
+msgstr "Filtros de conteúdo"
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74
#: src/view/screens/LanguageSettings.tsx:278
msgid "Content Languages"
msgstr "Idiomas do Conteúdo"
-#: src/view/com/modals/ModerationDetails.tsx:65
+#: src/components/moderation/ModerationDetailsDialog.tsx:75
+#: src/lib/moderation/useModerationCauseDescription.ts:75
msgid "Content Not Available"
msgstr "Conteúdo Indisponível"
-#: src/view/com/modals/ModerationDetails.tsx:33
-#: src/view/com/util/moderation/ScreenHider.tsx:78
+#: src/components/moderation/ModerationDetailsDialog.tsx:46
+#: src/components/moderation/ScreenHider.tsx:99
+#: src/lib/moderation/useGlobalLabelStrings.ts:22
+#: src/lib/moderation/useModerationCauseDescription.ts:38
msgid "Content Warning"
msgstr "Aviso de Conteúdo"
@@ -848,28 +988,38 @@ msgstr "Aviso de Conteúdo"
msgid "Content warnings"
msgstr "Avisos de conteúdo"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:170
-#: src/screens/Onboarding/StepFollowingFeed.tsx:153
-#: src/screens/Onboarding/StepInterests/index.tsx:248
-#: src/screens/Onboarding/StepModeration/index.tsx:118
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:108
+#: src/components/Menu/index.web.tsx:84
+msgid "Context menu backdrop, click to close the menu."
+msgstr "Fundo do menu, clique para fechá-lo."
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:161
+#: src/screens/Onboarding/StepFollowingFeed.tsx:154
+#: src/screens/Onboarding/StepInterests/index.tsx:252
+#: src/screens/Onboarding/StepModeration/index.tsx:103
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:118
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:96
msgid "Continue"
msgstr "Continuar"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:150
-#: src/screens/Onboarding/StepInterests/index.tsx:245
-#: src/screens/Onboarding/StepModeration/index.tsx:115
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:105
+#: src/components/AccountList.tsx:108
+msgid "Continue as {0} (currently signed in)"
+msgstr ""
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:151
+#: src/screens/Onboarding/StepInterests/index.tsx:249
+#: src/screens/Onboarding/StepModeration/index.tsx:100
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:115
+#: src/screens/Signup/index.tsx:198
msgid "Continue to next step"
msgstr "Continuar para o próximo passo"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:167
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:158
msgid "Continue to the next step"
msgstr "Continuar para o próximo passo"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:191
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:199
msgid "Continue to the next step without following any accounts"
msgstr "Continuar para o próximo passo sem seguir contas"
@@ -877,98 +1027,106 @@ msgstr "Continuar para o próximo passo sem seguir contas"
msgid "Cooking"
msgstr "Culinária"
-#: src/view/com/modals/AddAppPasswords.tsx:195
-#: src/view/com/modals/InviteCodes.tsx:182
+#: src/view/com/modals/AddAppPasswords.tsx:196
+#: src/view/com/modals/InviteCodes.tsx:183
msgid "Copied"
msgstr "Copiado"
-#: src/view/screens/Settings/index.tsx:241
+#: src/view/screens/Settings/index.tsx:251
msgid "Copied build version to clipboard"
msgstr "Versão do aplicativo copiada"
-#: src/view/com/modals/AddAppPasswords.tsx:76
-#: src/view/com/modals/InviteCodes.tsx:152
-#: src/view/com/util/forms/PostDropdownBtn.tsx:112
+#: src/view/com/modals/AddAppPasswords.tsx:77
+#: src/view/com/modals/ChangeHandle.tsx:326
+#: src/view/com/modals/InviteCodes.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:158
msgid "Copied to clipboard"
msgstr "Copiado"
-#: src/view/com/modals/AddAppPasswords.tsx:189
+#: src/view/com/modals/AddAppPasswords.tsx:190
msgid "Copies app password"
msgstr "Copia senha de aplicativo"
-#: src/view/com/modals/AddAppPasswords.tsx:188
+#: src/view/com/modals/AddAppPasswords.tsx:189
msgid "Copy"
msgstr "Copiar"
-#: src/view/screens/ProfileList.tsx:417
+#: src/view/com/modals/ChangeHandle.tsx:480
+msgid "Copy {0}"
+msgstr "Copiar {0}"
+
+#: src/view/screens/ProfileList.tsx:388
msgid "Copy link to list"
msgstr "Copiar link da lista"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
msgid "Copy link to post"
msgstr "Copiar link do post"
-#: src/view/com/profile/ProfileHeader.tsx:294
-msgid "Copy link to profile"
-msgstr "Copiar link do perfil"
+#: src/view/com/profile/ProfileHeader.tsx:295
+#~ msgid "Copy link to profile"
+#~ msgstr "Copiar link do perfil"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:139
+#: src/view/com/util/forms/PostDropdownBtn.tsx:220
+#: src/view/com/util/forms/PostDropdownBtn.tsx:222
msgid "Copy post text"
msgstr "Copiar texto do post"
-#: src/Navigation.tsx:232
+#: src/Navigation.tsx:246
#: src/view/screens/CopyrightPolicy.tsx:29
msgid "Copyright Policy"
msgstr "Política de Direitos Autorais"
-#: src/view/screens/ProfileFeed.tsx:96
+#: src/view/screens/ProfileFeed.tsx:103
msgid "Could not load feed"
msgstr "Não foi possível carregar o feed"
-#: src/view/screens/ProfileList.tsx:888
+#: src/view/screens/ProfileList.tsx:907
msgid "Could not load list"
msgstr "Não foi possível carregar a lista"
-#: src/view/com/auth/create/Step2.tsx:91
-msgid "Country"
-msgstr "País"
-
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:62
-#: src/view/com/auth/SplashScreen.tsx:46
-#: src/view/com/auth/SplashScreen.web.tsx:77
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:65
+#: src/view/com/auth/SplashScreen.tsx:75
+#: src/view/com/auth/SplashScreen.web.tsx:104
msgid "Create a new account"
msgstr "Criar uma nova conta"
-#: src/view/screens/Settings/index.tsx:384
+#: src/view/screens/Settings/index.tsx:403
msgid "Create a new Bluesky account"
msgstr "Criar uma nova conta do Bluesky"
-#: src/view/com/auth/create/CreateAccount.tsx:122
+#: src/screens/Signup/index.tsx:129
msgid "Create Account"
msgstr "Criar Conta"
-#: src/view/com/modals/AddAppPasswords.tsx:226
+#: src/view/com/modals/AddAppPasswords.tsx:227
msgid "Create App Password"
msgstr "Criar Senha de Aplicativo"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:54
-#: src/view/com/auth/SplashScreen.tsx:43
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:55
+#: src/view/com/auth/SplashScreen.tsx:66
+#: src/view/com/auth/SplashScreen.web.tsx:95
msgid "Create new account"
msgstr "Criar uma nova conta"
-#: src/view/screens/AppPasswords.tsx:249
+#: src/components/ReportDialog/SelectReportOptionView.tsx:93
+msgid "Create report for {0}"
+msgstr "Criar denúncia para {0}"
+
+#: src/view/screens/AppPasswords.tsx:246
msgid "Created {0}"
msgstr "{0} criada"
#: src/view/screens/ProfileFeed.tsx:616
-msgid "Created by <0/>"
-msgstr "Criado por <0/>"
+#~ msgid "Created by <0/>"
+#~ msgstr "Criado por <0/>"
#: src/view/screens/ProfileFeed.tsx:614
-msgid "Created by you"
-msgstr "Criado por você"
+#~ msgid "Created by you"
+#~ msgstr "Criado por você"
-#: src/view/com/composer/Composer.tsx:448
+#: src/view/com/composer/Composer.tsx:469
msgid "Creates a card with a thumbnail. The card links to {url}"
msgstr "Cria uma prévia com miniatura. A prévia faz um link para {url}"
@@ -976,16 +1134,17 @@ msgstr "Cria uma prévia com miniatura. A prévia faz um link para {url}"
msgid "Culture"
msgstr "Cultura"
-#: src/view/com/auth/server-input/index.tsx:95
-#: src/view/com/auth/server-input/index.tsx:96
+#: src/view/com/auth/server-input/index.tsx:97
+#: src/view/com/auth/server-input/index.tsx:99
msgid "Custom"
-msgstr ""
+msgstr "Customizado"
-#: src/view/com/modals/ChangeHandle.tsx:389
+#: src/view/com/modals/ChangeHandle.tsx:388
msgid "Custom domain"
msgstr "Domínio personalizado"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:107
+#: src/view/screens/Feeds.tsx:692
msgid "Custom feeds built by the community bring you new experiences and help you find the content you love."
msgstr "Feeds customizados feitos pela comunidade te proporcionam novas experiências e te ajudam a encontrar o conteúdo que você mais ama."
@@ -993,12 +1152,8 @@ msgstr "Feeds customizados feitos pela comunidade te proporcionam novas experiê
msgid "Customize media from external sites."
msgstr "Configurar mídia de sites externos."
-#: src/view/screens/Settings.tsx:687
-#~ msgid "Danger Zone"
-#~ msgstr "Zona Perigosa"
-
-#: src/view/screens/Settings/index.tsx:485
-#: src/view/screens/Settings/index.tsx:511
+#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:530
msgid "Dark"
msgstr "Escuro"
@@ -1006,64 +1161,81 @@ msgstr "Escuro"
msgid "Dark mode"
msgstr "Modo escuro"
-#: src/view/screens/Settings/index.tsx:498
+#: src/view/screens/Settings/index.tsx:517
msgid "Dark Theme"
msgstr "Modo Escuro"
+#: src/screens/Signup/StepInfo/index.tsx:132
+msgid "Date of birth"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:841
+msgid "Debug Moderation"
+msgstr "Testar Moderação"
+
#: src/view/screens/Debug.tsx:83
msgid "Debug panel"
msgstr "Painel de depuração"
-#: src/view/screens/Settings/index.tsx:772
+#: src/view/com/util/forms/PostDropdownBtn.tsx:319
+#: src/view/screens/AppPasswords.tsx:268
+#: src/view/screens/ProfileList.tsx:613
+msgid "Delete"
+msgstr "Excluir"
+
+#: src/view/screens/Settings/index.tsx:796
msgid "Delete account"
msgstr "Excluir a conta"
-#: src/view/com/modals/DeleteAccount.tsx:87
+#: src/view/com/modals/DeleteAccount.tsx:86
msgid "Delete Account"
msgstr "Excluir a Conta"
-#: src/view/screens/AppPasswords.tsx:222
-#: src/view/screens/AppPasswords.tsx:242
+#: src/view/screens/AppPasswords.tsx:239
msgid "Delete app password"
msgstr "Excluir senha de aplicativo"
-#: src/view/screens/ProfileList.tsx:363
-#: src/view/screens/ProfileList.tsx:444
+#: src/view/screens/AppPasswords.tsx:263
+msgid "Delete app password?"
+msgstr "Excluir senha de aplicativo?"
+
+#: src/view/screens/ProfileList.tsx:415
msgid "Delete List"
msgstr "Excluir Lista"
-#: src/view/com/modals/DeleteAccount.tsx:223
+#: src/view/com/modals/DeleteAccount.tsx:222
msgid "Delete my account"
msgstr "Excluir minha conta"
-#: src/view/screens/Settings.tsx:706
-#~ msgid "Delete my account…"
-#~ msgstr "Excluir minha conta…"
-
-#: src/view/screens/Settings/index.tsx:784
+#: src/view/screens/Settings/index.tsx:808
msgid "Delete My Account…"
msgstr "Excluir minha conta…"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:302
+#: src/view/com/util/forms/PostDropdownBtn.tsx:304
msgid "Delete post"
msgstr "Excluir post"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:232
+#: src/view/screens/ProfileList.tsx:608
+msgid "Delete this list?"
+msgstr "Excluir esta lista?"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:314
msgid "Delete this post?"
msgstr "Excluir este post?"
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:69
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:64
msgid "Deleted"
msgstr "Excluído"
-#: src/view/com/post-thread/PostThread.tsx:259
+#: src/view/com/post-thread/PostThread.tsx:305
msgid "Deleted post."
msgstr "Post excluído."
-#: src/view/com/modals/CreateOrEditList.tsx:300
-#: src/view/com/modals/CreateOrEditList.tsx:321
-#: src/view/com/modals/EditProfile.tsx:198
-#: src/view/com/modals/EditProfile.tsx:210
+#: src/view/com/modals/CreateOrEditList.tsx:301
+#: src/view/com/modals/CreateOrEditList.tsx:322
+#: src/view/com/modals/EditProfile.tsx:199
+#: src/view/com/modals/EditProfile.tsx:211
msgid "Description"
msgstr "Descrição"
@@ -1071,53 +1243,99 @@ msgstr "Descrição"
#~ msgid "Developer Tools"
#~ msgstr "Ferramentas de Desenvolvedor"
-#: src/view/com/composer/Composer.tsx:211
+#: src/view/com/composer/Composer.tsx:218
msgid "Did you want to say anything?"
msgstr "Você gostaria de dizer alguma coisa?"
-#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:523
msgid "Dim"
msgstr "Menos escuro"
-#: src/view/com/composer/Composer.tsx:144
+#: src/lib/moderation/useLabelBehaviorDescription.ts:32
+#: src/lib/moderation/useLabelBehaviorDescription.ts:42
+#: src/lib/moderation/useLabelBehaviorDescription.ts:68
+#: src/screens/Moderation/index.tsx:341
+msgid "Disabled"
+msgstr "Desabilitado"
+
+#: src/view/com/composer/Composer.tsx:511
msgid "Discard"
msgstr "Descartar"
-#: src/view/com/composer/Composer.tsx:138
-msgid "Discard draft"
-msgstr "Descartar rascunho"
+#: src/view/com/composer/Composer.tsx:145
+#~ msgid "Discard draft"
+#~ msgstr "Descartar rascunho"
+
+#: src/view/com/composer/Composer.tsx:508
+msgid "Discard draft?"
+msgstr "Descartar rascunho?"
-#: src/view/screens/Moderation.tsx:207
+#: src/screens/Moderation/index.tsx:518
+#: src/screens/Moderation/index.tsx:522
msgid "Discourage apps from showing my account to logged-out users"
-msgstr "Desencorajar aplicativos a mostrar minha conta para usuários deslogados"
+msgstr "Desencorajar aplicativos a mostrar minha conta para usuários desautenticados"
#: src/view/com/posts/FollowingEmptyState.tsx:74
#: src/view/com/posts/FollowingEndOfFeed.tsx:75
msgid "Discover new custom feeds"
msgstr "Descubra novos feeds"
-#: src/view/screens/Feeds.tsx:473
-msgid "Discover new feeds"
-msgstr "Descubra novos feeds"
+#: src/view/screens/Feeds.tsx:689
+msgid "Discover New Feeds"
+msgstr "Descubra Novos Feeds"
-#: src/view/com/modals/EditProfile.tsx:192
+#: src/view/com/modals/EditProfile.tsx:193
msgid "Display name"
msgstr "Nome de exibição"
-#: src/view/com/modals/EditProfile.tsx:180
+#: src/view/com/modals/EditProfile.tsx:181
msgid "Display Name"
msgstr "Nome de Exibição"
-#: src/view/com/modals/ChangeHandle.tsx:487
+#: src/view/com/modals/ChangeHandle.tsx:397
+msgid "DNS Panel"
+msgstr "Painel DNS"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:39
+msgid "Does not include nudity."
+msgstr "Não inclui nudez."
+
+#: src/screens/Signup/StepHandle.tsx:104
+msgid "Doesn't begin or end with a hyphen"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "Domain Value"
+msgstr "Domínio"
+
+#: src/view/com/modals/ChangeHandle.tsx:488
msgid "Domain verified!"
msgstr "Domínio verificado!"
-#: src/view/com/auth/create/Step1.tsx:166
-msgid "Don't have an invite code?"
-msgstr "Não possui um convite?"
+#: src/view/com/auth/create/Step1.tsx:170
+#~ msgid "Don't have an invite code?"
+#~ msgstr "Não possui um convite?"
+
+#: src/components/dialogs/BirthDateSettings.tsx:119
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/components/forms/DateField/index.tsx:74
+#: src/components/forms/DateField/index.tsx:80
+#: src/view/com/auth/server-input/index.tsx:169
+#: src/view/com/auth/server-input/index.tsx:170
+#: src/view/com/modals/AddAppPasswords.tsx:227
+#: src/view/com/modals/AltImage.tsx:140
+#: src/view/com/modals/crop-image/CropImage.web.tsx:153
+#: src/view/com/modals/InviteCodes.tsx:81
+#: src/view/com/modals/InviteCodes.tsx:124
+#: src/view/com/modals/ListAddRemoveUsers.tsx:142
+#: src/view/screens/PreferencesFollowingFeed.tsx:311
+#: src/view/screens/Settings/ExportCarDialog.tsx:94
+#: src/view/screens/Settings/ExportCarDialog.tsx:96
+msgid "Done"
+msgstr "Feito"
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86
-#: src/view/com/modals/EditImage.tsx:333
+#: src/view/com/modals/EditImage.tsx:334
#: src/view/com/modals/ListAddRemoveUsers.tsx:144
#: src/view/com/modals/SelfLabel.tsx:157
#: src/view/com/modals/Threadgate.tsx:129
@@ -1129,72 +1347,68 @@ msgctxt "action"
msgid "Done"
msgstr "Feito"
-#: src/view/com/auth/server-input/index.tsx:165
-#: src/view/com/auth/server-input/index.tsx:166
-#: src/view/com/modals/AddAppPasswords.tsx:226
-#: src/view/com/modals/AltImage.tsx:139
-#: src/view/com/modals/ContentFilteringSettings.tsx:88
-#: src/view/com/modals/ContentFilteringSettings.tsx:96
-#: src/view/com/modals/crop-image/CropImage.web.tsx:152
-#: src/view/com/modals/InviteCodes.tsx:80
-#: src/view/com/modals/InviteCodes.tsx:123
-#: src/view/com/modals/ListAddRemoveUsers.tsx:142
-#: src/view/screens/PreferencesHomeFeed.tsx:311
-#: src/view/screens/Settings/ExportCarDialog.tsx:93
-#: src/view/screens/Settings/ExportCarDialog.tsx:94
-msgid "Done"
-msgstr "Feito"
-
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:42
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:43
msgid "Done{extraText}"
msgstr "Feito{extraText}"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:45
-msgid "Double tap to sign in"
-msgstr "Toque duas vezes para logar"
+#: src/view/com/auth/login/ChooseAccountForm.tsx:46
+#~ msgid "Double tap to sign in"
+#~ msgstr "Toque duas vezes para logar"
#: src/view/screens/Settings/index.tsx:755
-msgid "Download Bluesky account data (repository)"
-msgstr ""
+#~ msgid "Download Bluesky account data (repository)"
+#~ msgstr "Baixar os dados da minha conta Bluesky (repositório)"
#: src/view/screens/Settings/ExportCarDialog.tsx:59
#: src/view/screens/Settings/ExportCarDialog.tsx:63
msgid "Download CAR file"
-msgstr ""
+msgstr "Baixar arquivo CAR"
-#: src/view/com/composer/text-input/TextInput.web.tsx:247
+#: src/view/com/composer/text-input/TextInput.web.tsx:249
msgid "Drop to add images"
msgstr "Solte para adicionar imagens"
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:111
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:120
msgid "Due to Apple policies, adult content can only be enabled on the web after completing sign up."
msgstr "Devido a políticas da Apple, o conteúdo adulto só pode ser habilitado no site após terminar o cadastro."
-#: src/view/com/modals/EditProfile.tsx:185
+#: src/view/com/modals/ChangeHandle.tsx:258
+msgid "e.g. alice"
+msgstr "ex. alice"
+
+#: src/view/com/modals/EditProfile.tsx:186
msgid "e.g. Alice Roberts"
msgstr "ex. Alice Roberts"
-#: src/view/com/modals/EditProfile.tsx:203
+#: src/view/com/modals/ChangeHandle.tsx:380
+msgid "e.g. alice.com"
+msgstr "ex. alice.com"
+
+#: src/view/com/modals/EditProfile.tsx:204
msgid "e.g. Artist, dog-lover, and avid reader."
msgstr "ex. Artista, amo cachorros, leitora ávida."
-#: src/view/com/modals/CreateOrEditList.tsx:283
+#: src/lib/moderation/useGlobalLabelStrings.ts:43
+msgid "E.g. artistic nudes."
+msgstr "Ex. nudez artística."
+
+#: src/view/com/modals/CreateOrEditList.tsx:284
msgid "e.g. Great Posters"
msgstr "ex. Perfis Legais"
-#: src/view/com/modals/CreateOrEditList.tsx:284
+#: src/view/com/modals/CreateOrEditList.tsx:285
msgid "e.g. Spammers"
msgstr "ex. Chatos"
-#: src/view/com/modals/CreateOrEditList.tsx:312
+#: src/view/com/modals/CreateOrEditList.tsx:313
msgid "e.g. The posters who never miss."
msgstr "ex. Os perfis que eu mais gosto."
-#: src/view/com/modals/CreateOrEditList.tsx:313
+#: src/view/com/modals/CreateOrEditList.tsx:314
msgid "e.g. Users that repeatedly reply with ads."
msgstr "ex. Perfis que enchem o saco."
-#: src/view/com/modals/InviteCodes.tsx:96
+#: src/view/com/modals/InviteCodes.tsx:97
msgid "Each code works once. You'll receive more invite codes periodically."
msgstr "Cada convite só funciona uma vez. Você receberá mais convites periodicamente."
@@ -1203,50 +1417,58 @@ msgctxt "action"
msgid "Edit"
msgstr "Editar"
+#: src/view/com/util/UserAvatar.tsx:299
+#: src/view/com/util/UserBanner.tsx:85
+msgid "Edit avatar"
+msgstr "Editar avatar"
+
#: src/view/com/composer/photos/Gallery.tsx:144
-#: src/view/com/modals/EditImage.tsx:207
+#: src/view/com/modals/EditImage.tsx:208
msgid "Edit image"
msgstr "Editar imagem"
-#: src/view/screens/ProfileList.tsx:432
+#: src/view/screens/ProfileList.tsx:403
msgid "Edit list details"
msgstr "Editar detalhes da lista"
-#: src/view/com/modals/CreateOrEditList.tsx:250
+#: src/view/com/modals/CreateOrEditList.tsx:251
msgid "Edit Moderation List"
msgstr "Editar lista de moderação"
-#: src/Navigation.tsx:242
+#: src/Navigation.tsx:256
#: src/view/screens/Feeds.tsx:434
#: src/view/screens/SavedFeeds.tsx:84
msgid "Edit My Feeds"
msgstr "Editar Meus Feeds"
-#: src/view/com/modals/EditProfile.tsx:152
+#: src/view/com/modals/EditProfile.tsx:153
msgid "Edit my profile"
msgstr "Editar meu perfil"
-#: src/view/com/profile/ProfileHeader.tsx:417
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:171
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:168
msgid "Edit profile"
msgstr "Editar perfil"
-#: src/view/com/profile/ProfileHeader.tsx:422
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:174
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:171
msgid "Edit Profile"
msgstr "Editar Perfil"
-#: src/view/screens/Feeds.tsx:356
+#: src/view/com/home/HomeHeaderLayout.web.tsx:62
+#: src/view/screens/Feeds.tsx:355
msgid "Edit Saved Feeds"
msgstr "Editar Feeds Salvos"
-#: src/view/com/modals/CreateOrEditList.tsx:245
+#: src/view/com/modals/CreateOrEditList.tsx:246
msgid "Edit User List"
msgstr "Editar lista de usuários"
-#: src/view/com/modals/EditProfile.tsx:193
+#: src/view/com/modals/EditProfile.tsx:194
msgid "Edit your display name"
msgstr "Editar seu nome"
-#: src/view/com/modals/EditProfile.tsx:211
+#: src/view/com/modals/EditProfile.tsx:212
msgid "Edit your profile description"
msgstr "Editar sua descrição"
@@ -1254,17 +1476,12 @@ msgstr "Editar sua descrição"
msgid "Education"
msgstr "Educação"
-#: src/view/com/auth/create/Step1.tsx:195
-#: src/view/com/auth/create/Step2.tsx:194
-#: src/view/com/auth/create/Step2.tsx:269
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:156
+#: src/screens/Signup/StepInfo/index.tsx:80
#: src/view/com/modals/ChangeEmail.tsx:141
-#: src/view/com/modals/Waitlist.tsx:88
msgid "Email"
msgstr "E-mail"
-#: src/view/com/auth/create/Step1.tsx:186
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:147
+#: src/screens/Login/ForgotPasswordForm.tsx:99
msgid "Email address"
msgstr "Endereço de e-mail"
@@ -1281,69 +1498,95 @@ msgstr "E-mail Atualizado"
msgid "Email verified"
msgstr "E-mail verificado"
-#: src/view/screens/Settings/index.tsx:312
+#: src/view/screens/Settings/index.tsx:331
msgid "Email:"
msgstr "E-mail:"
-#: src/view/com/modals/EmbedConsent.tsx:113
+#: src/components/dialogs/EmbedConsent.tsx:101
msgid "Enable {0} only"
msgstr "Habilitar somente {0}"
-#: src/view/com/modals/ContentFilteringSettings.tsx:167
+#: src/screens/Moderation/index.tsx:329
+msgid "Enable adult content"
+msgstr "Habilitar conteúdo adulto"
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:94
msgid "Enable Adult Content"
msgstr "Habilitar Conteúdo Adulto"
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:76
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:77
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:79
msgid "Enable adult content in your feeds"
msgstr "Habilitar conteúdo adulto nos feeds"
+#: src/components/dialogs/EmbedConsent.tsx:82
+#: src/components/dialogs/EmbedConsent.tsx:89
+msgid "Enable external media"
+msgstr ""
+
#: src/view/com/modals/EmbedConsent.tsx:97
-msgid "Enable External Media"
-msgstr "Habilitar Mídia Externa"
+#~ msgid "Enable External Media"
+#~ msgstr "Habilitar Mídia Externa"
#: src/view/screens/PreferencesExternalEmbeds.tsx:75
msgid "Enable media players for"
msgstr "Habilitar mídia para"
-#: src/view/screens/PreferencesHomeFeed.tsx:147
+#: src/view/screens/PreferencesFollowingFeed.tsx:147
msgid "Enable this setting to only see replies between people you follow."
msgstr "Ative esta configuração para ver respostas apenas entre as pessoas que você segue."
-#: src/view/screens/Profile.tsx:455
+#: src/components/dialogs/EmbedConsent.tsx:94
+msgid "Enable this source only"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:339
+msgid "Enabled"
+msgstr "Habilitado"
+
+#: src/screens/Profile/Sections/Feed.tsx:84
msgid "End of feed"
msgstr "Fim do feed"
-#: src/view/com/modals/AddAppPasswords.tsx:166
+#: src/view/com/modals/AddAppPasswords.tsx:167
msgid "Enter a name for this App Password"
msgstr "Insira um nome para esta Senha de Aplicativo"
+#: src/screens/Login/SetNewPasswordForm.tsx:139
+msgid "Enter a password"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:99
+#: src/components/dialogs/MutedWords.tsx:100
+msgid "Enter a word or tag"
+msgstr "Digite uma palavra ou tag"
+
#: src/view/com/modals/VerifyEmail.tsx:105
msgid "Enter Confirmation Code"
msgstr "Insira o código de confirmação"
-#: src/view/com/modals/ChangePassword.tsx:151
+#: src/view/com/modals/ChangePassword.tsx:153
msgid "Enter the code you received to change your password."
msgstr "Digite o código recebido para alterar sua senha."
-#: src/view/com/modals/ChangeHandle.tsx:371
+#: src/view/com/modals/ChangeHandle.tsx:370
msgid "Enter the domain you want to use"
msgstr "Digite o domínio que você deseja usar"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:107
+#: src/screens/Login/ForgotPasswordForm.tsx:119
msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password."
msgstr "Digite o e-mail que você usou para criar a sua conta. Nós lhe enviaremos um \"código de redefinição\" para que você possa definir uma nova senha."
-#: src/view/com/auth/create/Step1.tsx:247
-#: src/view/com/modals/BirthDateSettings.tsx:74
+#: src/components/dialogs/BirthDateSettings.tsx:108
msgid "Enter your birth date"
msgstr "Insira seu aniversário"
#: src/view/com/modals/Waitlist.tsx:78
-msgid "Enter your email"
-msgstr "Digite seu e-mail"
+#~ msgid "Enter your email"
+#~ msgstr "Digite seu e-mail"
-#: src/view/com/auth/create/Step1.tsx:191
+#: src/screens/Login/ForgotPasswordForm.tsx:105
+#: src/screens/Signup/StepInfo/index.tsx:91
msgid "Enter your email address"
msgstr "Digite seu endereço de e-mail"
@@ -1355,15 +1598,15 @@ msgstr "Digite o novo e-mail acima"
msgid "Enter your new email address below."
msgstr "Digite seu novo endereço de e-mail abaixo."
-#: src/view/com/auth/create/Step2.tsx:188
-msgid "Enter your phone number"
-msgstr "Digite seu número de telefone"
-
-#: src/view/com/auth/login/Login.tsx:99
+#: src/screens/Login/index.tsx:101
msgid "Enter your username and password"
msgstr "Digite seu nome de usuário e senha"
-#: src/view/screens/Search/Search.tsx:109
+#: src/screens/Signup/StepCaptcha/index.tsx:49
+msgid "Error receiving captcha response."
+msgstr "Não foi possível processar o captcha."
+
+#: src/view/screens/Search/Search.tsx:111
msgid "Error:"
msgstr "Erro:"
@@ -1371,24 +1614,36 @@ msgstr "Erro:"
msgid "Everybody"
msgstr "Todos"
-#: src/view/com/modals/ChangeHandle.tsx:150
+#: src/lib/moderation/useReportOptions.ts:66
+msgid "Excessive mentions or replies"
+msgstr "Menções ou respostas excessivas"
+
+#: src/view/com/modals/DeleteAccount.tsx:230
+msgid "Exits account deletion process"
+msgstr "Sair do processo de deleção da conta"
+
+#: src/view/com/modals/ChangeHandle.tsx:151
msgid "Exits handle change process"
msgstr "Sair do processo de trocar usuário"
-#: src/view/com/lightbox/Lightbox.web.tsx:120
+#: src/view/com/modals/crop-image/CropImage.web.tsx:136
+msgid "Exits image cropping process"
+msgstr "Sair do processo de cortar imagem"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:130
msgid "Exits image view"
msgstr "Sair do visualizador de imagem"
#: src/view/com/modals/ListAddRemoveUsers.tsx:88
-#: src/view/shell/desktop/Search.tsx:235
+#: src/view/shell/desktop/Search.tsx:236
msgid "Exits inputting search query"
msgstr "Sair da busca"
#: src/view/com/modals/Waitlist.tsx:138
-msgid "Exits signing up for waitlist with {email}"
-msgstr "Desistir de entrar na lista de espera"
+#~ msgid "Exits signing up for waitlist with {email}"
+#~ msgstr "Desistir de entrar na lista de espera"
-#: src/view/com/lightbox/Lightbox.web.tsx:163
+#: src/view/com/lightbox/Lightbox.web.tsx:183
msgid "Expand alt text"
msgstr "Expandir texto alternativo"
@@ -1397,44 +1652,53 @@ msgstr "Expandir texto alternativo"
msgid "Expand or collapse the full post you are replying to"
msgstr "Mostrar ou esconder o post a que você está respondendo"
-#: src/view/screens/Settings/index.tsx:753
+#: src/lib/moderation/useGlobalLabelStrings.ts:47
+msgid "Explicit or potentially disturbing media."
+msgstr "Imagens explícitas ou potencialmente perturbadoras."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:35
+msgid "Explicit sexual images."
+msgstr "Imagens sexualmente explícitas."
+
+#: src/view/screens/Settings/index.tsx:777
msgid "Export my data"
-msgstr ""
+msgstr "Exportar meus dados"
#: src/view/screens/Settings/ExportCarDialog.tsx:44
-#: src/view/screens/Settings/index.tsx:764
+#: src/view/screens/Settings/index.tsx:788
msgid "Export My Data"
-msgstr ""
+msgstr "Exportar Meus Dados"
-#: src/view/com/modals/EmbedConsent.tsx:64
+#: src/components/dialogs/EmbedConsent.tsx:55
+#: src/components/dialogs/EmbedConsent.tsx:59
msgid "External Media"
msgstr "Mídia Externa"
-#: src/view/com/modals/EmbedConsent.tsx:75
+#: src/components/dialogs/EmbedConsent.tsx:71
#: src/view/screens/PreferencesExternalEmbeds.tsx:66
msgid "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."
msgstr "Mídias externas podem permitir que sites coletem informações sobre você e seu dispositivo. Nenhuma informação é enviada ou solicitada até que você pressione o botão de \"play\"."
-#: src/Navigation.tsx:258
+#: src/Navigation.tsx:275
#: src/view/screens/PreferencesExternalEmbeds.tsx:52
-#: src/view/screens/Settings/index.tsx:657
+#: src/view/screens/Settings/index.tsx:677
msgid "External Media Preferences"
msgstr "Preferências de Mídia Externa"
-#: src/view/screens/Settings/index.tsx:648
+#: src/view/screens/Settings/index.tsx:668
msgid "External media settings"
msgstr "Preferências de mídia externa"
-#: src/view/com/modals/AddAppPasswords.tsx:115
-#: src/view/com/modals/AddAppPasswords.tsx:119
+#: src/view/com/modals/AddAppPasswords.tsx:116
+#: src/view/com/modals/AddAppPasswords.tsx:120
msgid "Failed to create app password."
msgstr "Não foi possível criar senha de aplicativo."
-#: src/view/com/modals/CreateOrEditList.tsx:206
+#: src/view/com/modals/CreateOrEditList.tsx:207
msgid "Failed to create the list. Check your internet connection and try again."
msgstr "Não foi possível criar a lista. Por favor tente novamente."
-#: src/view/com/util/forms/PostDropdownBtn.tsx:88
+#: src/view/com/util/forms/PostDropdownBtn.tsx:125
msgid "Failed to delete post, please try again"
msgstr "Não foi possível excluir o post, por favor tente novamente."
@@ -1443,45 +1707,42 @@ msgstr "Não foi possível excluir o post, por favor tente novamente."
msgid "Failed to load recommended feeds"
msgstr "Falha ao carregar feeds recomendados"
-#: src/Navigation.tsx:192
+#: src/view/com/lightbox/Lightbox.tsx:83
+msgid "Failed to save image: {0}"
+msgstr "Não foi possível salvar a imagem: {0}"
+
+#: src/Navigation.tsx:196
msgid "Feed"
msgstr "Feed"
-#: src/view/com/feeds/FeedSourceCard.tsx:229
+#: src/view/com/feeds/FeedSourceCard.tsx:218
msgid "Feed by {0}"
msgstr "Feed por {0}"
-#: src/view/screens/Feeds.tsx:631
+#: src/view/screens/Feeds.tsx:605
msgid "Feed offline"
msgstr "Feed offline"
#: src/view/com/feeds/FeedPage.tsx:143
-msgid "Feed Preferences"
-msgstr "Preferências de Feeds"
+#~ msgid "Feed Preferences"
+#~ msgstr "Preferências de Feeds"
-#: src/view/shell/desktop/RightNav.tsx:69
-#: src/view/shell/Drawer.tsx:311
+#: src/view/shell/desktop/RightNav.tsx:61
+#: src/view/shell/Drawer.tsx:314
msgid "Feedback"
msgstr "Comentários"
-#: src/Navigation.tsx:442
-#: src/view/screens/Feeds.tsx:548
-#: src/view/screens/Profile.tsx:184
-#: src/view/shell/bottom-bar/BottomBar.tsx:181
-#: src/view/shell/desktop/LeftNav.tsx:342
-#: src/view/shell/Drawer.tsx:476
-#: src/view/shell/Drawer.tsx:477
+#: src/Navigation.tsx:464
+#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:524
+#: src/view/screens/Profile.tsx:194
+#: src/view/shell/bottom-bar/BottomBar.tsx:191
+#: src/view/shell/desktop/LeftNav.tsx:346
+#: src/view/shell/Drawer.tsx:479
+#: src/view/shell/Drawer.tsx:480
msgid "Feeds"
msgstr "Feeds"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
-#~ msgid "Feeds are created by users and can give you entirely new experiences."
-#~ msgstr "Feeds são criados por usuários e podem te dar experiências completamente únicas."
-
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
-#~ msgid "Feeds are created by users and organizations. They offer you varied experiences and suggest content you may like using algorithms."
-#~ msgstr "Feeds são criados por usuários ou organizações. Eles oferecem experiências únicas e podem te sugerir conteúdo usando algoritmos próprios."
-
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:57
msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting."
msgstr "Os feeds são criados por usuários para curadoria de conteúdo. Escolha alguns feeds que você acha interessantes."
@@ -1490,11 +1751,19 @@ msgstr "Os feeds são criados por usuários para curadoria de conteúdo. Escolha
msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information."
msgstr "Os feeds são algoritmos personalizados que os usuários com um pouco de experiência em programação podem criar. <0/> para mais informações."
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:70
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:80
msgid "Feeds can be topical as well!"
msgstr "Feeds podem ser de assuntos específicos também!"
-#: src/screens/Onboarding/StepFinished.tsx:151
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "File Contents"
+msgstr "Conteúdo do arquivo"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:66
+msgid "Filter from feeds"
+msgstr "Filtrar dos feeds"
+
+#: src/screens/Onboarding/StepFinished.tsx:155
msgid "Finalizing"
msgstr "Finalizando"
@@ -1504,20 +1773,20 @@ msgstr "Finalizando"
msgid "Find accounts to follow"
msgstr "Encontre contas para seguir"
-#: src/view/screens/Search/Search.tsx:439
+#: src/view/screens/Search/Search.tsx:442
msgid "Find users on Bluesky"
msgstr "Encontrar usuários no Bluesky"
-#: src/view/screens/Search/Search.tsx:437
+#: src/view/screens/Search/Search.tsx:440
msgid "Find users with the search tool on the right"
msgstr "Encontre usuários com a ferramenta de busca à direita"
-#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:155
msgid "Finding similar accounts..."
msgstr "Procurando contas semelhantes..."
-#: src/view/screens/PreferencesHomeFeed.tsx:111
-msgid "Fine-tune the content you see on your home screen."
+#: src/view/screens/PreferencesFollowingFeed.tsx:111
+msgid "Fine-tune the content you see on your Following feed."
msgstr "Ajuste o conteúdo que você vê na sua tela inicial."
#: src/view/screens/PreferencesThreads.tsx:60
@@ -1528,41 +1797,52 @@ msgstr "Ajuste as threads."
msgid "Fitness"
msgstr "Fitness"
-#: src/screens/Onboarding/StepFinished.tsx:131
+#: src/screens/Onboarding/StepFinished.tsx:135
msgid "Flexible"
msgstr "Flexível"
-#: src/view/com/modals/EditImage.tsx:115
+#: src/view/com/modals/EditImage.tsx:116
msgid "Flip horizontal"
msgstr "Virar horizontalmente"
-#: src/view/com/modals/EditImage.tsx:120
-#: src/view/com/modals/EditImage.tsx:287
+#: src/view/com/modals/EditImage.tsx:121
+#: src/view/com/modals/EditImage.tsx:288
msgid "Flip vertically"
msgstr "Virar verticalmente"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:181
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:512
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:189
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:236
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:146
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
msgid "Follow"
msgstr "Seguir"
-#: src/view/com/profile/FollowButton.tsx:64
+#: src/view/com/profile/FollowButton.tsx:69
msgctxt "action"
msgid "Follow"
msgstr "Seguir"
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:58
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:122
-#: src/view/com/profile/ProfileHeader.tsx:503
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:221
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:128
msgid "Follow {0}"
msgstr "Seguir {0}"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:179
+#: src/view/com/profile/ProfileMenu.tsx:242
+#: src/view/com/profile/ProfileMenu.tsx:253
+msgid "Follow Account"
+msgstr "Seguir Conta"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:187
msgid "Follow All"
msgstr "Seguir Todas"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:174
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:144
+msgid "Follow Back"
+msgstr ""
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:182
msgid "Follow selected accounts and continue to the next step"
msgstr "Siga algumas contas e continue para o próximo passo"
@@ -1570,7 +1850,7 @@ msgstr "Siga algumas contas e continue para o próximo passo"
msgid "Follow some users to get started. We can recommend you more users based on who you find interesting."
msgstr "Comece seguindo alguns usuários. Mais usuários podem ser recomendados com base em quem você acha interessante."
-#: src/view/com/profile/ProfileCard.tsx:194
+#: src/view/com/profile/ProfileCard.tsx:216
msgid "Followed by {0}"
msgstr "Seguido por {0}"
@@ -1578,29 +1858,43 @@ msgstr "Seguido por {0}"
msgid "Followed users"
msgstr "Usuários seguidos"
-#: src/view/screens/PreferencesHomeFeed.tsx:154
+#: src/view/screens/PreferencesFollowingFeed.tsx:154
msgid "Followed users only"
msgstr "Somente usuários seguidos"
-#: src/view/com/notifications/FeedItem.tsx:166
+#: src/view/com/notifications/FeedItem.tsx:170
msgid "followed you"
msgstr "seguiu você"
+#: src/view/com/profile/ProfileFollowers.tsx:104
#: src/view/screens/ProfileFollowers.tsx:25
msgid "Followers"
msgstr "Seguidores"
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:494
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:234
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:149
+#: src/view/com/profile/ProfileFollows.tsx:104
#: src/view/screens/ProfileFollows.tsx:25
msgid "Following"
msgstr "Seguindo"
-#: src/view/com/profile/ProfileHeader.tsx:148
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:93
msgid "Following {0}"
msgstr "Seguindo {0}"
-#: src/view/com/profile/ProfileHeader.tsx:545
+#: src/view/screens/Settings/index.tsx:553
+msgid "Following feed preferences"
+msgstr "Configurações do feed principal"
+
+#: src/Navigation.tsx:262
+#: src/view/com/home/HomeHeaderLayout.web.tsx:50
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:84
+#: src/view/screens/PreferencesFollowingFeed.tsx:104
+#: src/view/screens/Settings/index.tsx:562
+msgid "Following Feed Preferences"
+msgstr "Configurações do feed principal"
+
+#: src/screens/Profile/Header/Handle.tsx:24
msgid "Follows you"
msgstr "Segue você"
@@ -1612,28 +1906,45 @@ msgstr "Segue Você"
msgid "Food"
msgstr "Comida"
-#: src/view/com/modals/DeleteAccount.tsx:111
+#: src/view/com/modals/DeleteAccount.tsx:110
msgid "For security reasons, we'll need to send a confirmation code to your email address."
msgstr "Por motivos de segurança, precisamos enviar um código de confirmação para seu endereço de e-mail."
-#: src/view/com/modals/AddAppPasswords.tsx:209
+#: src/view/com/modals/AddAppPasswords.tsx:210
msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one."
msgstr "Por motivos de segurança, você não poderá ver esta senha novamente. Se você perder esta senha, terá que gerar uma nova."
-#: src/view/com/auth/login/LoginForm.tsx:241
-msgid "Forgot"
-msgstr "Esqueci"
+#: src/view/com/auth/login/LoginForm.tsx:244
+#~ msgid "Forgot"
+#~ msgstr "Esqueci"
-#: src/view/com/auth/login/LoginForm.tsx:238
-msgid "Forgot password"
-msgstr "Esqueci a senha"
+#: src/view/com/auth/login/LoginForm.tsx:241
+#~ msgid "Forgot password"
+#~ msgstr "Esqueci a senha"
-#: src/view/com/auth/login/Login.tsx:127
-#: src/view/com/auth/login/Login.tsx:143
+#: src/screens/Login/index.tsx:129
+#: src/screens/Login/index.tsx:144
msgid "Forgot Password"
msgstr "Esqueci a Senha"
-#: src/view/com/posts/FeedItem.tsx:189
+#: src/screens/Login/LoginForm.tsx:201
+msgid "Forgot password?"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:212
+msgid "Forgot?"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:52
+msgid "Frequently Posts Unwanted Content"
+msgstr "Frequentemente Posta Conteúdo Indesejado"
+
+#: src/screens/Hashtag.tsx:109
+#: src/screens/Hashtag.tsx:149
+msgid "From @{sanitizedAuthor}"
+msgstr "De @{sanitizedAuthor}"
+
+#: src/view/com/posts/FeedItem.tsx:179
msgctxt "from-feed"
msgid "From <0/>"
msgstr "Por <0/>"
@@ -1647,100 +1958,144 @@ msgstr "Galeria"
msgid "Get Started"
msgstr "Vamos começar"
-#: src/view/com/auth/LoggedOut.tsx:81
+#: src/lib/moderation/useReportOptions.ts:37
+msgid "Glaring violations of law or terms of service"
+msgstr "Violações flagrantes da lei ou dos termos de serviço"
+
+#: src/components/moderation/ScreenHider.tsx:151
+#: src/components/moderation/ScreenHider.tsx:160
#: src/view/com/auth/LoggedOut.tsx:82
-#: src/view/com/util/moderation/ScreenHider.tsx:123
-#: src/view/shell/desktop/LeftNav.tsx:104
+#: src/view/com/auth/LoggedOut.tsx:83
+#: src/view/screens/NotFound.tsx:55
+#: src/view/screens/ProfileFeed.tsx:112
+#: src/view/screens/ProfileList.tsx:916
+#: src/view/shell/desktop/LeftNav.tsx:108
msgid "Go back"
msgstr "Voltar"
-#: src/view/screens/ProfileFeed.tsx:105
-#: src/view/screens/ProfileFeed.tsx:110
-#: src/view/screens/ProfileList.tsx:897
-#: src/view/screens/ProfileList.tsx:902
+#: src/components/Error.tsx:91
+#: src/screens/Profile/ErrorState.tsx:62
+#: src/screens/Profile/ErrorState.tsx:66
+#: src/view/screens/NotFound.tsx:54
+#: src/view/screens/ProfileFeed.tsx:117
+#: src/view/screens/ProfileList.tsx:921
msgid "Go Back"
msgstr "Voltar"
-#: src/screens/Onboarding/Layout.tsx:104
-#: src/screens/Onboarding/Layout.tsx:193
+#: src/components/ReportDialog/SelectReportOptionView.tsx:73
+#: src/components/ReportDialog/SubmitView.tsx:104
+#: src/screens/Onboarding/Layout.tsx:102
+#: src/screens/Onboarding/Layout.tsx:191
+#: src/screens/Signup/index.tsx:173
msgid "Go back to previous step"
msgstr "Voltar para o passo anterior"
-#: src/view/screens/Search/Search.tsx:724
-#: src/view/shell/desktop/Search.tsx:262
+#: src/view/screens/NotFound.tsx:55
+msgid "Go home"
+msgstr "Voltar para a tela inicial"
+
+#: src/view/screens/NotFound.tsx:54
+msgid "Go Home"
+msgstr "Voltar para a tela inicial"
+
+#: src/view/screens/Search/Search.tsx:749
+#: src/view/shell/desktop/Search.tsx:263
msgid "Go to @{queryMaybeHandle}"
msgstr "Ir para @{queryMaybleHandle}"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:189
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:218
-#: src/view/com/auth/login/LoginForm.tsx:288
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:195
-#: src/view/com/modals/ChangePassword.tsx:165
+#: src/screens/Login/ForgotPasswordForm.tsx:172
+#: src/view/com/modals/ChangePassword.tsx:167
msgid "Go to next"
msgstr "Próximo"
-#: src/view/com/modals/ChangeHandle.tsx:265
+#: src/lib/moderation/useGlobalLabelStrings.ts:46
+msgid "Graphic Media"
+msgstr "Conteúdo Gráfico"
+
+#: src/view/com/modals/ChangeHandle.tsx:266
msgid "Handle"
msgstr "Usuário"
-#: src/view/com/auth/create/CreateAccount.tsx:197
+#: src/lib/moderation/useReportOptions.ts:32
+msgid "Harassment, trolling, or intolerance"
+msgstr "Assédio, intolerância ou \"trollagem\""
+
+#: src/Navigation.tsx:282
+msgid "Hashtag"
+msgstr "Hashtag"
+
+#: src/components/RichText.tsx:188
+#~ msgid "Hashtag: {tag}"
+#~ msgstr "Hashtag: {tag}"
+
+#: src/components/RichText.tsx:191
+msgid "Hashtag: #{tag}"
+msgstr "Hashtag: #{tag}"
+
+#: src/screens/Signup/index.tsx:217
msgid "Having trouble?"
msgstr "Precisa de ajuda?"
-#: src/view/shell/desktop/RightNav.tsx:98
-#: src/view/shell/Drawer.tsx:321
+#: src/view/shell/desktop/RightNav.tsx:90
+#: src/view/shell/Drawer.tsx:324
msgid "Help"
msgstr "Ajuda"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:132
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:140
msgid "Here are some accounts for you to follow"
msgstr "Aqui estão algumas contas para você seguir"
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:79
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:89
msgid "Here are some popular topical feeds. You can choose to follow as many as you like."
msgstr "Aqui estão alguns feeds de assuntos. Você pode seguir quantos quiser."
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:74
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:84
msgid "Here are some topical feeds based on your interests: {interestsText}. You can choose to follow as many as you like."
msgstr "Aqui estão alguns feeds de assuntos baseados nos seus interesses: {interestsText}. Você pode seguir quantos quiser."
-#: src/view/com/modals/AddAppPasswords.tsx:153
+#: src/view/com/modals/AddAppPasswords.tsx:154
msgid "Here is your app password."
msgstr "Aqui está a sua senha de aplicativo."
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:41
-#: src/view/com/modals/ContentFilteringSettings.tsx:251
-#: src/view/com/util/moderation/ContentHider.tsx:105
-#: src/view/com/util/moderation/PostHider.tsx:108
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:134
+#: src/components/moderation/PostHider.tsx:107
+#: src/lib/moderation/useLabelBehaviorDescription.ts:15
+#: src/lib/moderation/useLabelBehaviorDescription.ts:20
+#: src/lib/moderation/useLabelBehaviorDescription.ts:25
+#: src/lib/moderation/useLabelBehaviorDescription.ts:30
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:52
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:76
+#: src/view/com/util/forms/PostDropdownBtn.tsx:328
msgid "Hide"
msgstr "Ocultar"
-#: src/view/com/modals/ContentFilteringSettings.tsx:224
-#: src/view/com/notifications/FeedItem.tsx:325
+#: src/view/com/notifications/FeedItem.tsx:329
msgctxt "action"
msgid "Hide"
msgstr "Esconder"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:187
+#: src/view/com/util/forms/PostDropdownBtn.tsx:276
+#: src/view/com/util/forms/PostDropdownBtn.tsx:278
msgid "Hide post"
msgstr "Ocultar post"
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:67
+#: src/components/moderation/PostHider.tsx:64
msgid "Hide the content"
msgstr "Esconder o conteúdo"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:191
+#: src/view/com/util/forms/PostDropdownBtn.tsx:325
msgid "Hide this post?"
msgstr "Ocultar este post?"
-#: src/view/com/notifications/FeedItem.tsx:315
+#: src/view/com/notifications/FeedItem.tsx:319
msgid "Hide user list"
msgstr "Ocultar lista de usuários"
-#: src/view/com/profile/ProfileHeader.tsx:486
-msgid "Hides posts from {0} in your feed"
-msgstr "Esconder posts de {0} no seu feed"
+#: src/view/com/profile/ProfileHeader.tsx:487
+#~ msgid "Hides posts from {0} in your feed"
+#~ msgstr "Esconder posts de {0} no seu feed"
#: src/view/com/posts/FeedErrorMessage.tsx:111
msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue."
@@ -1762,11 +2117,19 @@ msgstr "Hmm, o servidor do feed teve algum problema. Por favor, avise o criador
msgid "Hmm, we're having trouble finding this feed. It may have been deleted."
msgstr "Hmm, estamos com problemas para encontrar este feed. Ele pode ter sido excluído."
-#: src/Navigation.tsx:432
-#: src/view/shell/bottom-bar/BottomBar.tsx:137
-#: src/view/shell/desktop/LeftNav.tsx:306
-#: src/view/shell/Drawer.tsx:398
-#: src/view/shell/Drawer.tsx:399
+#: src/screens/Moderation/index.tsx:59
+msgid "Hmmmm, it seems we're having trouble loading this data. See below for more details. If this issue persists, please contact us."
+msgstr "Hmmmm, parece que estamos com problemas pra carregar isso. Veja mais detalhes abaixo. Se o problema continuar, por favor, entre em contato."
+
+#: src/screens/Profile/ErrorState.tsx:31
+msgid "Hmmmm, we couldn't load that moderation service."
+msgstr "Hmmmm, não foi possível carregar este serviço de moderação."
+
+#: src/Navigation.tsx:454
+#: src/view/shell/bottom-bar/BottomBar.tsx:147
+#: src/view/shell/desktop/LeftNav.tsx:310
+#: src/view/shell/Drawer.tsx:401
+#: src/view/shell/Drawer.tsx:402
msgid "Home"
msgstr "Página Inicial"
@@ -1774,11 +2137,17 @@ msgstr "Página Inicial"
#: src/view/com/pager/FeedsTabBarMobile.tsx:123
#: src/view/screens/PreferencesHomeFeed.tsx:104
#: src/view/screens/Settings/index.tsx:543
-msgid "Home Feed Preferences"
-msgstr "Preferências da Página Inicial"
+#~ msgid "Home Feed Preferences"
+#~ msgstr "Preferências da Página Inicial"
+
+#: src/view/com/modals/ChangeHandle.tsx:420
+msgid "Host:"
+msgstr "Host:"
-#: src/view/com/auth/create/Step1.tsx:78
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:120
+#: src/screens/Login/ForgotPasswordForm.tsx:89
+#: src/screens/Login/LoginForm.tsx:134
+#: src/screens/Signup/StepInfo/index.tsx:40
+#: src/view/com/modals/ChangeHandle.tsx:281
msgid "Hosting provider"
msgstr "Provedor de hospedagem"
@@ -1794,11 +2163,11 @@ msgstr "Eu tenho um código"
msgid "I have a confirmation code"
msgstr "Eu tenho um código"
-#: src/view/com/modals/ChangeHandle.tsx:283
+#: src/view/com/modals/ChangeHandle.tsx:284
msgid "I have my own domain"
msgstr "Eu tenho meu próprio domínio"
-#: src/view/com/lightbox/Lightbox.web.tsx:165
+#: src/view/com/lightbox/Lightbox.web.tsx:185
msgid "If alt text is long, toggles alt text expanded state"
msgstr "Se o texto alternativo é longo, mostra o texto completo"
@@ -1806,189 +2175,233 @@ msgstr "Se o texto alternativo é longo, mostra o texto completo"
msgid "If none are selected, suitable for all ages."
msgstr "Se nenhum for selecionado, adequado para todas as idades."
-#: src/view/com/modals/ChangePassword.tsx:146
+#: src/screens/Signup/StepInfo/Policies.tsx:83
+msgid "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."
+msgstr "Se você ainda não é um adulto de acordo com as leis do seu país, seu responsável ou guardião legal deve ler estes Termos por você."
+
+#: src/view/screens/ProfileList.tsx:610
+msgid "If you delete this list, you won't be able to recover it."
+msgstr "Se você deletar esta lista, você não poderá recuperá-la."
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:316
+msgid "If you remove this post, you won't be able to recover it."
+msgstr "Se você remover este post, você não poderá recuperá-la."
+
+#: src/view/com/modals/ChangePassword.tsx:148
msgid "If you want to change your password, we will send you a code to verify that this is your account."
msgstr "Se você quiser alterar sua senha, enviaremos um código que para verificar sua identidade."
+#: src/lib/moderation/useReportOptions.ts:36
+msgid "Illegal and Urgent"
+msgstr "Ilegal e Urgente"
+
#: src/view/com/util/images/Gallery.tsx:38
msgid "Image"
msgstr "Imagem"
-#: src/view/com/modals/AltImage.tsx:120
+#: src/view/com/modals/AltImage.tsx:121
msgid "Image alt text"
msgstr "Texto alternativo da imagem"
#: src/view/com/util/UserAvatar.tsx:311
#: src/view/com/util/UserBanner.tsx:118
-msgid "Image options"
-msgstr "Opções de imagem"
+#~ msgid "Image options"
+#~ msgstr "Opções de imagem"
+
+#: src/lib/moderation/useReportOptions.ts:47
+msgid "Impersonation or false claims about identity or affiliation"
+msgstr "Falsificação de identidade ou alegações falsas sobre identidade ou filiação"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:138
+#: src/screens/Login/SetNewPasswordForm.tsx:127
msgid "Input code sent to your email for password reset"
msgstr "Insira o código enviado para o seu e-mail para redefinir sua senha"
-#: src/view/com/modals/DeleteAccount.tsx:184
+#: src/view/com/modals/DeleteAccount.tsx:183
msgid "Input confirmation code for account deletion"
msgstr "Insira o código de confirmação para excluir sua conta"
-#: src/view/com/auth/create/Step1.tsx:196
-msgid "Input email for Bluesky account"
-msgstr "Insira o e-mail para a sua conta do Bluesky"
+#: src/view/com/auth/create/Step1.tsx:177
+#~ msgid "Input email for Bluesky account"
+#~ msgstr "Insira o e-mail para a sua conta do Bluesky"
-#: src/view/com/auth/create/Step1.tsx:154
-msgid "Input invite code to proceed"
-msgstr "Insira o convite para continuar"
+#: src/view/com/auth/create/Step1.tsx:151
+#~ msgid "Input invite code to proceed"
+#~ msgstr "Insira o convite para continuar"
-#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/AddAppPasswords.tsx:181
msgid "Input name for app password"
msgstr "Insira um nome para a senha de aplicativo"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:162
+#: src/screens/Login/SetNewPasswordForm.tsx:151
msgid "Input new password"
msgstr "Insira a nova senha"
-#: src/view/com/modals/DeleteAccount.tsx:203
+#: src/view/com/modals/DeleteAccount.tsx:202
msgid "Input password for account deletion"
msgstr "Insira a senha para excluir a conta"
-#: src/view/com/auth/create/Step2.tsx:196
-msgid "Input phone number for SMS verification"
-msgstr "Insira o número de telefone para verificação via SMS"
-
-#: src/view/com/auth/login/LoginForm.tsx:230
+#: src/screens/Login/LoginForm.tsx:195
msgid "Input the password tied to {identifier}"
msgstr "Insira a senha da conta {identifier}"
-#: src/view/com/auth/login/LoginForm.tsx:197
+#: src/screens/Login/LoginForm.tsx:168
msgid "Input the username or email address you used at signup"
msgstr "Insira o usuário ou e-mail que você cadastrou"
-#: src/view/com/auth/create/Step2.tsx:271
-msgid "Input the verification code we have texted to you"
-msgstr "Insira o código de verificação que enviamos para você"
-
#: src/view/com/modals/Waitlist.tsx:90
-msgid "Input your email to get on the Bluesky waitlist"
-msgstr "Insira seu e-mail para entrar na lista de espera do Bluesky"
+#~ msgid "Input your email to get on the Bluesky waitlist"
+#~ msgstr "Insira seu e-mail para entrar na lista de espera do Bluesky"
-#: src/view/com/auth/login/LoginForm.tsx:229
+#: src/screens/Login/LoginForm.tsx:194
msgid "Input your password"
msgstr "Insira sua senha"
-#: src/view/com/auth/create/Step3.tsx:42
+#: src/view/com/modals/ChangeHandle.tsx:389
+msgid "Input your preferred hosting provider"
+msgstr "Insira seu provedor de hospedagem"
+
+#: src/screens/Signup/StepHandle.tsx:62
msgid "Input your user handle"
msgstr "Insira o usuário"
-#: src/view/com/post-thread/PostThreadItem.tsx:225
+#: src/view/com/post-thread/PostThreadItem.tsx:221
msgid "Invalid or unsupported post record"
msgstr "Post inválido"
-#: src/view/com/auth/login/LoginForm.tsx:113
+#: src/screens/Login/LoginForm.tsx:114
msgid "Invalid username or password"
msgstr "Credenciais inválidas"
-#: src/view/screens/Settings.tsx:411
-#~ msgid "Invite"
-#~ msgstr "Convidar"
-
-#: src/view/com/modals/InviteCodes.tsx:93
+#: src/view/com/modals/InviteCodes.tsx:94
msgid "Invite a Friend"
msgstr "Convide um Amigo"
-#: src/view/com/auth/create/Step1.tsx:144
-#: src/view/com/auth/create/Step1.tsx:153
+#: src/screens/Signup/StepInfo/index.tsx:58
msgid "Invite code"
msgstr "Convite"
-#: src/view/com/auth/create/state.ts:199
+#: src/screens/Signup/state.ts:278
msgid "Invite code not accepted. Check that you input it correctly and try again."
msgstr "Convite inválido. Verifique se você o inseriu corretamente e tente novamente."
-#: src/view/com/modals/InviteCodes.tsx:170
+#: src/view/com/modals/InviteCodes.tsx:171
msgid "Invite codes: {0} available"
msgstr "Convites: {0} disponíveis"
-#: src/view/shell/Drawer.tsx:645
-#~ msgid "Invite codes: {invitesAvailable} available"
-#~ msgstr "Convites: {invitesAvailable} disponível"
-
-#: src/view/com/modals/InviteCodes.tsx:169
+#: src/view/com/modals/InviteCodes.tsx:170
msgid "Invite codes: 1 available"
msgstr "Convites: 1 disponível"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:64
+#: src/screens/Onboarding/StepFollowingFeed.tsx:65
msgid "It shows posts from the people you follow as they happen."
msgstr "Mostra os posts de quem você segue conforme acontecem."
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:99
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:104
+#: src/view/com/auth/SplashScreen.web.tsx:172
msgid "Jobs"
msgstr "Carreiras"
#: src/view/com/modals/Waitlist.tsx:67
-msgid "Join the waitlist"
-msgstr "Junte-se à lista de espera"
+#~ msgid "Join the waitlist"
+#~ msgstr "Junte-se à lista de espera"
-#: src/view/com/auth/create/Step1.tsx:170
#: src/view/com/auth/create/Step1.tsx:174
-msgid "Join the waitlist."
-msgstr "Junte-se à lista de espera."
+#: src/view/com/auth/create/Step1.tsx:178
+#~ msgid "Join the waitlist."
+#~ msgstr "Junte-se à lista de espera."
#: src/view/com/modals/Waitlist.tsx:128
-msgid "Join Waitlist"
-msgstr "Junte-se à Lista de Espera"
+#~ msgid "Join Waitlist"
+#~ msgstr "Junte-se à Lista de Espera"
#: src/screens/Onboarding/index.tsx:24
msgid "Journalism"
msgstr "Jornalismo"
+#: src/components/moderation/LabelsOnMe.tsx:59
+msgid "label has been placed on this {labelTarget}"
+msgstr "rótulo aplicado neste {labelTarget}"
+
+#: src/components/moderation/ContentHider.tsx:144
+msgid "Labeled by {0}."
+msgstr "Rotulado por {0}."
+
+#: src/components/moderation/ContentHider.tsx:142
+msgid "Labeled by the author."
+msgstr "Rotulado pelo autor."
+
+#: src/view/screens/Profile.tsx:188
+msgid "Labels"
+msgstr "Rótulos"
+
+#: src/screens/Profile/Sections/Labels.tsx:142
+msgid "Labels are annotations on users and content. They can be used to hide, warn, and categorize the network."
+msgstr "Rótulos são identificações aplicadas sobre perfis e conteúdos. Eles são utilizados para esconder, avisar e categorizar o conteúdo da rede."
+
+#: src/components/moderation/LabelsOnMe.tsx:61
+msgid "labels have been placed on this {labelTarget}"
+msgstr "rótulos foram aplicados neste {labelTarget}"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:62
+msgid "Labels on your account"
+msgstr "Rótulos sobre sua conta"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:64
+msgid "Labels on your content"
+msgstr "Rótulos sobre seu conteúdo"
+
#: src/view/com/composer/select-language/SelectLangBtn.tsx:104
msgid "Language selection"
msgstr "Seleção de idioma"
-#: src/view/screens/Settings/index.tsx:594
+#: src/view/screens/Settings/index.tsx:614
msgid "Language settings"
msgstr "Configuração de Idioma"
-#: src/Navigation.tsx:140
+#: src/Navigation.tsx:144
#: src/view/screens/LanguageSettings.tsx:89
msgid "Language Settings"
msgstr "Configurações de Idiomas"
-#: src/view/screens/Settings/index.tsx:603
+#: src/view/screens/Settings/index.tsx:623
msgid "Languages"
msgstr "Idiomas"
#: src/view/com/auth/create/StepHeader.tsx:20
-msgid "Last step!"
-msgstr "Último passo!"
+#~ msgid "Last step!"
+#~ msgstr "Último passo!"
#: src/view/com/util/moderation/ContentHider.tsx:103
-msgid "Learn more"
-msgstr "Saiba mais"
+#~ msgid "Learn more"
+#~ msgstr "Saiba mais"
-#: src/view/com/util/moderation/PostAlerts.tsx:47
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:65
-#: src/view/com/util/moderation/ScreenHider.tsx:104
+#: src/components/moderation/ScreenHider.tsx:136
msgid "Learn More"
msgstr "Saiba Mais"
-#: src/view/com/util/moderation/ContentHider.tsx:85
-#: src/view/com/util/moderation/PostAlerts.tsx:40
-#: src/view/com/util/moderation/PostHider.tsx:78
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:49
-#: src/view/com/util/moderation/ScreenHider.tsx:101
+#: src/components/moderation/ContentHider.tsx:65
+#: src/components/moderation/ContentHider.tsx:128
+msgid "Learn more about the moderation applied to this content."
+msgstr "Saiba mais sobre a decisão de moderação aplicada neste conteúdo."
+
+#: src/components/moderation/PostHider.tsx:85
+#: src/components/moderation/ScreenHider.tsx:125
msgid "Learn more about this warning"
msgstr "Saiba mais sobre este aviso"
-#: src/view/screens/Moderation.tsx:243
+#: src/screens/Moderation/index.tsx:549
msgid "Learn more about what is public on Bluesky."
msgstr "Saiba mais sobre o que é público no Bluesky."
+#: src/components/moderation/ContentHider.tsx:152
+msgid "Learn more."
+msgstr "Saiba mais."
+
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82
msgid "Leave them all unchecked to see any language."
msgstr "Deixe todos desmarcados para ver qualquer idioma."
-#: src/view/com/modals/LinkWarning.tsx:51
+#: src/view/com/modals/LinkWarning.tsx:65
msgid "Leaving Bluesky"
msgstr "Saindo do Bluesky"
@@ -1996,63 +2409,72 @@ msgstr "Saindo do Bluesky"
msgid "left to go."
msgstr "na sua frente."
-#: src/view/screens/Settings/index.tsx:278
+#: src/view/screens/Settings/index.tsx:296
msgid "Legacy storage cleared, you need to restart the app now."
msgstr "Armazenamento limpo, você precisa reiniciar o app agora."
-#: src/view/com/auth/login/Login.tsx:128
-#: src/view/com/auth/login/Login.tsx:144
+#: src/screens/Login/index.tsx:130
+#: src/screens/Login/index.tsx:145
msgid "Let's get your password reset!"
msgstr "Vamos redefinir sua senha!"
-#: src/screens/Onboarding/StepFinished.tsx:151
+#: src/screens/Onboarding/StepFinished.tsx:155
msgid "Let's go!"
msgstr "Vamos lá!"
#: src/view/com/util/UserAvatar.tsx:248
#: src/view/com/util/UserBanner.tsx:62
-msgid "Library"
-msgstr "Biblioteca"
+#~ msgid "Library"
+#~ msgstr "Biblioteca"
-#: src/view/screens/Settings/index.tsx:479
+#: src/view/screens/Settings/index.tsx:498
msgid "Light"
msgstr "Claro"
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Like"
msgstr "Curtir"
-#: src/view/screens/ProfileFeed.tsx:591
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:258
+#: src/view/screens/ProfileFeed.tsx:573
msgid "Like this feed"
msgstr "Curtir este feed"
-#: src/Navigation.tsx:197
+#: src/components/LikesDialog.tsx:87
+#: src/Navigation.tsx:201
+#: src/Navigation.tsx:206
msgid "Liked by"
msgstr "Curtido por"
+#: src/screens/Profile/ProfileLabelerLikedBy.tsx:29
#: src/view/screens/PostLikedBy.tsx:27
#: src/view/screens/ProfileFeedLikedBy.tsx:27
msgid "Liked By"
msgstr "Curtido Por"
-#: src/view/com/feeds/FeedSourceCard.tsx:277
+#: src/view/com/feeds/FeedSourceCard.tsx:268
msgid "Liked by {0} {1}"
msgstr "Curtido por {0} {1}"
-#: src/view/screens/ProfileFeed.tsx:606
+#: src/components/LabelingServiceCard/index.tsx:72
+msgid "Liked by {count} {0}"
+msgstr "Curtido por {count} {0}"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:278
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:292
+#: src/view/screens/ProfileFeed.tsx:588
msgid "Liked by {likeCount} {0}"
msgstr "Curtido por {likeCount} {0}"
-#: src/view/com/notifications/FeedItem.tsx:170
+#: src/view/com/notifications/FeedItem.tsx:174
msgid "liked your custom feed"
msgstr "curtiram seu feed"
-#: src/view/com/notifications/FeedItem.tsx:155
+#: src/view/com/notifications/FeedItem.tsx:159
msgid "liked your post"
msgstr "curtiu seu post"
-#: src/view/screens/Profile.tsx:183
+#: src/view/screens/Profile.tsx:193
msgid "Likes"
msgstr "Curtidas"
@@ -2060,67 +2482,68 @@ msgstr "Curtidas"
msgid "Likes on this post"
msgstr "Curtidas neste post"
-#: src/Navigation.tsx:166
+#: src/Navigation.tsx:170
msgid "List"
msgstr "Lista"
-#: src/view/com/modals/CreateOrEditList.tsx:261
+#: src/view/com/modals/CreateOrEditList.tsx:262
msgid "List Avatar"
msgstr "Avatar da lista"
-#: src/view/screens/ProfileList.tsx:323
+#: src/view/screens/ProfileList.tsx:311
msgid "List blocked"
msgstr "Lista bloqueada"
-#: src/view/com/feeds/FeedSourceCard.tsx:231
+#: src/view/com/feeds/FeedSourceCard.tsx:220
msgid "List by {0}"
msgstr "Lista por {0}"
-#: src/view/screens/ProfileList.tsx:377
+#: src/view/screens/ProfileList.tsx:355
msgid "List deleted"
msgstr "Lista excluída"
-#: src/view/screens/ProfileList.tsx:282
+#: src/view/screens/ProfileList.tsx:283
msgid "List muted"
msgstr "Lista silenciada"
-#: src/view/com/modals/CreateOrEditList.tsx:275
+#: src/view/com/modals/CreateOrEditList.tsx:276
msgid "List Name"
msgstr "Nome da lista"
-#: src/view/screens/ProfileList.tsx:342
+#: src/view/screens/ProfileList.tsx:325
msgid "List unblocked"
msgstr "Lista desbloqueada"
-#: src/view/screens/ProfileList.tsx:301
+#: src/view/screens/ProfileList.tsx:297
msgid "List unmuted"
msgstr "Lista dessilenciada"
-#: src/Navigation.tsx:110
-#: src/view/screens/Profile.tsx:185
-#: src/view/shell/desktop/LeftNav.tsx:379
-#: src/view/shell/Drawer.tsx:492
-#: src/view/shell/Drawer.tsx:493
+#: src/Navigation.tsx:114
+#: src/view/screens/Profile.tsx:189
+#: src/view/screens/Profile.tsx:195
+#: src/view/shell/desktop/LeftNav.tsx:383
+#: src/view/shell/Drawer.tsx:495
+#: src/view/shell/Drawer.tsx:496
msgid "Lists"
msgstr "Listas"
-#: src/view/com/post-thread/PostThread.tsx:276
-#: src/view/com/post-thread/PostThread.tsx:284
-msgid "Load more posts"
-msgstr "Carregar mais posts"
+#: src/view/com/post-thread/PostThread.tsx:333
+#: src/view/com/post-thread/PostThread.tsx:341
+#~ msgid "Load more posts"
+#~ msgstr "Carregar mais posts"
#: src/view/screens/Notifications.tsx:159
msgid "Load new notifications"
msgstr "Carregar novas notificações"
-#: src/view/com/feeds/FeedPage.tsx:190
-#: src/view/screens/Profile.tsx:440
-#: src/view/screens/ProfileFeed.tsx:494
-#: src/view/screens/ProfileList.tsx:680
+#: src/screens/Profile/Sections/Feed.tsx:70
+#: src/view/com/feeds/FeedPage.tsx:138
+#: src/view/screens/ProfileFeed.tsx:496
+#: src/view/screens/ProfileList.tsx:695
msgid "Load new posts"
msgstr "Carregar novos posts"
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:99
msgid "Loading..."
msgstr "Carregando..."
@@ -2128,7 +2551,7 @@ msgstr "Carregando..."
#~ msgid "Local dev server"
#~ msgstr "Servidor de desenvolvimento local"
-#: src/Navigation.tsx:207
+#: src/Navigation.tsx:221
msgid "Log"
msgstr "Registros"
@@ -2139,19 +2562,35 @@ msgstr "Registros"
msgid "Log out"
msgstr "Sair"
-#: src/view/screens/Moderation.tsx:136
+#: src/screens/Moderation/index.tsx:442
msgid "Logged-out visibility"
msgstr "Visibilidade do seu perfil"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:133
+#: src/components/AccountList.tsx:54
msgid "Login to account that is not listed"
msgstr "Fazer login em uma conta que não está listada"
-#: src/view/com/modals/LinkWarning.tsx:65
+#: src/screens/Login/SetNewPasswordForm.tsx:116
+msgid "Looks like XXXXX-XXXXX"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:79
msgid "Make sure this is where you intend to go!"
msgstr "Certifique-se de onde está indo!"
-#: src/view/screens/Profile.tsx:182
+#: src/components/dialogs/MutedWords.tsx:82
+msgid "Manage your muted words and tags"
+msgstr "Gerencie suas palavras/tags silenciadas"
+
+#: src/view/com/auth/create/Step2.tsx:118
+#~ msgid "May not be longer than 253 characters"
+#~ msgstr "Não pode ter mais que 253 caracteres"
+
+#: src/view/com/auth/create/Step2.tsx:109
+#~ msgid "May only contain letters and numbers"
+#~ msgstr "Só pode conter letras e números"
+
+#: src/view/screens/Profile.tsx:192
msgid "Media"
msgstr "Mídia"
@@ -2163,115 +2602,178 @@ msgstr "usuários mencionados"
msgid "Mentioned users"
msgstr "Usuários mencionados"
-#: src/view/com/util/ViewHeader.tsx:81
-#: src/view/screens/Search/Search.tsx:623
+#: src/view/com/util/ViewHeader.tsx:87
+#: src/view/screens/Search/Search.tsx:648
msgid "Menu"
msgstr "Menu"
-#: src/view/com/posts/FeedErrorMessage.tsx:197
+#: src/view/com/posts/FeedErrorMessage.tsx:192
msgid "Message from server: {0}"
msgstr "Mensagem do servidor: {0}"
-#: src/Navigation.tsx:115
-#: src/view/screens/Moderation.tsx:64
-#: src/view/screens/Settings/index.tsx:625
-#: src/view/shell/desktop/LeftNav.tsx:397
-#: src/view/shell/Drawer.tsx:511
-#: src/view/shell/Drawer.tsx:512
+#: src/lib/moderation/useReportOptions.ts:45
+msgid "Misleading Account"
+msgstr "Conta Enganosa"
+
+#: src/Navigation.tsx:119
+#: src/screens/Moderation/index.tsx:104
+#: src/view/screens/Settings/index.tsx:645
+#: src/view/shell/desktop/LeftNav.tsx:401
+#: src/view/shell/Drawer.tsx:514
+#: src/view/shell/Drawer.tsx:515
msgid "Moderation"
msgstr "Moderação"
-#: src/view/com/lists/ListCard.tsx:92
+#: src/components/moderation/ModerationDetailsDialog.tsx:112
+msgid "Moderation details"
+msgstr "Detalhes da moderação"
+
+#: src/view/com/lists/ListCard.tsx:93
#: src/view/com/modals/UserAddRemoveLists.tsx:206
msgid "Moderation list by {0}"
msgstr "Lista de moderação por {0}"
-#: src/view/screens/ProfileList.tsx:774
+#: src/view/screens/ProfileList.tsx:789
msgid "Moderation list by <0/>"
msgstr "Lista de moderação por <0/>"
-#: src/view/com/lists/ListCard.tsx:90
+#: src/view/com/lists/ListCard.tsx:91
#: src/view/com/modals/UserAddRemoveLists.tsx:204
-#: src/view/screens/ProfileList.tsx:772
+#: src/view/screens/ProfileList.tsx:787
msgid "Moderation list by you"
msgstr "Lista de moderação por você"
-#: src/view/com/modals/CreateOrEditList.tsx:197
+#: src/view/com/modals/CreateOrEditList.tsx:198
msgid "Moderation list created"
msgstr "Lista de moderação criada"
-#: src/view/com/modals/CreateOrEditList.tsx:183
+#: src/view/com/modals/CreateOrEditList.tsx:184
msgid "Moderation list updated"
msgstr "Lista de moderação criada"
-#: src/view/screens/Moderation.tsx:95
+#: src/screens/Moderation/index.tsx:243
msgid "Moderation lists"
msgstr "Listas de moderação"
-#: src/Navigation.tsx:120
+#: src/Navigation.tsx:124
#: src/view/screens/ModerationModlists.tsx:58
msgid "Moderation Lists"
msgstr "Listas de Moderação"
-#: src/view/screens/Settings/index.tsx:619
+#: src/view/screens/Settings/index.tsx:639
msgid "Moderation settings"
msgstr "Moderação"
-#: src/view/com/modals/ModerationDetails.tsx:35
+#: src/Navigation.tsx:216
+msgid "Moderation states"
+msgstr "Moderação"
+
+#: src/screens/Moderation/index.tsx:215
+msgid "Moderation tools"
+msgstr "Ferramentas de moderação"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:48
+#: src/lib/moderation/useModerationCauseDescription.ts:40
msgid "Moderator has chosen to set a general warning on the content."
msgstr "O moderador escolheu um aviso geral neste conteúdo."
-#: src/view/shell/desktop/Feeds.tsx:63
+#: src/view/com/post-thread/PostThreadItem.tsx:541
+msgid "More"
+msgstr "Mais"
+
+#: src/view/shell/desktop/Feeds.tsx:65
msgid "More feeds"
msgstr "Mais feeds"
-#: src/view/com/profile/ProfileHeader.tsx:522
-#: src/view/screens/ProfileFeed.tsx:362
-#: src/view/screens/ProfileList.tsx:616
+#: src/view/screens/ProfileList.tsx:599
msgid "More options"
msgstr "Mais opções"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:270
-msgid "More post options"
-msgstr "Mais opções do post"
+#: src/view/com/util/forms/PostDropdownBtn.tsx:315
+#~ msgid "More post options"
+#~ msgstr "Mais opções do post"
#: src/view/screens/PreferencesThreads.tsx:82
msgid "Most-liked replies first"
msgstr "Respostas mais curtidas primeiro"
-#: src/view/com/profile/ProfileHeader.tsx:326
+#: src/view/com/auth/create/Step2.tsx:122
+#~ msgid "Must be at least 3 characters"
+#~ msgstr "Deve ter no mínimo 3 caracteres"
+
+#: src/components/TagMenu/index.tsx:249
+msgid "Mute"
+msgstr "Silenciar"
+
+#: src/components/TagMenu/index.web.tsx:105
+msgid "Mute {truncatedTag}"
+msgstr "Silenciar {truncatedTag}"
+
+#: src/view/com/profile/ProfileMenu.tsx:279
+#: src/view/com/profile/ProfileMenu.tsx:286
msgid "Mute Account"
msgstr "Silenciar Conta"
-#: src/view/screens/ProfileList.tsx:543
+#: src/view/screens/ProfileList.tsx:518
msgid "Mute accounts"
msgstr "Silenciar contas"
-#: src/view/screens/ProfileList.tsx:490
+#: src/components/TagMenu/index.tsx:209
+msgid "Mute all {displayTag} posts"
+msgstr "Silenciar posts com {displayTag}"
+
+#: src/components/TagMenu/index.tsx:211
+#~ msgid "Mute all {tag} posts"
+#~ msgstr "Silenciar posts com {tag}"
+
+#: src/components/dialogs/MutedWords.tsx:148
+msgid "Mute in tags only"
+msgstr "Silenciar apenas as tags"
+
+#: src/components/dialogs/MutedWords.tsx:133
+msgid "Mute in text & tags"
+msgstr "Silenciar texto e tags"
+
+#: src/view/screens/ProfileList.tsx:461
+#: src/view/screens/ProfileList.tsx:624
msgid "Mute list"
msgstr "Lista de moderação"
-#: src/view/screens/ProfileList.tsx:274
+#: src/view/screens/ProfileList.tsx:619
msgid "Mute these accounts?"
msgstr "Silenciar estas contas?"
-#: src/view/screens/ProfileList.tsx:278
-msgid "Mute this List"
-msgstr "Silenciar esta lista"
+#: src/view/screens/ProfileList.tsx:279
+#~ msgid "Mute this List"
+#~ msgstr "Silenciar esta lista"
+
+#: src/components/dialogs/MutedWords.tsx:126
+msgid "Mute this word in post text and tags"
+msgstr "Silenciar esta palavra no conteúdo de um post e tags"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/components/dialogs/MutedWords.tsx:141
+msgid "Mute this word in tags only"
+msgstr "Silenciar esta palavra apenas nas tags de um post"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:257
msgid "Mute thread"
msgstr "Silenciar thread"
-#: src/view/com/lists/ListCard.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:267
+#: src/view/com/util/forms/PostDropdownBtn.tsx:269
+msgid "Mute words & tags"
+msgstr "Silenciar palavras/tags"
+
+#: src/view/com/lists/ListCard.tsx:102
msgid "Muted"
msgstr "Silenciada"
-#: src/view/screens/Moderation.tsx:109
+#: src/screens/Moderation/index.tsx:255
msgid "Muted accounts"
msgstr "Contas silenciadas"
-#: src/Navigation.tsx:125
+#: src/Navigation.tsx:129
#: src/view/screens/ModerationMutedAccounts.tsx:107
msgid "Muted Accounts"
msgstr "Contas Silenciadas"
@@ -2280,15 +2782,24 @@ msgstr "Contas Silenciadas"
msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private."
msgstr "Contas silenciadas não aparecem no seu feed ou nas suas notificações. Suas contas silenciadas são completamente privadas."
-#: src/view/screens/ProfileList.tsx:276
+#: src/lib/moderation/useModerationCauseDescription.ts:85
+msgid "Muted by \"{0}\""
+msgstr "Silenciado por \"{0}\""
+
+#: src/screens/Moderation/index.tsx:231
+msgid "Muted words & tags"
+msgstr "Palavras/tags silenciadas"
+
+#: src/view/screens/ProfileList.tsx:621
msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them."
msgstr "Silenciar é privado. Contas silenciadas podem interagir com você, mas você não verá postagens ou receber notificações delas."
-#: src/view/com/modals/BirthDateSettings.tsx:56
+#: src/components/dialogs/BirthDateSettings.tsx:35
+#: src/components/dialogs/BirthDateSettings.tsx:38
msgid "My Birthday"
msgstr "Meu Aniversário"
-#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:663
msgid "My Feeds"
msgstr "Meus Feeds"
@@ -2296,32 +2807,40 @@ msgstr "Meus Feeds"
msgid "My Profile"
msgstr "Meu Perfil"
-#: src/view/screens/Settings/index.tsx:582
+#: src/view/screens/Settings/index.tsx:596
+msgid "My saved feeds"
+msgstr "Meus feeds salvos"
+
+#: src/view/screens/Settings/index.tsx:602
msgid "My Saved Feeds"
msgstr "Meus Feeds Salvos"
#: src/view/com/auth/server-input/index.tsx:118
-msgid "my-server.com"
-msgstr ""
+#~ msgid "my-server.com"
+#~ msgstr "meu-servidor.com.br"
-#: src/view/com/modals/AddAppPasswords.tsx:179
-#: src/view/com/modals/CreateOrEditList.tsx:290
+#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/CreateOrEditList.tsx:291
msgid "Name"
msgstr "Nome"
-#: src/view/com/modals/CreateOrEditList.tsx:145
+#: src/view/com/modals/CreateOrEditList.tsx:146
msgid "Name is required"
msgstr "Nome é obrigatório"
+#: src/lib/moderation/useReportOptions.ts:57
+#: src/lib/moderation/useReportOptions.ts:78
+#: src/lib/moderation/useReportOptions.ts:86
+msgid "Name or Description Violates Community Standards"
+msgstr "Nome ou Descrição Viola os Padrões da Comunidade"
+
#: src/screens/Onboarding/index.tsx:25
msgid "Nature"
msgstr "Natureza"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:190
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:219
-#: src/view/com/auth/login/LoginForm.tsx:289
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:196
-#: src/view/com/modals/ChangePassword.tsx:166
+#: src/screens/Login/ForgotPasswordForm.tsx:173
+#: src/screens/Login/LoginForm.tsx:254
+#: src/view/com/modals/ChangePassword.tsx:168
msgid "Navigates to the next screen"
msgstr "Navega para próxima tela"
@@ -2329,20 +2848,32 @@ msgstr "Navega para próxima tela"
msgid "Navigates to your profile"
msgstr "Navega para seu perfil"
+#: src/components/ReportDialog/SelectReportOptionView.tsx:122
+msgid "Need to report a copyright violation?"
+msgstr "Precisa denunciar uma violação de copyright?"
+
#: src/view/com/modals/EmbedConsent.tsx:107
#: src/view/com/modals/EmbedConsent.tsx:123
-msgid "Never load embeds from {0}"
-msgstr "Nunca carregar anexos de {0}"
+#~ msgid "Never load embeds from {0}"
+#~ msgstr "Nunca carregar anexos de {0}"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:72
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:72
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:74
msgid "Never lose access to your followers and data."
msgstr "Nunca perca o acesso aos seus seguidores e dados."
-#: src/screens/Onboarding/StepFinished.tsx:119
+#: src/screens/Onboarding/StepFinished.tsx:123
msgid "Never lose access to your followers or data."
msgstr "Nunca perca o acesso aos seus seguidores ou dados."
+#: src/components/dialogs/MutedWords.tsx:293
+#~ msgid "Nevermind"
+#~ msgstr "Deixa pra lá"
+
+#: src/view/com/modals/ChangeHandle.tsx:519
+msgid "Nevermind, create a handle for me"
+msgstr "Deixa pra lá, crie um usuário pra mim"
+
#: src/view/screens/Lists.tsx:76
msgctxt "action"
msgid "New"
@@ -2352,39 +2883,39 @@ msgstr "Novo"
msgid "New"
msgstr "Novo"
-#: src/view/com/modals/CreateOrEditList.tsx:252
+#: src/view/com/modals/CreateOrEditList.tsx:253
msgid "New Moderation List"
msgstr "Nova lista de moderação"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:150
+#: src/view/com/modals/ChangePassword.tsx:212
msgid "New password"
msgstr "Nova senha"
-#: src/view/com/modals/ChangePassword.tsx:215
+#: src/view/com/modals/ChangePassword.tsx:217
msgid "New Password"
msgstr "Nova Senha"
-#: src/view/com/feeds/FeedPage.tsx:201
+#: src/view/com/feeds/FeedPage.tsx:149
msgctxt "action"
msgid "New post"
msgstr "Novo post"
-#: src/view/screens/Feeds.tsx:581
+#: src/view/screens/Feeds.tsx:555
#: src/view/screens/Notifications.tsx:168
-#: src/view/screens/Profile.tsx:382
-#: src/view/screens/ProfileFeed.tsx:432
-#: src/view/screens/ProfileList.tsx:195
-#: src/view/screens/ProfileList.tsx:223
-#: src/view/shell/desktop/LeftNav.tsx:248
+#: src/view/screens/Profile.tsx:452
+#: src/view/screens/ProfileFeed.tsx:434
+#: src/view/screens/ProfileList.tsx:199
+#: src/view/screens/ProfileList.tsx:227
+#: src/view/shell/desktop/LeftNav.tsx:252
msgid "New post"
msgstr "Novo post"
-#: src/view/shell/desktop/LeftNav.tsx:258
+#: src/view/shell/desktop/LeftNav.tsx:262
msgctxt "action"
msgid "New Post"
msgstr "Novo Post"
-#: src/view/com/modals/CreateOrEditList.tsx:247
+#: src/view/com/modals/CreateOrEditList.tsx:248
msgid "New User List"
msgstr "Nova lista de usuários"
@@ -2396,15 +2927,16 @@ msgstr "Respostas mais recentes primeiro"
msgid "News"
msgstr "Notícias"
-#: src/view/com/auth/create/CreateAccount.tsx:161
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:182
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:192
-#: src/view/com/auth/login/LoginForm.tsx:291
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:187
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:198
+#: src/screens/Login/ForgotPasswordForm.tsx:143
+#: src/screens/Login/ForgotPasswordForm.tsx:150
+#: src/screens/Login/LoginForm.tsx:253
+#: src/screens/Login/LoginForm.tsx:260
+#: src/screens/Login/SetNewPasswordForm.tsx:174
+#: src/screens/Login/SetNewPasswordForm.tsx:180
+#: src/screens/Signup/index.tsx:205
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79
-#: src/view/com/modals/ChangePassword.tsx:251
#: src/view/com/modals/ChangePassword.tsx:253
+#: src/view/com/modals/ChangePassword.tsx:255
msgid "Next"
msgstr "Próximo"
@@ -2413,48 +2945,61 @@ msgctxt "action"
msgid "Next"
msgstr "Próximo"
-#: src/view/com/lightbox/Lightbox.web.tsx:149
+#: src/view/com/lightbox/Lightbox.web.tsx:169
msgid "Next image"
msgstr "Próxima imagem"
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:200
-#: src/view/screens/PreferencesHomeFeed.tsx:235
-#: src/view/screens/PreferencesHomeFeed.tsx:272
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:200
+#: src/view/screens/PreferencesFollowingFeed.tsx:235
+#: src/view/screens/PreferencesFollowingFeed.tsx:272
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "No"
msgstr "Não"
-#: src/view/screens/ProfileFeed.tsx:584
-#: src/view/screens/ProfileList.tsx:754
+#: src/view/screens/ProfileFeed.tsx:562
+#: src/view/screens/ProfileList.tsx:769
msgid "No description"
msgstr "Sem descrição"
-#: src/view/com/profile/ProfileHeader.tsx:169
+#: src/view/com/modals/ChangeHandle.tsx:405
+msgid "No DNS Panel"
+msgstr "Não tenho painel de DNS"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:118
msgid "No longer following {0}"
msgstr "Você não está mais seguindo {0}"
-#: src/view/com/notifications/Feed.tsx:109
+#: src/screens/Signup/StepHandle.tsx:114
+msgid "No longer than 253 characters"
+msgstr ""
+
+#: src/view/com/notifications/Feed.tsx:109
msgid "No notifications yet!"
msgstr "Nenhuma notificação!"
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:97
-#: src/view/com/composer/text-input/web/Autocomplete.tsx:191
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:101
+#: src/view/com/composer/text-input/web/Autocomplete.tsx:195
msgid "No result"
msgstr "Nenhum resultado"
-#: src/view/screens/Feeds.tsx:524
+#: src/components/Lists.tsx:183
+msgid "No results found"
+msgstr "Nenhum resultado encontrado"
+
+#: src/view/screens/Feeds.tsx:495
msgid "No results found for \"{query}\""
msgstr "Nenhum resultado encontrado para \"{query}\""
#: src/view/com/modals/ListAddRemoveUsers.tsx:127
-#: src/view/screens/Search/Search.tsx:280
-#: src/view/screens/Search/Search.tsx:308
+#: src/view/screens/Search/Search.tsx:283
+#: src/view/screens/Search/Search.tsx:311
msgid "No results found for {query}"
msgstr "Nenhum resultado encontrado para {query}"
-#: src/view/com/modals/EmbedConsent.tsx:129
+#: src/components/dialogs/EmbedConsent.tsx:105
+#: src/components/dialogs/EmbedConsent.tsx:112
msgid "No thanks"
msgstr "Não, obrigado"
@@ -2462,12 +3007,21 @@ msgstr "Não, obrigado"
msgid "Nobody"
msgstr "Ninguém"
+#: src/components/LikedByList.tsx:79
+#: src/components/LikesDialog.tsx:99
+msgid "Nobody has liked this yet. Maybe you should be the first!"
+msgstr "Ninguém curtiu isso ainda. Você pode ser o primeiro!"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:42
+msgid "Non-sexual Nudity"
+msgstr "Nudez não-erótica"
+
#: src/view/com/modals/SelfLabel.tsx:135
msgid "Not Applicable."
msgstr "Não Aplicável."
-#: src/Navigation.tsx:105
-#: src/view/screens/Profile.tsx:106
+#: src/Navigation.tsx:109
+#: src/view/screens/Profile.tsx:99
msgid "Not Found"
msgstr "Não encontrado"
@@ -2476,17 +3030,23 @@ msgstr "Não encontrado"
msgid "Not right now"
msgstr "Agora não"
-#: src/view/screens/Moderation.tsx:233
+#: src/view/com/profile/ProfileMenu.tsx:368
+#: src/view/com/util/forms/PostDropdownBtn.tsx:342
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:246
+msgid "Note about sharing"
+msgstr "Nota sobre compartilhamento"
+
+#: src/screens/Moderation/index.tsx:540
msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites."
-msgstr "Nota: o Bluesky é uma rede aberta e pública. Esta configuração limita somente a visibilidade do seu conteúdo no site e aplicativo do Bluesky, e outros aplicativos podem não respeitar esta configuração. Seu conteúdo ainda poderá ser exibido para usuários deslogados por outros aplicativos e sites."
+msgstr "Nota: o Bluesky é uma rede aberta e pública. Esta configuração limita somente a visibilidade do seu conteúdo no site e aplicativo do Bluesky, e outros aplicativos podem não respeitar esta configuração. Seu conteúdo ainda poderá ser exibido para usuários não autenticados por outros aplicativos e sites."
-#: src/Navigation.tsx:447
+#: src/Navigation.tsx:469
#: src/view/screens/Notifications.tsx:124
#: src/view/screens/Notifications.tsx:148
-#: src/view/shell/bottom-bar/BottomBar.tsx:205
-#: src/view/shell/desktop/LeftNav.tsx:361
-#: src/view/shell/Drawer.tsx:435
-#: src/view/shell/Drawer.tsx:436
+#: src/view/shell/bottom-bar/BottomBar.tsx:215
+#: src/view/shell/desktop/LeftNav.tsx:365
+#: src/view/shell/Drawer.tsx:438
+#: src/view/shell/Drawer.tsx:439
msgid "Notifications"
msgstr "Notificações"
@@ -2494,15 +3054,36 @@ msgstr "Notificações"
msgid "Nudity"
msgstr "Nudez"
-#: src/view/com/util/ErrorBoundary.tsx:35
+#: src/lib/moderation/useReportOptions.ts:71
+msgid "Nudity or adult content not labeled as such"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:71
+#~ msgid "Nudity or pornography not labeled as such"
+#~ msgstr "Nudez ou pornografia sem aviso aplicado"
+
+#: src/screens/Signup/index.tsx:142
+msgid "of"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:11
+msgid "Off"
+msgstr "Desligado"
+
+#: src/view/com/util/ErrorBoundary.tsx:49
msgid "Oh no!"
msgstr "Opa!"
-#: src/screens/Onboarding/StepInterests/index.tsx:128
+#: src/screens/Onboarding/StepInterests/index.tsx:132
msgid "Oh no! Something went wrong."
msgstr "Opa! Algo deu errado."
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:41
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:126
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:327
+msgid "OK"
+msgstr "OK"
+
+#: src/screens/Login/PasswordUpdatedForm.tsx:44
msgid "Okay"
msgstr "Ok"
@@ -2510,11 +3091,11 @@ msgstr "Ok"
msgid "Oldest replies first"
msgstr "Respostas mais antigas primeiro"
-#: src/view/screens/Settings/index.tsx:234
+#: src/view/screens/Settings/index.tsx:244
msgid "Onboarding reset"
msgstr "Resetar tutoriais"
-#: src/view/com/composer/Composer.tsx:375
+#: src/view/com/composer/Composer.tsx:392
msgid "One or more images is missing alt text."
msgstr "Uma ou mais imagens estão sem texto alternativo."
@@ -2522,32 +3103,66 @@ msgstr "Uma ou mais imagens estão sem texto alternativo."
msgid "Only {0} can reply."
msgstr "Apenas {0} pode responder."
-#: src/view/screens/AppPasswords.tsx:65
-#: src/view/screens/Profile.tsx:106
+#: src/screens/Signup/StepHandle.tsx:97
+msgid "Only contains letters, numbers, and hyphens"
+msgstr ""
+
+#: src/components/Lists.tsx:75
+msgid "Oops, something went wrong!"
+msgstr "Opa, algo deu errado!"
+
+#: src/components/Lists.tsx:170
+#: src/view/screens/AppPasswords.tsx:67
+#: src/view/screens/Profile.tsx:99
msgid "Oops!"
msgstr "Opa!"
-#: src/screens/Onboarding/StepFinished.tsx:115
+#: src/screens/Onboarding/StepFinished.tsx:119
msgid "Open"
msgstr "Abrir"
-#: src/view/com/composer/Composer.tsx:470
-#: src/view/com/composer/Composer.tsx:471
+#: src/view/screens/Moderation.tsx:75
+#~ msgid "Open content filtering settings"
+#~ msgstr "Abrir configurações de filtro"
+
+#: src/view/com/composer/Composer.tsx:491
+#: src/view/com/composer/Composer.tsx:492
msgid "Open emoji picker"
msgstr "Abrir seletor de emojis"
-#: src/view/screens/Settings/index.tsx:712
+#: src/view/screens/ProfileFeed.tsx:300
+msgid "Open feed options menu"
+msgstr "Abrir opções do feed"
+
+#: src/view/screens/Settings/index.tsx:734
msgid "Open links with in-app browser"
msgstr "Abrir links no navegador interno"
-#: src/view/com/pager/FeedsTabBarMobile.tsx:87
+#: src/screens/Moderation/index.tsx:227
+msgid "Open muted words and tags settings"
+msgstr "Abrir opções de palavras/tags silenciadas"
+
+#: src/view/screens/Moderation.tsx:92
+#~ msgid "Open muted words settings"
+#~ msgstr "Abrir configurações das palavras silenciadas"
+
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:50
msgid "Open navigation"
msgstr "Abrir navegação"
-#: src/view/screens/Settings/index.tsx:804
+#: src/view/com/util/forms/PostDropdownBtn.tsx:183
+msgid "Open post options menu"
+msgstr "Abrir opções do post"
+
+#: src/view/screens/Settings/index.tsx:828
+#: src/view/screens/Settings/index.tsx:838
msgid "Open storybook page"
msgstr "Abre o storybook"
+#: src/view/screens/Settings/index.tsx:816
+msgid "Open system log"
+msgstr "Abrir registros do sistema"
+
#: src/view/com/util/forms/DropdownButton.tsx:154
msgid "Opens {numItems} options"
msgstr "Abre {numItems} opções"
@@ -2556,11 +3171,11 @@ msgstr "Abre {numItems} opções"
msgid "Opens additional details for a debug entry"
msgstr "Abre detalhes adicionais para um registro de depuração"
-#: src/view/com/notifications/FeedItem.tsx:348
+#: src/view/com/notifications/FeedItem.tsx:353
msgid "Opens an expanded list of users in this notification"
msgstr "Abre a lista de usuários nesta notificação"
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:61
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:78
msgid "Opens camera on device"
msgstr "Abre a câmera do dispositivo"
@@ -2568,7 +3183,7 @@ msgstr "Abre a câmera do dispositivo"
msgid "Opens composer"
msgstr "Abre o editor de post"
-#: src/view/screens/Settings/index.tsx:595
+#: src/view/screens/Settings/index.tsx:615
msgid "Opens configurable language settings"
msgstr "Abre definições de idioma configuráveis"
@@ -2576,71 +3191,101 @@ msgstr "Abre definições de idioma configuráveis"
msgid "Opens device photo gallery"
msgstr "Abre a galeria de fotos do dispositivo"
-#: src/view/com/profile/ProfileHeader.tsx:419
-msgid "Opens editor for profile display name, avatar, background image, and description"
-msgstr "Abre o editor de nome, avatar, banner e descrição do perfil"
+#: src/view/com/profile/ProfileHeader.tsx:420
+#~ msgid "Opens editor for profile display name, avatar, background image, and description"
+#~ msgstr "Abre o editor de nome, avatar, banner e descrição do perfil"
-#: src/view/screens/Settings/index.tsx:649
+#: src/view/screens/Settings/index.tsx:669
msgid "Opens external embeds settings"
msgstr "Abre as configurações de anexos externos"
-#: src/view/com/profile/ProfileHeader.tsx:574
-msgid "Opens followers list"
-msgstr "Abre lista de seguidores"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:57
+#: src/view/com/auth/SplashScreen.tsx:68
+#: src/view/com/auth/SplashScreen.web.tsx:97
+msgid "Opens flow to create a new Bluesky account"
+msgstr "Abre o fluxo de criação de conta do Bluesky"
-#: src/view/com/profile/ProfileHeader.tsx:593
-msgid "Opens following list"
-msgstr "Abre lista de seguidos"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:75
+#: src/view/com/auth/SplashScreen.tsx:83
+#: src/view/com/auth/SplashScreen.web.tsx:112
+msgid "Opens flow to sign into your existing Bluesky account"
+msgstr "Abre o fluxo de entrar na sua conta do Bluesky"
-#: src/view/screens/Settings.tsx:412
-#~ msgid "Opens invite code list"
-#~ msgstr "Abre lista de convites"
+#: src/view/com/profile/ProfileHeader.tsx:575
+#~ msgid "Opens followers list"
+#~ msgstr "Abre lista de seguidores"
+
+#: src/view/com/profile/ProfileHeader.tsx:594
+#~ msgid "Opens following list"
+#~ msgstr "Abre lista de seguidos"
-#: src/view/com/modals/InviteCodes.tsx:172
+#: src/view/com/modals/InviteCodes.tsx:173
msgid "Opens list of invite codes"
msgstr "Abre a lista de códigos de convite"
-#: src/view/screens/Settings/index.tsx:774
-msgid "Opens modal for account deletion confirmation. Requires email code."
-msgstr "Abre modal para confirmar exclusão de conta. Requer código de verificação."
+#: src/view/screens/Settings/index.tsx:798
+msgid "Opens modal for account deletion confirmation. Requires email code"
+msgstr "Abre modal de confirmar a exclusão da conta. Requer código enviado por email"
-#: src/view/com/modals/ChangeHandle.tsx:281
+#: src/view/screens/Settings/index.tsx:756
+msgid "Opens modal for changing your Bluesky password"
+msgstr "Abre modal para troca da sua senha do Bluesky"
+
+#: src/view/screens/Settings/index.tsx:718
+msgid "Opens modal for choosing a new Bluesky handle"
+msgstr "Abre modal para troca do seu usuário do Bluesky"
+
+#: src/view/screens/Settings/index.tsx:779
+msgid "Opens modal for downloading your Bluesky account data (repository)"
+msgstr "Abre modal para baixar os dados da sua conta do Bluesky"
+
+#: src/view/screens/Settings/index.tsx:968
+msgid "Opens modal for email verification"
+msgstr "Abre modal para verificação de email"
+
+#: src/view/com/modals/ChangeHandle.tsx:282
msgid "Opens modal for using custom domain"
msgstr "Abre modal para usar o domínio personalizado"
-#: src/view/screens/Settings/index.tsx:620
+#: src/view/screens/Settings/index.tsx:640
msgid "Opens moderation settings"
msgstr "Abre configurações de moderação"
-#: src/view/com/auth/login/LoginForm.tsx:239
+#: src/screens/Login/LoginForm.tsx:202
msgid "Opens password reset form"
msgstr "Abre o formulário de redefinição de senha"
-#: src/view/screens/Feeds.tsx:357
+#: src/view/com/home/HomeHeaderLayout.web.tsx:63
+#: src/view/screens/Feeds.tsx:356
msgid "Opens screen to edit Saved Feeds"
msgstr "Abre a tela para editar feeds salvos"
-#: src/view/screens/Settings/index.tsx:576
+#: src/view/screens/Settings/index.tsx:597
msgid "Opens screen with all saved feeds"
msgstr "Abre a tela com todos os feeds salvos"
-#: src/view/screens/Settings/index.tsx:676
-msgid "Opens the app password settings page"
-msgstr "Abre a página de configurações de senha do aplicativo"
+#: src/view/screens/Settings/index.tsx:696
+msgid "Opens the app password settings"
+msgstr "Abre as configurações de senha do aplicativo"
-#: src/view/screens/Settings/index.tsx:535
-msgid "Opens the home feed preferences"
+#: src/view/screens/Settings/index.tsx:554
+msgid "Opens the Following feed preferences"
msgstr "Abre as preferências do feed inicial"
-#: src/view/screens/Settings/index.tsx:805
+#: src/view/com/modals/LinkWarning.tsx:93
+msgid "Opens the linked website"
+msgstr "Abre o link"
+
+#: src/view/screens/Settings/index.tsx:829
+#: src/view/screens/Settings/index.tsx:839
msgid "Opens the storybook page"
msgstr "Abre a página do storybook"
-#: src/view/screens/Settings/index.tsx:793
+#: src/view/screens/Settings/index.tsx:817
msgid "Opens the system log page"
msgstr "Abre a página de log do sistema"
-#: src/view/screens/Settings/index.tsx:556
+#: src/view/screens/Settings/index.tsx:575
msgid "Opens the threads preferences"
msgstr "Abre as preferências de threads"
@@ -2648,22 +3293,27 @@ msgstr "Abre as preferências de threads"
msgid "Option {0} of {numItems}"
msgstr "Opção {0} de {numItems}"
+#: src/components/ReportDialog/SubmitView.tsx:162
+msgid "Optionally provide additional information below:"
+msgstr "Se quiser adicionar mais informações, digite abaixo:"
+
#: src/view/com/modals/Threadgate.tsx:89
msgid "Or combine these options:"
msgstr "Ou combine estas opções:"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:138
+#: src/lib/moderation/useReportOptions.ts:25
+msgid "Other"
+msgstr "Outro"
+
+#: src/components/AccountList.tsx:73
msgid "Other account"
msgstr "Outra conta"
-#: src/view/com/modals/ServerInput.tsx:88
-#~ msgid "Other service"
-#~ msgstr "Outro serviço"
-
#: src/view/com/composer/select-language/SelectLangBtn.tsx:91
msgid "Other..."
msgstr "Outro..."
+#: src/components/Lists.tsx:184
#: src/view/screens/NotFound.tsx:45
msgid "Page not found"
msgstr "Página não encontrada"
@@ -2672,27 +3322,30 @@ msgstr "Página não encontrada"
msgid "Page Not Found"
msgstr "Página Não Encontrada"
-#: src/view/com/auth/create/Step1.tsx:210
-#: src/view/com/auth/create/Step1.tsx:220
-#: src/view/com/auth/login/LoginForm.tsx:226
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:161
-#: src/view/com/modals/DeleteAccount.tsx:202
+#: src/screens/Login/LoginForm.tsx:178
+#: src/screens/Signup/StepInfo/index.tsx:101
+#: src/view/com/modals/DeleteAccount.tsx:194
+#: src/view/com/modals/DeleteAccount.tsx:201
msgid "Password"
msgstr "Senha"
-#: src/view/com/auth/login/Login.tsx:157
+#: src/view/com/modals/ChangePassword.tsx:142
+msgid "Password Changed"
+msgstr "Senha Atualizada"
+
+#: src/screens/Login/index.tsx:157
msgid "Password updated"
msgstr "Senha atualizada"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:28
+#: src/screens/Login/PasswordUpdatedForm.tsx:30
msgid "Password updated!"
msgstr "Senha atualizada!"
-#: src/Navigation.tsx:160
+#: src/Navigation.tsx:164
msgid "People followed by @{0}"
msgstr "Pessoas seguidas por @{0}"
-#: src/Navigation.tsx:153
+#: src/Navigation.tsx:157
msgid "People following @{0}"
msgstr "Pessoas seguindo @{0}"
@@ -2708,91 +3361,94 @@ msgstr "A permissão de galeria foi recusada. Por favor, habilite-a nas configur
msgid "Pets"
msgstr "Pets"
-#: src/view/com/auth/create/Step2.tsx:183
-msgid "Phone number"
-msgstr "Número de telefone"
-
#: src/view/com/modals/SelfLabel.tsx:121
msgid "Pictures meant for adults."
msgstr "Imagens destinadas a adultos."
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:292
+#: src/view/screens/ProfileList.tsx:563
msgid "Pin to home"
msgstr "Fixar na tela inicial"
+#: src/view/screens/ProfileFeed.tsx:295
+msgid "Pin to Home"
+msgstr "Fixar na Tela Inicial"
+
#: src/view/screens/SavedFeeds.tsx:88
msgid "Pinned Feeds"
msgstr "Feeds Fixados"
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:111
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:123
msgid "Play {0}"
msgstr "Reproduzir {0}"
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:54
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:55
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:57
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:58
msgid "Play Video"
msgstr "Reproduzir Vídeo"
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:110
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:122
msgid "Plays the GIF"
msgstr "Reproduz o GIF"
-#: src/view/com/auth/create/state.ts:177
+#: src/screens/Signup/state.ts:241
msgid "Please choose your handle."
msgstr "Por favor, escolha seu usuário."
-#: src/view/com/auth/create/state.ts:160
+#: src/screens/Signup/state.ts:234
msgid "Please choose your password."
msgstr "Por favor, escolha sua senha."
+#: src/screens/Signup/state.ts:251
+msgid "Please complete the verification captcha."
+msgstr "Por favor, complete o captcha de verificação."
+
#: src/view/com/modals/ChangeEmail.tsx:67
msgid "Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed."
msgstr "Por favor, confirme seu e-mail antes de alterá-lo. Este é um requisito temporário enquanto ferramentas de atualização de e-mail são adicionadas, e em breve será removido."
-#: src/view/com/modals/AddAppPasswords.tsx:90
+#: src/view/com/modals/AddAppPasswords.tsx:91
msgid "Please enter a name for your app password. All spaces is not allowed."
msgstr "Por favor, insira um nome para a sua Senha de Aplicativo."
-#: src/view/com/auth/create/Step2.tsx:206
-msgid "Please enter a phone number that can receive SMS text messages."
-msgstr "Por favor, insira um número de telefone que possa receber mensagens SMS."
-
-#: src/view/com/modals/AddAppPasswords.tsx:145
+#: src/view/com/modals/AddAppPasswords.tsx:146
msgid "Please enter a unique name for this App Password or use our randomly generated one."
msgstr "Por favor, insira um nome único para esta Senha de Aplicativo ou use nosso nome gerado automaticamente."
+#: src/components/dialogs/MutedWords.tsx:67
+msgid "Please enter a valid word, tag, or phrase to mute"
+msgstr "Por favor, insira uma palavra, tag ou frase para silenciar"
+
#: src/view/com/auth/create/state.ts:170
-msgid "Please enter the code you received by SMS."
-msgstr "Por favor, digite o código recebido via SMS."
+#~ msgid "Please enter the code you received by SMS."
+#~ msgstr "Por favor, digite o código recebido via SMS."
#: src/view/com/auth/create/Step2.tsx:282
-msgid "Please enter the verification code sent to {phoneNumberFormatted}."
-msgstr "Por favor, digite o código de verificação enviado para {phoneNumberFormatted}."
+#~ msgid "Please enter the verification code sent to {phoneNumberFormatted}."
+#~ msgstr "Por favor, digite o código de verificação enviado para {phoneNumberFormatted}."
-#: src/view/com/auth/create/state.ts:146
+#: src/screens/Signup/state.ts:220
msgid "Please enter your email."
msgstr "Por favor, digite o seu e-mail."
-#: src/view/com/modals/DeleteAccount.tsx:191
+#: src/view/com/modals/DeleteAccount.tsx:190
msgid "Please enter your password as well:"
msgstr "Por favor, digite sua senha também:"
-#: src/view/com/modals/AppealLabel.tsx:72
-#: src/view/com/modals/AppealLabel.tsx:75
-msgid "Please tell us why you think this content warning was incorrectly applied!"
-msgstr "Por favor, diga-nos por que você acha que este aviso de conteúdo foi aplicado incorretamente!"
+#: src/components/moderation/LabelsOnMeDialog.tsx:221
+msgid "Please explain why you think this label was incorrectly applied by {0}"
+msgstr "Por favor, explique por que você acha que este rótulo foi aplicado incorrentamente por {0}"
#: src/view/com/modals/AppealLabel.tsx:72
#: src/view/com/modals/AppealLabel.tsx:75
-#~ msgid "Please tell us why you think this decision was incorrect."
-#~ msgstr "Por favor, conte-nos por que achou que esta decisão está incorreta."
+#~ msgid "Please tell us why you think this content warning was incorrectly applied!"
+#~ msgstr "Por favor, diga-nos por que você acha que este aviso de conteúdo foi aplicado incorretamente!"
#: src/view/com/modals/VerifyEmail.tsx:101
msgid "Please Verify Your Email"
msgstr "Por favor, verifique seu e-mail"
-#: src/view/com/composer/Composer.tsx:215
+#: src/view/com/composer/Composer.tsx:222
msgid "Please wait for your link card to finish loading"
msgstr "Aguarde até que a prévia de link termine de carregar"
@@ -2804,35 +3460,49 @@ msgstr "Política"
msgid "Porn"
msgstr "Pornografia"
-#: src/view/com/composer/Composer.tsx:350
-#: src/view/com/composer/Composer.tsx:358
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#~ msgid "Pornography"
+#~ msgstr "Pornografia"
+
+#: src/view/com/composer/Composer.tsx:367
+#: src/view/com/composer/Composer.tsx:375
msgctxt "action"
msgid "Post"
msgstr "Postar"
-#: src/view/com/post-thread/PostThread.tsx:246
+#: src/view/com/post-thread/PostThread.tsx:292
msgctxt "description"
msgid "Post"
msgstr "Post"
-#: src/view/com/post-thread/PostThreadItem.tsx:174
+#: src/view/com/post-thread/PostThreadItem.tsx:175
msgid "Post by {0}"
msgstr "Post por {0}"
-#: src/Navigation.tsx:172
-#: src/Navigation.tsx:179
-#: src/Navigation.tsx:186
+#: src/Navigation.tsx:176
+#: src/Navigation.tsx:183
+#: src/Navigation.tsx:190
msgid "Post by @{0}"
msgstr "Post por @{0}"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:84
+#: src/view/com/util/forms/PostDropdownBtn.tsx:105
msgid "Post deleted"
msgstr "Post excluído"
-#: src/view/com/post-thread/PostThread.tsx:398
+#: src/view/com/post-thread/PostThread.tsx:157
msgid "Post hidden"
msgstr "Post oculto"
+#: src/components/moderation/ModerationDetailsDialog.tsx:97
+#: src/lib/moderation/useModerationCauseDescription.ts:99
+msgid "Post Hidden by Muted Word"
+msgstr "Post Escondido por Palavra Silenciada"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:100
+#: src/lib/moderation/useModerationCauseDescription.ts:108
+msgid "Post Hidden by You"
+msgstr "Post Escondido por Você"
+
#: src/view/com/composer/select-language/SelectLangBtn.tsx:87
msgid "Post language"
msgstr "Idioma do post"
@@ -2841,23 +3511,42 @@ msgstr "Idioma do post"
msgid "Post Languages"
msgstr "Idiomas do Post"
-#: src/view/com/post-thread/PostThread.tsx:450
+#: src/view/com/post-thread/PostThread.tsx:152
+#: src/view/com/post-thread/PostThread.tsx:164
msgid "Post not found"
msgstr "Post não encontrado"
-#: src/view/screens/Profile.tsx:180
+#: src/components/TagMenu/index.tsx:253
+msgid "posts"
+msgstr "posts"
+
+#: src/view/screens/Profile.tsx:190
msgid "Posts"
msgstr "Posts"
+#: src/components/dialogs/MutedWords.tsx:89
+msgid "Posts can be muted based on their text, their tags, or both."
+msgstr "Posts podem ser silenciados baseados no seu conteúdo, tags ou ambos."
+
#: src/view/com/posts/FeedErrorMessage.tsx:64
msgid "Posts hidden"
msgstr "Posts ocultados"
-#: src/view/com/modals/LinkWarning.tsx:46
+#: src/view/com/modals/LinkWarning.tsx:60
msgid "Potentially Misleading Link"
msgstr "Link Potencialmente Enganoso"
-#: src/view/com/lightbox/Lightbox.web.tsx:135
+#: src/components/forms/HostingProvider.tsx:45
+msgid "Press to change hosting provider"
+msgstr ""
+
+#: src/components/Error.tsx:74
+#: src/components/Lists.tsx:80
+#: src/screens/Signup/index.tsx:186
+msgid "Press to retry"
+msgstr "Tentar novamente"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:150
msgid "Previous image"
msgstr "Imagem anterior"
@@ -2869,39 +3558,45 @@ msgstr "Idioma Principal"
msgid "Prioritize Your Follows"
msgstr "Priorizar seus Seguidores"
-#: src/view/screens/Settings/index.tsx:632
-#: src/view/shell/desktop/RightNav.tsx:80
+#: src/view/screens/Settings/index.tsx:652
+#: src/view/shell/desktop/RightNav.tsx:72
msgid "Privacy"
msgstr "Privacidade"
-#: src/Navigation.tsx:217
+#: src/Navigation.tsx:231
+#: src/screens/Signup/StepInfo/Policies.tsx:56
#: src/view/screens/PrivacyPolicy.tsx:29
-#: src/view/screens/Settings/index.tsx:891
-#: src/view/shell/Drawer.tsx:262
+#: src/view/screens/Settings/index.tsx:923
+#: src/view/shell/Drawer.tsx:265
msgid "Privacy Policy"
msgstr "Política de Privacidade"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:198
+#: src/screens/Login/ForgotPasswordForm.tsx:156
msgid "Processing..."
msgstr "Processando..."
-#: src/view/shell/bottom-bar/BottomBar.tsx:247
-#: src/view/shell/desktop/LeftNav.tsx:415
+#: src/view/screens/DebugMod.tsx:888
+#: src/view/screens/Profile.tsx:342
+msgid "profile"
+msgstr "perfil"
+
+#: src/view/shell/bottom-bar/BottomBar.tsx:260
+#: src/view/shell/desktop/LeftNav.tsx:419
#: src/view/shell/Drawer.tsx:70
-#: src/view/shell/Drawer.tsx:546
-#: src/view/shell/Drawer.tsx:547
+#: src/view/shell/Drawer.tsx:549
+#: src/view/shell/Drawer.tsx:550
msgid "Profile"
msgstr "Perfil"
-#: src/view/com/modals/EditProfile.tsx:128
+#: src/view/com/modals/EditProfile.tsx:129
msgid "Profile updated"
msgstr "Perfil atualizado"
-#: src/view/screens/Settings/index.tsx:949
+#: src/view/screens/Settings/index.tsx:981
msgid "Protect your account by verifying your email."
msgstr "Proteja a sua conta verificando o seu e-mail."
-#: src/screens/Onboarding/StepFinished.tsx:101
+#: src/screens/Onboarding/StepFinished.tsx:105
msgid "Public"
msgstr "Público"
@@ -2913,15 +3608,15 @@ msgstr "Listas públicas e compartilháveis para silenciar ou bloquear usuários
msgid "Public, shareable lists which can drive feeds."
msgstr "Listas públicas e compartilháveis que geram feeds."
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish post"
msgstr "Publicar post"
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish reply"
msgstr "Publicar resposta"
-#: src/view/com/modals/Repost.tsx:65
+#: src/view/com/modals/Repost.tsx:66
msgctxt "action"
msgid "Quote post"
msgstr "Citar post"
@@ -2930,7 +3625,7 @@ msgstr "Citar post"
msgid "Quote post"
msgstr "Citar post"
-#: src/view/com/modals/Repost.tsx:70
+#: src/view/com/modals/Repost.tsx:71
msgctxt "action"
msgid "Quote Post"
msgstr "Citar Post"
@@ -2939,10 +3634,14 @@ msgstr "Citar Post"
msgid "Random (aka \"Poster's Roulette\")"
msgstr "Aleatório"
-#: src/view/com/modals/EditImage.tsx:236
+#: src/view/com/modals/EditImage.tsx:237
msgid "Ratios"
msgstr "Índices"
+#: src/view/screens/Search/Search.tsx:777
+msgid "Recent Searches"
+msgstr "Buscas Recentes"
+
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116
msgid "Recommended Feeds"
msgstr "Feeds Recomendados"
@@ -2951,35 +3650,50 @@ msgstr "Feeds Recomendados"
msgid "Recommended Users"
msgstr "Usuários Recomendados"
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/components/dialogs/MutedWords.tsx:286
+#: src/view/com/feeds/FeedSourceCard.tsx:283
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/SelfLabel.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/com/util/UserAvatar.tsx:285
-#: src/view/com/util/UserBanner.tsx:91
+#: src/view/com/posts/FeedErrorMessage.tsx:204
msgid "Remove"
msgstr "Remover"
-#: src/view/com/feeds/FeedSourceCard.tsx:106
-msgid "Remove {0} from my feeds?"
-msgstr "Remover {0} dos meus feeds?"
+#: src/view/com/feeds/FeedSourceCard.tsx:108
+#~ msgid "Remove {0} from my feeds?"
+#~ msgstr "Remover {0} dos meus feeds?"
#: src/view/com/util/AccountDropdownBtn.tsx:22
msgid "Remove account"
msgstr "Remover conta"
-#: src/view/com/posts/FeedErrorMessage.tsx:131
-#: src/view/com/posts/FeedErrorMessage.tsx:166
+#: src/view/com/util/UserAvatar.tsx:358
+msgid "Remove Avatar"
+msgstr "Remover avatar"
+
+#: src/view/com/util/UserBanner.tsx:148
+msgid "Remove Banner"
+msgstr "Remover banner"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:160
msgid "Remove feed"
msgstr "Remover feed"
-#: src/view/com/feeds/FeedSourceCard.tsx:105
-#: src/view/com/feeds/FeedSourceCard.tsx:167
-#: src/view/com/feeds/FeedSourceCard.tsx:172
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/posts/FeedErrorMessage.tsx:201
+msgid "Remove feed?"
+msgstr "Remover feed?"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:173
+#: src/view/com/feeds/FeedSourceCard.tsx:233
+#: src/view/screens/ProfileFeed.tsx:335
+#: src/view/screens/ProfileFeed.tsx:341
msgid "Remove from my feeds"
msgstr "Remover dos meus feeds"
+#: src/view/com/feeds/FeedSourceCard.tsx:278
+msgid "Remove from my feeds?"
+msgstr "Remover dos meus feeds?"
+
#: src/view/com/composer/photos/Gallery.tsx:167
msgid "Remove image"
msgstr "Remover imagem"
@@ -2988,33 +3702,44 @@ msgstr "Remover imagem"
msgid "Remove image preview"
msgstr "Remover visualização da imagem"
-#: src/view/com/modals/Repost.tsx:47
+#: src/components/dialogs/MutedWords.tsx:329
+msgid "Remove mute word from your list"
+msgstr "Remover palavra silenciada da lista"
+
+#: src/view/com/modals/Repost.tsx:48
msgid "Remove repost"
msgstr "Desfazer repost"
-#: src/view/com/feeds/FeedSourceCard.tsx:173
-msgid "Remove this feed from my feeds?"
-msgstr "Remover este feed dos meus feeds?"
+#: src/view/com/feeds/FeedSourceCard.tsx:175
+#~ msgid "Remove this feed from my feeds?"
+#~ msgstr "Remover este feed dos meus feeds?"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:202
+msgid "Remove this feed from your saved feeds"
+msgstr "Remover este feed dos feeds salvos"
#: src/view/com/posts/FeedErrorMessage.tsx:132
-msgid "Remove this feed from your saved feeds?"
-msgstr "Remover este feed dos feeds salvos?"
+#~ msgid "Remove this feed from your saved feeds?"
+#~ msgstr "Remover este feed dos feeds salvos?"
#: src/view/com/modals/ListAddRemoveUsers.tsx:199
#: src/view/com/modals/UserAddRemoveLists.tsx:152
msgid "Removed from list"
msgstr "Removido da lista"
-#: src/view/com/feeds/FeedSourceCard.tsx:111
-#: src/view/com/feeds/FeedSourceCard.tsx:178
+#: src/view/com/feeds/FeedSourceCard.tsx:121
msgid "Removed from my feeds"
-msgstr "Remover dos meus feeds"
+msgstr "Removido dos meus feeds"
+
+#: src/view/screens/ProfileFeed.tsx:209
+msgid "Removed from your feeds"
+msgstr "Removido dos feeds salvos"
#: src/view/com/composer/ExternalEmbed.tsx:71
msgid "Removes default thumbnail from {0}"
msgstr "Remover miniatura de {0}"
-#: src/view/screens/Profile.tsx:181
+#: src/view/screens/Profile.tsx:191
msgid "Replies"
msgstr "Respostas"
@@ -3022,45 +3747,71 @@ msgstr "Respostas"
msgid "Replies to this thread are disabled"
msgstr "Respostas para esta thread estão desativadas"
-#: src/view/com/composer/Composer.tsx:348
+#: src/view/com/composer/Composer.tsx:365
msgctxt "action"
msgid "Reply"
msgstr "Responder"
-#: src/view/screens/PreferencesHomeFeed.tsx:144
+#: src/view/screens/PreferencesFollowingFeed.tsx:144
msgid "Reply Filters"
msgstr "Filtros de Resposta"
#: src/view/com/post/Post.tsx:166
-#: src/view/com/posts/FeedItem.tsx:287
+#: src/view/com/posts/FeedItem.tsx:280
msgctxt "description"
msgid "Reply to <0/>"
msgstr "Responder <0/>"
#: src/view/com/modals/report/Modal.tsx:166
-msgid "Report {collectionName}"
-msgstr "Denunciar {collectionName}"
+#~ msgid "Report {collectionName}"
+#~ msgstr "Denunciar {collectionName}"
-#: src/view/com/profile/ProfileHeader.tsx:360
+#: src/view/com/profile/ProfileMenu.tsx:319
+#: src/view/com/profile/ProfileMenu.tsx:322
msgid "Report Account"
msgstr "Denunciar Conta"
-#: src/view/screens/ProfileFeed.tsx:292
+#: src/components/ReportDialog/index.tsx:49
+msgid "Report dialog"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:352
+#: src/view/screens/ProfileFeed.tsx:354
msgid "Report feed"
msgstr "Denunciar feed"
-#: src/view/screens/ProfileList.tsx:458
+#: src/view/screens/ProfileList.tsx:429
msgid "Report List"
msgstr "Denunciar Lista"
-#: src/view/com/modals/report/SendReportButton.tsx:37
-#: src/view/com/util/forms/PostDropdownBtn.tsx:210
+#: src/view/com/util/forms/PostDropdownBtn.tsx:292
+#: src/view/com/util/forms/PostDropdownBtn.tsx:294
msgid "Report post"
msgstr "Denunciar post"
-#: src/view/com/modals/Repost.tsx:43
-#: src/view/com/modals/Repost.tsx:48
-#: src/view/com/modals/Repost.tsx:53
+#: src/components/ReportDialog/SelectReportOptionView.tsx:42
+msgid "Report this content"
+msgstr "Denunciar conteúdo"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:55
+msgid "Report this feed"
+msgstr "Denunciar este feed"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:52
+msgid "Report this list"
+msgstr "Denunciar esta lista"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:49
+msgid "Report this post"
+msgstr "Denunciar este post"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:46
+msgid "Report this user"
+msgstr "Denunciar este usuário"
+
+#: src/view/com/modals/Repost.tsx:44
+#: src/view/com/modals/Repost.tsx:49
+#: src/view/com/modals/Repost.tsx:54
#: src/view/com/util/post-ctrls/RepostButton.tsx:61
msgctxt "action"
msgid "Repost"
@@ -3079,15 +3830,15 @@ msgstr "Repostar ou citar um post"
msgid "Reposted By"
msgstr "Repostado Por"
-#: src/view/com/posts/FeedItem.tsx:207
+#: src/view/com/posts/FeedItem.tsx:197
msgid "Reposted by {0}"
msgstr "Repostado por {0}"
-#: src/view/com/posts/FeedItem.tsx:224
+#: src/view/com/posts/FeedItem.tsx:214
msgid "Reposted by <0/>"
msgstr "Repostado por <0/>"
-#: src/view/com/notifications/FeedItem.tsx:162
+#: src/view/com/notifications/FeedItem.tsx:166
msgid "reposted your post"
msgstr "repostou seu post"
@@ -3100,61 +3851,58 @@ msgstr "Reposts"
msgid "Request Change"
msgstr "Solicitar Alteração"
-#: src/view/com/auth/create/Step2.tsx:219
-msgid "Request code"
-msgstr "Solicitar código"
-
-#: src/view/com/modals/ChangePassword.tsx:239
#: src/view/com/modals/ChangePassword.tsx:241
+#: src/view/com/modals/ChangePassword.tsx:243
msgid "Request Code"
msgstr "Solicitar Código"
-#: src/view/screens/Settings/index.tsx:456
+#: src/view/screens/Settings/index.tsx:475
msgid "Require alt text before posting"
msgstr "Exigir texto alternativo antes de postar"
-#: src/view/com/auth/create/Step1.tsx:149
+#: src/screens/Signup/StepInfo/index.tsx:69
msgid "Required for this provider"
msgstr "Obrigatório para este provedor"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:124
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:136
+#: src/view/com/modals/ChangePassword.tsx:185
msgid "Reset code"
msgstr "Código de redefinição"
-#: src/view/com/modals/ChangePassword.tsx:190
+#: src/view/com/modals/ChangePassword.tsx:192
msgid "Reset Code"
msgstr "Código de Redefinição"
#: src/view/screens/Settings/index.tsx:824
-msgid "Reset onboarding"
-msgstr "Redefinir tutoriais"
+#~ msgid "Reset onboarding"
+#~ msgstr "Redefinir tutoriais"
-#: src/view/screens/Settings/index.tsx:827
+#: src/view/screens/Settings/index.tsx:858
+#: src/view/screens/Settings/index.tsx:861
msgid "Reset onboarding state"
msgstr "Redefinir tutoriais"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:104
+#: src/screens/Login/ForgotPasswordForm.tsx:86
msgid "Reset password"
msgstr "Redefinir senha"
#: src/view/screens/Settings/index.tsx:814
-msgid "Reset preferences"
-msgstr "Redefinir configurações"
+#~ msgid "Reset preferences"
+#~ msgstr "Redefinir configurações"
-#: src/view/screens/Settings/index.tsx:817
+#: src/view/screens/Settings/index.tsx:848
+#: src/view/screens/Settings/index.tsx:851
msgid "Reset preferences state"
msgstr "Redefinir configurações"
-#: src/view/screens/Settings/index.tsx:825
+#: src/view/screens/Settings/index.tsx:859
msgid "Resets the onboarding state"
msgstr "Redefine tutoriais"
-#: src/view/screens/Settings/index.tsx:815
+#: src/view/screens/Settings/index.tsx:849
msgid "Resets the preferences state"
msgstr "Redefine as configurações"
-#: src/view/com/auth/login/LoginForm.tsx:269
+#: src/screens/Login/LoginForm.tsx:235
msgid "Retries login"
msgstr "Tenta entrar novamente"
@@ -3163,105 +3911,146 @@ msgstr "Tenta entrar novamente"
msgid "Retries the last action, which errored out"
msgstr "Tenta a última ação, que deu erro"
-#: src/screens/Onboarding/StepInterests/index.tsx:221
-#: src/screens/Onboarding/StepInterests/index.tsx:224
-#: src/view/com/auth/create/CreateAccount.tsx:170
-#: src/view/com/auth/create/CreateAccount.tsx:175
-#: src/view/com/auth/create/Step2.tsx:255
-#: src/view/com/auth/login/LoginForm.tsx:268
-#: src/view/com/auth/login/LoginForm.tsx:271
+#: src/components/Error.tsx:79
+#: src/components/Lists.tsx:91
+#: src/screens/Login/LoginForm.tsx:234
+#: src/screens/Login/LoginForm.tsx:241
+#: src/screens/Onboarding/StepInterests/index.tsx:225
+#: src/screens/Onboarding/StepInterests/index.tsx:228
+#: src/screens/Signup/index.tsx:193
#: src/view/com/util/error/ErrorMessage.tsx:55
#: src/view/com/util/error/ErrorScreen.tsx:72
msgid "Retry"
msgstr "Tente novamente"
#: src/view/com/auth/create/Step2.tsx:247
-msgid "Retry."
-msgstr "Tentar novamente."
+#~ msgid "Retry."
+#~ msgstr "Tentar novamente."
-#: src/view/screens/ProfileList.tsx:898
+#: src/components/Error.tsx:86
+#: src/view/screens/ProfileList.tsx:917
msgid "Return to previous page"
msgstr "Voltar para página anterior"
-#: src/view/shell/desktop/RightNav.tsx:55
-msgid "SANDBOX. Posts and accounts are not permanent."
-msgstr "SANDBOX. Posts e contas não são permanentes."
+#: src/view/screens/NotFound.tsx:59
+msgid "Returns to home page"
+msgstr "Voltar para a tela inicial"
-#: src/view/com/lightbox/Lightbox.tsx:132
-#: src/view/com/modals/CreateOrEditList.tsx:345
-msgctxt "action"
+#: src/view/screens/NotFound.tsx:58
+#: src/view/screens/ProfileFeed.tsx:113
+msgid "Returns to previous page"
+msgstr "Voltar para página anterior"
+
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/view/com/modals/ChangeHandle.tsx:174
+#: src/view/com/modals/CreateOrEditList.tsx:338
+#: src/view/com/modals/EditProfile.tsx:225
msgid "Save"
msgstr "Salvar"
-#: src/view/com/modals/BirthDateSettings.tsx:94
-#: src/view/com/modals/BirthDateSettings.tsx:97
-#: src/view/com/modals/ChangeHandle.tsx:173
-#: src/view/com/modals/CreateOrEditList.tsx:337
-#: src/view/com/modals/EditProfile.tsx:224
-#: src/view/screens/ProfileFeed.tsx:345
+#: src/view/com/lightbox/Lightbox.tsx:132
+#: src/view/com/modals/CreateOrEditList.tsx:346
+msgctxt "action"
msgid "Save"
msgstr "Salvar"
-#: src/view/com/modals/AltImage.tsx:130
+#: src/view/com/modals/AltImage.tsx:131
msgid "Save alt text"
msgstr "Salvar texto alternativo"
-#: src/view/com/modals/EditProfile.tsx:232
+#: src/components/dialogs/BirthDateSettings.tsx:119
+msgid "Save birthday"
+msgstr "Salvar data de nascimento"
+
+#: src/view/com/modals/EditProfile.tsx:233
msgid "Save Changes"
msgstr "Salvar Alterações"
-#: src/view/com/modals/ChangeHandle.tsx:170
+#: src/view/com/modals/ChangeHandle.tsx:171
msgid "Save handle change"
msgstr "Salvar usuário"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:144
+#: src/view/com/modals/crop-image/CropImage.web.tsx:145
msgid "Save image crop"
msgstr "Salvar corte de imagem"
+#: src/view/screens/ProfileFeed.tsx:336
+#: src/view/screens/ProfileFeed.tsx:342
+msgid "Save to my feeds"
+msgstr "Salvar nos meus feeds"
+
#: src/view/screens/SavedFeeds.tsx:122
msgid "Saved Feeds"
msgstr "Feeds Salvos"
-#: src/view/com/modals/EditProfile.tsx:225
+#: src/view/com/lightbox/Lightbox.tsx:81
+msgid "Saved to your camera roll."
+msgstr "Imagem salva na galeria."
+
+#: src/view/screens/ProfileFeed.tsx:213
+msgid "Saved to your feeds"
+msgstr "Adicionado aos seus feeds"
+
+#: src/view/com/modals/EditProfile.tsx:226
msgid "Saves any changes to your profile"
msgstr "Salva todas as alterações"
-#: src/view/com/modals/ChangeHandle.tsx:171
+#: src/view/com/modals/ChangeHandle.tsx:172
msgid "Saves handle change to {handle}"
msgstr "Salva mudança de usuário para {handle}"
+#: src/view/com/modals/crop-image/CropImage.web.tsx:146
+msgid "Saves image crop settings"
+msgstr "Salva o corte da imagem"
+
#: src/screens/Onboarding/index.tsx:36
msgid "Science"
msgstr "Ciência"
-#: src/view/screens/ProfileList.tsx:854
+#: src/view/screens/ProfileList.tsx:873
msgid "Scroll to top"
msgstr "Ir para o topo"
-#: src/Navigation.tsx:437
-#: src/view/com/auth/LoggedOut.tsx:122
+#: src/Navigation.tsx:459
+#: src/view/com/auth/LoggedOut.tsx:123
#: src/view/com/modals/ListAddRemoveUsers.tsx:75
#: src/view/com/util/forms/SearchInput.tsx:67
#: src/view/com/util/forms/SearchInput.tsx:79
-#: src/view/screens/Search/Search.tsx:418
-#: src/view/screens/Search/Search.tsx:645
-#: src/view/screens/Search/Search.tsx:663
-#: src/view/shell/bottom-bar/BottomBar.tsx:159
-#: src/view/shell/desktop/LeftNav.tsx:324
-#: src/view/shell/desktop/Search.tsx:214
-#: src/view/shell/desktop/Search.tsx:223
-#: src/view/shell/Drawer.tsx:362
-#: src/view/shell/Drawer.tsx:363
+#: src/view/screens/Search/Search.tsx:421
+#: src/view/screens/Search/Search.tsx:670
+#: src/view/screens/Search/Search.tsx:688
+#: src/view/shell/bottom-bar/BottomBar.tsx:169
+#: src/view/shell/desktop/LeftNav.tsx:328
+#: src/view/shell/desktop/Search.tsx:215
+#: src/view/shell/desktop/Search.tsx:224
+#: src/view/shell/Drawer.tsx:365
+#: src/view/shell/Drawer.tsx:366
msgid "Search"
msgstr "Buscar"
-#: src/view/screens/Search/Search.tsx:712
-#: src/view/shell/desktop/Search.tsx:255
+#: src/view/screens/Search/Search.tsx:737
+#: src/view/shell/desktop/Search.tsx:256
msgid "Search for \"{query}\""
msgstr "Pesquisar por \"{query}\""
-#: src/view/com/auth/LoggedOut.tsx:104
+#: src/components/TagMenu/index.tsx:145
+msgid "Search for all posts by @{authorHandle} with tag {displayTag}"
+msgstr "Pesquisar por posts de @{authorHandle} com a tag {displayTag}"
+
+#: src/components/TagMenu/index.tsx:145
+#~ msgid "Search for all posts by @{authorHandle} with tag {tag}"
+#~ msgstr "Pesquisar por posts de @{authorHandle} com a tag {tag}"
+
+#: src/components/TagMenu/index.tsx:94
+msgid "Search for all posts with tag {displayTag}"
+msgstr "Pesquisar por posts com a tag {displayTag}"
+
+#: src/components/TagMenu/index.tsx:90
+#~ msgid "Search for all posts with tag {tag}"
+#~ msgstr "Pesquisar por posts com a tag {tag}"
+
#: src/view/com/auth/LoggedOut.tsx:105
+#: src/view/com/auth/LoggedOut.tsx:106
#: src/view/com/modals/ListAddRemoveUsers.tsx:70
msgid "Search for users"
msgstr "Buscar usuários"
@@ -3270,11 +4059,35 @@ msgstr "Buscar usuários"
msgid "Security Step Required"
msgstr "Passo de Segurança Necessário"
+#: src/components/TagMenu/index.web.tsx:66
+msgid "See {truncatedTag} posts"
+msgstr "Ver posts com {truncatedTag}"
+
+#: src/components/TagMenu/index.web.tsx:83
+msgid "See {truncatedTag} posts by user"
+msgstr "Ver posts com {truncatedTag} deste usuário"
+
+#: src/components/TagMenu/index.tsx:128
+msgid "See <0>{displayTag}0> posts"
+msgstr "Ver posts com <0>{displayTag}0>"
+
+#: src/components/TagMenu/index.tsx:187
+msgid "See <0>{displayTag}0> posts by this user"
+msgstr "Ver posts com <0>{displayTag}0> deste usuário"
+
+#: src/components/TagMenu/index.tsx:128
+#~ msgid "See <0>{tag}0> posts"
+#~ msgstr "Ver posts com <0>{tag}0>"
+
+#: src/components/TagMenu/index.tsx:189
+#~ msgid "See <0>{tag}0> posts by this user"
+#~ msgstr "Ver posts com <0>{tag}0> deste usuário"
+
#: src/view/screens/SavedFeeds.tsx:163
msgid "See this guide"
msgstr "Veja o guia"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:39
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:40
msgid "See what's next"
msgstr "Veja o que vem por aí"
@@ -3282,40 +4095,48 @@ msgstr "Veja o que vem por aí"
msgid "Select {item}"
msgstr "Selecionar {item}"
-#: src/view/com/modals/ServerInput.tsx:75
-#~ msgid "Select Bluesky Social"
-#~ msgstr "Selecionar Bluesky Social"
+#: src/screens/Login/ChooseAccountForm.tsx:61
+msgid "Select account"
+msgstr ""
-#: src/view/com/auth/login/Login.tsx:117
+#: src/screens/Login/index.tsx:120
msgid "Select from an existing account"
msgstr "Selecionar de uma conta existente"
+#: src/view/screens/LanguageSettings.tsx:299
+msgid "Select languages"
+msgstr "Selecionar idiomas"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:30
+msgid "Select moderator"
+msgstr "Selecionar moderador"
+
#: src/view/com/util/Selector.tsx:107
msgid "Select option {i} of {numItems}"
msgstr "Seleciona opção {i} de {numItems}"
-#: src/view/com/auth/create/Step1.tsx:99
-#: src/view/com/auth/login/LoginForm.tsx:150
-msgid "Select service"
-msgstr "Selecionar serviço"
+#: src/view/com/auth/create/Step1.tsx:96
+#: src/view/com/auth/login/LoginForm.tsx:153
+#~ msgid "Select service"
+#~ msgstr "Selecionar serviço"
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:52
msgid "Select some accounts below to follow"
msgstr "Selecione algumas contas para seguir"
+#: src/components/ReportDialog/SubmitView.tsx:135
+msgid "Select the moderation service(s) to report to"
+msgstr "Selecione o(s) serviço(s) de moderação para reportar"
+
#: src/view/com/auth/server-input/index.tsx:82
msgid "Select the service that hosts your data."
-msgstr ""
-
-#: src/screens/Onboarding/StepModeration/index.tsx:49
-#~ msgid "Select the types of content that you want to see (or not see), and we'll handle the rest."
-#~ msgstr "Selecione os tipos de conteúdo que você quer (ou não) ver, e cuidaremos do resto."
+msgstr "Selecione o serviço que hospeda seus dados."
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:90
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:100
msgid "Select topical feeds to follow from the list below"
msgstr "Selecione feeds de assuntos para seguir"
-#: src/screens/Onboarding/StepModeration/index.tsx:75
+#: src/screens/Onboarding/StepModeration/index.tsx:63
msgid "Select what you want to see (or not see), and we’ll handle the rest."
msgstr "Selecione o que você quer (ou não) ver, e cuidaremos do resto."
@@ -3324,26 +4145,30 @@ msgid "Select which languages you want your subscribed feeds to include. If none
msgstr "Selecione quais idiomas você deseja ver nos seus feeds. Se nenhum for selecionado, todos os idiomas serão exibidos."
#: src/view/screens/LanguageSettings.tsx:98
-msgid "Select your app language for the default text to display in the app"
+#~ msgid "Select your app language for the default text to display in the app"
+#~ msgstr "Selecione o idioma do seu aplicativo"
+
+#: src/view/screens/LanguageSettings.tsx:98
+msgid "Select your app language for the default text to display in the app."
msgstr "Selecione o idioma do seu aplicativo"
-#: src/screens/Onboarding/StepInterests/index.tsx:196
+#: src/screens/Signup/StepInfo/index.tsx:133
+msgid "Select your date of birth"
+msgstr ""
+
+#: src/screens/Onboarding/StepInterests/index.tsx:200
msgid "Select your interests from the options below"
msgstr "Selecione seus interesses"
-#: src/view/com/auth/create/Step2.tsx:155
-msgid "Select your phone's country"
-msgstr "Selecione o país do número de telefone"
-
#: src/view/screens/LanguageSettings.tsx:190
msgid "Select your preferred language for translations in your feed."
msgstr "Selecione seu idioma preferido para as traduções no seu feed."
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:116
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:117
msgid "Select your primary algorithmic feeds"
msgstr "Selecione seus feeds primários"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:142
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:133
msgid "Select your secondary algorithmic feeds"
msgstr "Selecione seus feeds secundários"
@@ -3352,79 +4177,92 @@ msgstr "Selecione seus feeds secundários"
msgid "Send Confirmation Email"
msgstr "Enviar E-mail de Confirmação"
-#: src/view/com/modals/DeleteAccount.tsx:131
+#: src/view/com/modals/DeleteAccount.tsx:130
msgid "Send email"
msgstr "Enviar e-mail"
-#: src/view/com/modals/DeleteAccount.tsx:144
+#: src/view/com/modals/DeleteAccount.tsx:143
msgctxt "action"
msgid "Send Email"
msgstr "Enviar E-mail"
-#: src/view/shell/Drawer.tsx:295
-#: src/view/shell/Drawer.tsx:316
+#: src/view/shell/Drawer.tsx:298
+#: src/view/shell/Drawer.tsx:319
msgid "Send feedback"
msgstr "Enviar comentários"
-#: src/view/com/modals/report/SendReportButton.tsx:45
-msgid "Send Report"
+#: src/components/ReportDialog/SubmitView.tsx:214
+#: src/components/ReportDialog/SubmitView.tsx:218
+msgid "Send report"
msgstr "Denunciar"
-#: src/view/com/modals/DeleteAccount.tsx:133
+#: src/view/com/modals/report/SendReportButton.tsx:45
+#~ msgid "Send Report"
+#~ msgstr "Denunciar"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:44
+msgid "Send report to {0}"
+msgstr "Denunciar via {0}"
+
+#: src/view/com/modals/DeleteAccount.tsx:132
msgid "Sends email with confirmation code for account deletion"
msgstr "Envia o e-mail com o código de confirmação para excluir a conta"
-#: src/view/com/auth/server-input/index.tsx:110
+#: src/view/com/auth/server-input/index.tsx:114
msgid "Server address"
-msgstr ""
+msgstr "URL do servidor"
#: src/view/com/modals/ContentFilteringSettings.tsx:311
-msgid "Set {value} for {labelGroup} content moderation policy"
-msgstr "Definir {value} para o filtro de moderação {labelGroup}"
+#~ msgid "Set {value} for {labelGroup} content moderation policy"
+#~ msgstr "Definir {value} para o filtro de moderação {labelGroup}"
#: src/view/com/modals/ContentFilteringSettings.tsx:160
#: src/view/com/modals/ContentFilteringSettings.tsx:179
-msgctxt "action"
-msgid "Set Age"
-msgstr "Definir Idade"
+#~ msgctxt "action"
+#~ msgid "Set Age"
+#~ msgstr "Definir Idade"
+
+#: src/screens/Moderation/index.tsx:304
+msgid "Set birthdate"
+msgstr "Definir data de nascimento"
#: src/view/screens/Settings/index.tsx:488
-msgid "Set color theme to dark"
-msgstr "Definir o tema de cor para escuro"
+#~ msgid "Set color theme to dark"
+#~ msgstr "Definir o tema de cor para escuro"
#: src/view/screens/Settings/index.tsx:481
-msgid "Set color theme to light"
-msgstr "Definir o tema de cor para claro"
+#~ msgid "Set color theme to light"
+#~ msgstr "Definir o tema de cor para claro"
#: src/view/screens/Settings/index.tsx:475
-msgid "Set color theme to system setting"
-msgstr "Definir o tema para acompanhar o sistema"
+#~ msgid "Set color theme to system setting"
+#~ msgstr "Definir o tema para acompanhar o sistema"
#: src/view/screens/Settings/index.tsx:514
-msgid "Set dark theme to the dark theme"
-msgstr "Definir o tema escuro para o padrão"
+#~ msgid "Set dark theme to the dark theme"
+#~ msgstr "Definir o tema escuro para o padrão"
#: src/view/screens/Settings/index.tsx:507
-msgid "Set dark theme to the dim theme"
-msgstr "Definir o tema escuro para a versão menos escura"
+#~ msgid "Set dark theme to the dim theme"
+#~ msgstr "Definir o tema escuro para a versão menos escura"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:104
+#: src/screens/Login/SetNewPasswordForm.tsx:102
msgid "Set new password"
msgstr "Definir uma nova senha"
-#: src/view/com/auth/create/Step1.tsx:221
-msgid "Set password"
-msgstr "Definir senha"
+#: src/view/com/auth/create/Step1.tsx:202
+#~ msgid "Set password"
+#~ msgstr "Definir senha"
-#: src/view/screens/PreferencesHomeFeed.tsx:225
+#: src/view/screens/PreferencesFollowingFeed.tsx:225
msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible."
msgstr "Defina esta configuração como \"Não\" para ocultar todas as citações do seu feed. Reposts ainda serão visíveis."
-#: src/view/screens/PreferencesHomeFeed.tsx:122
+#: src/view/screens/PreferencesFollowingFeed.tsx:122
msgid "Set this setting to \"No\" to hide all replies from your feed."
msgstr "Defina esta configuração como \"Não\" para ocultar todas as respostas do seu feed."
-#: src/view/screens/PreferencesHomeFeed.tsx:191
+#: src/view/screens/PreferencesFollowingFeed.tsx:191
msgid "Set this setting to \"No\" to hide all reposts from your feed."
msgstr "Defina esta configuração como \"Não\" para ocultar todos os reposts do seu feed."
@@ -3432,36 +4270,68 @@ msgstr "Defina esta configuração como \"Não\" para ocultar todos os reposts d
msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature."
msgstr "Defina esta configuração como \"Sim\" para mostrar respostas em uma visualização de thread. Este é um recurso experimental."
-#: src/view/screens/PreferencesHomeFeed.tsx:261
-msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
-msgstr "Defina esta configuração como \"Sim\" para mostrar amostras de seus feeds salvos na sua página inicial. Este é um recurso experimental."
+#: src/view/screens/PreferencesFollowingFeed.tsx:261
+msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your Following feed. This is an experimental feature."
+msgstr "Defina esta configuração como \"Sim\" para exibir amostras de seus feeds salvos no seu feed inicial. Este é um recurso experimental."
-#: src/screens/Onboarding/Layout.tsx:50
+#: src/screens/Onboarding/Layout.tsx:48
msgid "Set up your account"
msgstr "Configure sua conta"
-#: src/view/com/modals/ChangeHandle.tsx:266
+#: src/view/com/modals/ChangeHandle.tsx:267
msgid "Sets Bluesky username"
msgstr "Configura o usuário no Bluesky"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:157
+#: src/view/screens/Settings/index.tsx:507
+msgid "Sets color theme to dark"
+msgstr "Define o tema para escuro"
+
+#: src/view/screens/Settings/index.tsx:500
+msgid "Sets color theme to light"
+msgstr "Define o tema para claro"
+
+#: src/view/screens/Settings/index.tsx:494
+msgid "Sets color theme to system setting"
+msgstr "Define o tema para seguir o sistema"
+
+#: src/view/screens/Settings/index.tsx:533
+msgid "Sets dark theme to the dark theme"
+msgstr "Define o tema escuro para o padrão"
+
+#: src/view/screens/Settings/index.tsx:526
+msgid "Sets dark theme to the dim theme"
+msgstr "Define o tema escuro para o menos escuro"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:113
msgid "Sets email for password reset"
msgstr "Configura o e-mail para recuperação de senha"
#: src/view/com/auth/login/ForgotPasswordForm.tsx:122
-msgid "Sets hosting provider for password reset"
-msgstr "Configura o provedor de hospedagem para recuperação de senha"
-
-#: src/view/com/auth/create/Step1.tsx:100
-#: src/view/com/auth/login/LoginForm.tsx:151
-msgid "Sets server for the Bluesky client"
-msgstr "Configura o servidor para o cliente do Bluesky"
-
-#: src/Navigation.tsx:135
-#: src/view/screens/Settings/index.tsx:294
-#: src/view/shell/desktop/LeftNav.tsx:433
-#: src/view/shell/Drawer.tsx:567
-#: src/view/shell/Drawer.tsx:568
+#~ msgid "Sets hosting provider for password reset"
+#~ msgstr "Configura o provedor de hospedagem para recuperação de senha"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:124
+msgid "Sets image aspect ratio to square"
+msgstr "Define a proporção da imagem para quadrada"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:114
+msgid "Sets image aspect ratio to tall"
+msgstr "Define a proporção da imagem para alta"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:104
+msgid "Sets image aspect ratio to wide"
+msgstr "Define a proporção da imagem para comprida"
+
+#: src/view/com/auth/create/Step1.tsx:97
+#: src/view/com/auth/login/LoginForm.tsx:154
+#~ msgid "Sets server for the Bluesky client"
+#~ msgstr "Configura o servidor para o cliente do Bluesky"
+
+#: src/Navigation.tsx:139
+#: src/view/screens/Settings/index.tsx:313
+#: src/view/shell/desktop/LeftNav.tsx:437
+#: src/view/shell/Drawer.tsx:570
+#: src/view/shell/Drawer.tsx:571
msgid "Settings"
msgstr "Configurações"
@@ -3469,72 +4339,105 @@ msgstr "Configurações"
msgid "Sexual activity or erotic nudity."
msgstr "Atividade sexual ou nudez erótica."
+#: src/lib/moderation/useGlobalLabelStrings.ts:38
+msgid "Sexually Suggestive"
+msgstr "Sexualmente Sugestivo"
+
#: src/view/com/lightbox/Lightbox.tsx:141
msgctxt "action"
msgid "Share"
msgstr "Compartilhar"
-#: src/view/com/profile/ProfileHeader.tsx:294
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
-#: src/view/screens/ProfileList.tsx:417
+#: src/view/com/profile/ProfileMenu.tsx:215
+#: src/view/com/profile/ProfileMenu.tsx:224
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:235
+#: src/view/screens/ProfileList.tsx:388
msgid "Share"
msgstr "Compartilhar"
-#: src/view/screens/ProfileFeed.tsx:304
+#: src/view/com/profile/ProfileMenu.tsx:373
+#: src/view/com/util/forms/PostDropdownBtn.tsx:347
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:251
+msgid "Share anyway"
+msgstr "Compartilhar assim"
+
+#: src/view/screens/ProfileFeed.tsx:362
+#: src/view/screens/ProfileFeed.tsx:364
msgid "Share feed"
msgstr "Compartilhar feed"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:43
-#: src/view/com/modals/ContentFilteringSettings.tsx:266
-#: src/view/com/util/moderation/ContentHider.tsx:107
-#: src/view/com/util/moderation/PostHider.tsx:108
-#: src/view/screens/Settings/index.tsx:344
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
+msgid "Share Link"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:92
+msgid "Shares the linked website"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:136
+#: src/components/moderation/PostHider.tsx:107
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:54
+#: src/view/screens/Settings/index.tsx:363
msgid "Show"
msgstr "Mostrar"
-#: src/view/screens/PreferencesHomeFeed.tsx:68
+#: src/view/screens/PreferencesFollowingFeed.tsx:68
msgid "Show all replies"
msgstr "Mostrar todas as respostas"
-#: src/view/com/util/moderation/ScreenHider.tsx:132
+#: src/components/moderation/ScreenHider.tsx:169
+#: src/components/moderation/ScreenHider.tsx:172
msgid "Show anyway"
msgstr "Mostrar mesmo assim"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:27
+#: src/lib/moderation/useLabelBehaviorDescription.ts:63
+msgid "Show badge"
+msgstr "Mostrar rótulo"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:61
+msgid "Show badge and filter from feeds"
+msgstr "Mostrar rótulo e filtrar dos feeds"
+
#: src/view/com/modals/EmbedConsent.tsx:87
-msgid "Show embeds from {0}"
-msgstr "Mostrar anexos de {0}"
+#~ msgid "Show embeds from {0}"
+#~ msgstr "Mostrar anexos de {0}"
-#: src/view/com/profile/ProfileHeader.tsx:458
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:200
msgid "Show follows similar to {0}"
msgstr "Mostrar usuários parecidos com {0}"
-#: src/view/com/post-thread/PostThreadItem.tsx:539
-#: src/view/com/post/Post.tsx:197
-#: src/view/com/posts/FeedItem.tsx:363
+#: src/view/com/post-thread/PostThreadItem.tsx:507
+#: src/view/com/post/Post.tsx:201
+#: src/view/com/posts/FeedItem.tsx:355
msgid "Show More"
msgstr "Mostrar Mais"
-#: src/view/screens/PreferencesHomeFeed.tsx:258
+#: src/view/screens/PreferencesFollowingFeed.tsx:258
msgid "Show Posts from My Feeds"
msgstr "Mostrar Posts dos Meus Feeds"
-#: src/view/screens/PreferencesHomeFeed.tsx:222
+#: src/view/screens/PreferencesFollowingFeed.tsx:222
msgid "Show Quote Posts"
msgstr "Mostrar Citações"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:118
+#: src/screens/Onboarding/StepFollowingFeed.tsx:119
msgid "Show quote-posts in Following feed"
msgstr "Mostrar citações no feed Seguindo"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:134
+#: src/screens/Onboarding/StepFollowingFeed.tsx:135
msgid "Show quotes in Following"
msgstr "Mostrar citações no Seguindo"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:94
+#: src/screens/Onboarding/StepFollowingFeed.tsx:95
msgid "Show re-posts in Following feed"
msgstr "Mostrar reposts no feed Seguindo"
-#: src/view/screens/PreferencesHomeFeed.tsx:119
+#: src/view/screens/PreferencesFollowingFeed.tsx:119
msgid "Show Replies"
msgstr "Mostrar Respostas"
@@ -3542,87 +4445,98 @@ msgstr "Mostrar Respostas"
msgid "Show replies by people you follow before all other replies."
msgstr "Mostrar as respostas de pessoas que você segue antes de todas as outras respostas."
-#: src/screens/Onboarding/StepFollowingFeed.tsx:86
+#: src/screens/Onboarding/StepFollowingFeed.tsx:87
msgid "Show replies in Following"
msgstr "Mostrar respostas no Seguindo"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:70
+#: src/screens/Onboarding/StepFollowingFeed.tsx:71
msgid "Show replies in Following feed"
msgstr "Mostrar respostas no feed Seguindo"
-#: src/view/screens/PreferencesHomeFeed.tsx:70
+#: src/view/screens/PreferencesFollowingFeed.tsx:70
msgid "Show replies with at least {value} {0}"
msgstr "Mostrar respostas com ao menos {0} {value}"
-#: src/view/screens/PreferencesHomeFeed.tsx:188
+#: src/view/screens/PreferencesFollowingFeed.tsx:188
msgid "Show Reposts"
msgstr "Mostrar Reposts"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:110
+#: src/screens/Onboarding/StepFollowingFeed.tsx:111
msgid "Show reposts in Following"
msgstr "Mostrar reposts no Seguindo"
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:68
+#: src/components/moderation/PostHider.tsx:64
msgid "Show the content"
msgstr "Mostrar conteúdo"
-#: src/view/com/notifications/FeedItem.tsx:346
+#: src/view/com/notifications/FeedItem.tsx:351
msgid "Show users"
msgstr "Mostrar usuários"
-#: src/view/com/profile/ProfileHeader.tsx:461
-msgid "Shows a list of users similar to this user."
-msgstr "Mostra uma lista de usuários parecidos com este"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:58
+msgid "Show warning"
+msgstr "Mostrar aviso"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:56
+msgid "Show warning and filter from feeds"
+msgstr "Mostrar aviso e filtrar dos feeds"
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:124
-#: src/view/com/profile/ProfileHeader.tsx:505
+#: src/view/com/profile/ProfileHeader.tsx:462
+#~ msgid "Shows a list of users similar to this user."
+#~ msgstr "Mostra uma lista de usuários parecidos com este"
+
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:130
msgid "Shows posts from {0} in your feed"
msgstr "Mostra posts de {0} no seu feed"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:70
-#: src/view/com/auth/login/Login.tsx:98
-#: src/view/com/auth/SplashScreen.tsx:54
-#: src/view/shell/bottom-bar/BottomBar.tsx:285
-#: src/view/shell/bottom-bar/BottomBar.tsx:286
-#: src/view/shell/bottom-bar/BottomBar.tsx:288
+#: src/screens/Login/index.tsx:100
+#: src/screens/Login/index.tsx:119
+#: src/screens/Login/LoginForm.tsx:131
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:73
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:83
+#: src/view/com/auth/SplashScreen.tsx:81
+#: src/view/com/auth/SplashScreen.tsx:90
+#: src/view/com/auth/SplashScreen.web.tsx:110
+#: src/view/com/auth/SplashScreen.web.tsx:119
+#: src/view/shell/bottom-bar/BottomBar.tsx:300
+#: src/view/shell/bottom-bar/BottomBar.tsx:301
+#: src/view/shell/bottom-bar/BottomBar.tsx:303
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:178
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:179
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:181
#: src/view/shell/NavSignupCard.tsx:58
#: src/view/shell/NavSignupCard.tsx:59
+#: src/view/shell/NavSignupCard.tsx:61
msgid "Sign in"
msgstr "Fazer login"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:78
-#: src/view/com/auth/SplashScreen.tsx:57
-#: src/view/com/auth/SplashScreen.web.tsx:87
-msgid "Sign In"
-msgstr "Fazer Login"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:82
+#: src/view/com/auth/SplashScreen.tsx:86
+#: src/view/com/auth/SplashScreen.web.tsx:91
+#~ msgid "Sign In"
+#~ msgstr "Fazer Login"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:44
+#: src/components/AccountList.tsx:109
msgid "Sign in as {0}"
msgstr "Fazer login como {0}"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:118
-#: src/view/com/auth/login/Login.tsx:116
+#: src/screens/Login/ChooseAccountForm.tsx:64
msgid "Sign in as..."
msgstr "Fazer login como..."
-#: src/view/com/auth/login/LoginForm.tsx:137
-msgid "Sign into"
-msgstr "Fazer login"
+#: src/view/com/auth/login/LoginForm.tsx:140
+#~ msgid "Sign into"
+#~ msgstr "Fazer login"
-#: src/view/com/modals/SwitchAccount.tsx:64
-#: src/view/com/modals/SwitchAccount.tsx:69
-#: src/view/screens/Settings/index.tsx:100
-#: src/view/screens/Settings/index.tsx:103
+#: src/view/screens/Settings/index.tsx:107
+#: src/view/screens/Settings/index.tsx:110
msgid "Sign out"
msgstr "Sair"
-#: src/view/shell/bottom-bar/BottomBar.tsx:275
-#: src/view/shell/bottom-bar/BottomBar.tsx:276
-#: src/view/shell/bottom-bar/BottomBar.tsx:278
+#: src/view/shell/bottom-bar/BottomBar.tsx:290
+#: src/view/shell/bottom-bar/BottomBar.tsx:291
+#: src/view/shell/bottom-bar/BottomBar.tsx:293
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:168
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:169
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:171
@@ -3636,36 +4550,33 @@ msgstr "Inscrever-se"
msgid "Sign up or sign in to join the conversation"
msgstr "Inscreva-se ou faça login para se juntar à conversa"
-#: src/view/com/util/moderation/ScreenHider.tsx:76
+#: src/components/moderation/ScreenHider.tsx:97
+#: src/lib/moderation/useGlobalLabelStrings.ts:28
msgid "Sign-in Required"
msgstr "É Necessário Fazer Login"
-#: src/view/screens/Settings/index.tsx:355
+#: src/view/screens/Settings/index.tsx:374
msgid "Signed in as"
msgstr "Entrou como"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:103
+#: src/screens/Login/ChooseAccountForm.tsx:48
msgid "Signed in as @{0}"
-msgstr "Logado como @{0}"
+msgstr "autenticado como @{0}"
-#: src/view/com/modals/SwitchAccount.tsx:66
-msgid "Signs {0} out of Bluesky"
-msgstr "Desloga a conta {0}"
+#: src/view/com/modals/SwitchAccount.tsx:70
+#~ msgid "Signs {0} out of Bluesky"
+#~ msgstr "Desloga a conta {0}"
-#: src/screens/Onboarding/StepInterests/index.tsx:235
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:195
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:33
+#: src/screens/Onboarding/StepInterests/index.tsx:239
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:203
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:35
msgid "Skip"
msgstr "Pular"
-#: src/screens/Onboarding/StepInterests/index.tsx:232
+#: src/screens/Onboarding/StepInterests/index.tsx:236
msgid "Skip this flow"
msgstr "Pular"
-#: src/view/com/auth/create/Step2.tsx:82
-msgid "SMS verification"
-msgstr "Verificação por SMS"
-
#: src/screens/Onboarding/index.tsx:40
msgid "Software Dev"
msgstr "Desenvolvimento de software"
@@ -3674,11 +4585,21 @@ msgstr "Desenvolvimento de software"
#~ msgid "Something went wrong and we're not sure what."
#~ msgstr "Algo deu errado e meio que não sabemos o que houve."
+#: src/components/ReportDialog/index.tsx:59
+#: src/screens/Moderation/index.tsx:114
+#: src/screens/Profile/Sections/Labels.tsx:76
+msgid "Something went wrong, please try again."
+msgstr "Algo deu errado. Por favor, tente novamente."
+
+#: src/components/Lists.tsx:203
+#~ msgid "Something went wrong!"
+#~ msgstr "Algo deu errado!"
+
#: src/view/com/modals/Waitlist.tsx:51
-msgid "Something went wrong. Check your email and try again."
-msgstr "Algo deu errado. Verifique seu e-mail e tente novamente."
+#~ msgid "Something went wrong. Check your email and try again."
+#~ msgstr "Algo deu errado. Verifique seu e-mail e tente novamente."
-#: src/App.native.tsx:61
+#: src/App.native.tsx:66
msgid "Sorry! Your session expired. Please log in again."
msgstr "Opa! Sua sessão expirou. Por favor, entre novamente."
@@ -3690,57 +4611,82 @@ msgstr "Classificar Respostas"
msgid "Sort replies to the same post by:"
msgstr "Classificar respostas de um post por:"
+#: src/components/moderation/LabelsOnMeDialog.tsx:146
+msgid "Source:"
+msgstr "Fonte:"
+
+#: src/lib/moderation/useReportOptions.ts:65
+msgid "Spam"
+msgstr "Spam"
+
+#: src/lib/moderation/useReportOptions.ts:53
+msgid "Spam; excessive mentions or replies"
+msgstr "Spam; menções ou respostas excessivas"
+
#: src/screens/Onboarding/index.tsx:30
msgid "Sports"
msgstr "Esportes"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:122
+#: src/view/com/modals/crop-image/CropImage.web.tsx:123
msgid "Square"
msgstr "Quadrado"
-#: src/view/com/modals/ServerInput.tsx:62
-#~ msgid "Staging"
-#~ msgstr "Staging"
-
-#: src/view/screens/Settings/index.tsx:871
+#: src/view/screens/Settings/index.tsx:903
msgid "Status page"
msgstr "Página de status"
+#: src/screens/Signup/index.tsx:142
+msgid "Step"
+msgstr ""
+
#: src/view/com/auth/create/StepHeader.tsx:22
-msgid "Step {0} of {numSteps}"
-msgstr "Passo {0} de {numSteps}"
+#~ msgid "Step {0} of {numSteps}"
+#~ msgstr "Passo {0} de {numSteps}"
-#: src/view/screens/Settings/index.tsx:274
+#: src/view/screens/Settings/index.tsx:292
msgid "Storage cleared, you need to restart the app now."
msgstr "Armazenamento limpo, você precisa reiniciar o app agora."
-#: src/Navigation.tsx:202
-#: src/view/screens/Settings/index.tsx:807
+#: src/Navigation.tsx:211
+#: src/view/screens/Settings/index.tsx:831
msgid "Storybook"
msgstr "Storybook"
-#: src/view/com/modals/AppealLabel.tsx:101
+#: src/components/moderation/LabelsOnMeDialog.tsx:255
+#: src/components/moderation/LabelsOnMeDialog.tsx:256
msgid "Submit"
msgstr "Enviar"
-#: src/view/screens/ProfileList.tsx:607
+#: src/view/screens/ProfileList.tsx:590
msgid "Subscribe"
msgstr "Inscrever-se"
-#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:173
+#: src/screens/Profile/Sections/Labels.tsx:180
+msgid "Subscribe to @{0} to use these labels:"
+msgstr "Inscreva-se em @{0} para utilizar estes rótulos:"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:221
+msgid "Subscribe to Labeler"
+msgstr "Inscrever-se no rotulador"
+
+#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:172
#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:307
msgid "Subscribe to the {0} feed"
msgstr "Increver-se no feed {0}"
-#: src/view/screens/ProfileList.tsx:603
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:184
+msgid "Subscribe to this labeler"
+msgstr "Inscrever-se neste rotulador"
+
+#: src/view/screens/ProfileList.tsx:586
msgid "Subscribe to this list"
msgstr "Inscreva-se nesta lista"
-#: src/view/screens/Search/Search.tsx:373
+#: src/view/screens/Search/Search.tsx:376
msgid "Suggested Follows"
msgstr "Sugestões de Seguidores"
-#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:64
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:65
msgid "Suggested for you"
msgstr "Sugeridos para você"
@@ -3748,39 +4694,46 @@ msgstr "Sugeridos para você"
msgid "Suggestive"
msgstr "Sugestivo"
-#: src/Navigation.tsx:212
+#: src/Navigation.tsx:226
#: src/view/screens/Support.tsx:30
#: src/view/screens/Support.tsx:33
msgid "Support"
msgstr "Suporte"
-#: src/view/com/modals/ProfilePreview.tsx:110
-#~ msgid "Swipe up to see more"
-#~ msgstr "Deslize para cima para ver mais"
-
-#: src/view/com/modals/SwitchAccount.tsx:117
+#: src/components/dialogs/SwitchAccount.tsx:46
+#: src/components/dialogs/SwitchAccount.tsx:49
msgid "Switch Account"
msgstr "Alterar Conta"
-#: src/view/com/modals/SwitchAccount.tsx:97
-#: src/view/screens/Settings/index.tsx:130
+#: src/view/screens/Settings/index.tsx:139
msgid "Switch to {0}"
msgstr "Trocar para {0}"
-#: src/view/com/modals/SwitchAccount.tsx:98
-#: src/view/screens/Settings/index.tsx:131
+#: src/view/screens/Settings/index.tsx:140
msgid "Switches the account you are logged in to"
-msgstr "Troca a conta que você está logado"
+msgstr "Troca a conta que você está autenticado"
-#: src/view/screens/Settings/index.tsx:472
+#: src/view/screens/Settings/index.tsx:491
msgid "System"
msgstr "Sistema"
-#: src/view/screens/Settings/index.tsx:795
+#: src/view/screens/Settings/index.tsx:819
msgid "System log"
msgstr "Log do sistema"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:112
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "tag"
+msgstr "tag"
+
+#: src/components/TagMenu/index.tsx:78
+msgid "Tag menu: {displayTag}"
+msgstr "Menu da tag: {displayTag}"
+
+#: src/components/TagMenu/index.tsx:74
+#~ msgid "Tag menu: {tag}"
+#~ msgstr "Menu da tag: {tag}"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:113
msgid "Tall"
msgstr "Alto"
@@ -3792,26 +4745,53 @@ msgstr "Toque para ver tudo"
msgid "Tech"
msgstr "Tecnologia"
-#: src/view/shell/desktop/RightNav.tsx:89
+#: src/view/shell/desktop/RightNav.tsx:81
msgid "Terms"
msgstr "Termos"
-#: src/Navigation.tsx:222
-#: src/view/screens/Settings/index.tsx:885
+#: src/Navigation.tsx:236
+#: src/screens/Signup/StepInfo/Policies.tsx:49
+#: src/view/screens/Settings/index.tsx:917
#: src/view/screens/TermsOfService.tsx:29
-#: src/view/shell/Drawer.tsx:256
+#: src/view/shell/Drawer.tsx:259
msgid "Terms of Service"
msgstr "Termos de Serviço"
-#: src/view/com/modals/AppealLabel.tsx:70
-#: src/view/com/modals/report/InputIssueDetails.tsx:51
+#: src/lib/moderation/useReportOptions.ts:58
+#: src/lib/moderation/useReportOptions.ts:79
+#: src/lib/moderation/useReportOptions.ts:87
+msgid "Terms used violate community standards"
+msgstr "Termos utilizados violam as diretrizes da comunidade"
+
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "text"
+msgstr "texto"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:219
msgid "Text input field"
msgstr "Campo de entrada de texto"
-#: src/view/com/profile/ProfileHeader.tsx:262
+#: src/components/ReportDialog/SubmitView.tsx:78
+msgid "Thank you. Your report has been sent."
+msgstr "Obrigado. Sua denúncia foi enviada."
+
+#: src/view/com/modals/ChangeHandle.tsx:465
+msgid "That contains the following:"
+msgstr "Contém o seguinte:"
+
+#: src/screens/Signup/index.tsx:84
+msgid "That handle is already taken."
+msgstr "Este identificador de usuário já está sendo usado."
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:283
+#: src/view/com/profile/ProfileMenu.tsx:349
msgid "The account will be able to interact with you after unblocking."
msgstr "A conta poderá interagir com você após o desbloqueio."
+#: src/components/moderation/ModerationDetailsDialog.tsx:127
+msgid "the author"
+msgstr "o(a) autor(a)"
+
#: src/view/screens/CommunityGuidelines.tsx:36
msgid "The Community Guidelines have been moved to <0/>"
msgstr "As Diretrizes da Comunidade foram movidas para <0/>"
@@ -3820,11 +4800,20 @@ msgstr "As Diretrizes da Comunidade foram movidas para <0/>"
msgid "The Copyright Policy has been moved to <0/>"
msgstr "A Política de Direitos Autorais foi movida para <0/>"
-#: src/screens/Onboarding/Layout.tsx:60
+#: src/components/moderation/LabelsOnMeDialog.tsx:48
+msgid "The following labels were applied to your account."
+msgstr "Os seguintes rótulos foram aplicados sobre sua conta."
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:49
+msgid "The following labels were applied to your content."
+msgstr "Os seguintes rótulos foram aplicados sobre seu conteúdo."
+
+#: src/screens/Onboarding/Layout.tsx:58
msgid "The following steps will help customize your Bluesky experience."
msgstr "Os seguintes passos vão ajudar a customizar sua experiência no Bluesky."
-#: src/view/com/post-thread/PostThread.tsx:453
+#: src/view/com/post-thread/PostThread.tsx:153
+#: src/view/com/post-thread/PostThread.tsx:165
msgid "The post may have been deleted."
msgstr "O post pode ter sido excluído."
@@ -3840,24 +4829,25 @@ msgstr "O formulário de suporte foi movido. Se precisar de ajuda, <0/> ou visit
msgid "The Terms of Service have been moved to"
msgstr "Os Termos de Serviço foram movidos para"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:150
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:141
msgid "There are many feeds to try:"
msgstr "Temos vários feeds para você experimentar:"
-#: src/view/screens/ProfileFeed.tsx:549
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:112
+#: src/view/screens/ProfileFeed.tsx:544
msgid "There was an an issue contacting the server, please check your internet connection and try again."
msgstr "Tivemos um problema ao contatar o servidor, por favor verifique sua conexão com a internet e tente novamente."
-#: src/view/com/posts/FeedErrorMessage.tsx:139
+#: src/view/com/posts/FeedErrorMessage.tsx:138
msgid "There was an an issue removing this feed. Please check your internet connection and try again."
msgstr "Tivemos um problema ao remover este feed, por favor verifique sua conexão com a internet e tente novamente."
-#: src/view/screens/ProfileFeed.tsx:209
+#: src/view/screens/ProfileFeed.tsx:218
msgid "There was an an issue updating your feeds, please check your internet connection and try again."
msgstr "Tivemos um problema ao atualizar seus feeds, por favor verifique sua conexão com a internet e tente novamente."
-#: src/view/screens/ProfileFeed.tsx:236
-#: src/view/screens/ProfileList.tsx:266
+#: src/view/screens/ProfileFeed.tsx:245
+#: src/view/screens/ProfileList.tsx:275
#: src/view/screens/SavedFeeds.tsx:209
#: src/view/screens/SavedFeeds.tsx:231
#: src/view/screens/SavedFeeds.tsx:252
@@ -3866,9 +4856,8 @@ msgstr "Tivemos um problema ao contatar o servidor deste feed"
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:57
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:66
-#: src/view/com/feeds/FeedSourceCard.tsx:113
-#: src/view/com/feeds/FeedSourceCard.tsx:127
-#: src/view/com/feeds/FeedSourceCard.tsx:181
+#: src/view/com/feeds/FeedSourceCard.tsx:110
+#: src/view/com/feeds/FeedSourceCard.tsx:123
msgid "There was an issue contacting your server"
msgstr "Tivemos um problema ao contatar o servidor deste feed"
@@ -3876,7 +4865,7 @@ msgstr "Tivemos um problema ao contatar o servidor deste feed"
msgid "There was an issue fetching notifications. Tap here to try again."
msgstr "Tivemos um problema ao carregar notificações. Toque aqui para tentar de novo."
-#: src/view/com/posts/Feed.tsx:263
+#: src/view/com/posts/Feed.tsx:287
msgid "There was an issue fetching posts. Tap here to try again."
msgstr "Tivemos um problema ao carregar posts. Toque aqui para tentar de novo."
@@ -3889,34 +4878,40 @@ msgstr "Tivemos um problema ao carregar esta lista. Toque aqui para tentar de no
msgid "There was an issue fetching your lists. Tap here to try again."
msgstr "Tivemos um problema ao carregar suas listas. Toque aqui para tentar de novo."
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:63
-#: src/view/com/modals/ContentFilteringSettings.tsx:126
+#: src/components/ReportDialog/SubmitView.tsx:83
+msgid "There was an issue sending your report. Please check your internet connection."
+msgstr "Tivemos um problema ao enviar sua denúncia. Por favor, verifique sua conexão com a internet."
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:65
msgid "There was an issue syncing your preferences with the server"
msgstr "Tivemos um problema ao sincronizar suas configurações"
-#: src/view/screens/AppPasswords.tsx:66
+#: src/view/screens/AppPasswords.tsx:68
msgid "There was an issue with fetching your app passwords"
msgstr "Tivemos um problema ao carregar suas senhas de app."
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:93
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:105
-#: src/view/com/profile/ProfileHeader.tsx:156
-#: src/view/com/profile/ProfileHeader.tsx:177
-#: src/view/com/profile/ProfileHeader.tsx:216
-#: src/view/com/profile/ProfileHeader.tsx:229
-#: src/view/com/profile/ProfileHeader.tsx:249
-#: src/view/com/profile/ProfileHeader.tsx:271
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:105
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:127
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:99
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:111
+#: src/view/com/profile/ProfileMenu.tsx:106
+#: src/view/com/profile/ProfileMenu.tsx:117
+#: src/view/com/profile/ProfileMenu.tsx:132
+#: src/view/com/profile/ProfileMenu.tsx:143
+#: src/view/com/profile/ProfileMenu.tsx:157
+#: src/view/com/profile/ProfileMenu.tsx:170
msgid "There was an issue! {0}"
msgstr "Tivemos um problema! {0}"
-#: src/view/screens/ProfileList.tsx:287
-#: src/view/screens/ProfileList.tsx:306
-#: src/view/screens/ProfileList.tsx:328
-#: src/view/screens/ProfileList.tsx:347
+#: src/view/screens/ProfileList.tsx:288
+#: src/view/screens/ProfileList.tsx:302
+#: src/view/screens/ProfileList.tsx:316
+#: src/view/screens/ProfileList.tsx:330
msgid "There was an issue. Please check your internet connection and try again."
msgstr "Tivemos algum problema. Por favor verifique sua conexão com a internet e tente novamente."
-#: src/view/com/util/ErrorBoundary.tsx:36
+#: src/view/com/util/ErrorBoundary.tsx:51
msgid "There was an unexpected issue in the application. Please let us know if this happened to you!"
msgstr "Houve um problema inesperado no aplicativo. Por favor, deixe-nos saber se isso aconteceu com você!"
@@ -3924,27 +4919,36 @@ msgstr "Houve um problema inesperado no aplicativo. Por favor, deixe-nos saber s
msgid "There's been a rush of new users to Bluesky! We'll activate your account as soon as we can."
msgstr "Muitos usuários estão tentando acessar o Bluesky! Ativaremos sua conta assim que possível."
-#: src/view/com/auth/create/Step2.tsx:55
-msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
-msgstr "Houve um problema com este número. Por favor, escolha um país e digite seu número de telefone completo!"
-
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:138
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:146
msgid "These are popular accounts you might like:"
msgstr "Estas são contas populares que talvez você goste:"
-#: src/view/com/util/moderation/ScreenHider.tsx:88
+#: src/components/moderation/ScreenHider.tsx:116
msgid "This {screenDescription} has been flagged:"
msgstr "Este {screenDescription} foi reportado:"
-#: src/view/com/util/moderation/ScreenHider.tsx:83
+#: src/components/moderation/ScreenHider.tsx:111
msgid "This account has requested that users sign in to view their profile."
msgstr "Esta conta solicitou que os usuários fizessem login para visualizar seu perfil."
-#: src/view/com/modals/EmbedConsent.tsx:68
+#: src/components/moderation/LabelsOnMeDialog.tsx:204
+msgid "This appeal will be sent to <0>{0}0>."
+msgstr "Esta contestação será enviada para <0>{0}0>."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:19
+msgid "This content has been hidden by the moderators."
+msgstr "Este conteúdo foi escondido pelos moderadores."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:24
+msgid "This content has received a general warning from moderators."
+msgstr "Este conteúdo recebeu um aviso dos moderadores."
+
+#: src/components/dialogs/EmbedConsent.tsx:64
msgid "This content is hosted by {0}. Do you want to enable external media?"
msgstr "Este conteúdo é hospedado por {0}. Deseja ativar a mídia externa?"
-#: src/view/com/modals/ModerationDetails.tsx:67
+#: src/components/moderation/ModerationDetailsDialog.tsx:77
+#: src/lib/moderation/useModerationCauseDescription.ts:77
msgid "This content is not available because one of the users involved has blocked the other."
msgstr "Este conteúdo não está disponível porque um dos usuários bloqueou o outro."
@@ -3953,16 +4957,20 @@ msgid "This content is not viewable without a Bluesky account."
msgstr "Este conteúdo não é visível sem uma conta do Bluesky."
#: src/view/screens/Settings/ExportCarDialog.tsx:75
-msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
-msgstr ""
+#~ msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
+#~ msgstr "Esta funcionalidade está em beta. Você pode ler mais sobre exportação de repositórios <0>neste post0> do nosso blog."
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:75
+msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost0>."
+msgstr "Esta funcionalidade está em beta. Você pode ler mais sobre exportação de repositórios <0>neste post0> do nosso blog."
#: src/view/com/posts/FeedErrorMessage.tsx:114
msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later."
msgstr "Este feed está recebendo muito tráfego e está temporariamente indisponível. Por favor, tente novamente mais tarde."
-#: src/view/screens/Profile.tsx:420
-#: src/view/screens/ProfileFeed.tsx:475
-#: src/view/screens/ProfileList.tsx:660
+#: src/screens/Profile/Sections/Feed.tsx:50
+#: src/view/screens/ProfileFeed.tsx:477
+#: src/view/screens/ProfileList.tsx:675
msgid "This feed is empty!"
msgstr "Este feed está vazio!"
@@ -3970,7 +4978,7 @@ msgstr "Este feed está vazio!"
msgid "This feed is empty! You may need to follow more users or tune your language settings."
msgstr "Este feed está vazio! Talvez você precise seguir mais usuários ou configurar os idiomas filtrados."
-#: src/view/com/modals/BirthDateSettings.tsx:61
+#: src/components/dialogs/BirthDateSettings.tsx:41
msgid "This information is not shared with other users."
msgstr "Esta informação não é compartilhada com outros usuários."
@@ -3978,48 +4986,106 @@ msgstr "Esta informação não é compartilhada com outros usuários."
msgid "This is important in case you ever need to change your email or reset your password."
msgstr "Isso é importante caso você precise alterar seu e-mail ou redefinir sua senha."
-#: src/view/com/modals/LinkWarning.tsx:58
+#: src/components/moderation/ModerationDetailsDialog.tsx:124
+msgid "This label was applied by {0}."
+msgstr "Este rótulo foi aplicado por {0}."
+
+#: src/screens/Profile/Sections/Labels.tsx:167
+msgid "This labeler hasn't declared what labels it publishes, and may not be active."
+msgstr "Este rotulador não declarou quais rótulos utiliza e pode não estar funcionando ainda."
+
+#: src/view/com/modals/LinkWarning.tsx:72
msgid "This link is taking you to the following website:"
msgstr "Este link está levando você ao seguinte site:"
-#: src/view/screens/ProfileList.tsx:834
+#: src/view/screens/ProfileList.tsx:853
msgid "This list is empty!"
msgstr "Esta lista está vazia!"
-#: src/view/com/modals/AddAppPasswords.tsx:106
+#: src/screens/Profile/ErrorState.tsx:40
+msgid "This moderation service is unavailable. See below for more details. If this issue persists, contact us."
+msgstr "Este serviço de moderação está indisponível. Veja mais detalhes abaixo. Se este problema persistir, entre em contato."
+
+#: src/view/com/modals/AddAppPasswords.tsx:107
msgid "This name is already in use"
msgstr "Você já tem uma senha com esse nome"
-#: src/view/com/post-thread/PostThreadItem.tsx:122
+#: src/view/com/post-thread/PostThreadItem.tsx:125
msgid "This post has been deleted."
msgstr "Este post foi excluído."
-#: src/view/com/modals/ModerationDetails.tsx:62
+#: src/view/com/util/forms/PostDropdownBtn.tsx:344
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:248
+msgid "This post is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr "Este post só pode ser visto por usuários autenticados e não aparecerá para pessoas que não estão autenticadas."
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:326
+msgid "This post will be hidden from feeds."
+msgstr "Este post será escondido de todos os feeds."
+
+#: src/view/com/profile/ProfileMenu.tsx:370
+msgid "This profile is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr "Este post só pode ser visto por usuários autenticados e não aparecerá para pessoas que não estão autenticadas."
+
+#: src/screens/Signup/StepInfo/Policies.tsx:37
+msgid "This service has not provided terms of service or a privacy policy."
+msgstr "Este serviço não proveu termos de serviço ou política de privacidade."
+
+#: src/view/com/modals/ChangeHandle.tsx:445
+msgid "This should create a domain record at:"
+msgstr "Isso deve criar um registro no domínio:"
+
+#: src/view/com/profile/ProfileFollowers.tsx:87
+msgid "This user doesn't have any followers."
+msgstr "Este usuário não é seguido por ninguém ainda."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:72
+#: src/lib/moderation/useModerationCauseDescription.ts:68
msgid "This user has blocked you. You cannot view their content."
msgstr "Este usuário te bloqueou. Você não pode ver este conteúdo."
-#: src/view/com/modals/ModerationDetails.tsx:42
-msgid "This user is included in the <0/> list which you have blocked."
-msgstr "Este usuário está incluído na lista <0/>, que você bloqueou."
+#: src/lib/moderation/useGlobalLabelStrings.ts:30
+msgid "This user has requested that their content only be shown to signed-in users."
+msgstr "Este usuário requisitou que seu conteúdo só seja visível para usuários autenticados."
-#: src/view/com/modals/ModerationDetails.tsx:74
-msgid "This user is included in the <0/> list which you have muted."
-msgstr "Este usuário está incluído na lista <0/>, que você silenciou."
+#: src/view/com/modals/ModerationDetails.tsx:42
+#~ msgid "This user is included in the <0/> list which you have blocked."
+#~ msgstr "Este usuário está incluído na lista <0/>, que você bloqueou."
#: src/view/com/modals/ModerationDetails.tsx:74
-#~ msgid "This user is included the <0/> list which you have muted."
+#~ msgid "This user is included in the <0/> list which you have muted."
#~ msgstr "Este usuário está incluído na lista <0/>, que você silenciou."
+#: src/components/moderation/ModerationDetailsDialog.tsx:55
+msgid "This user is included in the <0>{0}0> list which you have blocked."
+msgstr "Este usuário está incluído na lista <0>{0}0>, que você bloqueou."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:84
+msgid "This user is included in the <0>{0}0> list which you have muted."
+msgstr "Este usuário está incluído na lista <0>{0}0>, que você silenciou."
+
+#: src/view/com/profile/ProfileFollows.tsx:87
+msgid "This user isn't following anyone."
+msgstr "Este usuário não segue ninguém ainda."
+
#: src/view/com/modals/SelfLabel.tsx:137
msgid "This warning is only available for posts with media attached."
msgstr "Este aviso só está disponível para publicações com mídia anexada."
-#: src/view/com/util/forms/PostDropdownBtn.tsx:192
-msgid "This will hide this post from your feeds."
-msgstr "Isso ocultará este post de seus feeds."
+#: src/components/dialogs/MutedWords.tsx:283
+msgid "This will delete {0} from your muted words. You can always add it back later."
+msgstr "Isso removerá {0} das suas palavras silenciadas. Você pode adicioná-la novamente depois."
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:282
+#~ msgid "This will hide this post from your feeds."
+#~ msgstr "Isso ocultará este post de seus feeds."
+
+#: src/view/screens/Settings/index.tsx:574
+msgid "Thread preferences"
+msgstr "Preferências das Threads"
#: src/view/screens/PreferencesThreads.tsx:53
-#: src/view/screens/Settings/index.tsx:565
+#: src/view/screens/Settings/index.tsx:584
msgid "Thread Preferences"
msgstr "Preferências das Threads"
@@ -4027,21 +5093,34 @@ msgstr "Preferências das Threads"
msgid "Threaded Mode"
msgstr "Visualização de Threads"
-#: src/Navigation.tsx:252
+#: src/Navigation.tsx:269
msgid "Threads Preferences"
msgstr "Preferências das Threads"
+#: src/components/ReportDialog/SelectLabelerView.tsx:33
+msgid "To whom would you like to send this report?"
+msgstr "Para quem você gostaria de enviar esta denúncia?"
+
+#: src/components/dialogs/MutedWords.tsx:112
+msgid "Toggle between muted word options."
+msgstr "Alternar entre opções de uma palavra silenciada"
+
#: src/view/com/util/forms/DropdownButton.tsx:246
msgid "Toggle dropdown"
msgstr "Alternar menu suspenso"
-#: src/view/com/modals/EditImage.tsx:271
+#: src/screens/Moderation/index.tsx:332
+msgid "Toggle to enable or disable adult content"
+msgstr "Ligar ou desligar conteúdo adulto"
+
+#: src/view/com/modals/EditImage.tsx:272
msgid "Transformations"
msgstr "Transformações"
-#: src/view/com/post-thread/PostThreadItem.tsx:686
-#: src/view/com/post-thread/PostThreadItem.tsx:688
-#: src/view/com/util/forms/PostDropdownBtn.tsx:125
+#: src/view/com/post-thread/PostThreadItem.tsx:644
+#: src/view/com/post-thread/PostThreadItem.tsx:646
+#: src/view/com/util/forms/PostDropdownBtn.tsx:212
+#: src/view/com/util/forms/PostDropdownBtn.tsx:214
msgid "Translate"
msgstr "Traduzir"
@@ -4050,108 +5129,195 @@ msgctxt "action"
msgid "Try again"
msgstr "Tentar novamente"
-#: src/view/screens/ProfileList.tsx:505
+#: src/view/com/modals/ChangeHandle.tsx:428
+msgid "Type:"
+msgstr "Tipo:"
+
+#: src/view/screens/ProfileList.tsx:478
msgid "Un-block list"
msgstr "Desbloquear lista"
-#: src/view/screens/ProfileList.tsx:490
+#: src/view/screens/ProfileList.tsx:461
msgid "Un-mute list"
msgstr "Dessilenciar lista"
-#: src/view/com/auth/create/CreateAccount.tsx:66
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:87
-#: src/view/com/auth/login/Login.tsx:76
-#: src/view/com/auth/login/LoginForm.tsx:118
+#: src/screens/Login/ForgotPasswordForm.tsx:74
+#: src/screens/Login/index.tsx:78
+#: src/screens/Login/LoginForm.tsx:119
+#: src/screens/Login/SetNewPasswordForm.tsx:77
+#: src/screens/Signup/index.tsx:63
#: src/view/com/modals/ChangePassword.tsx:70
msgid "Unable to contact your service. Please check your Internet connection."
msgstr "Não foi possível entrar em contato com seu serviço. Por favor, verifique sua conexão à internet."
-#: src/view/com/profile/ProfileHeader.tsx:432
-#: src/view/screens/ProfileList.tsx:589
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:181
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+#: src/view/screens/ProfileList.tsx:572
msgid "Unblock"
msgstr "Desbloquear"
-#: src/view/com/profile/ProfileHeader.tsx:435
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:186
msgctxt "action"
msgid "Unblock"
msgstr "Desbloquear"
-#: src/view/com/profile/ProfileHeader.tsx:260
-#: src/view/com/profile/ProfileHeader.tsx:344
+#: src/view/com/profile/ProfileMenu.tsx:299
+#: src/view/com/profile/ProfileMenu.tsx:305
msgid "Unblock Account"
msgstr "Desbloquear Conta"
-#: src/view/com/modals/Repost.tsx:42
-#: src/view/com/modals/Repost.tsx:55
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:281
+#: src/view/com/profile/ProfileMenu.tsx:343
+msgid "Unblock Account?"
+msgstr "Desbloquear Conta?"
+
+#: src/view/com/modals/Repost.tsx:43
+#: src/view/com/modals/Repost.tsx:56
#: src/view/com/util/post-ctrls/RepostButton.tsx:60
#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
msgid "Undo repost"
msgstr "Desfazer repost"
-#: src/view/com/profile/FollowButton.tsx:55
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
+msgid "Unfollow"
+msgstr "Deixar de seguir"
+
+#: src/view/com/profile/FollowButton.tsx:60
msgctxt "action"
msgid "Unfollow"
msgstr "Deixar de seguir"
-#: src/view/com/profile/ProfileHeader.tsx:484
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:220
msgid "Unfollow {0}"
msgstr "Deixar de seguir {0}"
-#: src/view/com/auth/create/state.ts:300
-msgid "Unfortunately, you do not meet the requirements to create an account."
-msgstr "Infelizmente, você não atende aos requisitos para criar uma conta."
+#: src/view/com/profile/ProfileMenu.tsx:241
+#: src/view/com/profile/ProfileMenu.tsx:251
+msgid "Unfollow Account"
+msgstr "Deixar de seguir"
+
+#: src/view/com/auth/create/state.ts:262
+#~ msgid "Unfortunately, you do not meet the requirements to create an account."
+#~ msgstr "Infelizmente, você não atende aos requisitos para criar uma conta."
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Unlike"
msgstr "Descurtir"
-#: src/view/screens/ProfileList.tsx:596
+#: src/view/screens/ProfileFeed.tsx:573
+msgid "Unlike this feed"
+msgstr "Descurtir este feed"
+
+#: src/components/TagMenu/index.tsx:249
+#: src/view/screens/ProfileList.tsx:579
msgid "Unmute"
msgstr "Dessilenciar"
-#: src/view/com/profile/ProfileHeader.tsx:325
+#: src/components/TagMenu/index.web.tsx:104
+msgid "Unmute {truncatedTag}"
+msgstr "Dessilenciar {truncatedTag}"
+
+#: src/view/com/profile/ProfileMenu.tsx:278
+#: src/view/com/profile/ProfileMenu.tsx:284
msgid "Unmute Account"
msgstr "Dessilenciar conta"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/components/TagMenu/index.tsx:208
+msgid "Unmute all {displayTag} posts"
+msgstr "Dessilenciar posts com {displayTag}"
+
+#: src/components/TagMenu/index.tsx:210
+#~ msgid "Unmute all {tag} posts"
+#~ msgstr "Dessilenciar posts com {tag}"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:256
msgid "Unmute thread"
msgstr "Dessilenciar thread"
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:295
+#: src/view/screens/ProfileList.tsx:563
msgid "Unpin"
msgstr "Desafixar"
-#: src/view/screens/ProfileList.tsx:473
+#: src/view/screens/ProfileFeed.tsx:292
+msgid "Unpin from home"
+msgstr "Desafixar da tela inicial"
+
+#: src/view/screens/ProfileList.tsx:444
msgid "Unpin moderation list"
msgstr "Desafixar lista de moderação"
-#: src/view/screens/ProfileFeed.tsx:345
-msgid "Unsave"
-msgstr "Remover"
+#: src/view/screens/ProfileFeed.tsx:346
+#~ msgid "Unsave"
+#~ msgstr "Remover"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:219
+msgid "Unsubscribe"
+msgstr "Desinscrever-se"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:183
+msgid "Unsubscribe from this labeler"
+msgstr "Desinscrever-se deste rotulador"
+
+#: src/lib/moderation/useReportOptions.ts:70
+msgid "Unwanted Sexual Content"
+msgstr "Conteúdo Sexual Indesejado"
#: src/view/com/modals/UserAddRemoveLists.tsx:70
msgid "Update {displayName} in Lists"
msgstr "Atualizar {displayName} nas Listas"
#: src/lib/hooks/useOTAUpdate.ts:15
-msgid "Update Available"
-msgstr "Atualização Disponível"
+#~ msgid "Update Available"
+#~ msgstr "Atualização Disponível"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:204
+#: src/view/com/modals/ChangeHandle.tsx:508
+msgid "Update to {handle}"
+msgstr "Alterar para {handle}"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:186
msgid "Updating..."
msgstr "Atualizando..."
-#: src/view/com/modals/ChangeHandle.tsx:455
+#: src/view/com/modals/ChangeHandle.tsx:454
msgid "Upload a text file to:"
msgstr "Carregar um arquivo de texto para:"
-#: src/view/screens/AppPasswords.tsx:195
+#: src/view/com/util/UserAvatar.tsx:326
+#: src/view/com/util/UserAvatar.tsx:329
+#: src/view/com/util/UserBanner.tsx:116
+#: src/view/com/util/UserBanner.tsx:119
+msgid "Upload from Camera"
+msgstr "Tirar uma foto"
+
+#: src/view/com/util/UserAvatar.tsx:343
+#: src/view/com/util/UserBanner.tsx:133
+msgid "Upload from Files"
+msgstr "Carregar um arquivo"
+
+#: src/view/com/util/UserAvatar.tsx:337
+#: src/view/com/util/UserAvatar.tsx:341
+#: src/view/com/util/UserBanner.tsx:127
+#: src/view/com/util/UserBanner.tsx:131
+msgid "Upload from Library"
+msgstr "Carregar da galeria"
+
+#: src/view/com/modals/ChangeHandle.tsx:408
+msgid "Use a file on your server"
+msgstr "Utilize um arquivo no seu servidor"
+
+#: src/view/screens/AppPasswords.tsx:197
msgid "Use app passwords to login to other Bluesky clients without giving full access to your account or password."
msgstr "Use as senhas de aplicativos para fazer login em outros clientes do Bluesky sem dar acesso total à sua conta ou senha."
-#: src/view/com/modals/ChangeHandle.tsx:515
+#: src/view/com/modals/ChangeHandle.tsx:517
+msgid "Use bsky.social as hosting provider"
+msgstr "Usar bsky.social como serviço de hospedagem"
+
+#: src/view/com/modals/ChangeHandle.tsx:516
msgid "Use default provider"
msgstr "Usar provedor padrão"
@@ -4165,54 +5331,63 @@ msgstr "Usar o navegador interno"
msgid "Use my default browser"
msgstr "Usar o meu navegador padrão"
-#: src/view/com/modals/AddAppPasswords.tsx:155
+#: src/view/com/modals/ChangeHandle.tsx:400
+msgid "Use the DNS panel"
+msgstr "Usar o painel do meu DNS"
+
+#: src/view/com/modals/AddAppPasswords.tsx:156
msgid "Use this to sign into the other app along with your handle."
msgstr "Use esta senha para entrar no outro aplicativo juntamente com seu identificador."
-#: src/view/com/modals/ServerInput.tsx:105
-#~ msgid "Use your domain as your Bluesky client service provider"
-#~ msgstr "Use seu domínio como o provedor de serviço do Bluesky"
-
-#: src/view/com/modals/InviteCodes.tsx:200
+#: src/view/com/modals/InviteCodes.tsx:201
msgid "Used by:"
msgstr "Usado por:"
-#: src/view/com/modals/ModerationDetails.tsx:54
+#: src/components/moderation/ModerationDetailsDialog.tsx:64
+#: src/lib/moderation/useModerationCauseDescription.ts:56
msgid "User Blocked"
msgstr "Usuário Bloqueado"
-#: src/view/com/modals/ModerationDetails.tsx:40
+#: src/lib/moderation/useModerationCauseDescription.ts:48
+msgid "User Blocked by \"{0}\""
+msgstr "Usuário Bloqueado por \"{0}\""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:53
msgid "User Blocked by List"
msgstr "Usuário Bloqueado Por Lista"
-#: src/view/com/modals/ModerationDetails.tsx:60
+#: src/lib/moderation/useModerationCauseDescription.ts:66
+msgid "User Blocking You"
+msgstr "Usuário Bloqueia Você"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:70
msgid "User Blocks You"
msgstr "Este Usuário Te Bloqueou"
-#: src/view/com/auth/create/Step3.tsx:41
-msgid "User handle"
-msgstr "Usuário"
+#: src/view/com/auth/create/Step2.tsx:79
+#~ msgid "User handle"
+#~ msgstr "Usuário"
-#: src/view/com/lists/ListCard.tsx:84
+#: src/view/com/lists/ListCard.tsx:85
#: src/view/com/modals/UserAddRemoveLists.tsx:198
msgid "User list by {0}"
msgstr "Lista de usuários por {0}"
-#: src/view/screens/ProfileList.tsx:762
+#: src/view/screens/ProfileList.tsx:777
msgid "User list by <0/>"
msgstr "Lista de usuários por <0/>"
-#: src/view/com/lists/ListCard.tsx:82
+#: src/view/com/lists/ListCard.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:196
-#: src/view/screens/ProfileList.tsx:760
+#: src/view/screens/ProfileList.tsx:775
msgid "User list by you"
msgstr "Sua lista de usuários"
-#: src/view/com/modals/CreateOrEditList.tsx:196
+#: src/view/com/modals/CreateOrEditList.tsx:197
msgid "User list created"
msgstr "Lista de usuários criada"
-#: src/view/com/modals/CreateOrEditList.tsx:182
+#: src/view/com/modals/CreateOrEditList.tsx:183
msgid "User list updated"
msgstr "Lista de usuários atualizada"
@@ -4220,12 +5395,11 @@ msgstr "Lista de usuários atualizada"
msgid "User Lists"
msgstr "Listas de Usuários"
-#: src/view/com/auth/login/LoginForm.tsx:177
-#: src/view/com/auth/login/LoginForm.tsx:195
+#: src/screens/Login/LoginForm.tsx:151
msgid "Username or email address"
msgstr "Nome de usuário ou endereço de e-mail"
-#: src/view/screens/ProfileList.tsx:796
+#: src/view/screens/ProfileList.tsx:811
msgid "Users"
msgstr "Usuários"
@@ -4237,19 +5411,27 @@ msgstr "usuários seguidos por <0/>"
msgid "Users in \"{0}\""
msgstr "Usuários em \"{0}\""
-#: src/view/com/auth/create/Step2.tsx:243
-msgid "Verification code"
-msgstr "Código de verificação"
+#: src/components/LikesDialog.tsx:85
+msgid "Users that have liked this content or profile"
+msgstr "Usuários que curtiram este conteúdo ou perfil"
-#: src/view/screens/Settings/index.tsx:910
+#: src/view/com/modals/ChangeHandle.tsx:436
+msgid "Value:"
+msgstr "Conteúdo:"
+
+#: src/view/com/modals/ChangeHandle.tsx:509
+msgid "Verify {0}"
+msgstr "Verificar {0}"
+
+#: src/view/screens/Settings/index.tsx:942
msgid "Verify email"
msgstr "Verificar e-mail"
-#: src/view/screens/Settings/index.tsx:935
+#: src/view/screens/Settings/index.tsx:967
msgid "Verify my email"
msgstr "Verificar meu e-mail"
-#: src/view/screens/Settings/index.tsx:944
+#: src/view/screens/Settings/index.tsx:976
msgid "Verify My Email"
msgstr "Verificar Meu Email"
@@ -4262,11 +5444,15 @@ msgstr "Verificar Novo E-mail"
msgid "Verify Your Email"
msgstr "Verificar Seu E-mail"
+#: src/view/screens/Settings/index.tsx:893
+msgid "Version {0}"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:42
msgid "Video Games"
msgstr "Games"
-#: src/view/com/profile/ProfileHeader.tsx:661
+#: src/screens/Profile/Header/Shell.tsx:107
msgid "View {0}'s avatar"
msgstr "Ver o avatar de {0}"
@@ -4274,11 +5460,23 @@ msgstr "Ver o avatar de {0}"
msgid "View debug entry"
msgstr "Ver depuração"
-#: src/view/com/posts/FeedSlice.tsx:103
+#: src/components/ReportDialog/SelectReportOptionView.tsx:131
+msgid "View details"
+msgstr "Ver detalhes"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:126
+msgid "View details for reporting a copyright violation"
+msgstr "Ver detalhes para denunciar uma violação de copyright"
+
+#: src/view/com/posts/FeedSlice.tsx:99
msgid "View full thread"
msgstr "Ver thread completa"
-#: src/view/com/posts/FeedErrorMessage.tsx:172
+#: src/components/moderation/LabelsOnMe.tsx:51
+msgid "View information about these labels"
+msgstr "Ver informações sobre estes rótulos"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:166
msgid "View profile"
msgstr "Ver perfil"
@@ -4286,24 +5484,47 @@ msgstr "Ver perfil"
msgid "View the avatar"
msgstr "Ver o avatar"
-#: src/view/com/modals/LinkWarning.tsx:75
+#: src/components/LabelingServiceCard/index.tsx:140
+msgid "View the labeling service provided by @{0}"
+msgstr "Ver este rotulador provido por @{0}"
+
+#: src/view/screens/ProfileFeed.tsx:585
+msgid "View users who like this feed"
+msgstr "Ver usuários que curtiram este feed"
+
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
msgid "Visit Site"
msgstr "Visitar Site"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:42
-#: src/view/com/modals/ContentFilteringSettings.tsx:259
+#: src/components/moderation/LabelPreference.tsx:135
+#: src/lib/moderation/useLabelBehaviorDescription.ts:17
+#: src/lib/moderation/useLabelBehaviorDescription.ts:22
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:53
msgid "Warn"
msgstr "Avisar"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:48
+msgid "Warn content"
+msgstr "Avisar"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:46
+msgid "Warn content and filter from feeds"
+msgstr "Avisar e filtrar dos feeds"
+
#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:134
-msgid "We also think you'll like \"For You\" by Skygaze:"
-msgstr "Também recomendamos o \"For You\", do Skygaze:"
+#~ msgid "We also think you'll like \"For You\" by Skygaze:"
+#~ msgstr "Também recomendamos o \"For You\", do Skygaze:"
+
+#: src/screens/Hashtag.tsx:133
+msgid "We couldn't find any results for that hashtag."
+msgstr "Não encontramos nenhum post com esta hashtag."
#: src/screens/Deactivated.tsx:133
msgid "We estimate {estimatedTime} until your account is ready."
msgstr "Estimamos que sua conta estará pronta em mais ou menos {estimatedTime}."
-#: src/screens/Onboarding/StepFinished.tsx:93
+#: src/screens/Onboarding/StepFinished.tsx:97
msgid "We hope you have a wonderful time. Remember, Bluesky is:"
msgstr "Esperamos que você se divirta. Lembre-se, o Bluesky é:"
@@ -4315,11 +5536,23 @@ msgstr "Não temos mais posts de quem você segue. Aqui estão os mais novos de
#~ msgid "We recommend \"For You\" by Skygaze:"
#~ msgstr "Recomendamos o \"Para você\", do Skygaze:"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:124
+#: src/components/dialogs/MutedWords.tsx:203
+msgid "We recommend avoiding common words that appear in many posts, since it can result in no posts being shown."
+msgstr "Não recomendamos utilizar palavras comuns que aparecem em muitos posts, já que isso pode resultar em filtrar todos eles."
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:125
msgid "We recommend our \"Discover\" feed:"
msgstr "Recomendamos nosso feed \"Discover\":"
-#: src/screens/Onboarding/StepInterests/index.tsx:133
+#: src/components/dialogs/BirthDateSettings.tsx:52
+msgid "We were unable to load your birth date preferences. Please try again."
+msgstr "Não foi possível carregar sua data de nascimento. Por favor, tente novamente."
+
+#: src/screens/Moderation/index.tsx:385
+msgid "We were unable to load your configured labelers at this time."
+msgstr "Não foi possível carregar seus rotuladores."
+
+#: src/screens/Onboarding/StepInterests/index.tsx:137
msgid "We weren't able to connect. Please try again to continue setting up your account. If it continues to fail, you can skip this flow."
msgstr "Não conseguimos conectar. Por favor, tente novamente para continuar configurando a sua conta. Se continuar falhando, você pode pular este fluxo."
@@ -4328,43 +5561,53 @@ msgid "We will let you know when your account is ready."
msgstr "Avisaremos quando sua conta estiver pronta."
#: src/view/com/modals/AppealLabel.tsx:48
-msgid "We'll look into your appeal promptly."
-msgstr "Avaliaremos sua contestação o quanto antes."
+#~ msgid "We'll look into your appeal promptly."
+#~ msgstr "Avaliaremos sua contestação o quanto antes."
-#: src/screens/Onboarding/StepInterests/index.tsx:138
+#: src/screens/Onboarding/StepInterests/index.tsx:142
msgid "We'll use this to help customize your experience."
msgstr "Usaremos isto para customizar a sua experiência."
-#: src/view/com/auth/create/CreateAccount.tsx:123
+#: src/screens/Signup/index.tsx:130
msgid "We're so excited to have you join us!"
msgstr "Estamos muito felizes em recebê-lo!"
-#: src/view/screens/ProfileList.tsx:85
+#: src/view/screens/ProfileList.tsx:89
msgid "We're sorry, but we were unable to resolve this list. If this persists, please contact the list creator, @{handleOrDid}."
msgstr "Tivemos um problema ao exibir esta lista. Se continuar acontecendo, contate o criador da lista: @{handleOrDid}."
-#: src/view/screens/Search/Search.tsx:253
+#: src/components/dialogs/MutedWords.tsx:229
+msgid "We're sorry, but we weren't able to load your muted words at this time. Please try again."
+msgstr "Não foi possível carregar sua lista de palavras silenciadas. Por favor, tente novamente."
+
+#: src/view/screens/Search/Search.tsx:256
msgid "We're sorry, but your search could not be completed. Please try again in a few minutes."
msgstr "Lamentamos, mas sua busca não pôde ser concluída. Por favor, tente novamente em alguns minutos."
+#: src/components/Lists.tsx:188
#: src/view/screens/NotFound.tsx:48
msgid "We're sorry! We can't find the page you were looking for."
msgstr "Sentimos muito! Não conseguimos encontrar a página que você estava procurando."
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:46
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:321
+msgid "We're sorry! You can only subscribe to ten labelers, and you've reached your limit of ten."
+msgstr "Sentimos muito! Você só pode se inscrever em até dez rotuladores e você já chegou ao máximo."
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:48
msgid "Welcome to <0>Bluesky0>"
msgstr "Bem-vindo ao <0>Bluesky0>"
-#: src/screens/Onboarding/StepInterests/index.tsx:130
+#: src/screens/Onboarding/StepInterests/index.tsx:134
msgid "What are your interests?"
msgstr "Do que você gosta?"
#: src/view/com/modals/report/Modal.tsx:169
-msgid "What is the issue with this {collectionName}?"
-msgstr "Qual é o problema com este {collectionName}?"
+#~ msgid "What is the issue with this {collectionName}?"
+#~ msgstr "Qual é o problema com este {collectionName}?"
-#: src/view/com/auth/SplashScreen.tsx:34
-#: src/view/com/composer/Composer.tsx:279
+#: src/view/com/auth/SplashScreen.tsx:58
+#: src/view/com/auth/SplashScreen.web.tsx:84
+#: src/view/com/composer/Composer.tsx:296
msgid "What's up?"
msgstr "E aí?"
@@ -4381,16 +5624,36 @@ msgstr "Quais idiomas você gostaria de ver nos seus feeds?"
msgid "Who can reply"
msgstr "Quem pode responder"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:102
+#: src/components/ReportDialog/SelectReportOptionView.tsx:43
+msgid "Why should this content be reviewed?"
+msgstr "Por que este conteúdo deve ser revisado?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:56
+msgid "Why should this feed be reviewed?"
+msgstr "Por que este feed deve ser revisado?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:53
+msgid "Why should this list be reviewed?"
+msgstr "Por que esta lista deve ser revisada?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:50
+msgid "Why should this post be reviewed?"
+msgstr "Por que este post deve ser revisado?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:47
+msgid "Why should this user be reviewed?"
+msgstr "Por que este usuário deve ser revisado?"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:103
msgid "Wide"
msgstr "Largo"
-#: src/view/com/composer/Composer.tsx:415
+#: src/view/com/composer/Composer.tsx:436
msgid "Write post"
msgstr "Escrever post"
-#: src/view/com/composer/Composer.tsx:278
-#: src/view/com/composer/Prompt.tsx:33
+#: src/view/com/composer/Composer.tsx:295
+#: src/view/com/composer/Prompt.tsx:37
msgid "Write your reply"
msgstr "Escreva sua resposta"
@@ -4398,47 +5661,43 @@ msgstr "Escreva sua resposta"
msgid "Writers"
msgstr "Escritores"
-#: src/view/com/auth/create/Step2.tsx:263
-msgid "XXXXXX"
-msgstr "XXXXXX"
-
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:77
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:201
-#: src/view/screens/PreferencesHomeFeed.tsx:236
-#: src/view/screens/PreferencesHomeFeed.tsx:271
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:201
+#: src/view/screens/PreferencesFollowingFeed.tsx:236
+#: src/view/screens/PreferencesFollowingFeed.tsx:271
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "Yes"
msgstr "Sim"
-#: src/screens/Onboarding/StepModeration/index.tsx:46
-#~ msgid "You are in control"
-#~ msgstr "Você está no controle"
-
#: src/screens/Deactivated.tsx:130
msgid "You are in line."
msgstr "Você está na fila."
+#: src/view/com/profile/ProfileFollows.tsx:86
+msgid "You are not following anyone."
+msgstr "Você não segue ninguém."
+
#: src/view/com/posts/FollowingEmptyState.tsx:67
#: src/view/com/posts/FollowingEndOfFeed.tsx:68
msgid "You can also discover new Custom Feeds to follow."
msgstr "Você também pode descobrir novos feeds para seguir."
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:123
-#~ msgid "You can also try our \"Discover\" algorithm:"
-#~ msgstr "Você também pode tentar nosso algoritmo \"Discover\":"
-
-#: src/screens/Onboarding/StepFollowingFeed.tsx:142
+#: src/screens/Onboarding/StepFollowingFeed.tsx:143
msgid "You can change these settings later."
msgstr "Você pode mudar estas configurações depois."
-#: src/view/com/auth/login/Login.tsx:158
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:31
+#: src/screens/Login/index.tsx:158
+#: src/screens/Login/PasswordUpdatedForm.tsx:33
msgid "You can now sign in with your new password."
msgstr "Agora você pode entrar com a sua nova senha."
-#: src/view/com/modals/InviteCodes.tsx:66
+#: src/view/com/profile/ProfileFollowers.tsx:86
+msgid "You do not have any followers."
+msgstr "Ninguém segue você ainda."
+
+#: src/view/com/modals/InviteCodes.tsx:67
msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer."
msgstr "Você ainda não tem nenhum convite! Nós lhe enviaremos alguns quando você estiver há mais tempo no Bluesky."
@@ -4446,7 +5705,7 @@ msgstr "Você ainda não tem nenhum convite! Nós lhe enviaremos alguns quando v
msgid "You don't have any pinned feeds."
msgstr "Você não tem feeds fixados."
-#: src/view/screens/Feeds.tsx:451
+#: src/view/screens/Feeds.tsx:452
msgid "You don't have any saved feeds!"
msgstr "Você não tem feeds salvos!"
@@ -4454,25 +5713,44 @@ msgstr "Você não tem feeds salvos!"
msgid "You don't have any saved feeds."
msgstr "Você não tem feeds salvos."
-#: src/view/com/post-thread/PostThread.tsx:401
+#: src/view/com/post-thread/PostThread.tsx:159
msgid "You have blocked the author or you have been blocked by the author."
msgstr "Você bloqueou esta conta ou foi bloqueado por ela."
-#: src/view/com/modals/ModerationDetails.tsx:56
+#: src/components/moderation/ModerationDetailsDialog.tsx:66
+#: src/lib/moderation/useModerationCauseDescription.ts:50
+#: src/lib/moderation/useModerationCauseDescription.ts:58
msgid "You have blocked this user. You cannot view their content."
msgstr "Você bloqueou este usuário. Você não pode ver este conteúdo."
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:57
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:92
+#: src/screens/Login/SetNewPasswordForm.tsx:54
+#: src/screens/Login/SetNewPasswordForm.tsx:91
#: src/view/com/modals/ChangePassword.tsx:87
#: src/view/com/modals/ChangePassword.tsx:121
msgid "You have entered an invalid code. It should look like XXXXX-XXXXX."
msgstr "Você utilizou um código inválido. O código segue este padrão: XXXXX-XXXXX."
-#: src/view/com/modals/ModerationDetails.tsx:87
-msgid "You have muted this user."
+#: src/lib/moderation/useModerationCauseDescription.ts:109
+msgid "You have hidden this post"
+msgstr "Você escondeu este post"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:101
+msgid "You have hidden this post."
+msgstr "Você escondeu este post."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:94
+#: src/lib/moderation/useModerationCauseDescription.ts:92
+msgid "You have muted this account."
+msgstr "Você silenciou esta conta."
+
+#: src/lib/moderation/useModerationCauseDescription.ts:86
+msgid "You have muted this user"
msgstr "Você silenciou este usuário."
+#: src/view/com/modals/ModerationDetails.tsx:87
+#~ msgid "You have muted this user."
+#~ msgstr "Você silenciou este usuário."
+
#: src/view/com/feeds/ProfileFeedgens.tsx:136
msgid "You have no feeds."
msgstr "Você não tem feeds."
@@ -4483,38 +5761,62 @@ msgid "You have no lists."
msgstr "Você não tem listas."
#: src/view/screens/ModerationBlockedAccounts.tsx:132
-msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
+msgid "You have not blocked any accounts yet. To block an account, go to their profile and select \"Block account\" from the menu on their account."
msgstr "Você ainda não bloqueou nenhuma conta. Para bloquear uma conta, acesse um perfil e selecione \"Bloquear conta\" no menu."
-#: src/view/screens/AppPasswords.tsx:87
+#: src/view/screens/ModerationBlockedAccounts.tsx:132
+#~ msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
+#~ msgstr "Você ainda não bloqueou nenhuma conta. Para bloquear uma conta, acesse um perfil e selecione \"Bloquear conta\" no menu."
+
+#: src/view/screens/AppPasswords.tsx:89
msgid "You have not created any app passwords yet. You can create one by pressing the button below."
msgstr "Você ainda não criou nenhuma senha de aplicativo. Você pode criar uma pressionando o botão abaixo."
#: src/view/screens/ModerationMutedAccounts.tsx:131
-msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
+msgid "You have not muted any accounts yet. To mute an account, go to their profile and select \"Mute account\" from the menu on their account."
msgstr "Você ainda não silenciou nenhuma conta. Para silenciar uma conta, acesse um perfil e selecione \"Silenciar conta\" no menu."
+#: src/view/screens/ModerationMutedAccounts.tsx:131
+#~ msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
+#~ msgstr "Você ainda não silenciou nenhuma conta. Para silenciar uma conta, acesse um perfil e selecione \"Silenciar conta\" no menu."
+
+#: src/components/dialogs/MutedWords.tsx:249
+msgid "You haven't muted any words or tags yet"
+msgstr "Você não silenciou nenhuma palavra ou tag ainda"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:68
+msgid "You may appeal these labels if you feel they were placed in error."
+msgstr "Você pode contestar estes rótulos se você acha que estão errados."
+
+#: src/screens/Signup/StepInfo/Policies.tsx:79
+msgid "You must be 13 years of age or older to sign up."
+msgstr ""
+
#: src/view/com/modals/ContentFilteringSettings.tsx:175
-msgid "You must be 18 or older to enable adult content."
-msgstr "Você precisa ser maior de idade para habilitar conteúdo adulto."
+#~ msgid "You must be 18 or older to enable adult content."
+#~ msgstr "Você precisa ser maior de idade para habilitar conteúdo adulto."
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:103
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:110
msgid "You must be 18 years or older to enable adult content"
msgstr "Você precisa ser maior de idade para habilitar conteúdo adulto."
-#: src/view/com/util/forms/PostDropdownBtn.tsx:98
+#: src/components/ReportDialog/SubmitView.tsx:205
+msgid "You must select at least one labeler for a report"
+msgstr "Você deve selecionar no mínimo um rotulador"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:144
msgid "You will no longer receive notifications for this thread"
msgstr "Você não vai mais receber notificações desta thread"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:147
msgid "You will now receive notifications for this thread"
msgstr "Você vai receber notificações desta thread"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:107
+#: src/screens/Login/SetNewPasswordForm.tsx:104
msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password."
msgstr "Você receberá um e-mail com um \"código de redefinição\". Digite esse código aqui, e então digite sua nova senha."
-#: src/screens/Onboarding/StepModeration/index.tsx:72
+#: src/screens/Onboarding/StepModeration/index.tsx:60
msgid "You're in control"
msgstr "Você está no controle"
@@ -4524,27 +5826,32 @@ msgstr "Você está no controle"
msgid "You're in line"
msgstr "Você está na fila"
-#: src/screens/Onboarding/StepFinished.tsx:90
+#: src/screens/Onboarding/StepFinished.tsx:94
msgid "You're ready to go!"
msgstr "Tudo pronto!"
+#: src/components/moderation/ModerationDetailsDialog.tsx:98
+#: src/lib/moderation/useModerationCauseDescription.ts:101
+msgid "You've chosen to hide a word or tag within this post."
+msgstr "Você escolheu esconder uma palavra ou tag deste post."
+
#: src/view/com/posts/FollowingEndOfFeed.tsx:48
msgid "You've reached the end of your feed! Find some more accounts to follow."
msgstr "Você chegou ao fim do seu feed! Encontre novas contas para seguir."
-#: src/view/com/auth/create/Step1.tsx:74
+#: src/screens/Signup/index.tsx:150
msgid "Your account"
msgstr "Sua conta"
-#: src/view/com/modals/DeleteAccount.tsx:67
+#: src/view/com/modals/DeleteAccount.tsx:68
msgid "Your account has been deleted"
msgstr "Sua conta foi excluída"
#: src/view/screens/Settings/ExportCarDialog.tsx:47
msgid "Your account repository, containing all public data records, can be downloaded as a \"CAR\" file. This file does not include media embeds, such as images, or your private data, which must be fetched separately."
-msgstr ""
+msgstr "O repositório da sua conta, contendo todos os seus dados públicos, pode ser baixado como um arquivo \"CAR\". Este arquivo não inclui imagens ou dados privados, estes devem ser exportados separadamente."
-#: src/view/com/auth/create/Step1.tsx:234
+#: src/screens/Signup/StepInfo/index.tsx:121
msgid "Your birth date"
msgstr "Sua data de nascimento"
@@ -4552,19 +5859,19 @@ msgstr "Sua data de nascimento"
msgid "Your choice will be saved, but can be changed later in settings."
msgstr "Sua escolha será salva, mas você pode trocá-la nas configurações depois"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:61
+#: src/screens/Onboarding/StepFollowingFeed.tsx:62
msgid "Your default feed is \"Following\""
msgstr "Seu feed inicial é o \"Seguindo\""
-#: src/view/com/auth/create/state.ts:153
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:70
+#: src/screens/Login/ForgotPasswordForm.tsx:57
+#: src/screens/Signup/state.ts:227
#: src/view/com/modals/ChangePassword.tsx:54
msgid "Your email appears to be invalid."
msgstr "Seu e-mail parece ser inválido."
#: src/view/com/modals/Waitlist.tsx:109
-msgid "Your email has been saved! We'll be in touch soon."
-msgstr "Seu e-mail foi salvo! Logo entraremos em contato."
+#~ msgid "Your email has been saved! We'll be in touch soon."
+#~ msgstr "Seu e-mail foi salvo! Logo entraremos em contato."
#: src/view/com/modals/ChangeEmail.tsx:125
msgid "Your email has been updated but not verified. As a next step, please verify your new email."
@@ -4578,11 +5885,11 @@ msgstr "Seu e-mail ainda não foi verificado. Esta é uma etapa importante de se
msgid "Your following feed is empty! Follow more users to see what's happening."
msgstr "Seu feed inicial está vazio! Siga mais usuários para acompanhar o que está acontecendo."
-#: src/view/com/auth/create/Step3.tsx:45
+#: src/screens/Signup/StepHandle.tsx:72
msgid "Your full handle will be"
msgstr "Seu identificador completo será"
-#: src/view/com/modals/ChangeHandle.tsx:270
+#: src/view/com/modals/ChangeHandle.tsx:271
msgid "Your full handle will be <0>@{0}0>"
msgstr "Seu usuário completo será <0>@{0}0>"
@@ -4592,29 +5899,32 @@ msgstr "Seu usuário completo será <0>@{0}0>"
#~ msgid "Your invite codes are hidden when logged in using an App Password"
#~ msgstr "Seus códigos de convite estão ocultos quando conectado com uma Senha do Aplicativo"
-#: src/view/com/modals/ChangePassword.tsx:155
+#: src/components/dialogs/MutedWords.tsx:220
+msgid "Your muted words"
+msgstr "Suas palavras silenciadas"
+
+#: src/view/com/modals/ChangePassword.tsx:157
msgid "Your password has been changed successfully!"
msgstr "Sua senha foi alterada com sucesso!"
-#: src/view/com/composer/Composer.tsx:267
+#: src/view/com/composer/Composer.tsx:284
msgid "Your post has been published"
msgstr "Seu post foi publicado"
-#: src/screens/Onboarding/StepFinished.tsx:105
+#: src/screens/Onboarding/StepFinished.tsx:109
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:59
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:59
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:61
msgid "Your posts, likes, and blocks are public. Mutes are private."
msgstr "Suas postagens, curtidas e bloqueios são públicos. Silenciamentos são privados."
-#: src/view/com/modals/SwitchAccount.tsx:84
-#: src/view/screens/Settings/index.tsx:118
+#: src/view/screens/Settings/index.tsx:125
msgid "Your profile"
msgstr "Seu perfil"
-#: src/view/com/composer/Composer.tsx:266
+#: src/view/com/composer/Composer.tsx:283
msgid "Your reply has been published"
msgstr "Sua resposta foi publicada"
-#: src/view/com/auth/create/Step3.tsx:28
+#: src/screens/Signup/index.tsx:152
msgid "Your user handle"
msgstr "Seu identificador de usuário"
diff --git a/src/locale/locales/tr/messages.po b/src/locale/locales/tr/messages.po
new file mode 100644
index 0000000000..af50666ace
--- /dev/null
+++ b/src/locale/locales/tr/messages.po
@@ -0,0 +1,5968 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-11-05 16:01-0800\n"
+"PO-Revision-Date: \n"
+"Last-Translator: atiksoftware\n"
+"Language-Team: atiksoftware\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: \n"
+"X-Generator: Poedit 3.4.2\n"
+
+#: src/view/com/modals/VerifyEmail.tsx:142
+msgid "(no email)"
+msgstr "(e-posta yok)"
+
+#: src/view/shell/desktop/RightNav.tsx:168
+#~ msgid "{0, plural, one {# invite code available} other {# invite codes available}}"
+#~ msgstr "{0, plural, one {# davet kodu mevcut} other {# davet kodları mevcut}}"
+
+#: src/screens/Profile/Header/Metrics.tsx:44
+msgid "{following} following"
+msgstr "{following} takip ediliyor"
+
+#: src/view/shell/desktop/RightNav.tsx:151
+#~ msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}"
+#~ msgstr "{invitesAvailable, plural, one {Davet kodları: # mevcut} other {Davet kodları: # mevcut}}"
+
+#: src/view/screens/Settings.tsx:NaN
+#~ msgid "{invitesAvailable} invite code available"
+#~ msgstr "{invitesAvailable} davet kodu mevcut"
+
+#: src/view/screens/Settings.tsx:NaN
+#~ msgid "{invitesAvailable} invite codes available"
+#~ msgstr "{invitesAvailable} davet kodları mevcut"
+
+#: src/view/shell/Drawer.tsx:443
+msgid "{numUnreadNotifications} unread"
+msgstr "{numUnreadNotifications} okunmamış"
+
+#: src/view/com/threadgate/WhoCanReply.tsx:158
+msgid "<0/> members"
+msgstr "<0/> üyeleri"
+
+#: src/view/shell/Drawer.tsx:97
+msgid "<0>{0}0> following"
+msgstr ""
+
+#: src/screens/Profile/Header/Metrics.tsx:45
+msgid "<0>{following} 0><1>following1>"
+msgstr "<0>{following} 0><1>takip ediliyor1>"
+
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:30
+msgid "<0>Choose your0><1>Recommended1><2>Feeds2>"
+msgstr "<0>Önerilen0><1>Feeds1><2>Seç2>"
+
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:37
+msgid "<0>Follow some0><1>Recommended1><2>Users2>"
+msgstr "<0>Önerilen0><1>Kullanıcıları Takip Et1><2>Seç2>"
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:21
+msgid "<0>Welcome to0><1>Bluesky1>"
+msgstr "<0>Bluesky'e0><1>Hoşgeldiniz1>"
+
+#: src/screens/Profile/Header/Handle.tsx:42
+msgid "⚠Invalid Handle"
+msgstr "⚠Geçersiz Kullanıcı Adı"
+
+#: src/view/com/util/moderation/LabelInfo.tsx:45
+#~ msgid "A content warning has been applied to this {0}."
+#~ msgstr "Bu {0} için bir içerik uyarısı uygulandı."
+
+#: src/lib/hooks/useOTAUpdate.ts:16
+#~ msgid "A new version of the app is available. Please update to continue using the app."
+#~ msgstr "Uygulamanın yeni bir sürümü mevcut. Devam etmek için güncelleyin."
+
+#: src/view/com/util/ViewHeader.tsx:89
+#: src/view/screens/Search/Search.tsx:649
+msgid "Access navigation links and settings"
+msgstr "Gezinme bağlantılarına ve ayarlara erişin"
+
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:52
+msgid "Access profile and other navigation links"
+msgstr "Profil ve diğer gezinme bağlantılarına erişin"
+
+#: src/view/com/modals/EditImage.tsx:300
+#: src/view/screens/Settings/index.tsx:470
+msgid "Accessibility"
+msgstr "Erişilebilirlik"
+
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "account"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:144
+#: src/view/screens/Settings/index.tsx:327
+#: src/view/screens/Settings/index.tsx:743
+msgid "Account"
+msgstr "Hesap"
+
+#: src/view/com/profile/ProfileMenu.tsx:139
+msgid "Account blocked"
+msgstr "Hesap engellendi"
+
+#: src/view/com/profile/ProfileMenu.tsx:153
+msgid "Account followed"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:113
+msgid "Account muted"
+msgstr "Hesap susturuldu"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:93
+#: src/lib/moderation/useModerationCauseDescription.ts:91
+msgid "Account Muted"
+msgstr "Hesap Susturuldu"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:82
+msgid "Account Muted by List"
+msgstr "Liste Tarafından Hesap Susturuldu"
+
+#: src/view/com/util/AccountDropdownBtn.tsx:41
+msgid "Account options"
+msgstr "Hesap seçenekleri"
+
+#: src/view/com/util/AccountDropdownBtn.tsx:25
+msgid "Account removed from quick access"
+msgstr "Hesap hızlı erişimden kaldırıldı"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:137
+#: src/view/com/profile/ProfileMenu.tsx:128
+msgid "Account unblocked"
+msgstr "Hesap engeli kaldırıldı"
+
+#: src/view/com/profile/ProfileMenu.tsx:166
+msgid "Account unfollowed"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:102
+msgid "Account unmuted"
+msgstr "Hesap susturulması kaldırıldı"
+
+#: src/components/dialogs/MutedWords.tsx:164
+#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:150
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
+#: src/view/com/modals/UserAddRemoveLists.tsx:219
+#: src/view/screens/ProfileList.tsx:827
+msgid "Add"
+msgstr "Ekle"
+
+#: src/view/com/modals/SelfLabel.tsx:56
+msgid "Add a content warning"
+msgstr "Bir içerik uyarısı ekleyin"
+
+#: src/view/screens/ProfileList.tsx:817
+msgid "Add a user to this list"
+msgstr "Bu listeye bir kullanıcı ekleyin"
+
+#: src/components/dialogs/SwitchAccount.tsx:55
+#: src/view/screens/Settings/index.tsx:402
+#: src/view/screens/Settings/index.tsx:411
+msgid "Add account"
+msgstr "Hesap ekle"
+
+#: src/view/com/composer/photos/Gallery.tsx:119
+#: src/view/com/composer/photos/Gallery.tsx:180
+#: src/view/com/modals/AltImage.tsx:117
+msgid "Add alt text"
+msgstr "Alternatif metin ekle"
+
+#: src/view/screens/AppPasswords.tsx:104
+#: src/view/screens/AppPasswords.tsx:145
+#: src/view/screens/AppPasswords.tsx:158
+msgid "Add App Password"
+msgstr "Uygulama Şifresi Ekle"
+
+#: src/view/com/modals/report/InputIssueDetails.tsx:41
+#: src/view/com/modals/report/Modal.tsx:191
+#~ msgid "Add details"
+#~ msgstr "Detaylar ekle"
+
+#: src/view/com/modals/report/Modal.tsx:194
+#~ msgid "Add details to report"
+#~ msgstr "Rapor için detaylar ekleyin"
+
+#: src/view/com/composer/Composer.tsx:467
+msgid "Add link card"
+msgstr "Bağlantı kartı ekle"
+
+#: src/view/com/composer/Composer.tsx:472
+msgid "Add link card:"
+msgstr "Bağlantı kartı ekle:"
+
+#: src/components/dialogs/MutedWords.tsx:157
+msgid "Add mute word for configured settings"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:86
+msgid "Add muted words and tags"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:416
+msgid "Add the following DNS record to your domain:"
+msgstr "Alan adınıza aşağıdaki DNS kaydını ekleyin:"
+
+#: src/view/com/profile/ProfileMenu.tsx:263
+#: src/view/com/profile/ProfileMenu.tsx:266
+msgid "Add to Lists"
+msgstr "Listelere Ekle"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:234
+msgid "Add to my feeds"
+msgstr "Beslemelerime ekle"
+
+#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:139
+msgid "Added"
+msgstr "Eklendi"
+
+#: src/view/com/modals/ListAddRemoveUsers.tsx:191
+#: src/view/com/modals/UserAddRemoveLists.tsx:144
+msgid "Added to list"
+msgstr "Listeye eklendi"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:108
+msgid "Added to my feeds"
+msgstr "Beslemelerime eklendi"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:173
+msgid "Adjust the number of likes a reply must have to be shown in your feed."
+msgstr "Bir yanıtın beslemenizde gösterilmesi için sahip olması gereken beğeni sayısını ayarlayın."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:117
+#: src/view/com/modals/SelfLabel.tsx:75
+msgid "Adult Content"
+msgstr "Yetişkin İçerik"
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:137
+#~ msgid "Adult content can only be enabled via the Web at <0/>."
+#~ msgstr "Yetişkin içeriği yalnızca Web üzerinden <0/> etkinleştirilebilir."
+
+#: src/components/moderation/LabelPreference.tsx:242
+msgid "Adult content is disabled."
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:375
+#: src/view/screens/Settings/index.tsx:684
+msgid "Advanced"
+msgstr "Gelişmiş"
+
+#: src/view/screens/Feeds.tsx:666
+msgid "All the feeds you've saved, right in one place."
+msgstr ""
+
+#: src/screens/Login/ForgotPasswordForm.tsx:178
+#: src/view/com/modals/ChangePassword.tsx:170
+msgid "Already have a code?"
+msgstr "Zaten bir kodunuz mu var?"
+
+#: src/screens/Login/ChooseAccountForm.tsx:39
+msgid "Already signed in as @{0}"
+msgstr "Zaten @{0} olarak oturum açıldı"
+
+#: src/view/com/composer/photos/Gallery.tsx:130
+msgid "ALT"
+msgstr "ALT"
+
+#: src/view/com/modals/EditImage.tsx:316
+msgid "Alt text"
+msgstr "Alternatif metin"
+
+#: src/view/com/composer/photos/Gallery.tsx:209
+msgid "Alt text describes images for blind and low-vision users, and helps give context to everyone."
+msgstr "Alternatif metin, görme engelli ve düşük görme yeteneğine sahip kullanıcılar için resimleri tanımlar ve herkes için bağlam sağlamaya yardımcı olur."
+
+#: src/view/com/modals/VerifyEmail.tsx:124
+msgid "An email has been sent to {0}. It includes a confirmation code which you can enter below."
+msgstr "{0} adresine bir e-posta gönderildi. Aşağıda girebileceğiniz bir onay kodu içerir."
+
+#: src/view/com/modals/ChangeEmail.tsx:119
+msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below."
+msgstr "Önceki adresinize, {0} bir e-posta gönderildi. Aşağıda girebileceğiniz bir onay kodu içerir."
+
+#: src/lib/moderation/useReportOptions.ts:26
+msgid "An issue not included in these options"
+msgstr ""
+
+#: src/view/com/profile/FollowButton.tsx:35
+#: src/view/com/profile/FollowButton.tsx:45
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:188
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:198
+msgid "An issue occurred, please try again."
+msgstr "Bir sorun oluştu, lütfen tekrar deneyin."
+
+#: src/view/com/notifications/FeedItem.tsx:240
+#: src/view/com/threadgate/WhoCanReply.tsx:178
+msgid "and"
+msgstr "ve"
+
+#: src/screens/Onboarding/index.tsx:32
+msgid "Animals"
+msgstr "Hayvanlar"
+
+#: src/lib/moderation/useReportOptions.ts:31
+msgid "Anti-Social Behavior"
+msgstr ""
+
+#: src/view/screens/LanguageSettings.tsx:95
+msgid "App Language"
+msgstr "Uygulama Dili"
+
+#: src/view/screens/AppPasswords.tsx:223
+msgid "App password deleted"
+msgstr "Uygulama şifresi silindi"
+
+#: src/view/com/modals/AddAppPasswords.tsx:135
+msgid "App Password names can only contain letters, numbers, spaces, dashes, and underscores."
+msgstr "Uygulama Şifre adları yalnızca harfler, sayılar, boşluklar, tireler ve alt çizgiler içerebilir."
+
+#: src/view/com/modals/AddAppPasswords.tsx:100
+msgid "App Password names must be at least 4 characters long."
+msgstr "Uygulama Şifre adları en az 4 karakter uzunluğunda olmalıdır."
+
+#: src/view/screens/Settings/index.tsx:695
+msgid "App password settings"
+msgstr "Uygulama şifresi ayarları"
+
+#: src/Navigation.tsx:251
+#: src/view/screens/AppPasswords.tsx:189
+#: src/view/screens/Settings/index.tsx:704
+msgid "App Passwords"
+msgstr "Uygulama Şifreleri"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:133
+#: src/components/moderation/LabelsOnMeDialog.tsx:136
+msgid "Appeal"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:201
+msgid "Appeal \"{0}\" label"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:250
+#~ msgid "Appeal content warning"
+#~ msgstr "İçerik uyarısını itiraz et"
+
+#: src/view/com/modals/AppealLabel.tsx:65
+#~ msgid "Appeal Content Warning"
+#~ msgstr "İçerik Uyarısını İtiraz Et"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:192
+msgid "Appeal submitted."
+msgstr ""
+
+#: src/view/com/util/moderation/LabelInfo.tsx:52
+#~ msgid "Appeal this decision"
+#~ msgstr "Bu karara itiraz et"
+
+#: src/view/com/util/moderation/LabelInfo.tsx:56
+#~ msgid "Appeal this decision."
+#~ msgstr "Bu karara itiraz et."
+
+#: src/view/screens/Settings/index.tsx:485
+msgid "Appearance"
+msgstr "Görünüm"
+
+#: src/view/screens/AppPasswords.tsx:265
+msgid "Are you sure you want to delete the app password \"{name}\"?"
+msgstr "\"{name}\" uygulama şifresini silmek istediğinizden emin misiniz?"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:280
+msgid "Are you sure you want to remove {0} from your feeds?"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:509
+msgid "Are you sure you'd like to discard this draft?"
+msgstr "Bu taslağı silmek istediğinizden emin misiniz?"
+
+#: src/components/dialogs/MutedWords.tsx:281
+msgid "Are you sure?"
+msgstr "Emin misiniz?"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:233
+#~ msgid "Are you sure? This cannot be undone."
+#~ msgstr "Emin misiniz? Bu geri alınamaz."
+
+#: src/view/com/composer/select-language/SuggestedLanguage.tsx:60
+msgid "Are you writing in <0>{0}0>?"
+msgstr "<0>{0}0> dilinde mi yazıyorsunuz?"
+
+#: src/screens/Onboarding/index.tsx:26
+msgid "Art"
+msgstr "Sanat"
+
+#: src/view/com/modals/SelfLabel.tsx:123
+msgid "Artistic or non-erotic nudity."
+msgstr "Sanatsal veya erotik olmayan çıplaklık."
+
+#: src/screens/Signup/StepHandle.tsx:118
+msgid "At least 3 characters"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:246
+#: src/components/moderation/LabelsOnMeDialog.tsx:247
+#: src/screens/Login/ChooseAccountForm.tsx:73
+#: src/screens/Login/ChooseAccountForm.tsx:78
+#: src/screens/Login/ForgotPasswordForm.tsx:129
+#: src/screens/Login/ForgotPasswordForm.tsx:135
+#: src/screens/Login/LoginForm.tsx:221
+#: src/screens/Login/LoginForm.tsx:227
+#: src/screens/Login/SetNewPasswordForm.tsx:160
+#: src/screens/Login/SetNewPasswordForm.tsx:166
+#: src/screens/Profile/Header/Shell.tsx:96
+#: src/screens/Signup/index.tsx:179
+#: src/view/com/util/ViewHeader.tsx:87
+msgid "Back"
+msgstr "Geri"
+
+#: src/view/com/post-thread/PostThread.tsx:421
+#~ msgctxt "action"
+#~ msgid "Back"
+#~ msgstr "Geri"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:144
+msgid "Based on your interest in {interestsText}"
+msgstr "{interestsText} ilginize dayalı"
+
+#: src/view/screens/Settings/index.tsx:542
+msgid "Basics"
+msgstr "Temel"
+
+#: src/components/dialogs/BirthDateSettings.tsx:107
+msgid "Birthday"
+msgstr "Doğum günü"
+
+#: src/view/screens/Settings/index.tsx:359
+msgid "Birthday:"
+msgstr "Doğum günü:"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+msgid "Block"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:300
+#: src/view/com/profile/ProfileMenu.tsx:307
+msgid "Block Account"
+msgstr "Hesabı Engelle"
+
+#: src/view/com/profile/ProfileMenu.tsx:344
+msgid "Block Account?"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:530
+msgid "Block accounts"
+msgstr "Hesapları engelle"
+
+#: src/view/screens/ProfileList.tsx:478
+#: src/view/screens/ProfileList.tsx:634
+msgid "Block list"
+msgstr "Listeyi engelle"
+
+#: src/view/screens/ProfileList.tsx:629
+msgid "Block these accounts?"
+msgstr "Bu hesapları engelle?"
+
+#: src/view/screens/ProfileList.tsx:319
+#~ msgid "Block this List"
+#~ msgstr "Bu Listeyi Engelle"
+
+#: src/view/com/lists/ListCard.tsx:110
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:55
+msgid "Blocked"
+msgstr "Engellendi"
+
+#: src/screens/Moderation/index.tsx:267
+msgid "Blocked accounts"
+msgstr "Engellenen hesaplar"
+
+#: src/Navigation.tsx:134
+#: src/view/screens/ModerationBlockedAccounts.tsx:107
+msgid "Blocked Accounts"
+msgstr "Engellenen Hesaplar"
+
+#: src/view/com/profile/ProfileMenu.tsx:356
+msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
+msgstr "Engellenen hesaplar, konularınıza yanıt veremez, sizi bahsedemez veya başka şekilde sizinle etkileşime giremez."
+
+#: src/view/screens/ModerationBlockedAccounts.tsx:115
+msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours."
+msgstr "Engellenen hesaplar, konularınıza yanıt veremez, sizi bahsedemez veya başka şekilde sizinle etkileşime giremez. Onların içeriğini görmeyeceksiniz ve onlar da sizinkini görmekten alıkonulacaklar."
+
+#: src/view/com/post-thread/PostThread.tsx:313
+msgid "Blocked post."
+msgstr "Engellenen gönderi."
+
+#: src/screens/Profile/Sections/Labels.tsx:152
+msgid "Blocking does not prevent this labeler from placing labels on your account."
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:631
+msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
+msgstr "Engelleme herkese açıktır. Engellenen hesaplar, konularınıza yanıt veremez, sizi bahsedemez veya başka şekilde sizinle etkileşime giremez."
+
+#: src/view/com/profile/ProfileMenu.tsx:353
+msgid "Blocking will not prevent labels from being applied on your account, but it will stop this account from replying in your threads or interacting with you."
+msgstr ""
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:98
+#: src/view/com/auth/SplashScreen.web.tsx:169
+msgid "Blog"
+msgstr "Blog"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:32
+#: src/view/com/auth/server-input/index.tsx:89
+#: src/view/com/auth/server-input/index.tsx:91
+msgid "Bluesky"
+msgstr "Bluesky"
+
+#: src/view/com/auth/server-input/index.tsx:154
+msgid "Bluesky is an open network where you can choose your hosting provider. Custom hosting is now available in beta for developers."
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:80
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:82
+msgid "Bluesky is flexible."
+msgstr "Bluesky esnek."
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:69
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:71
+msgid "Bluesky is open."
+msgstr "Bluesky açık."
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:56
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:58
+msgid "Bluesky is public."
+msgstr "Bluesky kamusal."
+
+#: src/view/com/modals/Waitlist.tsx:70
+#~ msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
+#~ msgstr "Bluesky, daha sağlıklı bir topluluk oluşturmak için davetleri kullanır. Bir daveti olan kimseyi tanımıyorsanız, bekleme listesine kaydolabilir ve yakında bir tane göndereceğiz."
+
+#: src/screens/Moderation/index.tsx:533
+msgid "Bluesky will not show your profile and posts to logged-out users. Other apps may not honor this request. This does not make your account private."
+msgstr "Bluesky, profilinizi ve gönderilerinizi oturum açmamış kullanıcılara göstermeyecektir. Diğer uygulamalar bu isteği yerine getirmeyebilir. Bu, hesabınızı özel yapmaz."
+
+#: src/view/com/modals/ServerInput.tsx:78
+#~ msgid "Bluesky.Social"
+#~ msgstr "Bluesky.Social"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:53
+msgid "Blur images"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:51
+msgid "Blur images and filter from feeds"
+msgstr ""
+
+#: src/screens/Onboarding/index.tsx:33
+msgid "Books"
+msgstr "Kitaplar"
+
+#: src/view/screens/Settings.tsx:841
+#~ msgid "Build version {0} {1}"
+#~ msgstr "Sürüm {0} {1}"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:92
+#: src/view/com/auth/SplashScreen.web.tsx:166
+msgid "Business"
+msgstr "İş"
+
+#: src/view/com/modals/ServerInput.tsx:115
+#~ msgid "Button disabled. Input custom domain to proceed."
+#~ msgstr "Button devre dışı. Devam etmek için özel alan adını girin."
+
+#: src/view/com/profile/ProfileSubpageHeader.tsx:157
+msgid "by —"
+msgstr "tarafından —"
+
+#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:100
+msgid "by {0}"
+msgstr "tarafından {0}"
+
+#: src/components/LabelingServiceCard/index.tsx:57
+msgid "By {0}"
+msgstr ""
+
+#: src/view/com/profile/ProfileSubpageHeader.tsx:161
+msgid "by <0/>"
+msgstr "tarafından <0/>"
+
+#: src/screens/Signup/StepInfo/Policies.tsx:74
+msgid "By creating an account you agree to the {els}."
+msgstr ""
+
+#: src/view/com/profile/ProfileSubpageHeader.tsx:159
+msgid "by you"
+msgstr "siz tarafından"
+
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:77
+msgid "Camera"
+msgstr "Kamera"
+
+#: src/view/com/modals/AddAppPasswords.tsx:217
+msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long."
+msgstr "Yalnızca harfler, sayılar, boşluklar, tireler ve alt çizgiler içerebilir. En az 4 karakter uzunluğunda, ancak 32 karakterden fazla olmamalıdır."
+
+#: src/components/Menu/index.tsx:213
+#: src/components/Prompt.tsx:113
+#: src/components/Prompt.tsx:115
+#: src/components/TagMenu/index.tsx:268
+#: src/view/com/composer/Composer.tsx:317
+#: src/view/com/composer/Composer.tsx:322
+#: src/view/com/modals/ChangeEmail.tsx:218
+#: src/view/com/modals/ChangeEmail.tsx:220
+#: src/view/com/modals/ChangeHandle.tsx:154
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
+#: src/view/com/modals/CreateOrEditList.tsx:356
+#: src/view/com/modals/crop-image/CropImage.web.tsx:138
+#: src/view/com/modals/EditImage.tsx:324
+#: src/view/com/modals/EditProfile.tsx:250
+#: src/view/com/modals/InAppBrowserConsent.tsx:78
+#: src/view/com/modals/InAppBrowserConsent.tsx:80
+#: src/view/com/modals/LinkWarning.tsx:105
+#: src/view/com/modals/LinkWarning.tsx:107
+#: src/view/com/modals/Repost.tsx:88
+#: src/view/com/modals/VerifyEmail.tsx:247
+#: src/view/com/modals/VerifyEmail.tsx:253
+#: src/view/screens/Search/Search.tsx:718
+#: src/view/shell/desktop/Search.tsx:239
+msgid "Cancel"
+msgstr "İptal"
+
+#: src/view/com/modals/CreateOrEditList.tsx:361
+#: src/view/com/modals/DeleteAccount.tsx:155
+#: src/view/com/modals/DeleteAccount.tsx:233
+msgctxt "action"
+msgid "Cancel"
+msgstr "İptal"
+
+#: src/view/com/modals/DeleteAccount.tsx:151
+#: src/view/com/modals/DeleteAccount.tsx:229
+msgid "Cancel account deletion"
+msgstr "Hesap silmeyi iptal et"
+
+#: src/view/com/modals/ChangeHandle.tsx:150
+msgid "Cancel change handle"
+msgstr "Kullanıcı adı değişikliğini iptal et"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:135
+msgid "Cancel image crop"
+msgstr "Resim kırpma işlemini iptal et"
+
+#: src/view/com/modals/EditProfile.tsx:245
+msgid "Cancel profile editing"
+msgstr "Profil düzenlemeyi iptal et"
+
+#: src/view/com/modals/Repost.tsx:79
+msgid "Cancel quote post"
+msgstr "Alıntı gönderiyi iptal et"
+
+#: src/view/com/modals/ListAddRemoveUsers.tsx:87
+#: src/view/shell/desktop/Search.tsx:235
+msgid "Cancel search"
+msgstr "Aramayı iptal et"
+
+#: src/view/com/modals/Waitlist.tsx:136
+#~ msgid "Cancel waitlist signup"
+#~ msgstr "Bekleme listesi kaydını iptal et"
+
+#: src/view/com/modals/LinkWarning.tsx:106
+msgid "Cancels opening the linked website"
+msgstr ""
+
+#: src/view/com/modals/VerifyEmail.tsx:152
+msgid "Change"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:353
+msgctxt "action"
+msgid "Change"
+msgstr "Değiştir"
+
+#: src/view/screens/Settings/index.tsx:716
+msgid "Change handle"
+msgstr "Kullanıcı adını değiştir"
+
+#: src/view/com/modals/ChangeHandle.tsx:162
+#: src/view/screens/Settings/index.tsx:727
+msgid "Change Handle"
+msgstr "Kullanıcı Adını Değiştir"
+
+#: src/view/com/modals/VerifyEmail.tsx:147
+msgid "Change my email"
+msgstr "E-postamı değiştir"
+
+#: src/view/screens/Settings/index.tsx:754
+msgid "Change password"
+msgstr "Şifre değiştir"
+
+#: src/view/com/modals/ChangePassword.tsx:141
+#: src/view/screens/Settings/index.tsx:765
+msgid "Change Password"
+msgstr "Şifre Değiştir"
+
+#: src/view/com/composer/select-language/SuggestedLanguage.tsx:73
+msgid "Change post language to {0}"
+msgstr "Gönderi dilini {0} olarak değiştir"
+
+#: src/view/screens/Settings.tsx:727
+#~ msgid "Change your Bluesky password"
+#~ msgstr "Bluesky şifrenizi değiştirin"
+
+#: src/view/com/modals/ChangeEmail.tsx:109
+msgid "Change Your Email"
+msgstr "E-postanızı Değiştirin"
+
+#: src/screens/Deactivated.tsx:72
+#: src/screens/Deactivated.tsx:76
+msgid "Check my status"
+msgstr "Durumumu kontrol et"
+
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:121
+msgid "Check out some recommended feeds. Tap + to add them to your list of pinned feeds."
+msgstr "Bazı önerilen beslemelere göz atın. Eklemek için + simgesine dokunun."
+
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:185
+msgid "Check out some recommended users. Follow them to see similar users."
+msgstr "Bazı önerilen kullanıcılara göz atın. Benzer kullanıcıları görmek için onları takip edin."
+
+#: src/view/com/modals/DeleteAccount.tsx:168
+msgid "Check your inbox for an email with the confirmation code to enter below:"
+msgstr "Aşağıya gireceğiniz onay kodu içeren bir e-posta için gelen kutunuzu kontrol edin:"
+
+#: src/view/com/modals/Threadgate.tsx:72
+msgid "Choose \"Everybody\" or \"Nobody\""
+msgstr "\"Herkes\" veya \"Hiç kimse\" seçin"
+
+#: src/view/screens/Settings.tsx:691
+#~ msgid "Choose a new Bluesky username or create"
+#~ msgstr "Yeni bir Bluesky kullanıcı adı seçin veya oluşturun"
+
+#: src/view/com/auth/server-input/index.tsx:79
+msgid "Choose Service"
+msgstr "Hizmet Seç"
+
+#: src/screens/Onboarding/StepFinished.tsx:139
+msgid "Choose the algorithms that power your custom feeds."
+msgstr "Özel beslemelerinizi destekleyen algoritmaları seçin."
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:83
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:85
+msgid "Choose the algorithms that power your experience with custom feeds."
+msgstr "Özel beslemelerle deneyiminizi destekleyen algoritmaları seçin."
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:104
+msgid "Choose your main feeds"
+msgstr "Ana beslemelerinizi seçin"
+
+#: src/screens/Signup/StepInfo/index.tsx:112
+msgid "Choose your password"
+msgstr "Şifrenizi seçin"
+
+#: src/view/screens/Settings/index.tsx:868
+msgid "Clear all legacy storage data"
+msgstr "Tüm eski depolama verilerini temizle"
+
+#: src/view/screens/Settings/index.tsx:871
+msgid "Clear all legacy storage data (restart after this)"
+msgstr "Tüm eski depolama verilerini temizle (bundan sonra yeniden başlat)"
+
+#: src/view/screens/Settings/index.tsx:880
+msgid "Clear all storage data"
+msgstr "Tüm depolama verilerini temizle"
+
+#: src/view/screens/Settings/index.tsx:883
+msgid "Clear all storage data (restart after this)"
+msgstr "Tüm depolama verilerini temizle (bundan sonra yeniden başlat)"
+
+#: src/view/com/util/forms/SearchInput.tsx:88
+#: src/view/screens/Search/Search.tsx:699
+msgid "Clear search query"
+msgstr "Arama sorgusunu temizle"
+
+#: src/view/screens/Settings/index.tsx:869
+msgid "Clears all legacy storage data"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:881
+msgid "Clears all storage data"
+msgstr ""
+
+#: src/view/screens/Support.tsx:40
+msgid "click here"
+msgstr "buraya tıklayın"
+
+#: src/components/TagMenu/index.web.tsx:138
+msgid "Click here to open tag menu for {tag}"
+msgstr ""
+
+#: src/components/RichText.tsx:192
+msgid "Click here to open tag menu for #{tag}"
+msgstr ""
+
+#: src/screens/Onboarding/index.tsx:35
+msgid "Climate"
+msgstr "İklim"
+
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
+msgid "Close"
+msgstr "Kapat"
+
+#: src/components/Dialog/index.web.tsx:106
+#: src/components/Dialog/index.web.tsx:218
+msgid "Close active dialog"
+msgstr "Etkin iletişim kutusunu kapat"
+
+#: src/screens/Login/PasswordUpdatedForm.tsx:38
+msgid "Close alert"
+msgstr "Uyarıyı kapat"
+
+#: src/view/com/util/BottomSheetCustomBackdrop.tsx:36
+msgid "Close bottom drawer"
+msgstr "Alt çekmeceyi kapat"
+
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:36
+msgid "Close image"
+msgstr "Resmi kapat"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:129
+msgid "Close image viewer"
+msgstr "Resim görüntüleyiciyi kapat"
+
+#: src/view/shell/index.web.tsx:55
+msgid "Close navigation footer"
+msgstr "Gezinme altbilgisini kapat"
+
+#: src/components/Menu/index.tsx:207
+#: src/components/TagMenu/index.tsx:262
+msgid "Close this dialog"
+msgstr ""
+
+#: src/view/shell/index.web.tsx:56
+msgid "Closes bottom navigation bar"
+msgstr "Alt gezinme çubuğunu kapatır"
+
+#: src/screens/Login/PasswordUpdatedForm.tsx:39
+msgid "Closes password update alert"
+msgstr "Şifre güncelleme uyarısını kapatır"
+
+#: src/view/com/composer/Composer.tsx:319
+msgid "Closes post composer and discards post draft"
+msgstr "Gönderi bestecisini kapatır ve gönderi taslağını siler"
+
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:37
+msgid "Closes viewer for header image"
+msgstr "Başlık resmi görüntüleyicisini kapatır"
+
+#: src/view/com/notifications/FeedItem.tsx:321
+msgid "Collapses list of users for a given notification"
+msgstr "Belirli bir bildirim için kullanıcı listesini daraltır"
+
+#: src/screens/Onboarding/index.tsx:41
+msgid "Comedy"
+msgstr "Komedi"
+
+#: src/screens/Onboarding/index.tsx:27
+msgid "Comics"
+msgstr "Çizgi romanlar"
+
+#: src/Navigation.tsx:241
+#: src/view/screens/CommunityGuidelines.tsx:32
+msgid "Community Guidelines"
+msgstr "Topluluk Kuralları"
+
+#: src/screens/Onboarding/StepFinished.tsx:152
+msgid "Complete onboarding and start using your account"
+msgstr "Onboarding'i tamamlayın ve hesabınızı kullanmaya başlayın"
+
+#: src/screens/Signup/index.tsx:154
+msgid "Complete the challenge"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:438
+msgid "Compose posts up to {MAX_GRAPHEME_LENGTH} characters in length"
+msgstr "En fazla {MAX_GRAPHEME_LENGTH} karakter uzunluğunda gönderiler oluşturun"
+
+#: src/view/com/composer/Prompt.tsx:24
+msgid "Compose reply"
+msgstr "Yanıt oluştur"
+
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:81
+msgid "Configure content filtering setting for category: {0}"
+msgstr "Kategori için içerik filtreleme ayarlarını yapılandır: {0}"
+
+#: src/components/moderation/LabelPreference.tsx:81
+msgid "Configure content filtering setting for category: {name}"
+msgstr ""
+
+#: src/components/moderation/LabelPreference.tsx:244
+msgid "Configured in <0>moderation settings0>."
+msgstr ""
+
+#: src/components/Prompt.tsx:153
+#: src/components/Prompt.tsx:156
+#: src/view/com/modals/SelfLabel.tsx:154
+#: src/view/com/modals/VerifyEmail.tsx:231
+#: src/view/com/modals/VerifyEmail.tsx:233
+#: src/view/screens/PreferencesFollowingFeed.tsx:308
+#: src/view/screens/PreferencesThreads.tsx:159
+msgid "Confirm"
+msgstr "Onayla"
+
+#: src/view/com/modals/Confirm.tsx:NaN
+#~ msgctxt "action"
+#~ msgid "Confirm"
+#~ msgstr "Onayla"
+
+#: src/view/com/modals/ChangeEmail.tsx:193
+#: src/view/com/modals/ChangeEmail.tsx:195
+msgid "Confirm Change"
+msgstr "Değişikliği Onayla"
+
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:35
+msgid "Confirm content language settings"
+msgstr "İçerik dil ayarlarını onayla"
+
+#: src/view/com/modals/DeleteAccount.tsx:219
+msgid "Confirm delete account"
+msgstr "Hesabı silmeyi onayla"
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:151
+#~ msgid "Confirm your age to enable adult content."
+#~ msgstr "Yetişkin içeriği etkinleştirmek için yaşınızı onaylayın."
+
+#: src/screens/Moderation/index.tsx:301
+msgid "Confirm your age:"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:292
+msgid "Confirm your birthdate"
+msgstr ""
+
+#: src/view/com/modals/ChangeEmail.tsx:157
+#: src/view/com/modals/DeleteAccount.tsx:175
+#: src/view/com/modals/DeleteAccount.tsx:181
+#: src/view/com/modals/VerifyEmail.tsx:165
+msgid "Confirmation code"
+msgstr "Onay kodu"
+
+#: src/view/com/modals/Waitlist.tsx:120
+#~ msgid "Confirms signing up {email} to the waitlist"
+#~ msgstr "{email} adresinin bekleme listesine kaydını onaylar"
+
+#: src/screens/Login/LoginForm.tsx:248
+msgid "Connecting..."
+msgstr "Bağlanıyor..."
+
+#: src/screens/Signup/index.tsx:219
+msgid "Contact support"
+msgstr "Destek ile iletişime geçin"
+
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "content"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:18
+msgid "Content Blocked"
+msgstr ""
+
+#: src/view/screens/Moderation.tsx:81
+#~ msgid "Content filtering"
+#~ msgstr "İçerik filtreleme"
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:44
+#~ msgid "Content Filtering"
+#~ msgstr "İçerik Filtreleme"
+
+#: src/screens/Moderation/index.tsx:285
+msgid "Content filters"
+msgstr ""
+
+#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74
+#: src/view/screens/LanguageSettings.tsx:278
+msgid "Content Languages"
+msgstr "İçerik Dilleri"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:75
+#: src/lib/moderation/useModerationCauseDescription.ts:75
+msgid "Content Not Available"
+msgstr "İçerik Mevcut Değil"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:46
+#: src/components/moderation/ScreenHider.tsx:99
+#: src/lib/moderation/useGlobalLabelStrings.ts:22
+#: src/lib/moderation/useModerationCauseDescription.ts:38
+msgid "Content Warning"
+msgstr "İçerik Uyarısı"
+
+#: src/view/com/composer/labels/LabelsBtn.tsx:31
+msgid "Content warnings"
+msgstr "İçerik uyarıları"
+
+#: src/components/Menu/index.web.tsx:84
+msgid "Context menu backdrop, click to close the menu."
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:161
+#: src/screens/Onboarding/StepFollowingFeed.tsx:154
+#: src/screens/Onboarding/StepInterests/index.tsx:252
+#: src/screens/Onboarding/StepModeration/index.tsx:103
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:118
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:96
+msgid "Continue"
+msgstr "Devam et"
+
+#: src/components/AccountList.tsx:108
+msgid "Continue as {0} (currently signed in)"
+msgstr ""
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:151
+#: src/screens/Onboarding/StepInterests/index.tsx:249
+#: src/screens/Onboarding/StepModeration/index.tsx:100
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:115
+#: src/screens/Signup/index.tsx:198
+msgid "Continue to next step"
+msgstr "Sonraki adıma devam et"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:158
+msgid "Continue to the next step"
+msgstr "Sonraki adıma devam et"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:199
+msgid "Continue to the next step without following any accounts"
+msgstr "Herhangi bir hesabı takip etmeden sonraki adıma devam et"
+
+#: src/screens/Onboarding/index.tsx:44
+msgid "Cooking"
+msgstr "Yemek pişirme"
+
+#: src/view/com/modals/AddAppPasswords.tsx:196
+#: src/view/com/modals/InviteCodes.tsx:183
+msgid "Copied"
+msgstr "Kopyalandı"
+
+#: src/view/screens/Settings/index.tsx:251
+msgid "Copied build version to clipboard"
+msgstr "Sürüm numarası panoya kopyalandı"
+
+#: src/view/com/modals/AddAppPasswords.tsx:77
+#: src/view/com/modals/ChangeHandle.tsx:326
+#: src/view/com/modals/InviteCodes.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:158
+msgid "Copied to clipboard"
+msgstr "Panoya kopyalandı"
+
+#: src/view/com/modals/AddAppPasswords.tsx:190
+msgid "Copies app password"
+msgstr "Uygulama şifresini kopyalar"
+
+#: src/view/com/modals/AddAppPasswords.tsx:189
+msgid "Copy"
+msgstr "Kopyala"
+
+#: src/view/com/modals/ChangeHandle.tsx:480
+msgid "Copy {0}"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:388
+msgid "Copy link to list"
+msgstr "Liste bağlantısını kopyala"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
+msgid "Copy link to post"
+msgstr "Gönderi bağlantısını kopyala"
+
+#: src/view/com/profile/ProfileHeader.tsx:342
+#~ msgid "Copy link to profile"
+#~ msgstr "Profili bağlantısını kopyala"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:220
+#: src/view/com/util/forms/PostDropdownBtn.tsx:222
+msgid "Copy post text"
+msgstr "Gönderi metnini kopyala"
+
+#: src/Navigation.tsx:246
+#: src/view/screens/CopyrightPolicy.tsx:29
+msgid "Copyright Policy"
+msgstr "Telif Hakkı Politikası"
+
+#: src/view/screens/ProfileFeed.tsx:103
+msgid "Could not load feed"
+msgstr "Besleme yüklenemedi"
+
+#: src/view/screens/ProfileList.tsx:907
+msgid "Could not load list"
+msgstr "Liste yüklenemedi"
+
+#: src/view/com/auth/create/Step2.tsx:91
+#~ msgid "Country"
+#~ msgstr "Ülke"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:65
+#: src/view/com/auth/SplashScreen.tsx:75
+#: src/view/com/auth/SplashScreen.web.tsx:104
+msgid "Create a new account"
+msgstr "Yeni bir hesap oluştur"
+
+#: src/view/screens/Settings/index.tsx:403
+msgid "Create a new Bluesky account"
+msgstr "Yeni bir Bluesky hesabı oluştur"
+
+#: src/screens/Signup/index.tsx:129
+msgid "Create Account"
+msgstr "Hesap Oluştur"
+
+#: src/view/com/modals/AddAppPasswords.tsx:227
+msgid "Create App Password"
+msgstr "Uygulama Şifresi Oluştur"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:55
+#: src/view/com/auth/SplashScreen.tsx:66
+#: src/view/com/auth/SplashScreen.web.tsx:95
+msgid "Create new account"
+msgstr "Yeni hesap oluştur"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:93
+msgid "Create report for {0}"
+msgstr ""
+
+#: src/view/screens/AppPasswords.tsx:246
+msgid "Created {0}"
+msgstr "{0} oluşturuldu"
+
+#: src/view/screens/ProfileFeed.tsx:616
+#~ msgid "Created by <0/>"
+#~ msgstr "<0/> tarafından oluşturuldu"
+
+#: src/view/screens/ProfileFeed.tsx:614
+#~ msgid "Created by you"
+#~ msgstr "Siz tarafından oluşturuldu"
+
+#: src/view/com/composer/Composer.tsx:469
+msgid "Creates a card with a thumbnail. The card links to {url}"
+msgstr "Küçük resimli bir kart oluşturur. Kart, {url} bağlantısına gider"
+
+#: src/screens/Onboarding/index.tsx:29
+msgid "Culture"
+msgstr "Kültür"
+
+#: src/view/com/auth/server-input/index.tsx:97
+#: src/view/com/auth/server-input/index.tsx:99
+msgid "Custom"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:388
+msgid "Custom domain"
+msgstr "Özel alan adı"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:107
+#: src/view/screens/Feeds.tsx:692
+msgid "Custom feeds built by the community bring you new experiences and help you find the content you love."
+msgstr "Topluluk tarafından oluşturulan özel beslemeler size yeni deneyimler sunar ve sevdiğiniz içeriği bulmanıza yardımcı olur."
+
+#: src/view/screens/PreferencesExternalEmbeds.tsx:55
+msgid "Customize media from external sites."
+msgstr "Harici sitelerden medyayı özelleştirin."
+
+#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:530
+msgid "Dark"
+msgstr "Karanlık"
+
+#: src/view/screens/Debug.tsx:63
+msgid "Dark mode"
+msgstr "Karanlık mod"
+
+#: src/view/screens/Settings/index.tsx:517
+msgid "Dark Theme"
+msgstr "Karanlık Tema"
+
+#: src/screens/Signup/StepInfo/index.tsx:132
+msgid "Date of birth"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:841
+msgid "Debug Moderation"
+msgstr ""
+
+#: src/view/screens/Debug.tsx:83
+msgid "Debug panel"
+msgstr "Hata ayıklama paneli"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:319
+#: src/view/screens/AppPasswords.tsx:268
+#: src/view/screens/ProfileList.tsx:613
+msgid "Delete"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:796
+msgid "Delete account"
+msgstr "Hesabı sil"
+
+#: src/view/com/modals/DeleteAccount.tsx:86
+msgid "Delete Account"
+msgstr "Hesabı Sil"
+
+#: src/view/screens/AppPasswords.tsx:239
+msgid "Delete app password"
+msgstr "Uygulama şifresini sil"
+
+#: src/view/screens/AppPasswords.tsx:263
+msgid "Delete app password?"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:415
+msgid "Delete List"
+msgstr "Listeyi Sil"
+
+#: src/view/com/modals/DeleteAccount.tsx:222
+msgid "Delete my account"
+msgstr "Hesabımı sil"
+
+#: src/view/screens/Settings/index.tsx:808
+msgid "Delete My Account…"
+msgstr "Hesabımı Sil…"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:302
+#: src/view/com/util/forms/PostDropdownBtn.tsx:304
+msgid "Delete post"
+msgstr "Gönderiyi sil"
+
+#: src/view/screens/ProfileList.tsx:608
+msgid "Delete this list?"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:314
+msgid "Delete this post?"
+msgstr "Bu gönderiyi sil?"
+
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:64
+msgid "Deleted"
+msgstr "Silindi"
+
+#: src/view/com/post-thread/PostThread.tsx:305
+msgid "Deleted post."
+msgstr "Silinen gönderi."
+
+#: src/view/com/modals/CreateOrEditList.tsx:301
+#: src/view/com/modals/CreateOrEditList.tsx:322
+#: src/view/com/modals/EditProfile.tsx:199
+#: src/view/com/modals/EditProfile.tsx:211
+msgid "Description"
+msgstr "Açıklama"
+
+#: src/view/screens/Settings.tsx:760
+#~ msgid "Developer Tools"
+#~ msgstr "Geliştirici Araçları"
+
+#: src/view/com/composer/Composer.tsx:218
+msgid "Did you want to say anything?"
+msgstr "Bir şey söylemek istediniz mi?"
+
+#: src/view/screens/Settings/index.tsx:523
+msgid "Dim"
+msgstr "Karart"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:32
+#: src/lib/moderation/useLabelBehaviorDescription.ts:42
+#: src/lib/moderation/useLabelBehaviorDescription.ts:68
+#: src/screens/Moderation/index.tsx:341
+msgid "Disabled"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:511
+msgid "Discard"
+msgstr "Sil"
+
+#: src/view/com/composer/Composer.tsx:138
+#~ msgid "Discard draft"
+#~ msgstr "Taslağı sil"
+
+#: src/view/com/composer/Composer.tsx:508
+msgid "Discard draft?"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:518
+#: src/screens/Moderation/index.tsx:522
+msgid "Discourage apps from showing my account to logged-out users"
+msgstr "Uygulamaların hesabımı oturum açmamış kullanıcılara göstermesini engelle"
+
+#: src/view/com/posts/FollowingEmptyState.tsx:74
+#: src/view/com/posts/FollowingEndOfFeed.tsx:75
+msgid "Discover new custom feeds"
+msgstr "Yeni özel beslemeler keşfet"
+
+#: src/view/screens/Feeds.tsx:441
+#~ msgid "Discover new feeds"
+#~ msgstr "Yeni beslemeler keşfet"
+
+#: src/view/screens/Feeds.tsx:689
+msgid "Discover New Feeds"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:193
+msgid "Display name"
+msgstr "Görünen ad"
+
+#: src/view/com/modals/EditProfile.tsx:181
+msgid "Display Name"
+msgstr "Görünen Ad"
+
+#: src/view/com/modals/ChangeHandle.tsx:397
+msgid "DNS Panel"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:39
+msgid "Does not include nudity."
+msgstr ""
+
+#: src/screens/Signup/StepHandle.tsx:104
+msgid "Doesn't begin or end with a hyphen"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "Domain Value"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:488
+msgid "Domain verified!"
+msgstr "Alan adı doğrulandı!"
+
+#: src/view/com/auth/create/Step1.tsx:114
+#~ msgid "Don't have an invite code?"
+#~ msgstr "Davet kodunuz yok mu?"
+
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86
+#: src/view/com/modals/EditImage.tsx:334
+#: src/view/com/modals/ListAddRemoveUsers.tsx:144
+#: src/view/com/modals/SelfLabel.tsx:157
+#: src/view/com/modals/Threadgate.tsx:129
+#: src/view/com/modals/Threadgate.tsx:132
+#: src/view/com/modals/UserAddRemoveLists.tsx:95
+#: src/view/com/modals/UserAddRemoveLists.tsx:98
+#: src/view/screens/PreferencesThreads.tsx:162
+msgctxt "action"
+msgid "Done"
+msgstr "Tamam"
+
+#: src/components/dialogs/BirthDateSettings.tsx:119
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/components/forms/DateField/index.tsx:74
+#: src/components/forms/DateField/index.tsx:80
+#: src/view/com/auth/server-input/index.tsx:169
+#: src/view/com/auth/server-input/index.tsx:170
+#: src/view/com/modals/AddAppPasswords.tsx:227
+#: src/view/com/modals/AltImage.tsx:140
+#: src/view/com/modals/crop-image/CropImage.web.tsx:153
+#: src/view/com/modals/InviteCodes.tsx:81
+#: src/view/com/modals/InviteCodes.tsx:124
+#: src/view/com/modals/ListAddRemoveUsers.tsx:142
+#: src/view/screens/PreferencesFollowingFeed.tsx:311
+#: src/view/screens/Settings/ExportCarDialog.tsx:94
+#: src/view/screens/Settings/ExportCarDialog.tsx:96
+msgid "Done"
+msgstr "Tamam"
+
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:43
+msgid "Done{extraText}"
+msgstr "Tamam{extraText}"
+
+#: src/view/com/auth/login/ChooseAccountForm.tsx:45
+#~ msgid "Double tap to sign in"
+#~ msgstr "Oturum açmak için çift dokunun"
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:59
+#: src/view/screens/Settings/ExportCarDialog.tsx:63
+msgid "Download CAR file"
+msgstr ""
+
+#: src/view/com/composer/text-input/TextInput.web.tsx:249
+msgid "Drop to add images"
+msgstr "Resim eklemek için bırakın"
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:120
+msgid "Due to Apple policies, adult content can only be enabled on the web after completing sign up."
+msgstr "Apple politikaları gereği, yetişkin içeriği yalnızca kaydı tamamladıktan sonra web üzerinde etkinleştirilebilir."
+
+#: src/view/com/modals/ChangeHandle.tsx:258
+msgid "e.g. alice"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:186
+msgid "e.g. Alice Roberts"
+msgstr "örn: Alice Roberts"
+
+#: src/view/com/modals/ChangeHandle.tsx:380
+msgid "e.g. alice.com"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:204
+msgid "e.g. Artist, dog-lover, and avid reader."
+msgstr "örn: Sanatçı, köpek sever ve okumayı seven."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:43
+msgid "E.g. artistic nudes."
+msgstr ""
+
+#: src/view/com/modals/CreateOrEditList.tsx:284
+msgid "e.g. Great Posters"
+msgstr "örn: Harika Göndericiler"
+
+#: src/view/com/modals/CreateOrEditList.tsx:285
+msgid "e.g. Spammers"
+msgstr "örn: Spamcılar"
+
+#: src/view/com/modals/CreateOrEditList.tsx:313
+msgid "e.g. The posters who never miss."
+msgstr "örn: Asla kaçırmayan göndericiler."
+
+#: src/view/com/modals/CreateOrEditList.tsx:314
+msgid "e.g. Users that repeatedly reply with ads."
+msgstr "örn: Reklamlarla tekrar tekrar yanıt veren kullanıcılar."
+
+#: src/view/com/modals/InviteCodes.tsx:97
+msgid "Each code works once. You'll receive more invite codes periodically."
+msgstr "Her kod bir kez çalışır. Düzenli aralıklarla daha fazla davet kodu alacaksınız."
+
+#: src/view/com/lists/ListMembers.tsx:149
+msgctxt "action"
+msgid "Edit"
+msgstr "Düzenle"
+
+#: src/view/com/util/UserAvatar.tsx:299
+#: src/view/com/util/UserBanner.tsx:85
+msgid "Edit avatar"
+msgstr ""
+
+#: src/view/com/composer/photos/Gallery.tsx:144
+#: src/view/com/modals/EditImage.tsx:208
+msgid "Edit image"
+msgstr "Resmi düzenle"
+
+#: src/view/screens/ProfileList.tsx:403
+msgid "Edit list details"
+msgstr "Liste ayrıntılarını düzenle"
+
+#: src/view/com/modals/CreateOrEditList.tsx:251
+msgid "Edit Moderation List"
+msgstr "Düzenleme Listesini Düzenle"
+
+#: src/Navigation.tsx:256
+#: src/view/screens/Feeds.tsx:434
+#: src/view/screens/SavedFeeds.tsx:84
+msgid "Edit My Feeds"
+msgstr "Beslemelerimi Düzenle"
+
+#: src/view/com/modals/EditProfile.tsx:153
+msgid "Edit my profile"
+msgstr "Profilimi düzenle"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:171
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:168
+msgid "Edit profile"
+msgstr "Profil düzenle"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:174
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:171
+msgid "Edit Profile"
+msgstr "Profil Düzenle"
+
+#: src/view/com/home/HomeHeaderLayout.web.tsx:62
+#: src/view/screens/Feeds.tsx:355
+msgid "Edit Saved Feeds"
+msgstr "Kayıtlı Beslemeleri Düzenle"
+
+#: src/view/com/modals/CreateOrEditList.tsx:246
+msgid "Edit User List"
+msgstr "Kullanıcı Listesini Düzenle"
+
+#: src/view/com/modals/EditProfile.tsx:194
+msgid "Edit your display name"
+msgstr "Görünen adınızı düzenleyin"
+
+#: src/view/com/modals/EditProfile.tsx:212
+msgid "Edit your profile description"
+msgstr "Profil açıklamanızı düzenleyin"
+
+#: src/screens/Onboarding/index.tsx:34
+msgid "Education"
+msgstr "Eğitim"
+
+#: src/screens/Signup/StepInfo/index.tsx:80
+#: src/view/com/modals/ChangeEmail.tsx:141
+msgid "Email"
+msgstr "E-posta"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:99
+msgid "Email address"
+msgstr "E-posta adresi"
+
+#: src/view/com/modals/ChangeEmail.tsx:56
+#: src/view/com/modals/ChangeEmail.tsx:88
+msgid "Email updated"
+msgstr "E-posta güncellendi"
+
+#: src/view/com/modals/ChangeEmail.tsx:111
+msgid "Email Updated"
+msgstr "E-posta Güncellendi"
+
+#: src/view/com/modals/VerifyEmail.tsx:78
+msgid "Email verified"
+msgstr "E-posta doğrulandı"
+
+#: src/view/screens/Settings/index.tsx:331
+msgid "Email:"
+msgstr "E-posta:"
+
+#: src/components/dialogs/EmbedConsent.tsx:101
+msgid "Enable {0} only"
+msgstr "Yalnızca {0} etkinleştir"
+
+#: src/screens/Moderation/index.tsx:329
+msgid "Enable adult content"
+msgstr ""
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:94
+msgid "Enable Adult Content"
+msgstr "Yetişkin İçeriği Etkinleştir"
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:79
+msgid "Enable adult content in your feeds"
+msgstr "Beslemelerinizde yetişkin içeriği etkinleştirin"
+
+#: src/components/dialogs/EmbedConsent.tsx:82
+#: src/components/dialogs/EmbedConsent.tsx:89
+msgid "Enable external media"
+msgstr ""
+
+#: src/view/com/modals/EmbedConsent.tsx:97
+#~ msgid "Enable External Media"
+#~ msgstr "Harici Medyayı Etkinleştir"
+
+#: src/view/screens/PreferencesExternalEmbeds.tsx:75
+msgid "Enable media players for"
+msgstr "Medya oynatıcılarını etkinleştir"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:147
+msgid "Enable this setting to only see replies between people you follow."
+msgstr "Bu ayarı yalnızca takip ettiğiniz kişiler arasındaki yanıtları görmek için etkinleştirin."
+
+#: src/components/dialogs/EmbedConsent.tsx:94
+msgid "Enable this source only"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:339
+msgid "Enabled"
+msgstr ""
+
+#: src/screens/Profile/Sections/Feed.tsx:84
+msgid "End of feed"
+msgstr "Beslemenin sonu"
+
+#: src/view/com/modals/AddAppPasswords.tsx:167
+msgid "Enter a name for this App Password"
+msgstr "Bu Uygulama Şifresi için bir ad girin"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:139
+msgid "Enter a password"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:99
+#: src/components/dialogs/MutedWords.tsx:100
+msgid "Enter a word or tag"
+msgstr ""
+
+#: src/view/com/modals/VerifyEmail.tsx:105
+msgid "Enter Confirmation Code"
+msgstr "Onay Kodunu Girin"
+
+#: src/view/com/modals/ChangePassword.tsx:153
+msgid "Enter the code you received to change your password."
+msgstr "Şifrenizi değiştirmek için aldığınız kodu girin."
+
+#: src/view/com/modals/ChangeHandle.tsx:370
+msgid "Enter the domain you want to use"
+msgstr "Kullanmak istediğiniz alan adını girin"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:119
+msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password."
+msgstr "Hesabınızı oluşturmak için kullandığınız e-postayı girin. Size yeni bir şifre belirlemeniz için bir \"sıfırlama kodu\" göndereceğiz."
+
+#: src/components/dialogs/BirthDateSettings.tsx:108
+msgid "Enter your birth date"
+msgstr "Doğum tarihinizi girin"
+
+#: src/view/com/modals/Waitlist.tsx:78
+#~ msgid "Enter your email"
+#~ msgstr "E-posta adresinizi girin"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:105
+#: src/screens/Signup/StepInfo/index.tsx:91
+msgid "Enter your email address"
+msgstr "E-posta adresinizi girin"
+
+#: src/view/com/modals/ChangeEmail.tsx:41
+msgid "Enter your new email above"
+msgstr "Yeni e-postanızı yukarıya girin"
+
+#: src/view/com/modals/ChangeEmail.tsx:117
+msgid "Enter your new email address below."
+msgstr "Yeni e-posta adresinizi aşağıya girin."
+
+#: src/view/com/auth/create/Step2.tsx:188
+#~ msgid "Enter your phone number"
+#~ msgstr "Telefon numaranızı girin"
+
+#: src/screens/Login/index.tsx:101
+msgid "Enter your username and password"
+msgstr "Kullanıcı adınızı ve şifrenizi girin"
+
+#: src/screens/Signup/StepCaptcha/index.tsx:49
+msgid "Error receiving captcha response."
+msgstr ""
+
+#: src/view/screens/Search/Search.tsx:111
+msgid "Error:"
+msgstr "Hata:"
+
+#: src/view/com/modals/Threadgate.tsx:76
+msgid "Everybody"
+msgstr "Herkes"
+
+#: src/lib/moderation/useReportOptions.ts:66
+msgid "Excessive mentions or replies"
+msgstr ""
+
+#: src/view/com/modals/DeleteAccount.tsx:230
+msgid "Exits account deletion process"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:151
+msgid "Exits handle change process"
+msgstr "Kullanıcı adı değişikliği sürecinden çıkar"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:136
+msgid "Exits image cropping process"
+msgstr ""
+
+#: src/view/com/lightbox/Lightbox.web.tsx:130
+msgid "Exits image view"
+msgstr "Resim görünümünden çıkar"
+
+#: src/view/com/modals/ListAddRemoveUsers.tsx:88
+#: src/view/shell/desktop/Search.tsx:236
+msgid "Exits inputting search query"
+msgstr "Arama sorgusu girişinden çıkar"
+
+#: src/view/com/modals/Waitlist.tsx:138
+#~ msgid "Exits signing up for waitlist with {email}"
+#~ msgstr "{email} adresiyle bekleme listesine kaydolma işleminden çıkar"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:183
+msgid "Expand alt text"
+msgstr "Alternatif metni genişlet"
+
+#: src/view/com/composer/ComposerReplyTo.tsx:81
+#: src/view/com/composer/ComposerReplyTo.tsx:84
+msgid "Expand or collapse the full post you are replying to"
+msgstr "Yanıt verdiğiniz tam gönderiyi genişletin veya daraltın"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:47
+msgid "Explicit or potentially disturbing media."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:35
+msgid "Explicit sexual images."
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:777
+msgid "Export my data"
+msgstr ""
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:44
+#: src/view/screens/Settings/index.tsx:788
+msgid "Export My Data"
+msgstr ""
+
+#: src/components/dialogs/EmbedConsent.tsx:55
+#: src/components/dialogs/EmbedConsent.tsx:59
+msgid "External Media"
+msgstr "Harici Medya"
+
+#: src/components/dialogs/EmbedConsent.tsx:71
+#: src/view/screens/PreferencesExternalEmbeds.tsx:66
+msgid "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."
+msgstr "Harici medya, web sitelerinin siz ve cihazınız hakkında bilgi toplamasına izin verebilir. Bilgi, \"oynat\" düğmesine basana kadar gönderilmez veya istenmez."
+
+#: src/Navigation.tsx:275
+#: src/view/screens/PreferencesExternalEmbeds.tsx:52
+#: src/view/screens/Settings/index.tsx:677
+msgid "External Media Preferences"
+msgstr "Harici Medya Tercihleri"
+
+#: src/view/screens/Settings/index.tsx:668
+msgid "External media settings"
+msgstr "Harici medya ayarları"
+
+#: src/view/com/modals/AddAppPasswords.tsx:116
+#: src/view/com/modals/AddAppPasswords.tsx:120
+msgid "Failed to create app password."
+msgstr "Uygulama şifresi oluşturulamadı."
+
+#: src/view/com/modals/CreateOrEditList.tsx:207
+msgid "Failed to create the list. Check your internet connection and try again."
+msgstr "Liste oluşturulamadı. İnternet bağlantınızı kontrol edin ve tekrar deneyin."
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:125
+msgid "Failed to delete post, please try again"
+msgstr "Gönderi silinemedi, lütfen tekrar deneyin"
+
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:109
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:141
+msgid "Failed to load recommended feeds"
+msgstr "Önerilen beslemeler yüklenemedi"
+
+#: src/view/com/lightbox/Lightbox.tsx:83
+msgid "Failed to save image: {0}"
+msgstr ""
+
+#: src/Navigation.tsx:196
+msgid "Feed"
+msgstr "Besleme"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:218
+msgid "Feed by {0}"
+msgstr "{0} tarafından besleme"
+
+#: src/view/screens/Feeds.tsx:605
+msgid "Feed offline"
+msgstr "Besleme çevrimdışı"
+
+#: src/view/com/feeds/FeedPage.tsx:143
+#~ msgid "Feed Preferences"
+#~ msgstr "Besleme Tercihleri"
+
+#: src/view/shell/desktop/RightNav.tsx:61
+#: src/view/shell/Drawer.tsx:314
+msgid "Feedback"
+msgstr "Geribildirim"
+
+#: src/Navigation.tsx:464
+#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:524
+#: src/view/screens/Profile.tsx:194
+#: src/view/shell/bottom-bar/BottomBar.tsx:191
+#: src/view/shell/desktop/LeftNav.tsx:346
+#: src/view/shell/Drawer.tsx:479
+#: src/view/shell/Drawer.tsx:480
+msgid "Feeds"
+msgstr "Beslemeler"
+
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:57
+msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting."
+msgstr "Beslemeler, içerikleri düzenlemek için kullanıcılar tarafından oluşturulur. İlginizi çeken bazı beslemeler seçin."
+
+#: src/view/screens/SavedFeeds.tsx:156
+msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information."
+msgstr "Beslemeler, kullanıcıların biraz kodlama uzmanlığı ile oluşturduğu özel algoritmalardır. Daha fazla bilgi için <0/>."
+
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:80
+msgid "Feeds can be topical as well!"
+msgstr "Beslemeler aynı zamanda konusal olabilir!"
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "File Contents"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:66
+msgid "Filter from feeds"
+msgstr ""
+
+#: src/screens/Onboarding/StepFinished.tsx:155
+msgid "Finalizing"
+msgstr "Tamamlanıyor"
+
+#: src/view/com/posts/CustomFeedEmptyState.tsx:47
+#: src/view/com/posts/FollowingEmptyState.tsx:57
+#: src/view/com/posts/FollowingEndOfFeed.tsx:58
+msgid "Find accounts to follow"
+msgstr "Takip edilecek hesaplar bul"
+
+#: src/view/screens/Search/Search.tsx:442
+msgid "Find users on Bluesky"
+msgstr "Bluesky'da kullanıcı bul"
+
+#: src/view/screens/Search/Search.tsx:440
+msgid "Find users with the search tool on the right"
+msgstr "Sağdaki arama aracıyla kullanıcı bul"
+
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:155
+msgid "Finding similar accounts..."
+msgstr "Benzer hesaplar bulunuyor..."
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:111
+msgid "Fine-tune the content you see on your Following feed."
+msgstr ""
+
+#: src/view/screens/PreferencesHomeFeed.tsx:111
+#~ msgid "Fine-tune the content you see on your home screen."
+#~ msgstr "Ana ekranınızda gördüğünüz içeriği ayarlayın."
+
+#: src/view/screens/PreferencesThreads.tsx:60
+msgid "Fine-tune the discussion threads."
+msgstr "Tartışma konularını ayarlayın."
+
+#: src/screens/Onboarding/index.tsx:38
+msgid "Fitness"
+msgstr "Fitness"
+
+#: src/screens/Onboarding/StepFinished.tsx:135
+msgid "Flexible"
+msgstr "Esnek"
+
+#: src/view/com/modals/EditImage.tsx:116
+msgid "Flip horizontal"
+msgstr "Yatay çevir"
+
+#: src/view/com/modals/EditImage.tsx:121
+#: src/view/com/modals/EditImage.tsx:288
+msgid "Flip vertically"
+msgstr "Dikey çevir"
+
+#: src/view/com/profile/FollowButton.tsx:69
+msgctxt "action"
+msgid "Follow"
+msgstr "Takip et"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:189
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:236
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:146
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
+msgid "Follow"
+msgstr "Takip et"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:58
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:221
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:128
+msgid "Follow {0}"
+msgstr "{0} takip et"
+
+#: src/view/com/profile/ProfileMenu.tsx:242
+#: src/view/com/profile/ProfileMenu.tsx:253
+msgid "Follow Account"
+msgstr ""
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:187
+msgid "Follow All"
+msgstr "Hepsini Takip Et"
+
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:144
+msgid "Follow Back"
+msgstr ""
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:182
+msgid "Follow selected accounts and continue to the next step"
+msgstr "Seçili hesapları takip edin ve sonraki adıma devam edin"
+
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:64
+msgid "Follow some users to get started. We can recommend you more users based on who you find interesting."
+msgstr "Başlamak için bazı kullanıcıları takip edin. Sizi ilginç bulduğunuz kişilere dayanarak size daha fazla kullanıcı önerebiliriz."
+
+#: src/view/com/profile/ProfileCard.tsx:216
+msgid "Followed by {0}"
+msgstr "{0} tarafından takip ediliyor"
+
+#: src/view/com/modals/Threadgate.tsx:98
+msgid "Followed users"
+msgstr "Takip edilen kullanıcılar"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:154
+msgid "Followed users only"
+msgstr "Yalnızca takip edilen kullanıcılar"
+
+#: src/view/com/notifications/FeedItem.tsx:170
+msgid "followed you"
+msgstr "sizi takip etti"
+
+#: src/view/com/profile/ProfileFollowers.tsx:104
+#: src/view/screens/ProfileFollowers.tsx:25
+msgid "Followers"
+msgstr "Takipçiler"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:234
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:149
+#: src/view/com/profile/ProfileFollows.tsx:104
+#: src/view/screens/ProfileFollows.tsx:25
+msgid "Following"
+msgstr "Takip edilenler"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:93
+msgid "Following {0}"
+msgstr "{0} takip ediliyor"
+
+#: src/view/screens/Settings/index.tsx:553
+msgid "Following feed preferences"
+msgstr ""
+
+#: src/Navigation.tsx:262
+#: src/view/com/home/HomeHeaderLayout.web.tsx:50
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:84
+#: src/view/screens/PreferencesFollowingFeed.tsx:104
+#: src/view/screens/Settings/index.tsx:562
+msgid "Following Feed Preferences"
+msgstr ""
+
+#: src/screens/Profile/Header/Handle.tsx:24
+msgid "Follows you"
+msgstr "Sizi takip ediyor"
+
+#: src/view/com/profile/ProfileCard.tsx:141
+msgid "Follows You"
+msgstr "Sizi Takip Ediyor"
+
+#: src/screens/Onboarding/index.tsx:43
+msgid "Food"
+msgstr "Yiyecek"
+
+#: src/view/com/modals/DeleteAccount.tsx:110
+msgid "For security reasons, we'll need to send a confirmation code to your email address."
+msgstr "Güvenlik nedeniyle, e-posta adresinize bir onay kodu göndermemiz gerekecek."
+
+#: src/view/com/modals/AddAppPasswords.tsx:210
+msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one."
+msgstr "Güvenlik nedeniyle, bunu tekrar göremezsiniz. Bu şifreyi kaybederseniz, yeni bir tane oluşturmanız gerekecek."
+
+#: src/view/com/auth/login/LoginForm.tsx:238
+#~ msgid "Forgot"
+#~ msgstr "Unuttum"
+
+#: src/view/com/auth/login/LoginForm.tsx:235
+#~ msgid "Forgot password"
+#~ msgstr "Şifremi unuttum"
+
+#: src/screens/Login/index.tsx:129
+#: src/screens/Login/index.tsx:144
+msgid "Forgot Password"
+msgstr "Şifremi Unuttum"
+
+#: src/screens/Login/LoginForm.tsx:201
+msgid "Forgot password?"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:212
+msgid "Forgot?"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:52
+msgid "Frequently Posts Unwanted Content"
+msgstr ""
+
+#: src/screens/Hashtag.tsx:109
+#: src/screens/Hashtag.tsx:149
+msgid "From @{sanitizedAuthor}"
+msgstr ""
+
+#: src/view/com/posts/FeedItem.tsx:179
+msgctxt "from-feed"
+msgid "From <0/>"
+msgstr "<0/> tarafından"
+
+#: src/view/com/composer/photos/SelectPhotoBtn.tsx:43
+msgid "Gallery"
+msgstr "Galeri"
+
+#: src/view/com/modals/VerifyEmail.tsx:189
+#: src/view/com/modals/VerifyEmail.tsx:191
+msgid "Get Started"
+msgstr "Başlayın"
+
+#: src/lib/moderation/useReportOptions.ts:37
+msgid "Glaring violations of law or terms of service"
+msgstr ""
+
+#: src/components/moderation/ScreenHider.tsx:151
+#: src/components/moderation/ScreenHider.tsx:160
+#: src/view/com/auth/LoggedOut.tsx:82
+#: src/view/com/auth/LoggedOut.tsx:83
+#: src/view/screens/NotFound.tsx:55
+#: src/view/screens/ProfileFeed.tsx:112
+#: src/view/screens/ProfileList.tsx:916
+#: src/view/shell/desktop/LeftNav.tsx:108
+msgid "Go back"
+msgstr "Geri git"
+
+#: src/components/Error.tsx:91
+#: src/screens/Profile/ErrorState.tsx:62
+#: src/screens/Profile/ErrorState.tsx:66
+#: src/view/screens/NotFound.tsx:54
+#: src/view/screens/ProfileFeed.tsx:117
+#: src/view/screens/ProfileList.tsx:921
+msgid "Go Back"
+msgstr "Geri Git"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:73
+#: src/components/ReportDialog/SubmitView.tsx:104
+#: src/screens/Onboarding/Layout.tsx:102
+#: src/screens/Onboarding/Layout.tsx:191
+#: src/screens/Signup/index.tsx:173
+msgid "Go back to previous step"
+msgstr "Önceki adıma geri dön"
+
+#: src/view/screens/NotFound.tsx:55
+msgid "Go home"
+msgstr ""
+
+#: src/view/screens/NotFound.tsx:54
+msgid "Go Home"
+msgstr ""
+
+#: src/view/screens/Search/Search.tsx:749
+#: src/view/shell/desktop/Search.tsx:263
+msgid "Go to @{queryMaybeHandle}"
+msgstr "@{queryMaybeHandle} adresine git"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:172
+#: src/view/com/modals/ChangePassword.tsx:167
+msgid "Go to next"
+msgstr "Sonrakine git"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:46
+msgid "Graphic Media"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:266
+msgid "Handle"
+msgstr "Kullanıcı adı"
+
+#: src/lib/moderation/useReportOptions.ts:32
+msgid "Harassment, trolling, or intolerance"
+msgstr ""
+
+#: src/Navigation.tsx:282
+msgid "Hashtag"
+msgstr ""
+
+#: src/components/RichText.tsx:191
+msgid "Hashtag: #{tag}"
+msgstr ""
+
+#: src/screens/Signup/index.tsx:217
+msgid "Having trouble?"
+msgstr "Sorun mu yaşıyorsunuz?"
+
+#: src/view/shell/desktop/RightNav.tsx:90
+#: src/view/shell/Drawer.tsx:324
+msgid "Help"
+msgstr "Yardım"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:140
+msgid "Here are some accounts for you to follow"
+msgstr "Takip etmeniz için size bazı hesaplar"
+
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:89
+msgid "Here are some popular topical feeds. You can choose to follow as many as you like."
+msgstr "İşte bazı popüler konusal beslemeler. İstediğiniz kadar takip etmeyi seçebilirsiniz."
+
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:84
+msgid "Here are some topical feeds based on your interests: {interestsText}. You can choose to follow as many as you like."
+msgstr "İlgi alanlarınıza dayalı olarak bazı konusal beslemeler: {interestsText}. İstediğiniz kadar takip etmeyi seçebilirsiniz."
+
+#: src/view/com/modals/AddAppPasswords.tsx:154
+msgid "Here is your app password."
+msgstr "İşte uygulama şifreniz."
+
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:134
+#: src/components/moderation/PostHider.tsx:107
+#: src/lib/moderation/useLabelBehaviorDescription.ts:15
+#: src/lib/moderation/useLabelBehaviorDescription.ts:20
+#: src/lib/moderation/useLabelBehaviorDescription.ts:25
+#: src/lib/moderation/useLabelBehaviorDescription.ts:30
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:52
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:76
+#: src/view/com/util/forms/PostDropdownBtn.tsx:328
+msgid "Hide"
+msgstr "Gizle"
+
+#: src/view/com/notifications/FeedItem.tsx:329
+msgctxt "action"
+msgid "Hide"
+msgstr "Gizle"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:276
+#: src/view/com/util/forms/PostDropdownBtn.tsx:278
+msgid "Hide post"
+msgstr "Gönderiyi gizle"
+
+#: src/components/moderation/ContentHider.tsx:67
+#: src/components/moderation/PostHider.tsx:64
+msgid "Hide the content"
+msgstr "İçeriği gizle"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:325
+msgid "Hide this post?"
+msgstr "Bu gönderiyi gizle?"
+
+#: src/view/com/notifications/FeedItem.tsx:319
+msgid "Hide user list"
+msgstr "Kullanıcı listesini gizle"
+
+#: src/view/com/profile/ProfileHeader.tsx:526
+#~ msgid "Hides posts from {0} in your feed"
+#~ msgstr "Beslemenizdeki {0} gönderilerini gizler"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:111
+msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue."
+msgstr "Hmm, besleme sunucusuna ulaşırken bir tür sorun oluştu. Lütfen bu konuda besleme sahibini bilgilendirin."
+
+#: src/view/com/posts/FeedErrorMessage.tsx:99
+msgid "Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue."
+msgstr "Hmm, besleme sunucusunun yanlış yapılandırılmış görünüyor. Lütfen bu konuda besleme sahibini bilgilendirin."
+
+#: src/view/com/posts/FeedErrorMessage.tsx:105
+msgid "Hmm, the feed server appears to be offline. Please let the feed owner know about this issue."
+msgstr "Hmm, besleme sunucusunun çevrimdışı görünüyor. Lütfen bu konuda besleme sahibini bilgilendirin."
+
+#: src/view/com/posts/FeedErrorMessage.tsx:102
+msgid "Hmm, the feed server gave a bad response. Please let the feed owner know about this issue."
+msgstr "Hmm, besleme sunucusu kötü bir yanıt verdi. Lütfen bu konuda besleme sahibini bilgilendirin."
+
+#: src/view/com/posts/FeedErrorMessage.tsx:96
+msgid "Hmm, we're having trouble finding this feed. It may have been deleted."
+msgstr "Hmm, bu beslemeyi bulmakta sorun yaşıyoruz. Silinmiş olabilir."
+
+#: src/screens/Moderation/index.tsx:59
+msgid "Hmmmm, it seems we're having trouble loading this data. See below for more details. If this issue persists, please contact us."
+msgstr ""
+
+#: src/screens/Profile/ErrorState.tsx:31
+msgid "Hmmmm, we couldn't load that moderation service."
+msgstr ""
+
+#: src/Navigation.tsx:454
+#: src/view/shell/bottom-bar/BottomBar.tsx:147
+#: src/view/shell/desktop/LeftNav.tsx:310
+#: src/view/shell/Drawer.tsx:401
+#: src/view/shell/Drawer.tsx:402
+msgid "Home"
+msgstr "Ana Sayfa"
+
+#: src/Navigation.tsx:NaN
+#: src/view/screens/PreferencesHomeFeed.tsx:104
+#: src/view/screens/Settings.tsx:537
+#~ msgid "Home Feed Preferences"
+#~ msgstr "Ana Sayfa Besleme Tercihleri"
+
+#: src/view/com/modals/ChangeHandle.tsx:420
+msgid "Host:"
+msgstr ""
+
+#: src/screens/Login/ForgotPasswordForm.tsx:89
+#: src/screens/Login/LoginForm.tsx:134
+#: src/screens/Signup/StepInfo/index.tsx:40
+#: src/view/com/modals/ChangeHandle.tsx:281
+msgid "Hosting provider"
+msgstr "Barındırma sağlayıcısı"
+
+#: src/view/com/modals/InAppBrowserConsent.tsx:44
+msgid "How should we open this link?"
+msgstr "Bu bağlantıyı nasıl açmalıyız?"
+
+#: src/view/com/modals/VerifyEmail.tsx:214
+msgid "I have a code"
+msgstr "Bir kodum var"
+
+#: src/view/com/modals/VerifyEmail.tsx:216
+msgid "I have a confirmation code"
+msgstr "Bir onay kodum var"
+
+#: src/view/com/modals/ChangeHandle.tsx:284
+msgid "I have my own domain"
+msgstr "Kendi alan adım var"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:185
+msgid "If alt text is long, toggles alt text expanded state"
+msgstr "Alternatif metin uzunsa, alternatif metin genişletme durumunu değiştirir"
+
+#: src/view/com/modals/SelfLabel.tsx:127
+msgid "If none are selected, suitable for all ages."
+msgstr "Hiçbiri seçilmezse, tüm yaşlar için uygun."
+
+#: src/screens/Signup/StepInfo/Policies.tsx:83
+msgid "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."
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:610
+msgid "If you delete this list, you won't be able to recover it."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:316
+msgid "If you remove this post, you won't be able to recover it."
+msgstr ""
+
+#: src/view/com/modals/ChangePassword.tsx:148
+msgid "If you want to change your password, we will send you a code to verify that this is your account."
+msgstr "Şifrenizi değiştirmek istiyorsanız, size hesabınızın sizin olduğunu doğrulamak için bir kod göndereceğiz."
+
+#: src/lib/moderation/useReportOptions.ts:36
+msgid "Illegal and Urgent"
+msgstr ""
+
+#: src/view/com/util/images/Gallery.tsx:38
+msgid "Image"
+msgstr "Resim"
+
+#: src/view/com/modals/AltImage.tsx:121
+msgid "Image alt text"
+msgstr "Resim alternatif metni"
+
+#: src/view/com/util/UserAvatar.tsx:NaN
+#~ msgid "Image options"
+#~ msgstr "Resim seçenekleri"
+
+#: src/lib/moderation/useReportOptions.ts:47
+msgid "Impersonation or false claims about identity or affiliation"
+msgstr ""
+
+#: src/screens/Login/SetNewPasswordForm.tsx:127
+msgid "Input code sent to your email for password reset"
+msgstr "Şifre sıfırlama için e-postanıza gönderilen kodu girin"
+
+#: src/view/com/modals/DeleteAccount.tsx:183
+msgid "Input confirmation code for account deletion"
+msgstr "Hesap silme için onay kodunu girin"
+
+#: src/view/com/auth/create/Step1.tsx:144
+#~ msgid "Input email for Bluesky account"
+#~ msgstr "Bluesky hesabı için e-posta girin"
+
+#: src/view/com/auth/create/Step1.tsx:102
+#~ msgid "Input invite code to proceed"
+#~ msgstr "Devam etmek için davet kodunu girin"
+
+#: src/view/com/modals/AddAppPasswords.tsx:181
+msgid "Input name for app password"
+msgstr "Uygulama şifresi için ad girin"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:151
+msgid "Input new password"
+msgstr "Yeni şifre girin"
+
+#: src/view/com/modals/DeleteAccount.tsx:202
+msgid "Input password for account deletion"
+msgstr "Hesap silme için şifre girin"
+
+#: src/view/com/auth/create/Step2.tsx:196
+#~ msgid "Input phone number for SMS verification"
+#~ msgstr "SMS doğrulaması için telefon numarası girin"
+
+#: src/screens/Login/LoginForm.tsx:195
+msgid "Input the password tied to {identifier}"
+msgstr "{identifier} ile ilişkili şifreyi girin"
+
+#: src/screens/Login/LoginForm.tsx:168
+msgid "Input the username or email address you used at signup"
+msgstr "Kaydolurken kullandığınız kullanıcı adını veya e-posta adresini girin"
+
+#: src/view/com/auth/create/Step2.tsx:271
+#~ msgid "Input the verification code we have texted to you"
+#~ msgstr "Size mesaj attığımız doğrulama kodunu girin"
+
+#: src/view/com/modals/Waitlist.tsx:90
+#~ msgid "Input your email to get on the Bluesky waitlist"
+#~ msgstr "Bluesky bekleme listesine girmek için e-postanızı girin"
+
+#: src/screens/Login/LoginForm.tsx:194
+msgid "Input your password"
+msgstr "Şifrenizi girin"
+
+#: src/view/com/modals/ChangeHandle.tsx:389
+msgid "Input your preferred hosting provider"
+msgstr ""
+
+#: src/screens/Signup/StepHandle.tsx:62
+msgid "Input your user handle"
+msgstr "Kullanıcı adınızı girin"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:221
+msgid "Invalid or unsupported post record"
+msgstr "Geçersiz veya desteklenmeyen gönderi kaydı"
+
+#: src/screens/Login/LoginForm.tsx:114
+msgid "Invalid username or password"
+msgstr "Geçersiz kullanıcı adı veya şifre"
+
+#: src/view/screens/Settings.tsx:411
+#~ msgid "Invite"
+#~ msgstr "Davet et"
+
+#: src/view/com/modals/InviteCodes.tsx:94
+msgid "Invite a Friend"
+msgstr "Arkadaşını Davet Et"
+
+#: src/screens/Signup/StepInfo/index.tsx:58
+msgid "Invite code"
+msgstr "Davet kodu"
+
+#: src/screens/Signup/state.ts:278
+msgid "Invite code not accepted. Check that you input it correctly and try again."
+msgstr "Davet kodu kabul edilmedi. Doğru girdiğinizden emin olun ve tekrar deneyin."
+
+#: src/view/com/modals/InviteCodes.tsx:171
+msgid "Invite codes: {0} available"
+msgstr "Davet kodları: {0} kullanılabilir"
+
+#: src/view/shell/Drawer.tsx:645
+#~ msgid "Invite codes: {invitesAvailable} available"
+#~ msgstr "Davet kodları: {invitesAvailable} kullanılabilir"
+
+#: src/view/com/modals/InviteCodes.tsx:170
+msgid "Invite codes: 1 available"
+msgstr "Davet kodları: 1 kullanılabilir"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:65
+msgid "It shows posts from the people you follow as they happen."
+msgstr "Takip ettiğiniz kişilerin gönderilerini olduğu gibi gösterir."
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:104
+#: src/view/com/auth/SplashScreen.web.tsx:172
+msgid "Jobs"
+msgstr "İşler"
+
+#: src/view/com/modals/Waitlist.tsx:67
+#~ msgid "Join the waitlist"
+#~ msgstr "Bekleme listesine katıl"
+
+#: src/view/com/auth/create/Step1.tsx:118
+#: src/view/com/auth/create/Step1.tsx:122
+#~ msgid "Join the waitlist."
+#~ msgstr "Bekleme listesine katıl."
+
+#: src/view/com/modals/Waitlist.tsx:128
+#~ msgid "Join Waitlist"
+#~ msgstr "Bekleme Listesine Katıl"
+
+#: src/screens/Onboarding/index.tsx:24
+msgid "Journalism"
+msgstr "Gazetecilik"
+
+#: src/components/moderation/LabelsOnMe.tsx:59
+msgid "label has been placed on this {labelTarget}"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:144
+msgid "Labeled by {0}."
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:142
+msgid "Labeled by the author."
+msgstr ""
+
+#: src/view/screens/Profile.tsx:188
+msgid "Labels"
+msgstr ""
+
+#: src/screens/Profile/Sections/Labels.tsx:142
+msgid "Labels are annotations on users and content. They can be used to hide, warn, and categorize the network."
+msgstr ""
+
+#: src/components/moderation/LabelsOnMe.tsx:61
+msgid "labels have been placed on this {labelTarget}"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:62
+msgid "Labels on your account"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:64
+msgid "Labels on your content"
+msgstr ""
+
+#: src/view/com/composer/select-language/SelectLangBtn.tsx:104
+msgid "Language selection"
+msgstr "Dil seçimi"
+
+#: src/view/screens/Settings/index.tsx:614
+msgid "Language settings"
+msgstr "Dil ayarları"
+
+#: src/Navigation.tsx:144
+#: src/view/screens/LanguageSettings.tsx:89
+msgid "Language Settings"
+msgstr "Dil Ayarları"
+
+#: src/view/screens/Settings/index.tsx:623
+msgid "Languages"
+msgstr "Diller"
+
+#: src/view/com/auth/create/StepHeader.tsx:20
+#~ msgid "Last step!"
+#~ msgstr "Son adım!"
+
+#: src/view/com/util/moderation/ContentHider.tsx:103
+#~ msgid "Learn more"
+#~ msgstr "Daha fazla bilgi edinin"
+
+#: src/components/moderation/ScreenHider.tsx:136
+msgid "Learn More"
+msgstr "Daha Fazla Bilgi Edinin"
+
+#: src/components/moderation/ContentHider.tsx:65
+#: src/components/moderation/ContentHider.tsx:128
+msgid "Learn more about the moderation applied to this content."
+msgstr ""
+
+#: src/components/moderation/PostHider.tsx:85
+#: src/components/moderation/ScreenHider.tsx:125
+msgid "Learn more about this warning"
+msgstr "Bu uyarı hakkında daha fazla bilgi edinin"
+
+#: src/screens/Moderation/index.tsx:549
+msgid "Learn more about what is public on Bluesky."
+msgstr "Bluesky'da neyin herkese açık olduğu hakkında daha fazla bilgi edinin."
+
+#: src/components/moderation/ContentHider.tsx:152
+msgid "Learn more."
+msgstr ""
+
+#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82
+msgid "Leave them all unchecked to see any language."
+msgstr "Hepsini işaretlemeyin, herhangi bir dil görmek için."
+
+#: src/view/com/modals/LinkWarning.tsx:65
+msgid "Leaving Bluesky"
+msgstr "Bluesky'dan ayrılıyor"
+
+#: src/screens/Deactivated.tsx:128
+msgid "left to go."
+msgstr "kaldı."
+
+#: src/view/screens/Settings/index.tsx:296
+msgid "Legacy storage cleared, you need to restart the app now."
+msgstr "Eski depolama temizlendi, şimdi uygulamayı yeniden başlatmanız gerekiyor."
+
+#: src/screens/Login/index.tsx:130
+#: src/screens/Login/index.tsx:145
+msgid "Let's get your password reset!"
+msgstr "Şifrenizi sıfırlamaya başlayalım!"
+
+#: src/screens/Onboarding/StepFinished.tsx:155
+msgid "Let's go!"
+msgstr "Hadi gidelim!"
+
+#: src/view/com/util/UserAvatar.tsx:NaN
+#~ msgid "Library"
+#~ msgstr "Kütüphane"
+
+#: src/view/screens/Settings/index.tsx:498
+msgid "Light"
+msgstr "Açık"
+
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
+msgid "Like"
+msgstr "Beğen"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:258
+#: src/view/screens/ProfileFeed.tsx:573
+msgid "Like this feed"
+msgstr "Bu beslemeyi beğen"
+
+#: src/components/LikesDialog.tsx:87
+#: src/Navigation.tsx:201
+#: src/Navigation.tsx:206
+msgid "Liked by"
+msgstr "Beğenenler"
+
+#: src/screens/Profile/ProfileLabelerLikedBy.tsx:29
+#: src/view/screens/PostLikedBy.tsx:27
+#: src/view/screens/ProfileFeedLikedBy.tsx:27
+msgid "Liked By"
+msgstr "Beğenenler"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:268
+msgid "Liked by {0} {1}"
+msgstr "{0} {1} tarafından beğenildi"
+
+#: src/components/LabelingServiceCard/index.tsx:72
+msgid "Liked by {count} {0}"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:278
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:292
+#: src/view/screens/ProfileFeed.tsx:588
+msgid "Liked by {likeCount} {0}"
+msgstr "{likeCount} {0} tarafından beğenildi"
+
+#: src/view/com/notifications/FeedItem.tsx:174
+msgid "liked your custom feed"
+msgstr "özel beslemenizi beğendi"
+
+#: src/view/com/notifications/FeedItem.tsx:159
+msgid "liked your post"
+msgstr "gönderinizi beğendi"
+
+#: src/view/screens/Profile.tsx:193
+msgid "Likes"
+msgstr "Beğeniler"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:182
+msgid "Likes on this post"
+msgstr "Bu gönderideki beğeniler"
+
+#: src/Navigation.tsx:170
+msgid "List"
+msgstr "Liste"
+
+#: src/view/com/modals/CreateOrEditList.tsx:262
+msgid "List Avatar"
+msgstr "Liste Avatarı"
+
+#: src/view/screens/ProfileList.tsx:311
+msgid "List blocked"
+msgstr "Liste engellendi"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:220
+msgid "List by {0}"
+msgstr "{0} tarafından liste"
+
+#: src/view/screens/ProfileList.tsx:355
+msgid "List deleted"
+msgstr "Liste silindi"
+
+#: src/view/screens/ProfileList.tsx:283
+msgid "List muted"
+msgstr "Liste sessize alındı"
+
+#: src/view/com/modals/CreateOrEditList.tsx:276
+msgid "List Name"
+msgstr "Liste Adı"
+
+#: src/view/screens/ProfileList.tsx:325
+msgid "List unblocked"
+msgstr "Liste engeli kaldırıldı"
+
+#: src/view/screens/ProfileList.tsx:297
+msgid "List unmuted"
+msgstr "Liste sessizden çıkarıldı"
+
+#: src/Navigation.tsx:114
+#: src/view/screens/Profile.tsx:189
+#: src/view/screens/Profile.tsx:195
+#: src/view/shell/desktop/LeftNav.tsx:383
+#: src/view/shell/Drawer.tsx:495
+#: src/view/shell/Drawer.tsx:496
+msgid "Lists"
+msgstr "Listeler"
+
+#: src/view/com/post-thread/PostThread.tsx:281
+#: src/view/com/post-thread/PostThread.tsx:289
+#~ msgid "Load more posts"
+#~ msgstr "Daha fazla gönderi yükle"
+
+#: src/view/screens/Notifications.tsx:159
+msgid "Load new notifications"
+msgstr "Yeni bildirimleri yükle"
+
+#: src/screens/Profile/Sections/Feed.tsx:70
+#: src/view/com/feeds/FeedPage.tsx:138
+#: src/view/screens/ProfileFeed.tsx:496
+#: src/view/screens/ProfileList.tsx:695
+msgid "Load new posts"
+msgstr "Yeni gönderileri yükle"
+
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:99
+msgid "Loading..."
+msgstr "Yükleniyor..."
+
+#: src/view/com/modals/ServerInput.tsx:50
+#~ msgid "Local dev server"
+#~ msgstr "Yerel geliştirme sunucusu"
+
+#: src/Navigation.tsx:221
+msgid "Log"
+msgstr "Log"
+
+#: src/screens/Deactivated.tsx:149
+#: src/screens/Deactivated.tsx:152
+#: src/screens/Deactivated.tsx:178
+#: src/screens/Deactivated.tsx:181
+msgid "Log out"
+msgstr "Çıkış yap"
+
+#: src/screens/Moderation/index.tsx:442
+msgid "Logged-out visibility"
+msgstr "Çıkış yapan görünürlüğü"
+
+#: src/components/AccountList.tsx:54
+msgid "Login to account that is not listed"
+msgstr "Listelenmeyen hesaba giriş yap"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:116
+msgid "Looks like XXXXX-XXXXX"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:79
+msgid "Make sure this is where you intend to go!"
+msgstr "Bu gitmek istediğiniz yer olduğundan emin olun!"
+
+#: src/components/dialogs/MutedWords.tsx:82
+msgid "Manage your muted words and tags"
+msgstr ""
+
+#: src/view/screens/Profile.tsx:192
+msgid "Media"
+msgstr "Medya"
+
+#: src/view/com/threadgate/WhoCanReply.tsx:139
+msgid "mentioned users"
+msgstr "bahsedilen kullanıcılar"
+
+#: src/view/com/modals/Threadgate.tsx:93
+msgid "Mentioned users"
+msgstr "Bahsedilen kullanıcılar"
+
+#: src/view/com/util/ViewHeader.tsx:87
+#: src/view/screens/Search/Search.tsx:648
+msgid "Menu"
+msgstr "Menü"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:192
+msgid "Message from server: {0}"
+msgstr "Sunucudan mesaj: {0}"
+
+#: src/lib/moderation/useReportOptions.ts:45
+msgid "Misleading Account"
+msgstr ""
+
+#: src/Navigation.tsx:119
+#: src/screens/Moderation/index.tsx:104
+#: src/view/screens/Settings/index.tsx:645
+#: src/view/shell/desktop/LeftNav.tsx:401
+#: src/view/shell/Drawer.tsx:514
+#: src/view/shell/Drawer.tsx:515
+msgid "Moderation"
+msgstr "Moderasyon"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:112
+msgid "Moderation details"
+msgstr ""
+
+#: src/view/com/lists/ListCard.tsx:93
+#: src/view/com/modals/UserAddRemoveLists.tsx:206
+msgid "Moderation list by {0}"
+msgstr "{0} tarafından moderasyon listesi"
+
+#: src/view/screens/ProfileList.tsx:789
+msgid "Moderation list by <0/>"
+msgstr "<0/> tarafından moderasyon listesi"
+
+#: src/view/com/lists/ListCard.tsx:91
+#: src/view/com/modals/UserAddRemoveLists.tsx:204
+#: src/view/screens/ProfileList.tsx:787
+msgid "Moderation list by you"
+msgstr "Sizin tarafınızdan moderasyon listesi"
+
+#: src/view/com/modals/CreateOrEditList.tsx:198
+msgid "Moderation list created"
+msgstr "Moderasyon listesi oluşturuldu"
+
+#: src/view/com/modals/CreateOrEditList.tsx:184
+msgid "Moderation list updated"
+msgstr "Moderasyon listesi güncellendi"
+
+#: src/screens/Moderation/index.tsx:243
+msgid "Moderation lists"
+msgstr "Moderasyon listeleri"
+
+#: src/Navigation.tsx:124
+#: src/view/screens/ModerationModlists.tsx:58
+msgid "Moderation Lists"
+msgstr "Moderasyon Listeleri"
+
+#: src/view/screens/Settings/index.tsx:639
+msgid "Moderation settings"
+msgstr "Moderasyon ayarları"
+
+#: src/Navigation.tsx:216
+msgid "Moderation states"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:215
+msgid "Moderation tools"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:48
+#: src/lib/moderation/useModerationCauseDescription.ts:40
+msgid "Moderator has chosen to set a general warning on the content."
+msgstr "Moderatör, içeriğe genel bir uyarı koymayı seçti."
+
+#: src/view/com/post-thread/PostThreadItem.tsx:541
+msgid "More"
+msgstr ""
+
+#: src/view/shell/desktop/Feeds.tsx:65
+msgid "More feeds"
+msgstr "Daha fazla besleme"
+
+#: src/view/screens/ProfileList.tsx:599
+msgid "More options"
+msgstr "Daha fazla seçenek"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:270
+#~ msgid "More post options"
+#~ msgstr "Daha fazla gönderi seçeneği"
+
+#: src/view/screens/PreferencesThreads.tsx:82
+msgid "Most-liked replies first"
+msgstr "En çok beğenilen yanıtlar önce"
+
+#: src/components/TagMenu/index.tsx:249
+msgid "Mute"
+msgstr ""
+
+#: src/components/TagMenu/index.web.tsx:105
+msgid "Mute {truncatedTag}"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:279
+#: src/view/com/profile/ProfileMenu.tsx:286
+msgid "Mute Account"
+msgstr "Hesabı Sessize Al"
+
+#: src/view/screens/ProfileList.tsx:518
+msgid "Mute accounts"
+msgstr "Hesapları sessize al"
+
+#: src/components/TagMenu/index.tsx:209
+msgid "Mute all {displayTag} posts"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:148
+msgid "Mute in tags only"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:133
+msgid "Mute in text & tags"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:461
+#: src/view/screens/ProfileList.tsx:624
+msgid "Mute list"
+msgstr "Listeyi sessize al"
+
+#: src/view/screens/ProfileList.tsx:619
+msgid "Mute these accounts?"
+msgstr "Bu hesapları sessize al?"
+
+#: src/view/screens/ProfileList.tsx:278
+#~ msgid "Mute this List"
+#~ msgstr "Bu Listeyi Sessize Al"
+
+#: src/components/dialogs/MutedWords.tsx:126
+msgid "Mute this word in post text and tags"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:141
+msgid "Mute this word in tags only"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:257
+msgid "Mute thread"
+msgstr "Konuyu sessize al"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:267
+#: src/view/com/util/forms/PostDropdownBtn.tsx:269
+msgid "Mute words & tags"
+msgstr ""
+
+#: src/view/com/lists/ListCard.tsx:102
+msgid "Muted"
+msgstr "Sessize alındı"
+
+#: src/screens/Moderation/index.tsx:255
+msgid "Muted accounts"
+msgstr "Sessize alınan hesaplar"
+
+#: src/Navigation.tsx:129
+#: src/view/screens/ModerationMutedAccounts.tsx:107
+msgid "Muted Accounts"
+msgstr "Sessize Alınan Hesaplar"
+
+#: src/view/screens/ModerationMutedAccounts.tsx:115
+msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private."
+msgstr "Sessize alınan hesapların gönderileri beslemenizden ve bildirimlerinizden kaldırılır. Sessizlik tamamen özeldir."
+
+#: src/lib/moderation/useModerationCauseDescription.ts:85
+msgid "Muted by \"{0}\""
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:231
+msgid "Muted words & tags"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:621
+msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them."
+msgstr "Sessizlik özeldir. Sessize alınan hesaplar sizinle etkileşime geçebilir, ancak gönderilerini görmeyecek ve onlardan bildirim almayacaksınız."
+
+#: src/components/dialogs/BirthDateSettings.tsx:35
+#: src/components/dialogs/BirthDateSettings.tsx:38
+msgid "My Birthday"
+msgstr "Doğum Günüm"
+
+#: src/view/screens/Feeds.tsx:663
+msgid "My Feeds"
+msgstr "Beslemelerim"
+
+#: src/view/shell/desktop/LeftNav.tsx:65
+msgid "My Profile"
+msgstr "Profilim"
+
+#: src/view/screens/Settings/index.tsx:596
+msgid "My saved feeds"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:602
+msgid "My Saved Feeds"
+msgstr "Kayıtlı Beslemelerim"
+
+#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/CreateOrEditList.tsx:291
+msgid "Name"
+msgstr "Ad"
+
+#: src/view/com/modals/CreateOrEditList.tsx:146
+msgid "Name is required"
+msgstr "Ad gerekli"
+
+#: src/lib/moderation/useReportOptions.ts:57
+#: src/lib/moderation/useReportOptions.ts:78
+#: src/lib/moderation/useReportOptions.ts:86
+msgid "Name or Description Violates Community Standards"
+msgstr ""
+
+#: src/screens/Onboarding/index.tsx:25
+msgid "Nature"
+msgstr "Doğa"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:173
+#: src/screens/Login/LoginForm.tsx:254
+#: src/view/com/modals/ChangePassword.tsx:168
+msgid "Navigates to the next screen"
+msgstr "Sonraki ekrana yönlendirir"
+
+#: src/view/shell/Drawer.tsx:71
+msgid "Navigates to your profile"
+msgstr "Profilinize yönlendirir"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:122
+msgid "Need to report a copyright violation?"
+msgstr ""
+
+#: src/view/com/modals/EmbedConsent.tsx:107
+#: src/view/com/modals/EmbedConsent.tsx:123
+#~ msgid "Never load embeds from {0}"
+#~ msgstr "{0} adresinden gömülü içerikleri asla yükleme"
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:72
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:74
+msgid "Never lose access to your followers and data."
+msgstr "Takipçilerinize ve verilerinize asla erişimi kaybetmeyin."
+
+#: src/screens/Onboarding/StepFinished.tsx:123
+msgid "Never lose access to your followers or data."
+msgstr "Takipçilerinize veya verilerinize asla erişimi kaybetmeyin."
+
+#: src/view/com/modals/ChangeHandle.tsx:519
+msgid "Nevermind, create a handle for me"
+msgstr ""
+
+#: src/view/screens/Lists.tsx:76
+msgctxt "action"
+msgid "New"
+msgstr "Yeni"
+
+#: src/view/screens/ModerationModlists.tsx:78
+msgid "New"
+msgstr "Yeni"
+
+#: src/view/com/modals/CreateOrEditList.tsx:253
+msgid "New Moderation List"
+msgstr "Yeni Moderasyon Listesi"
+
+#: src/view/com/modals/ChangePassword.tsx:212
+msgid "New password"
+msgstr "Yeni şifre"
+
+#: src/view/com/modals/ChangePassword.tsx:217
+msgid "New Password"
+msgstr "Yeni Şifre"
+
+#: src/view/com/feeds/FeedPage.tsx:149
+msgctxt "action"
+msgid "New post"
+msgstr "Yeni gönderi"
+
+#: src/view/screens/Feeds.tsx:555
+#: src/view/screens/Notifications.tsx:168
+#: src/view/screens/Profile.tsx:452
+#: src/view/screens/ProfileFeed.tsx:434
+#: src/view/screens/ProfileList.tsx:199
+#: src/view/screens/ProfileList.tsx:227
+#: src/view/shell/desktop/LeftNav.tsx:252
+msgid "New post"
+msgstr "Yeni gönderi"
+
+#: src/view/shell/desktop/LeftNav.tsx:262
+msgctxt "action"
+msgid "New Post"
+msgstr "Yeni Gönderi"
+
+#: src/view/com/modals/CreateOrEditList.tsx:248
+msgid "New User List"
+msgstr "Yeni Kullanıcı Listesi"
+
+#: src/view/screens/PreferencesThreads.tsx:79
+msgid "Newest replies first"
+msgstr "En yeni yanıtlar önce"
+
+#: src/screens/Onboarding/index.tsx:23
+msgid "News"
+msgstr "Haberler"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:143
+#: src/screens/Login/ForgotPasswordForm.tsx:150
+#: src/screens/Login/LoginForm.tsx:253
+#: src/screens/Login/LoginForm.tsx:260
+#: src/screens/Login/SetNewPasswordForm.tsx:174
+#: src/screens/Login/SetNewPasswordForm.tsx:180
+#: src/screens/Signup/index.tsx:205
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79
+#: src/view/com/modals/ChangePassword.tsx:253
+#: src/view/com/modals/ChangePassword.tsx:255
+msgid "Next"
+msgstr "İleri"
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:103
+msgctxt "action"
+msgid "Next"
+msgstr "İleri"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:169
+msgid "Next image"
+msgstr "Sonraki resim"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:200
+#: src/view/screens/PreferencesFollowingFeed.tsx:235
+#: src/view/screens/PreferencesFollowingFeed.tsx:272
+#: src/view/screens/PreferencesThreads.tsx:106
+#: src/view/screens/PreferencesThreads.tsx:129
+msgid "No"
+msgstr "Hayır"
+
+#: src/view/screens/ProfileFeed.tsx:562
+#: src/view/screens/ProfileList.tsx:769
+msgid "No description"
+msgstr "Açıklama yok"
+
+#: src/view/com/modals/ChangeHandle.tsx:405
+msgid "No DNS Panel"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:118
+msgid "No longer following {0}"
+msgstr "{0} artık takip edilmiyor"
+
+#: src/screens/Signup/StepHandle.tsx:114
+msgid "No longer than 253 characters"
+msgstr ""
+
+#: src/view/com/notifications/Feed.tsx:109
+msgid "No notifications yet!"
+msgstr "Henüz bildirim yok!"
+
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:101
+#: src/view/com/composer/text-input/web/Autocomplete.tsx:195
+msgid "No result"
+msgstr "Sonuç yok"
+
+#: src/components/Lists.tsx:183
+msgid "No results found"
+msgstr ""
+
+#: src/view/screens/Feeds.tsx:495
+msgid "No results found for \"{query}\""
+msgstr "\"{query}\" için sonuç bulunamadı"
+
+#: src/view/com/modals/ListAddRemoveUsers.tsx:127
+#: src/view/screens/Search/Search.tsx:283
+#: src/view/screens/Search/Search.tsx:311
+msgid "No results found for {query}"
+msgstr "{query} için sonuç bulunamadı"
+
+#: src/components/dialogs/EmbedConsent.tsx:105
+#: src/components/dialogs/EmbedConsent.tsx:112
+msgid "No thanks"
+msgstr "Teşekkürler"
+
+#: src/view/com/modals/Threadgate.tsx:82
+msgid "Nobody"
+msgstr "Hiç kimse"
+
+#: src/components/LikedByList.tsx:79
+#: src/components/LikesDialog.tsx:99
+msgid "Nobody has liked this yet. Maybe you should be the first!"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:42
+msgid "Non-sexual Nudity"
+msgstr ""
+
+#: src/view/com/modals/SelfLabel.tsx:135
+msgid "Not Applicable."
+msgstr "Uygulanamaz."
+
+#: src/Navigation.tsx:109
+#: src/view/screens/Profile.tsx:99
+msgid "Not Found"
+msgstr "Bulunamadı"
+
+#: src/view/com/modals/VerifyEmail.tsx:246
+#: src/view/com/modals/VerifyEmail.tsx:252
+msgid "Not right now"
+msgstr "Şu anda değil"
+
+#: src/view/com/profile/ProfileMenu.tsx:368
+#: src/view/com/util/forms/PostDropdownBtn.tsx:342
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:246
+msgid "Note about sharing"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:540
+msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites."
+msgstr "Not: Bluesky açık ve kamusal bir ağdır. Bu ayar yalnızca içeriğinizin Bluesky uygulaması ve web sitesindeki görünürlüğünü sınırlar, diğer uygulamalar bu ayarı dikkate almayabilir. İçeriğiniz hala diğer uygulamalar ve web siteleri tarafından çıkış yapan kullanıcılara gösterilebilir."
+
+#: src/Navigation.tsx:469
+#: src/view/screens/Notifications.tsx:124
+#: src/view/screens/Notifications.tsx:148
+#: src/view/shell/bottom-bar/BottomBar.tsx:215
+#: src/view/shell/desktop/LeftNav.tsx:365
+#: src/view/shell/Drawer.tsx:438
+#: src/view/shell/Drawer.tsx:439
+msgid "Notifications"
+msgstr "Bildirimler"
+
+#: src/view/com/modals/SelfLabel.tsx:103
+msgid "Nudity"
+msgstr "Çıplaklık"
+
+#: src/lib/moderation/useReportOptions.ts:71
+msgid "Nudity or adult content not labeled as such"
+msgstr ""
+
+#: src/screens/Signup/index.tsx:142
+msgid "of"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:11
+msgid "Off"
+msgstr ""
+
+#: src/view/com/util/ErrorBoundary.tsx:49
+msgid "Oh no!"
+msgstr "Oh hayır!"
+
+#: src/screens/Onboarding/StepInterests/index.tsx:132
+msgid "Oh no! Something went wrong."
+msgstr "Oh hayır! Bir şeyler yanlış gitti."
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:126
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:327
+msgid "OK"
+msgstr ""
+
+#: src/screens/Login/PasswordUpdatedForm.tsx:44
+msgid "Okay"
+msgstr "Tamam"
+
+#: src/view/screens/PreferencesThreads.tsx:78
+msgid "Oldest replies first"
+msgstr "En eski yanıtlar önce"
+
+#: src/view/screens/Settings/index.tsx:244
+msgid "Onboarding reset"
+msgstr "Onboarding sıfırlama"
+
+#: src/view/com/composer/Composer.tsx:392
+msgid "One or more images is missing alt text."
+msgstr "Bir veya daha fazla resimde alternatif metin eksik."
+
+#: src/view/com/threadgate/WhoCanReply.tsx:100
+msgid "Only {0} can reply."
+msgstr "Yalnızca {0} yanıtlayabilir."
+
+#: src/screens/Signup/StepHandle.tsx:97
+msgid "Only contains letters, numbers, and hyphens"
+msgstr ""
+
+#: src/components/Lists.tsx:75
+msgid "Oops, something went wrong!"
+msgstr ""
+
+#: src/components/Lists.tsx:170
+#: src/view/screens/AppPasswords.tsx:67
+#: src/view/screens/Profile.tsx:99
+msgid "Oops!"
+msgstr "Hata!"
+
+#: src/screens/Onboarding/StepFinished.tsx:119
+msgid "Open"
+msgstr "Aç"
+
+#: src/view/com/composer/Composer.tsx:491
+#: src/view/com/composer/Composer.tsx:492
+msgid "Open emoji picker"
+msgstr "Emoji seçiciyi aç"
+
+#: src/view/screens/ProfileFeed.tsx:300
+msgid "Open feed options menu"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:734
+msgid "Open links with in-app browser"
+msgstr "Uygulama içi tarayıcıda bağlantıları aç"
+
+#: src/screens/Moderation/index.tsx:227
+msgid "Open muted words and tags settings"
+msgstr ""
+
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:50
+msgid "Open navigation"
+msgstr "Navigasyonu aç"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:183
+msgid "Open post options menu"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:828
+#: src/view/screens/Settings/index.tsx:838
+msgid "Open storybook page"
+msgstr "Storybook sayfasını aç"
+
+#: src/view/screens/Settings/index.tsx:816
+msgid "Open system log"
+msgstr ""
+
+#: src/view/com/util/forms/DropdownButton.tsx:154
+msgid "Opens {numItems} options"
+msgstr "{numItems} seçeneği açar"
+
+#: src/view/screens/Log.tsx:54
+msgid "Opens additional details for a debug entry"
+msgstr "Hata ayıklama girişi için ek ayrıntıları açar"
+
+#: src/view/com/notifications/FeedItem.tsx:353
+msgid "Opens an expanded list of users in this notification"
+msgstr "Bu bildirimdeki kullanıcıların genişletilmiş bir listesini açar"
+
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:78
+msgid "Opens camera on device"
+msgstr "Cihazdaki kamerayı açar"
+
+#: src/view/com/composer/Prompt.tsx:25
+msgid "Opens composer"
+msgstr "Besteciyi açar"
+
+#: src/view/screens/Settings/index.tsx:615
+msgid "Opens configurable language settings"
+msgstr "Yapılandırılabilir dil ayarlarını açar"
+
+#: src/view/com/composer/photos/SelectPhotoBtn.tsx:44
+msgid "Opens device photo gallery"
+msgstr "Cihaz fotoğraf galerisini açar"
+
+#: src/view/com/profile/ProfileHeader.tsx:459
+#~ msgid "Opens editor for profile display name, avatar, background image, and description"
+#~ msgstr "Profil görüntü adı, avatar, arka plan resmi ve açıklama için düzenleyiciyi açar"
+
+#: src/view/screens/Settings/index.tsx:669
+msgid "Opens external embeds settings"
+msgstr "Harici gömülü ayarları açar"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:57
+#: src/view/com/auth/SplashScreen.tsx:68
+#: src/view/com/auth/SplashScreen.web.tsx:97
+msgid "Opens flow to create a new Bluesky account"
+msgstr ""
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:75
+#: src/view/com/auth/SplashScreen.tsx:83
+#: src/view/com/auth/SplashScreen.web.tsx:112
+msgid "Opens flow to sign into your existing Bluesky account"
+msgstr ""
+
+#: src/view/com/profile/ProfileHeader.tsx:614
+#~ msgid "Opens followers list"
+#~ msgstr "Takipçi listesini açar"
+
+#: src/view/com/profile/ProfileHeader.tsx:633
+#~ msgid "Opens following list"
+#~ msgstr "Takip listesini açar"
+
+#: src/view/screens/Settings.tsx:412
+#~ msgid "Opens invite code list"
+#~ msgstr "Davet kodu listesini açar"
+
+#: src/view/com/modals/InviteCodes.tsx:173
+msgid "Opens list of invite codes"
+msgstr "Davet kodu listesini açar"
+
+#: src/view/screens/Settings/index.tsx:798
+msgid "Opens modal for account deletion confirmation. Requires email code"
+msgstr ""
+
+#: src/view/screens/Settings.tsx:745
+#~ msgid "Opens modal for account deletion confirmation. Requires email code."
+#~ msgstr "Hesap silme onayı için modalı açar. E-posta kodu gerektirir."
+
+#: src/view/screens/Settings/index.tsx:756
+msgid "Opens modal for changing your Bluesky password"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:718
+msgid "Opens modal for choosing a new Bluesky handle"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:779
+msgid "Opens modal for downloading your Bluesky account data (repository)"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:968
+msgid "Opens modal for email verification"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:282
+msgid "Opens modal for using custom domain"
+msgstr "Özel alan adı kullanımı için modalı açar"
+
+#: src/view/screens/Settings/index.tsx:640
+msgid "Opens moderation settings"
+msgstr "Moderasyon ayarlarını açar"
+
+#: src/screens/Login/LoginForm.tsx:202
+msgid "Opens password reset form"
+msgstr "Şifre sıfırlama formunu açar"
+
+#: src/view/com/home/HomeHeaderLayout.web.tsx:63
+#: src/view/screens/Feeds.tsx:356
+msgid "Opens screen to edit Saved Feeds"
+msgstr "Kayıtlı Beslemeleri düzenlemek için ekranı açar"
+
+#: src/view/screens/Settings/index.tsx:597
+msgid "Opens screen with all saved feeds"
+msgstr "Tüm kayıtlı beslemeleri içeren ekrana açar"
+
+#: src/view/screens/Settings/index.tsx:696
+msgid "Opens the app password settings"
+msgstr ""
+
+#: src/view/screens/Settings.tsx:670
+#~ msgid "Opens the app password settings page"
+#~ msgstr "Uygulama şifre ayarları sayfasını açar"
+
+#: src/view/screens/Settings/index.tsx:554
+msgid "Opens the Following feed preferences"
+msgstr ""
+
+#: src/view/screens/Settings.tsx:529
+#~ msgid "Opens the home feed preferences"
+#~ msgstr "Ana besleme tercihlerini açar"
+
+#: src/view/com/modals/LinkWarning.tsx:93
+msgid "Opens the linked website"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:829
+#: src/view/screens/Settings/index.tsx:839
+msgid "Opens the storybook page"
+msgstr "Storybook sayfasını açar"
+
+#: src/view/screens/Settings/index.tsx:817
+msgid "Opens the system log page"
+msgstr "Sistem log sayfasını açar"
+
+#: src/view/screens/Settings/index.tsx:575
+msgid "Opens the threads preferences"
+msgstr "Konu tercihlerini açar"
+
+#: src/view/com/util/forms/DropdownButton.tsx:280
+msgid "Option {0} of {numItems}"
+msgstr "{0} seçeneği, {numItems} seçenekten"
+
+#: src/components/ReportDialog/SubmitView.tsx:162
+msgid "Optionally provide additional information below:"
+msgstr ""
+
+#: src/view/com/modals/Threadgate.tsx:89
+msgid "Or combine these options:"
+msgstr "Veya bu seçenekleri birleştirin:"
+
+#: src/lib/moderation/useReportOptions.ts:25
+msgid "Other"
+msgstr ""
+
+#: src/components/AccountList.tsx:73
+msgid "Other account"
+msgstr "Diğer hesap"
+
+#: src/view/com/modals/ServerInput.tsx:88
+#~ msgid "Other service"
+#~ msgstr "Diğer servis"
+
+#: src/view/com/composer/select-language/SelectLangBtn.tsx:91
+msgid "Other..."
+msgstr "Diğer..."
+
+#: src/components/Lists.tsx:184
+#: src/view/screens/NotFound.tsx:45
+msgid "Page not found"
+msgstr "Sayfa bulunamadı"
+
+#: src/view/screens/NotFound.tsx:42
+msgid "Page Not Found"
+msgstr "Sayfa Bulunamadı"
+
+#: src/screens/Login/LoginForm.tsx:178
+#: src/screens/Signup/StepInfo/index.tsx:101
+#: src/view/com/modals/DeleteAccount.tsx:194
+#: src/view/com/modals/DeleteAccount.tsx:201
+msgid "Password"
+msgstr "Şifre"
+
+#: src/view/com/modals/ChangePassword.tsx:142
+msgid "Password Changed"
+msgstr ""
+
+#: src/screens/Login/index.tsx:157
+msgid "Password updated"
+msgstr "Şifre güncellendi"
+
+#: src/screens/Login/PasswordUpdatedForm.tsx:30
+msgid "Password updated!"
+msgstr "Şifre güncellendi!"
+
+#: src/Navigation.tsx:164
+msgid "People followed by @{0}"
+msgstr "@{0} tarafından takip edilenler"
+
+#: src/Navigation.tsx:157
+msgid "People following @{0}"
+msgstr "@{0} tarafından takip edilenler"
+
+#: src/view/com/lightbox/Lightbox.tsx:66
+msgid "Permission to access camera roll is required."
+msgstr "Kamera rulosuna erişim izni gerekiyor."
+
+#: src/view/com/lightbox/Lightbox.tsx:72
+msgid "Permission to access camera roll was denied. Please enable it in your system settings."
+msgstr "Kamera rulosuna erişim izni reddedildi. Lütfen sistem ayarlarınızda etkinleştirin."
+
+#: src/screens/Onboarding/index.tsx:31
+msgid "Pets"
+msgstr "Evcil Hayvanlar"
+
+#: src/view/com/auth/create/Step2.tsx:183
+#~ msgid "Phone number"
+#~ msgstr "Telefon numarası"
+
+#: src/view/com/modals/SelfLabel.tsx:121
+msgid "Pictures meant for adults."
+msgstr "Yetişkinler için resimler."
+
+#: src/view/screens/ProfileFeed.tsx:292
+#: src/view/screens/ProfileList.tsx:563
+msgid "Pin to home"
+msgstr "Ana ekrana sabitle"
+
+#: src/view/screens/ProfileFeed.tsx:295
+msgid "Pin to Home"
+msgstr ""
+
+#: src/view/screens/SavedFeeds.tsx:88
+msgid "Pinned Feeds"
+msgstr "Sabitleme Beslemeleri"
+
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:123
+msgid "Play {0}"
+msgstr "{0} oynat"
+
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:57
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:58
+msgid "Play Video"
+msgstr "Videoyu Oynat"
+
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:122
+msgid "Plays the GIF"
+msgstr "GIF'i oynatır"
+
+#: src/screens/Signup/state.ts:241
+msgid "Please choose your handle."
+msgstr "Kullanıcı adınızı seçin."
+
+#: src/screens/Signup/state.ts:234
+msgid "Please choose your password."
+msgstr "Şifrenizi seçin."
+
+#: src/screens/Signup/state.ts:251
+msgid "Please complete the verification captcha."
+msgstr ""
+
+#: src/view/com/modals/ChangeEmail.tsx:67
+msgid "Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed."
+msgstr "E-postanızı değiştirmeden önce onaylayın. Bu, e-posta güncelleme araçları eklenirken geçici bir gerekliliktir ve yakında kaldırılacaktır."
+
+#: src/view/com/modals/AddAppPasswords.tsx:91
+msgid "Please enter a name for your app password. All spaces is not allowed."
+msgstr "Uygulama şifreniz için bir ad girin. Tüm boşluklar izin verilmez."
+
+#: src/view/com/auth/create/Step2.tsx:206
+#~ msgid "Please enter a phone number that can receive SMS text messages."
+#~ msgstr "SMS metin mesajları alabilen bir telefon numarası girin."
+
+#: src/view/com/modals/AddAppPasswords.tsx:146
+msgid "Please enter a unique name for this App Password or use our randomly generated one."
+msgstr "Bu Uygulama Şifresi için benzersiz bir ad girin veya rastgele oluşturulanı kullanın."
+
+#: src/components/dialogs/MutedWords.tsx:67
+msgid "Please enter a valid word, tag, or phrase to mute"
+msgstr ""
+
+#: src/view/com/auth/create/state.ts:170
+#~ msgid "Please enter the code you received by SMS."
+#~ msgstr "SMS ile aldığınız kodu girin."
+
+#: src/view/com/auth/create/Step2.tsx:282
+#~ msgid "Please enter the verification code sent to {phoneNumberFormatted}."
+#~ msgstr "{phoneNumberFormatted} numarasına gönderilen doğrulama kodunu girin."
+
+#: src/screens/Signup/state.ts:220
+msgid "Please enter your email."
+msgstr "E-postanızı girin."
+
+#: src/view/com/modals/DeleteAccount.tsx:190
+msgid "Please enter your password as well:"
+msgstr "Lütfen şifrenizi de girin:"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:221
+msgid "Please explain why you think this label was incorrectly applied by {0}"
+msgstr ""
+
+#: src/view/com/modals/AppealLabel.tsx:72
+#: src/view/com/modals/AppealLabel.tsx:75
+#~ msgid "Please tell us why you think this content warning was incorrectly applied!"
+#~ msgstr "Lütfen bu içerik uyarısının yanlış uygulandığını düşündüğünüz nedeni bize bildirin!"
+
+#: src/view/com/modals/VerifyEmail.tsx:101
+msgid "Please Verify Your Email"
+msgstr "Lütfen E-postanızı Doğrulayın"
+
+#: src/view/com/composer/Composer.tsx:222
+msgid "Please wait for your link card to finish loading"
+msgstr "Bağlantı kartınızın yüklenmesini bekleyin"
+
+#: src/screens/Onboarding/index.tsx:37
+msgid "Politics"
+msgstr "Politika"
+
+#: src/view/com/modals/SelfLabel.tsx:111
+msgid "Porn"
+msgstr "Pornografi"
+
+#: src/view/com/composer/Composer.tsx:367
+#: src/view/com/composer/Composer.tsx:375
+msgctxt "action"
+msgid "Post"
+msgstr "Gönder"
+
+#: src/view/com/post-thread/PostThread.tsx:292
+msgctxt "description"
+msgid "Post"
+msgstr "Gönderi"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:175
+msgid "Post by {0}"
+msgstr "{0} tarafından gönderi"
+
+#: src/Navigation.tsx:176
+#: src/Navigation.tsx:183
+#: src/Navigation.tsx:190
+msgid "Post by @{0}"
+msgstr "@{0} tarafından gönderi"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:105
+msgid "Post deleted"
+msgstr "Gönderi silindi"
+
+#: src/view/com/post-thread/PostThread.tsx:157
+msgid "Post hidden"
+msgstr "Gönderi gizlendi"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:97
+#: src/lib/moderation/useModerationCauseDescription.ts:99
+msgid "Post Hidden by Muted Word"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:100
+#: src/lib/moderation/useModerationCauseDescription.ts:108
+msgid "Post Hidden by You"
+msgstr ""
+
+#: src/view/com/composer/select-language/SelectLangBtn.tsx:87
+msgid "Post language"
+msgstr "Gönderi dili"
+
+#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:75
+msgid "Post Languages"
+msgstr "Gönderi Dilleri"
+
+#: src/view/com/post-thread/PostThread.tsx:152
+#: src/view/com/post-thread/PostThread.tsx:164
+msgid "Post not found"
+msgstr "Gönderi bulunamadı"
+
+#: src/components/TagMenu/index.tsx:253
+msgid "posts"
+msgstr ""
+
+#: src/view/screens/Profile.tsx:190
+msgid "Posts"
+msgstr "Gönderiler"
+
+#: src/components/dialogs/MutedWords.tsx:89
+msgid "Posts can be muted based on their text, their tags, or both."
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:64
+msgid "Posts hidden"
+msgstr "Gönderiler gizlendi"
+
+#: src/view/com/modals/LinkWarning.tsx:60
+msgid "Potentially Misleading Link"
+msgstr "Potansiyel Yanıltıcı Bağlantı"
+
+#: src/components/forms/HostingProvider.tsx:45
+msgid "Press to change hosting provider"
+msgstr ""
+
+#: src/components/Error.tsx:74
+#: src/components/Lists.tsx:80
+#: src/screens/Signup/index.tsx:186
+msgid "Press to retry"
+msgstr ""
+
+#: src/view/com/lightbox/Lightbox.web.tsx:150
+msgid "Previous image"
+msgstr "Önceki resim"
+
+#: src/view/screens/LanguageSettings.tsx:187
+msgid "Primary Language"
+msgstr "Birincil Dil"
+
+#: src/view/screens/PreferencesThreads.tsx:97
+msgid "Prioritize Your Follows"
+msgstr "Takipçilerinizi Önceliklendirin"
+
+#: src/view/screens/Settings/index.tsx:652
+#: src/view/shell/desktop/RightNav.tsx:72
+msgid "Privacy"
+msgstr "Gizlilik"
+
+#: src/Navigation.tsx:231
+#: src/screens/Signup/StepInfo/Policies.tsx:56
+#: src/view/screens/PrivacyPolicy.tsx:29
+#: src/view/screens/Settings/index.tsx:923
+#: src/view/shell/Drawer.tsx:265
+msgid "Privacy Policy"
+msgstr "Gizlilik Politikası"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:156
+msgid "Processing..."
+msgstr "İşleniyor..."
+
+#: src/view/screens/DebugMod.tsx:888
+#: src/view/screens/Profile.tsx:342
+msgid "profile"
+msgstr ""
+
+#: src/view/shell/bottom-bar/BottomBar.tsx:260
+#: src/view/shell/desktop/LeftNav.tsx:419
+#: src/view/shell/Drawer.tsx:70
+#: src/view/shell/Drawer.tsx:549
+#: src/view/shell/Drawer.tsx:550
+msgid "Profile"
+msgstr "Profil"
+
+#: src/view/com/modals/EditProfile.tsx:129
+msgid "Profile updated"
+msgstr "Profil güncellendi"
+
+#: src/view/screens/Settings/index.tsx:981
+msgid "Protect your account by verifying your email."
+msgstr "E-postanızı doğrulayarak hesabınızı koruyun."
+
+#: src/screens/Onboarding/StepFinished.tsx:105
+msgid "Public"
+msgstr "Herkese Açık"
+
+#: src/view/screens/ModerationModlists.tsx:61
+msgid "Public, shareable lists of users to mute or block in bulk."
+msgstr "Toplu olarak sessize almak veya engellemek için herkese açık, paylaşılabilir kullanıcı listeleri."
+
+#: src/view/screens/Lists.tsx:61
+msgid "Public, shareable lists which can drive feeds."
+msgstr "Beslemeleri yönlendirebilen herkese açık, paylaşılabilir listeler."
+
+#: src/view/com/composer/Composer.tsx:352
+msgid "Publish post"
+msgstr "Gönderiyi yayınla"
+
+#: src/view/com/composer/Composer.tsx:352
+msgid "Publish reply"
+msgstr "Yanıtı yayınla"
+
+#: src/view/com/modals/Repost.tsx:66
+msgctxt "action"
+msgid "Quote post"
+msgstr "Gönderiyi alıntıla"
+
+#: src/view/com/util/post-ctrls/RepostButton.web.tsx:58
+msgid "Quote post"
+msgstr "Gönderiyi alıntıla"
+
+#: src/view/com/modals/Repost.tsx:71
+msgctxt "action"
+msgid "Quote Post"
+msgstr "Gönderiyi Alıntıla"
+
+#: src/view/screens/PreferencesThreads.tsx:86
+msgid "Random (aka \"Poster's Roulette\")"
+msgstr "Rastgele (yani \"Gönderenin Ruleti\")"
+
+#: src/view/com/modals/EditImage.tsx:237
+msgid "Ratios"
+msgstr "Oranlar"
+
+#: src/view/screens/Search/Search.tsx:777
+msgid "Recent Searches"
+msgstr ""
+
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116
+msgid "Recommended Feeds"
+msgstr "Önerilen Beslemeler"
+
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:180
+msgid "Recommended Users"
+msgstr "Önerilen Kullanıcılar"
+
+#: src/components/dialogs/MutedWords.tsx:286
+#: src/view/com/feeds/FeedSourceCard.tsx:283
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
+#: src/view/com/modals/SelfLabel.tsx:83
+#: src/view/com/modals/UserAddRemoveLists.tsx:219
+#: src/view/com/posts/FeedErrorMessage.tsx:204
+msgid "Remove"
+msgstr "Kaldır"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:106
+#~ msgid "Remove {0} from my feeds?"
+#~ msgstr "{0} beslemelerimden kaldırılsın mı?"
+
+#: src/view/com/util/AccountDropdownBtn.tsx:22
+msgid "Remove account"
+msgstr "Hesabı kaldır"
+
+#: src/view/com/util/UserAvatar.tsx:358
+msgid "Remove Avatar"
+msgstr ""
+
+#: src/view/com/util/UserBanner.tsx:148
+msgid "Remove Banner"
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:160
+msgid "Remove feed"
+msgstr "Beslemeyi kaldır"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:201
+msgid "Remove feed?"
+msgstr ""
+
+#: src/view/com/feeds/FeedSourceCard.tsx:173
+#: src/view/com/feeds/FeedSourceCard.tsx:233
+#: src/view/screens/ProfileFeed.tsx:335
+#: src/view/screens/ProfileFeed.tsx:341
+msgid "Remove from my feeds"
+msgstr "Beslemelerimden kaldır"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:278
+msgid "Remove from my feeds?"
+msgstr ""
+
+#: src/view/com/composer/photos/Gallery.tsx:167
+msgid "Remove image"
+msgstr "Resmi kaldır"
+
+#: src/view/com/composer/ExternalEmbed.tsx:70
+msgid "Remove image preview"
+msgstr "Resim önizlemesini kaldır"
+
+#: src/components/dialogs/MutedWords.tsx:329
+msgid "Remove mute word from your list"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:48
+msgid "Remove repost"
+msgstr "Yeniden göndermeyi kaldır"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:173
+#~ msgid "Remove this feed from my feeds?"
+#~ msgstr "Bu beslemeyi beslemelerimden kaldırsın mı?"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:202
+msgid "Remove this feed from your saved feeds"
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:132
+#~ msgid "Remove this feed from your saved feeds?"
+#~ msgstr "Bu beslemeyi kayıtlı beslemelerinizden kaldırsın mı?"
+
+#: src/view/com/modals/ListAddRemoveUsers.tsx:199
+#: src/view/com/modals/UserAddRemoveLists.tsx:152
+msgid "Removed from list"
+msgstr "Listeden kaldırıldı"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:121
+msgid "Removed from my feeds"
+msgstr "Beslemelerimden kaldırıldı"
+
+#: src/view/screens/ProfileFeed.tsx:209
+msgid "Removed from your feeds"
+msgstr ""
+
+#: src/view/com/composer/ExternalEmbed.tsx:71
+msgid "Removes default thumbnail from {0}"
+msgstr "{0} adresinden varsayılan küçük resmi kaldırır"
+
+#: src/view/screens/Profile.tsx:191
+msgid "Replies"
+msgstr "Yanıtlar"
+
+#: src/view/com/threadgate/WhoCanReply.tsx:98
+msgid "Replies to this thread are disabled"
+msgstr "Bu konuya yanıtlar devre dışı bırakıldı"
+
+#: src/view/com/composer/Composer.tsx:365
+msgctxt "action"
+msgid "Reply"
+msgstr "Yanıtla"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:144
+msgid "Reply Filters"
+msgstr "Yanıt Filtreleri"
+
+#: src/view/com/post/Post.tsx:166
+#: src/view/com/posts/FeedItem.tsx:280
+msgctxt "description"
+msgid "Reply to <0/>"
+msgstr "<0/>'a yanıt"
+
+#: src/view/com/modals/report/Modal.tsx:166
+#~ msgid "Report {collectionName}"
+#~ msgstr "{collectionName} raporla"
+
+#: src/view/com/profile/ProfileMenu.tsx:319
+#: src/view/com/profile/ProfileMenu.tsx:322
+msgid "Report Account"
+msgstr "Hesabı Raporla"
+
+#: src/components/ReportDialog/index.tsx:49
+msgid "Report dialog"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:352
+#: src/view/screens/ProfileFeed.tsx:354
+msgid "Report feed"
+msgstr "Beslemeyi raporla"
+
+#: src/view/screens/ProfileList.tsx:429
+msgid "Report List"
+msgstr "Listeyi Raporla"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:292
+#: src/view/com/util/forms/PostDropdownBtn.tsx:294
+msgid "Report post"
+msgstr "Gönderiyi raporla"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:42
+msgid "Report this content"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:55
+msgid "Report this feed"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:52
+msgid "Report this list"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:49
+msgid "Report this post"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:46
+msgid "Report this user"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:44
+#: src/view/com/modals/Repost.tsx:49
+#: src/view/com/modals/Repost.tsx:54
+#: src/view/com/util/post-ctrls/RepostButton.tsx:61
+msgctxt "action"
+msgid "Repost"
+msgstr "Yeniden gönder"
+
+#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
+msgid "Repost"
+msgstr "Yeniden gönder"
+
+#: src/view/com/util/post-ctrls/RepostButton.web.tsx:94
+#: src/view/com/util/post-ctrls/RepostButton.web.tsx:105
+msgid "Repost or quote post"
+msgstr "Gönderiyi yeniden gönder veya alıntıla"
+
+#: src/view/screens/PostRepostedBy.tsx:27
+msgid "Reposted By"
+msgstr "Yeniden Gönderen"
+
+#: src/view/com/posts/FeedItem.tsx:197
+msgid "Reposted by {0}"
+msgstr "{0} tarafından yeniden gönderildi"
+
+#: src/view/com/posts/FeedItem.tsx:214
+msgid "Reposted by <0/>"
+msgstr "<0/>'a yeniden gönderildi"
+
+#: src/view/com/notifications/FeedItem.tsx:166
+msgid "reposted your post"
+msgstr "gönderinizi yeniden gönderdi"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:187
+msgid "Reposts of this post"
+msgstr "Bu gönderinin yeniden gönderilmesi"
+
+#: src/view/com/modals/ChangeEmail.tsx:181
+#: src/view/com/modals/ChangeEmail.tsx:183
+msgid "Request Change"
+msgstr "Değişiklik İste"
+
+#: src/view/com/auth/create/Step2.tsx:219
+#~ msgid "Request code"
+#~ msgstr "Kod iste"
+
+#: src/view/com/modals/ChangePassword.tsx:241
+#: src/view/com/modals/ChangePassword.tsx:243
+msgid "Request Code"
+msgstr "Kod İste"
+
+#: src/view/screens/Settings/index.tsx:475
+msgid "Require alt text before posting"
+msgstr "Göndermeden önce alternatif metin gerektir"
+
+#: src/screens/Signup/StepInfo/index.tsx:69
+msgid "Required for this provider"
+msgstr "Bu sağlayıcı için gereklidir"
+
+#: src/view/com/modals/ChangePassword.tsx:185
+msgid "Reset code"
+msgstr "Sıfırlama kodu"
+
+#: src/view/com/modals/ChangePassword.tsx:192
+msgid "Reset Code"
+msgstr "Sıfırlama Kodu"
+
+#: src/view/screens/Settings.tsx:806
+#~ msgid "Reset onboarding"
+#~ msgstr "Onboarding sıfırla"
+
+#: src/view/screens/Settings/index.tsx:858
+#: src/view/screens/Settings/index.tsx:861
+msgid "Reset onboarding state"
+msgstr "Onboarding durumunu sıfırla"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:86
+msgid "Reset password"
+msgstr "Şifreyi sıfırla"
+
+#: src/view/screens/Settings.tsx:796
+#~ msgid "Reset preferences"
+#~ msgstr "Tercihleri sıfırla"
+
+#: src/view/screens/Settings/index.tsx:848
+#: src/view/screens/Settings/index.tsx:851
+msgid "Reset preferences state"
+msgstr "Tercih durumunu sıfırla"
+
+#: src/view/screens/Settings/index.tsx:859
+msgid "Resets the onboarding state"
+msgstr "Onboarding durumunu sıfırlar"
+
+#: src/view/screens/Settings/index.tsx:849
+msgid "Resets the preferences state"
+msgstr "Tercih durumunu sıfırlar"
+
+#: src/screens/Login/LoginForm.tsx:235
+msgid "Retries login"
+msgstr "Giriş tekrar denemesi"
+
+#: src/view/com/util/error/ErrorMessage.tsx:57
+#: src/view/com/util/error/ErrorScreen.tsx:74
+msgid "Retries the last action, which errored out"
+msgstr "Son hataya neden olan son eylemi tekrarlar"
+
+#: src/components/Error.tsx:79
+#: src/components/Lists.tsx:91
+#: src/screens/Login/LoginForm.tsx:234
+#: src/screens/Login/LoginForm.tsx:241
+#: src/screens/Onboarding/StepInterests/index.tsx:225
+#: src/screens/Onboarding/StepInterests/index.tsx:228
+#: src/screens/Signup/index.tsx:193
+#: src/view/com/util/error/ErrorMessage.tsx:55
+#: src/view/com/util/error/ErrorScreen.tsx:72
+msgid "Retry"
+msgstr "Tekrar dene"
+
+#: src/view/com/auth/create/Step2.tsx:247
+#~ msgid "Retry."
+#~ msgstr "Tekrar dene."
+
+#: src/components/Error.tsx:86
+#: src/view/screens/ProfileList.tsx:917
+msgid "Return to previous page"
+msgstr "Önceki sayfaya dön"
+
+#: src/view/screens/NotFound.tsx:59
+msgid "Returns to home page"
+msgstr ""
+
+#: src/view/screens/NotFound.tsx:58
+#: src/view/screens/ProfileFeed.tsx:113
+msgid "Returns to previous page"
+msgstr ""
+
+#: src/view/shell/desktop/RightNav.tsx:59
+#~ msgid "SANDBOX. Posts and accounts are not permanent."
+#~ msgstr "KUM KUTUSU. Gönderiler ve hesaplar kalıcı değildir."
+
+#: src/view/com/lightbox/Lightbox.tsx:132
+#: src/view/com/modals/CreateOrEditList.tsx:346
+msgctxt "action"
+msgid "Save"
+msgstr "Kaydet"
+
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/view/com/modals/ChangeHandle.tsx:174
+#: src/view/com/modals/CreateOrEditList.tsx:338
+#: src/view/com/modals/EditProfile.tsx:225
+msgid "Save"
+msgstr "Kaydet"
+
+#: src/view/com/modals/AltImage.tsx:131
+msgid "Save alt text"
+msgstr "Alternatif metni kaydet"
+
+#: src/components/dialogs/BirthDateSettings.tsx:119
+msgid "Save birthday"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:233
+msgid "Save Changes"
+msgstr "Değişiklikleri Kaydet"
+
+#: src/view/com/modals/ChangeHandle.tsx:171
+msgid "Save handle change"
+msgstr "Kullanıcı adı değişikliğini kaydet"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:145
+msgid "Save image crop"
+msgstr "Resim kırpma kaydet"
+
+#: src/view/screens/ProfileFeed.tsx:336
+#: src/view/screens/ProfileFeed.tsx:342
+msgid "Save to my feeds"
+msgstr ""
+
+#: src/view/screens/SavedFeeds.tsx:122
+msgid "Saved Feeds"
+msgstr "Kayıtlı Beslemeler"
+
+#: src/view/com/lightbox/Lightbox.tsx:81
+msgid "Saved to your camera roll."
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:213
+msgid "Saved to your feeds"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:226
+msgid "Saves any changes to your profile"
+msgstr "Profilinizdeki herhangi bir değişikliği kaydeder"
+
+#: src/view/com/modals/ChangeHandle.tsx:172
+msgid "Saves handle change to {handle}"
+msgstr "{handle} kullanıcı adı değişikliğini kaydeder"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:146
+msgid "Saves image crop settings"
+msgstr ""
+
+#: src/screens/Onboarding/index.tsx:36
+msgid "Science"
+msgstr "Bilim"
+
+#: src/view/screens/ProfileList.tsx:873
+msgid "Scroll to top"
+msgstr "Başa kaydır"
+
+#: src/Navigation.tsx:459
+#: src/view/com/auth/LoggedOut.tsx:123
+#: src/view/com/modals/ListAddRemoveUsers.tsx:75
+#: src/view/com/util/forms/SearchInput.tsx:67
+#: src/view/com/util/forms/SearchInput.tsx:79
+#: src/view/screens/Search/Search.tsx:421
+#: src/view/screens/Search/Search.tsx:670
+#: src/view/screens/Search/Search.tsx:688
+#: src/view/shell/bottom-bar/BottomBar.tsx:169
+#: src/view/shell/desktop/LeftNav.tsx:328
+#: src/view/shell/desktop/Search.tsx:215
+#: src/view/shell/desktop/Search.tsx:224
+#: src/view/shell/Drawer.tsx:365
+#: src/view/shell/Drawer.tsx:366
+msgid "Search"
+msgstr "Ara"
+
+#: src/view/screens/Search/Search.tsx:737
+#: src/view/shell/desktop/Search.tsx:256
+msgid "Search for \"{query}\""
+msgstr "\"{query}\" için ara"
+
+#: src/components/TagMenu/index.tsx:145
+msgid "Search for all posts by @{authorHandle} with tag {displayTag}"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:94
+msgid "Search for all posts with tag {displayTag}"
+msgstr ""
+
+#: src/view/com/auth/LoggedOut.tsx:105
+#: src/view/com/auth/LoggedOut.tsx:106
+#: src/view/com/modals/ListAddRemoveUsers.tsx:70
+msgid "Search for users"
+msgstr "Kullanıcıları ara"
+
+#: src/view/com/modals/ChangeEmail.tsx:110
+msgid "Security Step Required"
+msgstr "Güvenlik Adımı Gerekli"
+
+#: src/components/TagMenu/index.web.tsx:66
+msgid "See {truncatedTag} posts"
+msgstr ""
+
+#: src/components/TagMenu/index.web.tsx:83
+msgid "See {truncatedTag} posts by user"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:128
+msgid "See <0>{displayTag}0> posts"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:187
+msgid "See <0>{displayTag}0> posts by this user"
+msgstr ""
+
+#: src/view/screens/SavedFeeds.tsx:163
+msgid "See this guide"
+msgstr "Bu kılavuzu gör"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:40
+msgid "See what's next"
+msgstr "Ne olduğunu gör"
+
+#: src/view/com/util/Selector.tsx:106
+msgid "Select {item}"
+msgstr "{item} seç"
+
+#: src/screens/Login/ChooseAccountForm.tsx:61
+msgid "Select account"
+msgstr ""
+
+#: src/view/com/modals/ServerInput.tsx:75
+#~ msgid "Select Bluesky Social"
+#~ msgstr "Bluesky Social seç"
+
+#: src/screens/Login/index.tsx:120
+msgid "Select from an existing account"
+msgstr "Mevcut bir hesaptan seç"
+
+#: src/view/screens/LanguageSettings.tsx:299
+msgid "Select languages"
+msgstr ""
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:30
+msgid "Select moderator"
+msgstr ""
+
+#: src/view/com/util/Selector.tsx:107
+msgid "Select option {i} of {numItems}"
+msgstr "{i} seçeneği, {numItems} seçenekten"
+
+#: src/view/com/auth/create/Step1.tsx:77
+#: src/view/com/auth/login/LoginForm.tsx:147
+#~ msgid "Select service"
+#~ msgstr "Servis seç"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:52
+msgid "Select some accounts below to follow"
+msgstr "Aşağıdaki hesaplardan bazılarını takip et"
+
+#: src/components/ReportDialog/SubmitView.tsx:135
+msgid "Select the moderation service(s) to report to"
+msgstr ""
+
+#: src/view/com/auth/server-input/index.tsx:82
+msgid "Select the service that hosts your data."
+msgstr ""
+
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:100
+msgid "Select topical feeds to follow from the list below"
+msgstr "Aşağıdaki listeden takip edilecek konu beslemelerini seçin"
+
+#: src/screens/Onboarding/StepModeration/index.tsx:63
+msgid "Select what you want to see (or not see), and we’ll handle the rest."
+msgstr "Görmek istediğinizi (veya görmek istemediğinizi) seçin, gerisini biz hallederiz."
+
+#: src/view/screens/LanguageSettings.tsx:281
+msgid "Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown."
+msgstr "Abone olduğunuz beslemelerin hangi dilleri içermesini istediğinizi seçin. Hiçbiri seçilmezse, tüm diller gösterilir."
+
+#: src/view/screens/LanguageSettings.tsx:98
+#~ msgid "Select your app language for the default text to display in the app"
+#~ msgstr "Uygulama dilinizi seçin, uygulamada görüntülenecek varsayılan metin"
+
+#: src/view/screens/LanguageSettings.tsx:98
+msgid "Select your app language for the default text to display in the app."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/index.tsx:133
+msgid "Select your date of birth"
+msgstr ""
+
+#: src/screens/Onboarding/StepInterests/index.tsx:200
+msgid "Select your interests from the options below"
+msgstr "Aşağıdaki seçeneklerden ilgi alanlarınızı seçin"
+
+#: src/view/com/auth/create/Step2.tsx:155
+#~ msgid "Select your phone's country"
+#~ msgstr "Telefonunuzun ülkesini seçin"
+
+#: src/view/screens/LanguageSettings.tsx:190
+msgid "Select your preferred language for translations in your feed."
+msgstr "Beslemenizdeki çeviriler için tercih ettiğiniz dili seçin."
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:117
+msgid "Select your primary algorithmic feeds"
+msgstr "Birincil algoritmik beslemelerinizi seçin"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:133
+msgid "Select your secondary algorithmic feeds"
+msgstr "İkincil algoritmik beslemelerinizi seçin"
+
+#: src/view/com/modals/VerifyEmail.tsx:202
+#: src/view/com/modals/VerifyEmail.tsx:204
+msgid "Send Confirmation Email"
+msgstr "Onay E-postası Gönder"
+
+#: src/view/com/modals/DeleteAccount.tsx:130
+msgid "Send email"
+msgstr "E-posta gönder"
+
+#: src/view/com/modals/DeleteAccount.tsx:143
+msgctxt "action"
+msgid "Send Email"
+msgstr "E-posta Gönder"
+
+#: src/view/shell/Drawer.tsx:298
+#: src/view/shell/Drawer.tsx:319
+msgid "Send feedback"
+msgstr "Geribildirim gönder"
+
+#: src/components/ReportDialog/SubmitView.tsx:214
+#: src/components/ReportDialog/SubmitView.tsx:218
+msgid "Send report"
+msgstr ""
+
+#: src/view/com/modals/report/SendReportButton.tsx:45
+#~ msgid "Send Report"
+#~ msgstr "Rapor Gönder"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:44
+msgid "Send report to {0}"
+msgstr ""
+
+#: src/view/com/modals/DeleteAccount.tsx:132
+msgid "Sends email with confirmation code for account deletion"
+msgstr "Hesap silme için onay kodu içeren e-posta gönderir"
+
+#: src/view/com/auth/server-input/index.tsx:114
+msgid "Server address"
+msgstr ""
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:306
+#~ msgid "Set {value} for {labelGroup} content moderation policy"
+#~ msgstr "{labelGroup} içerik düzenleme politikası için {value} ayarla"
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:155
+#: src/view/com/modals/ContentFilteringSettings.tsx:174
+#~ msgctxt "action"
+#~ msgid "Set Age"
+#~ msgstr "Yaş Ayarla"
+
+#: src/screens/Moderation/index.tsx:304
+msgid "Set birthdate"
+msgstr ""
+
+#: src/view/screens/Settings.tsx:482
+#~ msgid "Set color theme to dark"
+#~ msgstr "Renk temasını koyu olarak ayarla"
+
+#: src/view/screens/Settings.tsx:475
+#~ msgid "Set color theme to light"
+#~ msgstr "Renk temasını açık olarak ayarla"
+
+#: src/view/screens/Settings.tsx:469
+#~ msgid "Set color theme to system setting"
+#~ msgstr "Renk temasını sistem ayarına ayarla"
+
+#: src/view/screens/Settings.tsx:508
+#~ msgid "Set dark theme to the dark theme"
+#~ msgstr "Koyu teması koyu temaya ayarla"
+
+#: src/view/screens/Settings.tsx:501
+#~ msgid "Set dark theme to the dim theme"
+#~ msgstr "Koyu teması loş temaya ayarla"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:102
+msgid "Set new password"
+msgstr "Yeni şifre ayarla"
+
+#: src/view/com/auth/create/Step1.tsx:169
+#~ msgid "Set password"
+#~ msgstr "Şifre ayarla"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:225
+msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible."
+msgstr "Bu ayarı \"Hayır\" olarak ayarlayarak beslemenizden tüm alıntı gönderileri gizleyebilirsiniz. Yeniden göndermeler hala görünür olacaktır."
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:122
+msgid "Set this setting to \"No\" to hide all replies from your feed."
+msgstr "Bu ayarı \"Hayır\" olarak ayarlayarak beslemenizden tüm yanıtları gizleyebilirsiniz."
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:191
+msgid "Set this setting to \"No\" to hide all reposts from your feed."
+msgstr "Bu ayarı \"Hayır\" olarak ayarlayarak beslemenizden tüm yeniden göndermeleri gizleyebilirsiniz."
+
+#: src/view/screens/PreferencesThreads.tsx:122
+msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature."
+msgstr "Bu ayarı \"Evet\" olarak ayarlayarak yanıtları konu tabanlı görüntülemek için ayarlayın. Bu deneysel bir özelliktir."
+
+#: src/view/screens/PreferencesHomeFeed.tsx:261
+#~ msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
+#~ msgstr "Bu ayarı \"Evet\" olarak ayarlayarak kayıtlı beslemelerinizin örneklerini takip ettiğiniz beslemede göstermek için ayarlayın. Bu deneysel bir özelliktir."
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:261
+msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your Following feed. This is an experimental feature."
+msgstr ""
+
+#: src/screens/Onboarding/Layout.tsx:48
+msgid "Set up your account"
+msgstr "Hesabınızı ayarlayın"
+
+#: src/view/com/modals/ChangeHandle.tsx:267
+msgid "Sets Bluesky username"
+msgstr "Bluesky kullanıcı adını ayarlar"
+
+#: src/view/screens/Settings/index.tsx:507
+msgid "Sets color theme to dark"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:500
+msgid "Sets color theme to light"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:494
+msgid "Sets color theme to system setting"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:533
+msgid "Sets dark theme to the dark theme"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:526
+msgid "Sets dark theme to the dim theme"
+msgstr ""
+
+#: src/screens/Login/ForgotPasswordForm.tsx:113
+msgid "Sets email for password reset"
+msgstr "Şifre sıfırlama için e-posta ayarlar"
+
+#: src/view/com/auth/login/ForgotPasswordForm.tsx:118
+#~ msgid "Sets hosting provider for password reset"
+#~ msgstr "Şifre sıfırlama için barındırma sağlayıcısını ayarlar"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:124
+msgid "Sets image aspect ratio to square"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:114
+msgid "Sets image aspect ratio to tall"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:104
+msgid "Sets image aspect ratio to wide"
+msgstr ""
+
+#: src/view/com/auth/create/Step1.tsx:78
+#: src/view/com/auth/login/LoginForm.tsx:148
+#~ msgid "Sets server for the Bluesky client"
+#~ msgstr "Bluesky istemcisi için sunucuyu ayarlar"
+
+#: src/Navigation.tsx:139
+#: src/view/screens/Settings/index.tsx:313
+#: src/view/shell/desktop/LeftNav.tsx:437
+#: src/view/shell/Drawer.tsx:570
+#: src/view/shell/Drawer.tsx:571
+msgid "Settings"
+msgstr "Ayarlar"
+
+#: src/view/com/modals/SelfLabel.tsx:125
+msgid "Sexual activity or erotic nudity."
+msgstr "Cinsel aktivite veya erotik çıplaklık."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:38
+msgid "Sexually Suggestive"
+msgstr ""
+
+#: src/view/com/lightbox/Lightbox.tsx:141
+msgctxt "action"
+msgid "Share"
+msgstr "Paylaş"
+
+#: src/view/com/profile/ProfileMenu.tsx:215
+#: src/view/com/profile/ProfileMenu.tsx:224
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:235
+#: src/view/screens/ProfileList.tsx:388
+msgid "Share"
+msgstr "Paylaş"
+
+#: src/view/com/profile/ProfileMenu.tsx:373
+#: src/view/com/util/forms/PostDropdownBtn.tsx:347
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:251
+msgid "Share anyway"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:362
+#: src/view/screens/ProfileFeed.tsx:364
+msgid "Share feed"
+msgstr "Beslemeyi paylaş"
+
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
+msgid "Share Link"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:92
+msgid "Shares the linked website"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:136
+#: src/components/moderation/PostHider.tsx:107
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:54
+#: src/view/screens/Settings/index.tsx:363
+msgid "Show"
+msgstr "Göster"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:68
+msgid "Show all replies"
+msgstr "Tüm yanıtları göster"
+
+#: src/components/moderation/ScreenHider.tsx:169
+#: src/components/moderation/ScreenHider.tsx:172
+msgid "Show anyway"
+msgstr "Yine de göster"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:27
+#: src/lib/moderation/useLabelBehaviorDescription.ts:63
+msgid "Show badge"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:61
+msgid "Show badge and filter from feeds"
+msgstr ""
+
+#: src/view/com/modals/EmbedConsent.tsx:87
+#~ msgid "Show embeds from {0}"
+#~ msgstr "{0} adresinden gömülü öğeleri göster"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:200
+msgid "Show follows similar to {0}"
+msgstr "{0} adresine benzer takipçileri göster"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:507
+#: src/view/com/post/Post.tsx:201
+#: src/view/com/posts/FeedItem.tsx:355
+msgid "Show More"
+msgstr "Daha Fazla Göster"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:258
+msgid "Show Posts from My Feeds"
+msgstr "Beslemelerimden Gönderileri Göster"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:222
+msgid "Show Quote Posts"
+msgstr "Alıntı Gönderileri Göster"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:119
+msgid "Show quote-posts in Following feed"
+msgstr "Alıntı gönderileri takip etme beslemesinde göster"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:135
+msgid "Show quotes in Following"
+msgstr "Takip etme beslemesinde alıntıları göster"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:95
+msgid "Show re-posts in Following feed"
+msgstr "Yeniden göndermeleri takip etme beslemesinde göster"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:119
+msgid "Show Replies"
+msgstr "Yanıtları Göster"
+
+#: src/view/screens/PreferencesThreads.tsx:100
+msgid "Show replies by people you follow before all other replies."
+msgstr "Takip ettiğiniz kişilerin yanıtlarını diğer tüm yanıtlardan önce göster."
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:87
+msgid "Show replies in Following"
+msgstr "Takip etme beslemesinde yanıtları göster"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:71
+msgid "Show replies in Following feed"
+msgstr "Takip etme beslemesinde yanıtları göster"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:70
+msgid "Show replies with at least {value} {0}"
+msgstr "En az {value} {0} olan yanıtları göster"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:188
+msgid "Show Reposts"
+msgstr "Yeniden Göndermeleri Göster"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:111
+msgid "Show reposts in Following"
+msgstr "Takip etme beslemesinde yeniden göndermeleri göster"
+
+#: src/components/moderation/ContentHider.tsx:68
+#: src/components/moderation/PostHider.tsx:64
+msgid "Show the content"
+msgstr "İçeriği göster"
+
+#: src/view/com/notifications/FeedItem.tsx:351
+msgid "Show users"
+msgstr "Kullanıcıları göster"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:58
+msgid "Show warning"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:56
+msgid "Show warning and filter from feeds"
+msgstr ""
+
+#: src/view/com/profile/ProfileHeader.tsx:501
+#~ msgid "Shows a list of users similar to this user."
+#~ msgstr "Bu kullanıcıya benzer kullanıcıların listesini gösterir."
+
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:130
+msgid "Shows posts from {0} in your feed"
+msgstr "Beslemenizde {0} adresinden gönderileri gösterir"
+
+#: src/screens/Login/index.tsx:100
+#: src/screens/Login/index.tsx:119
+#: src/screens/Login/LoginForm.tsx:131
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:73
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:83
+#: src/view/com/auth/SplashScreen.tsx:81
+#: src/view/com/auth/SplashScreen.tsx:90
+#: src/view/com/auth/SplashScreen.web.tsx:110
+#: src/view/com/auth/SplashScreen.web.tsx:119
+#: src/view/shell/bottom-bar/BottomBar.tsx:300
+#: src/view/shell/bottom-bar/BottomBar.tsx:301
+#: src/view/shell/bottom-bar/BottomBar.tsx:303
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:178
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:179
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:181
+#: src/view/shell/NavSignupCard.tsx:58
+#: src/view/shell/NavSignupCard.tsx:59
+#: src/view/shell/NavSignupCard.tsx:61
+msgid "Sign in"
+msgstr "Giriş yap"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:78
+#: src/view/com/auth/SplashScreen.tsx:57
+#: src/view/com/auth/SplashScreen.web.tsx:87
+#~ msgid "Sign In"
+#~ msgstr "Giriş Yap"
+
+#: src/components/AccountList.tsx:109
+msgid "Sign in as {0}"
+msgstr "{0} olarak giriş yap"
+
+#: src/screens/Login/ChooseAccountForm.tsx:64
+msgid "Sign in as..."
+msgstr "Olarak giriş yap..."
+
+#: src/view/com/auth/login/LoginForm.tsx:134
+#~ msgid "Sign into"
+#~ msgstr "Olarak giriş yap"
+
+#: src/view/screens/Settings/index.tsx:107
+#: src/view/screens/Settings/index.tsx:110
+msgid "Sign out"
+msgstr "Çıkış yap"
+
+#: src/view/shell/bottom-bar/BottomBar.tsx:290
+#: src/view/shell/bottom-bar/BottomBar.tsx:291
+#: src/view/shell/bottom-bar/BottomBar.tsx:293
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:168
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:169
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:171
+#: src/view/shell/NavSignupCard.tsx:49
+#: src/view/shell/NavSignupCard.tsx:50
+#: src/view/shell/NavSignupCard.tsx:52
+msgid "Sign up"
+msgstr "Kaydol"
+
+#: src/view/shell/NavSignupCard.tsx:42
+msgid "Sign up or sign in to join the conversation"
+msgstr "Konuşmaya katılmak için kaydolun veya giriş yapın"
+
+#: src/components/moderation/ScreenHider.tsx:97
+#: src/lib/moderation/useGlobalLabelStrings.ts:28
+msgid "Sign-in Required"
+msgstr "Giriş Yapılması Gerekiyor"
+
+#: src/view/screens/Settings/index.tsx:374
+msgid "Signed in as"
+msgstr "Olarak giriş yapıldı"
+
+#: src/screens/Login/ChooseAccountForm.tsx:48
+msgid "Signed in as @{0}"
+msgstr "@{0} olarak giriş yapıldı"
+
+#: src/view/com/modals/SwitchAccount.tsx:66
+#~ msgid "Signs {0} out of Bluesky"
+#~ msgstr "{0} adresini Bluesky'den çıkarır"
+
+#: src/screens/Onboarding/StepInterests/index.tsx:239
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:203
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:35
+msgid "Skip"
+msgstr "Atla"
+
+#: src/screens/Onboarding/StepInterests/index.tsx:236
+msgid "Skip this flow"
+msgstr "Bu akışı atla"
+
+#: src/view/com/auth/create/Step2.tsx:82
+#~ msgid "SMS verification"
+#~ msgstr "SMS doğrulama"
+
+#: src/screens/Onboarding/index.tsx:40
+msgid "Software Dev"
+msgstr "Yazılım Geliştirme"
+
+#: src/view/com/modals/ProfilePreview.tsx:62
+#~ msgid "Something went wrong and we're not sure what."
+#~ msgstr "Bir şeyler yanlış gitti ve ne olduğundan emin değiliz."
+
+#: src/components/ReportDialog/index.tsx:59
+#: src/screens/Moderation/index.tsx:114
+#: src/screens/Profile/Sections/Labels.tsx:76
+msgid "Something went wrong, please try again."
+msgstr ""
+
+#: src/view/com/modals/Waitlist.tsx:51
+#~ msgid "Something went wrong. Check your email and try again."
+#~ msgstr "Bir şeyler yanlış gitti. E-postanızı kontrol edin ve tekrar deneyin."
+
+#: src/App.native.tsx:66
+msgid "Sorry! Your session expired. Please log in again."
+msgstr "Üzgünüz! Oturumunuzun süresi doldu. Lütfen tekrar giriş yapın."
+
+#: src/view/screens/PreferencesThreads.tsx:69
+msgid "Sort Replies"
+msgstr "Yanıtları Sırala"
+
+#: src/view/screens/PreferencesThreads.tsx:72
+msgid "Sort replies to the same post by:"
+msgstr "Aynı gönderiye verilen yanıtları şuna göre sırala:"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:146
+msgid "Source:"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:65
+msgid "Spam"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:53
+msgid "Spam; excessive mentions or replies"
+msgstr ""
+
+#: src/screens/Onboarding/index.tsx:30
+msgid "Sports"
+msgstr "Spor"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:123
+msgid "Square"
+msgstr "Kare"
+
+#: src/view/com/modals/ServerInput.tsx:62
+#~ msgid "Staging"
+#~ msgstr "Staging"
+
+#: src/view/screens/Settings/index.tsx:903
+msgid "Status page"
+msgstr "Durum sayfası"
+
+#: src/screens/Signup/index.tsx:142
+msgid "Step"
+msgstr ""
+
+#: src/view/com/auth/create/StepHeader.tsx:22
+#~ msgid "Step {0} of {numSteps}"
+#~ msgstr "{numSteps} adımdan {0}. adım"
+
+#: src/view/screens/Settings/index.tsx:292
+msgid "Storage cleared, you need to restart the app now."
+msgstr "Depolama temizlendi, şimdi uygulamayı yeniden başlatmanız gerekiyor."
+
+#: src/Navigation.tsx:211
+#: src/view/screens/Settings/index.tsx:831
+msgid "Storybook"
+msgstr "Storybook"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:255
+#: src/components/moderation/LabelsOnMeDialog.tsx:256
+msgid "Submit"
+msgstr "Submit"
+
+#: src/view/screens/ProfileList.tsx:590
+msgid "Subscribe"
+msgstr "Abone ol"
+
+#: src/screens/Profile/Sections/Labels.tsx:180
+msgid "Subscribe to @{0} to use these labels:"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:221
+msgid "Subscribe to Labeler"
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:172
+#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:307
+msgid "Subscribe to the {0} feed"
+msgstr "{0} beslemesine abone ol"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:184
+msgid "Subscribe to this labeler"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:586
+msgid "Subscribe to this list"
+msgstr "Bu listeye abone ol"
+
+#: src/view/screens/Search/Search.tsx:376
+msgid "Suggested Follows"
+msgstr "Önerilen Takipçiler"
+
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:65
+msgid "Suggested for you"
+msgstr "Sana önerilenler"
+
+#: src/view/com/modals/SelfLabel.tsx:95
+msgid "Suggestive"
+msgstr "Tehlikeli"
+
+#: src/Navigation.tsx:226
+#: src/view/screens/Support.tsx:30
+#: src/view/screens/Support.tsx:33
+msgid "Support"
+msgstr "Destek"
+
+#: src/view/com/modals/ProfilePreview.tsx:110
+#~ msgid "Swipe up to see more"
+#~ msgstr "Daha fazlasını görmek için yukarı kaydır"
+
+#: src/components/dialogs/SwitchAccount.tsx:46
+#: src/components/dialogs/SwitchAccount.tsx:49
+msgid "Switch Account"
+msgstr "Hesap Değiştir"
+
+#: src/view/screens/Settings/index.tsx:139
+msgid "Switch to {0}"
+msgstr "{0} adresine geç"
+
+#: src/view/screens/Settings/index.tsx:140
+msgid "Switches the account you are logged in to"
+msgstr "Giriş yaptığınız hesabı değiştirir"
+
+#: src/view/screens/Settings/index.tsx:491
+msgid "System"
+msgstr "Sistem"
+
+#: src/view/screens/Settings/index.tsx:819
+msgid "System log"
+msgstr "Sistem günlüğü"
+
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "tag"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:78
+msgid "Tag menu: {displayTag}"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:113
+msgid "Tall"
+msgstr "Uzun"
+
+#: src/view/com/util/images/AutoSizedImage.tsx:70
+msgid "Tap to view fully"
+msgstr "Tamamen görüntülemek için dokunun"
+
+#: src/screens/Onboarding/index.tsx:39
+msgid "Tech"
+msgstr "Teknoloji"
+
+#: src/view/shell/desktop/RightNav.tsx:81
+msgid "Terms"
+msgstr "Şartlar"
+
+#: src/Navigation.tsx:236
+#: src/screens/Signup/StepInfo/Policies.tsx:49
+#: src/view/screens/Settings/index.tsx:917
+#: src/view/screens/TermsOfService.tsx:29
+#: src/view/shell/Drawer.tsx:259
+msgid "Terms of Service"
+msgstr "Hizmet Şartları"
+
+#: src/lib/moderation/useReportOptions.ts:58
+#: src/lib/moderation/useReportOptions.ts:79
+#: src/lib/moderation/useReportOptions.ts:87
+msgid "Terms used violate community standards"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "text"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:219
+msgid "Text input field"
+msgstr "Metin giriş alanı"
+
+#: src/components/ReportDialog/SubmitView.tsx:78
+msgid "Thank you. Your report has been sent."
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:465
+msgid "That contains the following:"
+msgstr ""
+
+#: src/screens/Signup/index.tsx:84
+msgid "That handle is already taken."
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:283
+#: src/view/com/profile/ProfileMenu.tsx:349
+msgid "The account will be able to interact with you after unblocking."
+msgstr "Hesap, engeli kaldırdıktan sonra sizinle etkileşime geçebilecek."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:127
+msgid "the author"
+msgstr ""
+
+#: src/view/screens/CommunityGuidelines.tsx:36
+msgid "The Community Guidelines have been moved to <0/>"
+msgstr "Topluluk Kuralları <0/> konumuna taşındı"
+
+#: src/view/screens/CopyrightPolicy.tsx:33
+msgid "The Copyright Policy has been moved to <0/>"
+msgstr "Telif Hakkı Politikası <0/> konumuna taşındı"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:48
+msgid "The following labels were applied to your account."
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:49
+msgid "The following labels were applied to your content."
+msgstr ""
+
+#: src/screens/Onboarding/Layout.tsx:58
+msgid "The following steps will help customize your Bluesky experience."
+msgstr "Aşağıdaki adımlar, Bluesky deneyiminizi özelleştirmenize yardımcı olacaktır."
+
+#: src/view/com/post-thread/PostThread.tsx:153
+#: src/view/com/post-thread/PostThread.tsx:165
+msgid "The post may have been deleted."
+msgstr "Gönderi silinmiş olabilir."
+
+#: src/view/screens/PrivacyPolicy.tsx:33
+msgid "The Privacy Policy has been moved to <0/>"
+msgstr "Gizlilik Politikası <0/> konumuna taşındı"
+
+#: src/view/screens/Support.tsx:36
+msgid "The support form has been moved. If you need help, please <0/> or visit {HELP_DESK_URL} to get in touch with us."
+msgstr "Destek formu taşındı. Yardıma ihtiyacınız varsa, lütfen <0/> veya bize ulaşmak için {HELP_DESK_URL} adresini ziyaret edin."
+
+#: src/view/screens/TermsOfService.tsx:33
+msgid "The Terms of Service have been moved to"
+msgstr "Hizmet Şartları taşındı"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:141
+msgid "There are many feeds to try:"
+msgstr "Denemek için birçok besleme var:"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:112
+#: src/view/screens/ProfileFeed.tsx:544
+msgid "There was an an issue contacting the server, please check your internet connection and try again."
+msgstr "Sunucuya ulaşma konusunda bir sorun oluştu, lütfen internet bağlantınızı kontrol edin ve tekrar deneyin."
+
+#: src/view/com/posts/FeedErrorMessage.tsx:138
+msgid "There was an an issue removing this feed. Please check your internet connection and try again."
+msgstr "Bu beslemeyi kaldırma konusunda bir sorun oluştu. Lütfen internet bağlantınızı kontrol edin ve tekrar deneyin."
+
+#: src/view/screens/ProfileFeed.tsx:218
+msgid "There was an an issue updating your feeds, please check your internet connection and try again."
+msgstr "Beslemelerinizi güncelleme konusunda bir sorun oluştu, lütfen internet bağlantınızı kontrol edin ve tekrar deneyin."
+
+#: src/view/screens/ProfileFeed.tsx:245
+#: src/view/screens/ProfileList.tsx:275
+#: src/view/screens/SavedFeeds.tsx:209
+#: src/view/screens/SavedFeeds.tsx:231
+#: src/view/screens/SavedFeeds.tsx:252
+msgid "There was an issue contacting the server"
+msgstr "Sunucuya ulaşma konusunda bir sorun oluştu"
+
+#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:57
+#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:66
+#: src/view/com/feeds/FeedSourceCard.tsx:110
+#: src/view/com/feeds/FeedSourceCard.tsx:123
+msgid "There was an issue contacting your server"
+msgstr "Sunucunuza ulaşma konusunda bir sorun oluştu"
+
+#: src/view/com/notifications/Feed.tsx:117
+msgid "There was an issue fetching notifications. Tap here to try again."
+msgstr "Bildirimleri almakta bir sorun oluştu. Tekrar denemek için buraya dokunun."
+
+#: src/view/com/posts/Feed.tsx:287
+msgid "There was an issue fetching posts. Tap here to try again."
+msgstr "Gönderileri almakta bir sorun oluştu. Tekrar denemek için buraya dokunun."
+
+#: src/view/com/lists/ListMembers.tsx:172
+msgid "There was an issue fetching the list. Tap here to try again."
+msgstr "Listeyi almakta bir sorun oluştu. Tekrar denemek için buraya dokunun."
+
+#: src/view/com/feeds/ProfileFeedgens.tsx:148
+#: src/view/com/lists/ProfileLists.tsx:155
+msgid "There was an issue fetching your lists. Tap here to try again."
+msgstr "Listelerinizi almakta bir sorun oluştu. Tekrar denemek için buraya dokunun."
+
+#: src/components/ReportDialog/SubmitView.tsx:83
+msgid "There was an issue sending your report. Please check your internet connection."
+msgstr ""
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:65
+msgid "There was an issue syncing your preferences with the server"
+msgstr "Tercihlerinizi sunucuyla senkronize etme konusunda bir sorun oluştu"
+
+#: src/view/screens/AppPasswords.tsx:68
+msgid "There was an issue with fetching your app passwords"
+msgstr "Uygulama şifrelerinizi almakta bir sorun oluştu"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:105
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:127
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:99
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:111
+#: src/view/com/profile/ProfileMenu.tsx:106
+#: src/view/com/profile/ProfileMenu.tsx:117
+#: src/view/com/profile/ProfileMenu.tsx:132
+#: src/view/com/profile/ProfileMenu.tsx:143
+#: src/view/com/profile/ProfileMenu.tsx:157
+#: src/view/com/profile/ProfileMenu.tsx:170
+msgid "There was an issue! {0}"
+msgstr "Bir sorun oluştu! {0}"
+
+#: src/view/screens/ProfileList.tsx:288
+#: src/view/screens/ProfileList.tsx:302
+#: src/view/screens/ProfileList.tsx:316
+#: src/view/screens/ProfileList.tsx:330
+msgid "There was an issue. Please check your internet connection and try again."
+msgstr "Bir sorun oluştu. Lütfen internet bağlantınızı kontrol edin ve tekrar deneyin."
+
+#: src/view/com/util/ErrorBoundary.tsx:51
+msgid "There was an unexpected issue in the application. Please let us know if this happened to you!"
+msgstr "Uygulamada beklenmeyen bir sorun oluştu. Bu size de olduysa lütfen bize bildirin!"
+
+#: src/screens/Deactivated.tsx:106
+msgid "There's been a rush of new users to Bluesky! We'll activate your account as soon as we can."
+msgstr "Bluesky'e bir dizi yeni kullanıcı geldi! Hesabınızı en kısa sürede etkinleştireceğiz."
+
+#: src/view/com/auth/create/Step2.tsx:55
+#~ msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
+#~ msgstr "Bu numarada bir sorun var. Lütfen ülkenizi seçin ve tam telefon numaranızı girin!"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:146
+msgid "These are popular accounts you might like:"
+msgstr "Bunlar, beğenebileceğiniz popüler hesaplar:"
+
+#: src/components/moderation/ScreenHider.tsx:116
+msgid "This {screenDescription} has been flagged:"
+msgstr "Bu {screenDescription} işaretlendi:"
+
+#: src/components/moderation/ScreenHider.tsx:111
+msgid "This account has requested that users sign in to view their profile."
+msgstr "Bu hesap, kullanıcıların profilini görüntülemek için giriş yapmalarını istedi."
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:204
+msgid "This appeal will be sent to <0>{0}0>."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:19
+msgid "This content has been hidden by the moderators."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:24
+msgid "This content has received a general warning from moderators."
+msgstr ""
+
+#: src/components/dialogs/EmbedConsent.tsx:64
+msgid "This content is hosted by {0}. Do you want to enable external media?"
+msgstr "Bu içerik {0} tarafından barındırılıyor. Harici medyayı etkinleştirmek ister misiniz?"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:77
+#: src/lib/moderation/useModerationCauseDescription.ts:77
+msgid "This content is not available because one of the users involved has blocked the other."
+msgstr "Bu içerik, içerikte yer alan kullanıcılardan biri diğerini engellediği için mevcut değil."
+
+#: src/view/com/posts/FeedErrorMessage.tsx:108
+msgid "This content is not viewable without a Bluesky account."
+msgstr "Bu içerik, bir Bluesky hesabı olmadan görüntülenemez."
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:75
+msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost0>."
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:114
+msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later."
+msgstr "Bu besleme şu anda yüksek trafik alıyor ve geçici olarak kullanılamıyor. Lütfen daha sonra tekrar deneyin."
+
+#: src/screens/Profile/Sections/Feed.tsx:50
+#: src/view/screens/ProfileFeed.tsx:477
+#: src/view/screens/ProfileList.tsx:675
+msgid "This feed is empty!"
+msgstr "Bu besleme boş!"
+
+#: src/view/com/posts/CustomFeedEmptyState.tsx:37
+msgid "This feed is empty! You may need to follow more users or tune your language settings."
+msgstr "Bu besleme boş! Daha fazla kullanıcı takip etmeniz veya dil ayarlarınızı ayarlamanız gerekebilir."
+
+#: src/components/dialogs/BirthDateSettings.tsx:41
+msgid "This information is not shared with other users."
+msgstr "Bu bilgi diğer kullanıcılarla paylaşılmaz."
+
+#: src/view/com/modals/VerifyEmail.tsx:119
+msgid "This is important in case you ever need to change your email or reset your password."
+msgstr "Bu, e-postanızı değiştirmeniz veya şifrenizi sıfırlamanız gerektiğinde önemlidir."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:124
+msgid "This label was applied by {0}."
+msgstr ""
+
+#: src/screens/Profile/Sections/Labels.tsx:167
+msgid "This labeler hasn't declared what labels it publishes, and may not be active."
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:72
+msgid "This link is taking you to the following website:"
+msgstr "Bu bağlantı sizi aşağıdaki web sitesine götürüyor:"
+
+#: src/view/screens/ProfileList.tsx:853
+msgid "This list is empty!"
+msgstr "Bu liste boş!"
+
+#: src/screens/Profile/ErrorState.tsx:40
+msgid "This moderation service is unavailable. See below for more details. If this issue persists, contact us."
+msgstr ""
+
+#: src/view/com/modals/AddAppPasswords.tsx:107
+msgid "This name is already in use"
+msgstr "Bu isim zaten kullanılıyor"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:125
+msgid "This post has been deleted."
+msgstr "Bu gönderi silindi."
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:344
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:248
+msgid "This post is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:326
+msgid "This post will be hidden from feeds."
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:370
+msgid "This profile is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/Policies.tsx:37
+msgid "This service has not provided terms of service or a privacy policy."
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:445
+msgid "This should create a domain record at:"
+msgstr ""
+
+#: src/view/com/profile/ProfileFollowers.tsx:87
+msgid "This user doesn't have any followers."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:72
+#: src/lib/moderation/useModerationCauseDescription.ts:68
+msgid "This user has blocked you. You cannot view their content."
+msgstr "Bu kullanıcı sizi engelledi. İçeriklerini göremezsiniz."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:30
+msgid "This user has requested that their content only be shown to signed-in users."
+msgstr ""
+
+#: src/view/com/modals/ModerationDetails.tsx:42
+#~ msgid "This user is included in the <0/> list which you have blocked."
+#~ msgstr "Bu kullanıcı, engellediğiniz <0/> listesinde bulunuyor."
+
+#: src/view/com/modals/ModerationDetails.tsx:74
+#~ msgid "This user is included in the <0/> list which you have muted."
+#~ msgstr "Bu kullanıcı, sessize aldığınız <0/> listesinde bulunuyor."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:55
+msgid "This user is included in the <0>{0}0> list which you have blocked."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:84
+msgid "This user is included in the <0>{0}0> list which you have muted."
+msgstr ""
+
+#: src/view/com/profile/ProfileFollows.tsx:87
+msgid "This user isn't following anyone."
+msgstr ""
+
+#: src/view/com/modals/SelfLabel.tsx:137
+msgid "This warning is only available for posts with media attached."
+msgstr "Bu uyarı yalnızca medya ekli gönderiler için mevcuttur."
+
+#: src/components/dialogs/MutedWords.tsx:283
+msgid "This will delete {0} from your muted words. You can always add it back later."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:192
+#~ msgid "This will hide this post from your feeds."
+#~ msgstr "Bu, bu gönderiyi beslemelerinizden gizleyecektir."
+
+#: src/view/screens/Settings/index.tsx:574
+msgid "Thread preferences"
+msgstr ""
+
+#: src/view/screens/PreferencesThreads.tsx:53
+#: src/view/screens/Settings/index.tsx:584
+msgid "Thread Preferences"
+msgstr "Konu Tercihleri"
+
+#: src/view/screens/PreferencesThreads.tsx:119
+msgid "Threaded Mode"
+msgstr "Konu Tabanlı Mod"
+
+#: src/Navigation.tsx:269
+msgid "Threads Preferences"
+msgstr "Konu Tercihleri"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:33
+msgid "To whom would you like to send this report?"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:112
+msgid "Toggle between muted word options."
+msgstr ""
+
+#: src/view/com/util/forms/DropdownButton.tsx:246
+msgid "Toggle dropdown"
+msgstr "Açılır menüyü aç/kapat"
+
+#: src/screens/Moderation/index.tsx:332
+msgid "Toggle to enable or disable adult content"
+msgstr ""
+
+#: src/view/com/modals/EditImage.tsx:272
+msgid "Transformations"
+msgstr "Dönüşümler"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:644
+#: src/view/com/post-thread/PostThreadItem.tsx:646
+#: src/view/com/util/forms/PostDropdownBtn.tsx:212
+#: src/view/com/util/forms/PostDropdownBtn.tsx:214
+msgid "Translate"
+msgstr "Çevir"
+
+#: src/view/com/util/error/ErrorScreen.tsx:82
+msgctxt "action"
+msgid "Try again"
+msgstr "Tekrar dene"
+
+#: src/view/com/modals/ChangeHandle.tsx:428
+msgid "Type:"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:478
+msgid "Un-block list"
+msgstr "Listeyi engeli kaldır"
+
+#: src/view/screens/ProfileList.tsx:461
+msgid "Un-mute list"
+msgstr "Listeyi sessizden çıkar"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:74
+#: src/screens/Login/index.tsx:78
+#: src/screens/Login/LoginForm.tsx:119
+#: src/screens/Login/SetNewPasswordForm.tsx:77
+#: src/screens/Signup/index.tsx:63
+#: src/view/com/modals/ChangePassword.tsx:70
+msgid "Unable to contact your service. Please check your Internet connection."
+msgstr "Hizmetinize ulaşılamıyor. Lütfen internet bağlantınızı kontrol edin."
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:181
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+#: src/view/screens/ProfileList.tsx:572
+msgid "Unblock"
+msgstr "Engeli kaldır"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:186
+msgctxt "action"
+msgid "Unblock"
+msgstr "Engeli kaldır"
+
+#: src/view/com/profile/ProfileMenu.tsx:299
+#: src/view/com/profile/ProfileMenu.tsx:305
+msgid "Unblock Account"
+msgstr "Hesabın engelini kaldır"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:281
+#: src/view/com/profile/ProfileMenu.tsx:343
+msgid "Unblock Account?"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:43
+#: src/view/com/modals/Repost.tsx:56
+#: src/view/com/util/post-ctrls/RepostButton.tsx:60
+#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
+msgid "Undo repost"
+msgstr "Yeniden göndermeyi geri al"
+
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
+msgid "Unfollow"
+msgstr ""
+
+#: src/view/com/profile/FollowButton.tsx:60
+msgctxt "action"
+msgid "Unfollow"
+msgstr "Takibi bırak"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:220
+msgid "Unfollow {0}"
+msgstr "{0} adresini takibi bırak"
+
+#: src/view/com/profile/ProfileMenu.tsx:241
+#: src/view/com/profile/ProfileMenu.tsx:251
+msgid "Unfollow Account"
+msgstr ""
+
+#: src/view/com/auth/create/state.ts:300
+#~ msgid "Unfortunately, you do not meet the requirements to create an account."
+#~ msgstr "Üzgünüz, bir hesap oluşturmak için gerekleri karşılamıyorsunuz."
+
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
+msgid "Unlike"
+msgstr "Beğenmeyi geri al"
+
+#: src/view/screens/ProfileFeed.tsx:573
+msgid "Unlike this feed"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:249
+#: src/view/screens/ProfileList.tsx:579
+msgid "Unmute"
+msgstr "Sessizden çıkar"
+
+#: src/components/TagMenu/index.web.tsx:104
+msgid "Unmute {truncatedTag}"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:278
+#: src/view/com/profile/ProfileMenu.tsx:284
+msgid "Unmute Account"
+msgstr "Hesabın sessizliğini kaldır"
+
+#: src/components/TagMenu/index.tsx:208
+msgid "Unmute all {displayTag} posts"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:256
+msgid "Unmute thread"
+msgstr "Konunun sessizliğini kaldır"
+
+#: src/view/screens/ProfileFeed.tsx:295
+#: src/view/screens/ProfileList.tsx:563
+msgid "Unpin"
+msgstr "Sabitlemeyi kaldır"
+
+#: src/view/screens/ProfileFeed.tsx:292
+msgid "Unpin from home"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:444
+msgid "Unpin moderation list"
+msgstr "Moderasyon listesini sabitlemeyi kaldır"
+
+#: src/view/screens/ProfileFeed.tsx:345
+#~ msgid "Unsave"
+#~ msgstr "Kaydedilenlerden kaldır"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:219
+msgid "Unsubscribe"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:183
+msgid "Unsubscribe from this labeler"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:70
+msgid "Unwanted Sexual Content"
+msgstr ""
+
+#: src/view/com/modals/UserAddRemoveLists.tsx:70
+msgid "Update {displayName} in Lists"
+msgstr "Listelerde {displayName} güncelle"
+
+#: src/lib/hooks/useOTAUpdate.ts:15
+#~ msgid "Update Available"
+#~ msgstr "Güncelleme Mevcut"
+
+#: src/view/com/modals/ChangeHandle.tsx:508
+msgid "Update to {handle}"
+msgstr ""
+
+#: src/screens/Login/SetNewPasswordForm.tsx:186
+msgid "Updating..."
+msgstr "Güncelleniyor..."
+
+#: src/view/com/modals/ChangeHandle.tsx:454
+msgid "Upload a text file to:"
+msgstr "Bir metin dosyası yükleyin:"
+
+#: src/view/com/util/UserAvatar.tsx:326
+#: src/view/com/util/UserAvatar.tsx:329
+#: src/view/com/util/UserBanner.tsx:116
+#: src/view/com/util/UserBanner.tsx:119
+msgid "Upload from Camera"
+msgstr ""
+
+#: src/view/com/util/UserAvatar.tsx:343
+#: src/view/com/util/UserBanner.tsx:133
+msgid "Upload from Files"
+msgstr ""
+
+#: src/view/com/util/UserAvatar.tsx:337
+#: src/view/com/util/UserAvatar.tsx:341
+#: src/view/com/util/UserBanner.tsx:127
+#: src/view/com/util/UserBanner.tsx:131
+msgid "Upload from Library"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:408
+msgid "Use a file on your server"
+msgstr ""
+
+#: src/view/screens/AppPasswords.tsx:197
+msgid "Use app passwords to login to other Bluesky clients without giving full access to your account or password."
+msgstr "Uygulama şifrelerini kullanarak hesabınızın veya şifrenizin tam erişimini vermeden diğer Bluesky istemcilerine giriş yapın."
+
+#: src/view/com/modals/ChangeHandle.tsx:517
+msgid "Use bsky.social as hosting provider"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:516
+msgid "Use default provider"
+msgstr "Varsayılan sağlayıcıyı kullan"
+
+#: src/view/com/modals/InAppBrowserConsent.tsx:56
+#: src/view/com/modals/InAppBrowserConsent.tsx:58
+msgid "Use in-app browser"
+msgstr "Uygulama içi tarayıcıyı kullan"
+
+#: src/view/com/modals/InAppBrowserConsent.tsx:66
+#: src/view/com/modals/InAppBrowserConsent.tsx:68
+msgid "Use my default browser"
+msgstr "Varsayılan tarayıcımı kullan"
+
+#: src/view/com/modals/ChangeHandle.tsx:400
+msgid "Use the DNS panel"
+msgstr ""
+
+#: src/view/com/modals/AddAppPasswords.tsx:156
+msgid "Use this to sign into the other app along with your handle."
+msgstr "Bunu, kullanıcı adınızla birlikte diğer uygulamaya giriş yapmak için kullanın."
+
+#: src/view/com/modals/ServerInput.tsx:105
+#~ msgid "Use your domain as your Bluesky client service provider"
+#~ msgstr "Alan adınızı Bluesky istemci sağlayıcınız olarak kullanın"
+
+#: src/view/com/modals/InviteCodes.tsx:201
+msgid "Used by:"
+msgstr "Kullanıcı:"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:64
+#: src/lib/moderation/useModerationCauseDescription.ts:56
+msgid "User Blocked"
+msgstr "Kullanıcı Engellendi"
+
+#: src/lib/moderation/useModerationCauseDescription.ts:48
+msgid "User Blocked by \"{0}\""
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:53
+msgid "User Blocked by List"
+msgstr "Liste Tarafından Engellenen Kullanıcı"
+
+#: src/lib/moderation/useModerationCauseDescription.ts:66
+msgid "User Blocking You"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:70
+msgid "User Blocks You"
+msgstr "Kullanıcı Sizi Engelledi"
+
+#: src/view/com/auth/create/Step3.tsx:41
+#~ msgid "User handle"
+#~ msgstr "Kullanıcı adı"
+
+#: src/view/com/lists/ListCard.tsx:85
+#: src/view/com/modals/UserAddRemoveLists.tsx:198
+msgid "User list by {0}"
+msgstr "{0} tarafından oluşturulan kullanıcı listesi"
+
+#: src/view/screens/ProfileList.tsx:777
+msgid "User list by <0/>"
+msgstr "<0/> tarafından oluşturulan kullanıcı listesi"
+
+#: src/view/com/lists/ListCard.tsx:83
+#: src/view/com/modals/UserAddRemoveLists.tsx:196
+#: src/view/screens/ProfileList.tsx:775
+msgid "User list by you"
+msgstr "Sizin tarafınızdan oluşturulan kullanıcı listesi"
+
+#: src/view/com/modals/CreateOrEditList.tsx:197
+msgid "User list created"
+msgstr "Kullanıcı listesi oluşturuldu"
+
+#: src/view/com/modals/CreateOrEditList.tsx:183
+msgid "User list updated"
+msgstr "Kullanıcı listesi güncellendi"
+
+#: src/view/screens/Lists.tsx:58
+msgid "User Lists"
+msgstr "Kullanıcı Listeleri"
+
+#: src/screens/Login/LoginForm.tsx:151
+msgid "Username or email address"
+msgstr "Kullanıcı adı veya e-posta adresi"
+
+#: src/view/screens/ProfileList.tsx:811
+msgid "Users"
+msgstr "Kullanıcılar"
+
+#: src/view/com/threadgate/WhoCanReply.tsx:143
+msgid "users followed by <0/>"
+msgstr "<0/> tarafından takip edilen kullanıcılar"
+
+#: src/view/com/modals/Threadgate.tsx:106
+msgid "Users in \"{0}\""
+msgstr "\"{0}\" içindeki kullanıcılar"
+
+#: src/components/LikesDialog.tsx:85
+msgid "Users that have liked this content or profile"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:436
+msgid "Value:"
+msgstr ""
+
+#: src/view/com/auth/create/Step2.tsx:243
+#~ msgid "Verification code"
+#~ msgstr "Doğrulama kodu"
+
+#: src/view/com/modals/ChangeHandle.tsx:509
+msgid "Verify {0}"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:942
+msgid "Verify email"
+msgstr "E-postayı doğrula"
+
+#: src/view/screens/Settings/index.tsx:967
+msgid "Verify my email"
+msgstr "E-postamı doğrula"
+
+#: src/view/screens/Settings/index.tsx:976
+msgid "Verify My Email"
+msgstr "E-postamı Doğrula"
+
+#: src/view/com/modals/ChangeEmail.tsx:205
+#: src/view/com/modals/ChangeEmail.tsx:207
+msgid "Verify New Email"
+msgstr "Yeni E-postayı Doğrula"
+
+#: src/view/com/modals/VerifyEmail.tsx:103
+msgid "Verify Your Email"
+msgstr "E-postanızı Doğrulayın"
+
+#: src/view/screens/Settings/index.tsx:893
+msgid "Version {0}"
+msgstr ""
+
+#: src/screens/Onboarding/index.tsx:42
+msgid "Video Games"
+msgstr "Video Oyunları"
+
+#: src/screens/Profile/Header/Shell.tsx:107
+msgid "View {0}'s avatar"
+msgstr "{0}'ın avatarını görüntüle"
+
+#: src/view/screens/Log.tsx:52
+msgid "View debug entry"
+msgstr "Hata ayıklama girişini görüntüle"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:131
+msgid "View details"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:126
+msgid "View details for reporting a copyright violation"
+msgstr ""
+
+#: src/view/com/posts/FeedSlice.tsx:99
+msgid "View full thread"
+msgstr "Tam konuyu görüntüle"
+
+#: src/components/moderation/LabelsOnMe.tsx:51
+msgid "View information about these labels"
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:166
+msgid "View profile"
+msgstr "Profili görüntüle"
+
+#: src/view/com/profile/ProfileSubpageHeader.tsx:128
+msgid "View the avatar"
+msgstr "Avatarı görüntüle"
+
+#: src/components/LabelingServiceCard/index.tsx:140
+msgid "View the labeling service provided by @{0}"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:585
+msgid "View users who like this feed"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
+msgid "Visit Site"
+msgstr "Siteyi Ziyaret Et"
+
+#: src/components/moderation/LabelPreference.tsx:135
+#: src/lib/moderation/useLabelBehaviorDescription.ts:17
+#: src/lib/moderation/useLabelBehaviorDescription.ts:22
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:53
+msgid "Warn"
+msgstr "Uyar"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:48
+msgid "Warn content"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:46
+msgid "Warn content and filter from feeds"
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:124
+#~ msgid "We also think you'll like \"For You\" by Skygaze:"
+#~ msgstr "Ayrıca Skygaze tarafından \"Sana Özel\" beslemesini de beğeneceğinizi düşünüyoruz:"
+
+#: src/screens/Hashtag.tsx:133
+msgid "We couldn't find any results for that hashtag."
+msgstr ""
+
+#: src/screens/Deactivated.tsx:133
+msgid "We estimate {estimatedTime} until your account is ready."
+msgstr "Hesabınızın hazır olmasına {estimatedTime} tahmin ediyoruz."
+
+#: src/screens/Onboarding/StepFinished.tsx:97
+msgid "We hope you have a wonderful time. Remember, Bluesky is:"
+msgstr "Harika vakit geçirmenizi umuyoruz. Unutmayın, Bluesky:"
+
+#: src/view/com/posts/DiscoverFallbackHeader.tsx:29
+msgid "We ran out of posts from your follows. Here's the latest from <0/>."
+msgstr "Takipçilerinizden gönderi kalmadı. İşte <0/>'den en son gönderiler."
+
+#: src/components/dialogs/MutedWords.tsx:203
+msgid "We recommend avoiding common words that appear in many posts, since it can result in no posts being shown."
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:125
+msgid "We recommend our \"Discover\" feed:"
+msgstr "\"Keşfet\" beslememizi öneririz:"
+
+#: src/components/dialogs/BirthDateSettings.tsx:52
+msgid "We were unable to load your birth date preferences. Please try again."
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:385
+msgid "We were unable to load your configured labelers at this time."
+msgstr ""
+
+#: src/screens/Onboarding/StepInterests/index.tsx:137
+msgid "We weren't able to connect. Please try again to continue setting up your account. If it continues to fail, you can skip this flow."
+msgstr "Bağlantı kuramadık. Hesabınızı kurmaya devam etmek için tekrar deneyin. Başarısız olmaya devam ederse bu akışı atlayabilirsiniz."
+
+#: src/screens/Deactivated.tsx:137
+msgid "We will let you know when your account is ready."
+msgstr "Hesabınız hazır olduğunda size bildireceğiz."
+
+#: src/view/com/modals/AppealLabel.tsx:48
+#~ msgid "We'll look into your appeal promptly."
+#~ msgstr "İtirazınıza hızlı bir şekilde bakacağız."
+
+#: src/screens/Onboarding/StepInterests/index.tsx:142
+msgid "We'll use this to help customize your experience."
+msgstr "Bu, deneyiminizi özelleştirmenize yardımcı olmak için kullanılacak."
+
+#: src/screens/Signup/index.tsx:130
+msgid "We're so excited to have you join us!"
+msgstr "Sizi aramızda görmekten çok mutluyuz!"
+
+#: src/view/screens/ProfileList.tsx:89
+msgid "We're sorry, but we were unable to resolve this list. If this persists, please contact the list creator, @{handleOrDid}."
+msgstr "Üzgünüz, ancak bu listeyi çözemedik. Bu durum devam ederse, lütfen liste oluşturucu, @{handleOrDid} ile iletişime geçin."
+
+#: src/components/dialogs/MutedWords.tsx:229
+msgid "We're sorry, but we weren't able to load your muted words at this time. Please try again."
+msgstr ""
+
+#: src/view/screens/Search/Search.tsx:256
+msgid "We're sorry, but your search could not be completed. Please try again in a few minutes."
+msgstr "Üzgünüz, ancak aramanız tamamlanamadı. Lütfen birkaç dakika içinde tekrar deneyin."
+
+#: src/components/Lists.tsx:188
+#: src/view/screens/NotFound.tsx:48
+msgid "We're sorry! We can't find the page you were looking for."
+msgstr "Üzgünüz! Aradığınız sayfayı bulamıyoruz."
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:321
+msgid "We're sorry! You can only subscribe to ten labelers, and you've reached your limit of ten."
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:48
+msgid "Welcome to <0>Bluesky0>"
+msgstr "<0>Bluesky0>'e hoş geldiniz"
+
+#: src/screens/Onboarding/StepInterests/index.tsx:134
+msgid "What are your interests?"
+msgstr "İlgi alanlarınız nelerdir?"
+
+#: src/view/com/modals/report/Modal.tsx:169
+#~ msgid "What is the issue with this {collectionName}?"
+#~ msgstr "Bu {collectionName} ile ilgili sorun nedir?"
+
+#: src/view/com/auth/SplashScreen.tsx:58
+#: src/view/com/auth/SplashScreen.web.tsx:84
+#: src/view/com/composer/Composer.tsx:296
+msgid "What's up?"
+msgstr "Nasılsınız?"
+
+#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:78
+msgid "Which languages are used in this post?"
+msgstr "Bu gönderide hangi diller kullanılıyor?"
+
+#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:77
+msgid "Which languages would you like to see in your algorithmic feeds?"
+msgstr "Algoritmik beslemelerinizde hangi dilleri görmek istersiniz?"
+
+#: src/view/com/composer/threadgate/ThreadgateBtn.tsx:47
+#: src/view/com/modals/Threadgate.tsx:66
+msgid "Who can reply"
+msgstr "Kimler yanıtlayabilir"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:43
+msgid "Why should this content be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:56
+msgid "Why should this feed be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:53
+msgid "Why should this list be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:50
+msgid "Why should this post be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:47
+msgid "Why should this user be reviewed?"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:103
+msgid "Wide"
+msgstr "Geniş"
+
+#: src/view/com/composer/Composer.tsx:436
+msgid "Write post"
+msgstr "Gönderi yaz"
+
+#: src/view/com/composer/Composer.tsx:295
+#: src/view/com/composer/Prompt.tsx:37
+msgid "Write your reply"
+msgstr "Yanıtınızı yazın"
+
+#: src/screens/Onboarding/index.tsx:28
+msgid "Writers"
+msgstr "Yazarlar"
+
+#: src/view/com/auth/create/Step2.tsx:263
+#~ msgid "XXXXXX"
+#~ msgstr "XXXXXX"
+
+#: src/view/com/composer/select-language/SuggestedLanguage.tsx:77
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:201
+#: src/view/screens/PreferencesFollowingFeed.tsx:236
+#: src/view/screens/PreferencesFollowingFeed.tsx:271
+#: src/view/screens/PreferencesThreads.tsx:106
+#: src/view/screens/PreferencesThreads.tsx:129
+msgid "Yes"
+msgstr "Evet"
+
+#: src/screens/Deactivated.tsx:130
+msgid "You are in line."
+msgstr "Sıradasınız."
+
+#: src/view/com/profile/ProfileFollows.tsx:86
+msgid "You are not following anyone."
+msgstr ""
+
+#: src/view/com/posts/FollowingEmptyState.tsx:67
+#: src/view/com/posts/FollowingEndOfFeed.tsx:68
+msgid "You can also discover new Custom Feeds to follow."
+msgstr "Ayrıca takip edebileceğiniz yeni Özel Beslemeler keşfedebilirsiniz."
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:143
+msgid "You can change these settings later."
+msgstr "Bu ayarları daha sonra değiştirebilirsiniz."
+
+#: src/screens/Login/index.tsx:158
+#: src/screens/Login/PasswordUpdatedForm.tsx:33
+msgid "You can now sign in with your new password."
+msgstr "Artık yeni şifrenizle giriş yapabilirsiniz."
+
+#: src/view/com/profile/ProfileFollowers.tsx:86
+msgid "You do not have any followers."
+msgstr ""
+
+#: src/view/com/modals/InviteCodes.tsx:67
+msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer."
+msgstr "Henüz hiç davet kodunuz yok! Bluesky'de biraz daha uzun süre kaldıktan sonra size bazı kodlar göndereceğiz."
+
+#: src/view/screens/SavedFeeds.tsx:102
+msgid "You don't have any pinned feeds."
+msgstr "Sabitlemiş beslemeniz yok."
+
+#: src/view/screens/Feeds.tsx:452
+msgid "You don't have any saved feeds!"
+msgstr "Kaydedilmiş beslemeniz yok!"
+
+#: src/view/screens/SavedFeeds.tsx:135
+msgid "You don't have any saved feeds."
+msgstr "Kaydedilmiş beslemeniz yok."
+
+#: src/view/com/post-thread/PostThread.tsx:159
+msgid "You have blocked the author or you have been blocked by the author."
+msgstr "Yazarı engellediniz veya yazar tarafından engellendiniz."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:66
+#: src/lib/moderation/useModerationCauseDescription.ts:50
+#: src/lib/moderation/useModerationCauseDescription.ts:58
+msgid "You have blocked this user. You cannot view their content."
+msgstr "Bu kullanıcıyı engellediniz. İçeriklerini göremezsiniz."
+
+#: src/screens/Login/SetNewPasswordForm.tsx:54
+#: src/screens/Login/SetNewPasswordForm.tsx:91
+#: src/view/com/modals/ChangePassword.tsx:87
+#: src/view/com/modals/ChangePassword.tsx:121
+msgid "You have entered an invalid code. It should look like XXXXX-XXXXX."
+msgstr "Geçersiz bir kod girdiniz. XXXXX-XXXXX gibi görünmelidir."
+
+#: src/lib/moderation/useModerationCauseDescription.ts:109
+msgid "You have hidden this post"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:101
+msgid "You have hidden this post."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:94
+#: src/lib/moderation/useModerationCauseDescription.ts:92
+msgid "You have muted this account."
+msgstr ""
+
+#: src/lib/moderation/useModerationCauseDescription.ts:86
+msgid "You have muted this user"
+msgstr ""
+
+#: src/view/com/modals/ModerationDetails.tsx:87
+#~ msgid "You have muted this user."
+#~ msgstr "Bu kullanıcıyı sessize aldınız."
+
+#: src/view/com/feeds/ProfileFeedgens.tsx:136
+msgid "You have no feeds."
+msgstr "Beslemeniz yok."
+
+#: src/view/com/lists/MyLists.tsx:89
+#: src/view/com/lists/ProfileLists.tsx:140
+msgid "You have no lists."
+msgstr "Listeniz yok."
+
+#: src/view/screens/ModerationBlockedAccounts.tsx:132
+msgid "You have not blocked any accounts yet. To block an account, go to their profile and select \"Block account\" from the menu on their account."
+msgstr ""
+
+#: src/view/screens/ModerationBlockedAccounts.tsx:132
+#~ msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
+#~ msgstr "Henüz hiçbir hesabı engellemediniz. Bir hesabı engellemek için, profilinize gidin ve hesaplarının menüsünden \"Hesabı engelle\" seçeneğini seçin."
+
+#: src/view/screens/AppPasswords.tsx:89
+msgid "You have not created any app passwords yet. You can create one by pressing the button below."
+msgstr "Henüz hiçbir uygulama şifresi oluşturmadınız. Aşağıdaki düğmeye basarak bir tane oluşturabilirsiniz."
+
+#: src/view/screens/ModerationMutedAccounts.tsx:131
+msgid "You have not muted any accounts yet. To mute an account, go to their profile and select \"Mute account\" from the menu on their account."
+msgstr ""
+
+#: src/view/screens/ModerationMutedAccounts.tsx:131
+#~ msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
+#~ msgstr "Henüz hiçbir hesabı sessize almadınız. Bir hesabı sessize almak için, profilinize gidin ve hesaplarının menüsünden \"Hesabı sessize al\" seçeneğini seçin."
+
+#: src/components/dialogs/MutedWords.tsx:249
+msgid "You haven't muted any words or tags yet"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:68
+msgid "You may appeal these labels if you feel they were placed in error."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/Policies.tsx:79
+msgid "You must be 13 years of age or older to sign up."
+msgstr ""
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:170
+#~ msgid "You must be 18 or older to enable adult content."
+#~ msgstr "Yetişkin içeriği etkinleştirmek için 18 yaşında veya daha büyük olmalısınız."
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:110
+msgid "You must be 18 years or older to enable adult content"
+msgstr "Yetişkin içeriğini etkinleştirmek için 18 yaşında veya daha büyük olmalısınız"
+
+#: src/components/ReportDialog/SubmitView.tsx:205
+msgid "You must select at least one labeler for a report"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:144
+msgid "You will no longer receive notifications for this thread"
+msgstr "Artık bu konu için bildirim almayacaksınız"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:147
+msgid "You will now receive notifications for this thread"
+msgstr "Artık bu konu için bildirim alacaksınız"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:104
+msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password."
+msgstr "Bir \"sıfırlama kodu\" içeren bir e-posta alacaksınız. Bu kodu buraya girin, ardından yeni şifrenizi girin."
+
+#: src/screens/Onboarding/StepModeration/index.tsx:60
+msgid "You're in control"
+msgstr "Siz kontrol ediyorsunuz"
+
+#: src/screens/Deactivated.tsx:87
+#: src/screens/Deactivated.tsx:88
+#: src/screens/Deactivated.tsx:103
+msgid "You're in line"
+msgstr "Sıradasınız"
+
+#: src/screens/Onboarding/StepFinished.tsx:94
+msgid "You're ready to go!"
+msgstr "Hazırsınız!"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:98
+#: src/lib/moderation/useModerationCauseDescription.ts:101
+msgid "You've chosen to hide a word or tag within this post."
+msgstr ""
+
+#: src/view/com/posts/FollowingEndOfFeed.tsx:48
+msgid "You've reached the end of your feed! Find some more accounts to follow."
+msgstr "Beslemenizin sonuna ulaştınız! Takip edebileceğiniz daha fazla hesap bulun."
+
+#: src/screens/Signup/index.tsx:150
+msgid "Your account"
+msgstr "Hesabınız"
+
+#: src/view/com/modals/DeleteAccount.tsx:68
+msgid "Your account has been deleted"
+msgstr "Hesabınız silindi"
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:47
+msgid "Your account repository, containing all public data records, can be downloaded as a \"CAR\" file. This file does not include media embeds, such as images, or your private data, which must be fetched separately."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/index.tsx:121
+msgid "Your birth date"
+msgstr "Doğum tarihiniz"
+
+#: src/view/com/modals/InAppBrowserConsent.tsx:47
+msgid "Your choice will be saved, but can be changed later in settings."
+msgstr "Seçiminiz kaydedilecek, ancak daha sonra ayarlarda değiştirilebilir."
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:62
+msgid "Your default feed is \"Following\""
+msgstr "Varsayılan beslemeniz \"Takip Edilenler\""
+
+#: src/screens/Login/ForgotPasswordForm.tsx:57
+#: src/screens/Signup/state.ts:227
+#: src/view/com/modals/ChangePassword.tsx:54
+msgid "Your email appears to be invalid."
+msgstr "E-postanız geçersiz gibi görünüyor."
+
+#: src/view/com/modals/Waitlist.tsx:109
+#~ msgid "Your email has been saved! We'll be in touch soon."
+#~ msgstr "E-postanız kaydedildi! Yakında sizinle iletişime geçeceğiz."
+
+#: src/view/com/modals/ChangeEmail.tsx:125
+msgid "Your email has been updated but not verified. As a next step, please verify your new email."
+msgstr "E-postanız güncellendi ancak doğrulanmadı. Bir sonraki adım olarak, lütfen yeni e-postanızı doğrulayın."
+
+#: src/view/com/modals/VerifyEmail.tsx:114
+msgid "Your email has not yet been verified. This is an important security step which we recommend."
+msgstr "E-postanız henüz doğrulanmadı. Bu, önerdiğimiz önemli bir güvenlik adımıdır."
+
+#: src/view/com/posts/FollowingEmptyState.tsx:47
+msgid "Your following feed is empty! Follow more users to see what's happening."
+msgstr "Takip ettiğiniz besleme boş! Neler olduğunu görmek için daha fazla kullanıcı takip edin."
+
+#: src/screens/Signup/StepHandle.tsx:72
+msgid "Your full handle will be"
+msgstr "Tam kullanıcı adınız"
+
+#: src/view/com/modals/ChangeHandle.tsx:271
+msgid "Your full handle will be <0>@{0}0>"
+msgstr "Tam kullanıcı adınız <0>@{0}0> olacak"
+
+#: src/view/screens/Settings.tsx:NaN
+#: src/view/shell/Drawer.tsx:660
+#~ msgid "Your invite codes are hidden when logged in using an App Password"
+#~ msgstr "Uygulama Şifresi kullanarak giriş yaptığınızda davet kodlarınız gizlenir"
+
+#: src/components/dialogs/MutedWords.tsx:220
+msgid "Your muted words"
+msgstr ""
+
+#: src/view/com/modals/ChangePassword.tsx:157
+msgid "Your password has been changed successfully!"
+msgstr "Şifreniz başarıyla değiştirildi!"
+
+#: src/view/com/composer/Composer.tsx:284
+msgid "Your post has been published"
+msgstr "Gönderiniz yayınlandı"
+
+#: src/screens/Onboarding/StepFinished.tsx:109
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:59
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:61
+msgid "Your posts, likes, and blocks are public. Mutes are private."
+msgstr "Gönderileriniz, beğenileriniz ve engellemeleriniz herkese açıktır. Sessizlikleriniz özeldir."
+
+#: src/view/screens/Settings/index.tsx:125
+msgid "Your profile"
+msgstr "Profiliniz"
+
+#: src/view/com/composer/Composer.tsx:283
+msgid "Your reply has been published"
+msgstr "Yanıtınız yayınlandı"
+
+#: src/screens/Signup/index.tsx:152
+msgid "Your user handle"
+msgstr "Kullanıcı adınız"
diff --git a/src/locale/locales/uk/messages.po b/src/locale/locales/uk/messages.po
index 93d30bc195..2b22523cf0 100644
--- a/src/locale/locales/uk/messages.po
+++ b/src/locale/locales/uk/messages.po
@@ -8,7 +8,7 @@ msgstr ""
"Language: uk\n"
"Project-Id-Version: bsky-app-ua\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2024-01-09 23:26\n"
+"PO-Revision-Date: 2024-03-13 11:56\n"
"Last-Translator: \n"
"Language-Team: Ukrainian\n"
"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n"
@@ -18,69 +18,48 @@ msgstr ""
"X-Crowdin-File: /main/src/locale/locales/en/messages.po\n"
"X-Crowdin-File-ID: 14\n"
-#: src/view/screens/Profile.tsx:214
-#~ msgid "- end of feed -"
-#~ msgstr ""
-
-#: src/view/com/modals/SelfLabel.tsx:138
-#~ msgid ". This warning is only available for posts with media attached."
-#~ msgstr ""
-
#: src/view/com/modals/VerifyEmail.tsx:142
msgid "(no email)"
-msgstr ""
+msgstr "(немає ел. адреси)"
#: src/view/shell/desktop/RightNav.tsx:168
#~ msgid "{0, plural, one {# invite code available} other {# invite codes available}}"
-#~ msgstr "{0, plural, one {Доступний # код запрошення} few {Доступно # коди запрошення} other {Доступно # кодів запрошення}}"
-
-#: src/view/com/modals/CreateOrEditList.tsx:185
-#: src/view/screens/Settings.tsx:294
-#~ msgid "{0}"
-#~ msgstr "{0}"
-
-#: src/view/com/modals/CreateOrEditList.tsx:176
-#~ msgid "{0} {purposeLabel} List"
-#~ msgstr "{0} Список {purposeLabel}"
+#~ msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:592
+#: src/screens/Profile/Header/Metrics.tsx:44
msgid "{following} following"
-msgstr ""
+msgstr "{following} підписок"
#: src/view/shell/desktop/RightNav.tsx:151
#~ msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}"
-#~ msgstr "{invitesAvailable, plural, one {Коди запрошень: доступно #} other {Коди запрошень: доступно #}}"
+#~ msgstr ""
#: src/view/screens/Settings.tsx:435
#: src/view/shell/Drawer.tsx:664
#~ msgid "{invitesAvailable} invite code available"
-#~ msgstr "Доступний код запрошення"
+#~ msgstr ""
#: src/view/screens/Settings.tsx:437
#: src/view/shell/Drawer.tsx:666
#~ msgid "{invitesAvailable} invite codes available"
-#~ msgstr "Доступно {invitesAvailable} кодів запрошення"
-
-#: src/view/screens/Search/Search.tsx:87
-#~ msgid "{message}"
-#~ msgstr "{message}"
+#~ msgstr ""
-#: src/view/shell/Drawer.tsx:440
+#: src/view/shell/Drawer.tsx:443
msgid "{numUnreadNotifications} unread"
-msgstr ""
-
-#: src/Navigation.tsx:147
-#~ msgid "@{0}"
-#~ msgstr ""
+msgstr "{numUnreadNotifications} непрочитаних"
#: src/view/com/threadgate/WhoCanReply.tsx:158
msgid "<0/> members"
msgstr "<0/> учасників"
-#: src/view/com/profile/ProfileHeader.tsx:594
-msgid "<0>{following} 0><1>following1>"
+#: src/view/shell/Drawer.tsx:97
+msgid "<0>{0}0> following"
msgstr ""
+#: src/screens/Profile/Header/Metrics.tsx:45
+msgid "<0>{following} 0><1>following1>"
+msgstr "<0>{following} 0><1>підписок1>"
+
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:30
msgid "<0>Choose your0><1>Recommended1><2>Feeds2>"
msgstr "<0>Оберіть свої0><1>рекомендовані1><2>стрічки2>"
@@ -89,69 +68,66 @@ msgstr "<0>Оберіть свої0><1>рекомендовані1><2>стр
msgid "<0>Follow some0><1>Recommended1><2>Users2>"
msgstr "<0>Підпишіться на деяких 0><1>рекомендованих 1><2>користувачів2>"
-#: src/view/com/modals/AddAppPasswords.tsx:132
-#~ msgid "<0>Here is your app password.0> Use this to sign into the other app along with your handle."
-#~ msgstr ""
-
-#: src/view/screens/Moderation.tsx:212
-#~ msgid "<0>Note: This setting may not be respected by third-party apps that display Bluesky content.0>"
-#~ msgstr ""
-
-#: src/view/screens/Moderation.tsx:212
-#~ msgid "<0>Note: Your profile and posts will remain publicly available. Third-party apps that display Bluesky content may not respect this setting.0>"
-#~ msgstr ""
-
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:21
msgid "<0>Welcome to0><1>Bluesky1>"
-msgstr ""
+msgstr "<0>Ласкаво просимо до0><1>Bluesky1>"
-#: src/view/com/profile/ProfileHeader.tsx:557
+#: src/screens/Profile/Header/Handle.tsx:42
msgid "⚠Invalid Handle"
-msgstr ""
+msgstr "⚠Недопустимий псевдонім"
#: src/view/com/util/moderation/LabelInfo.tsx:45
-msgid "A content warning has been applied to this {0}."
-msgstr "Попередження про вміст було додано до цього {0}."
+#~ msgid "A content warning has been applied to this {0}."
+#~ msgstr "Попередження про вміст було додано до цього {0}."
#: src/lib/hooks/useOTAUpdate.ts:16
-msgid "A new version of the app is available. Please update to continue using the app."
-msgstr "Доступна нова версія. Будь ласка, оновіть застосунок, щоб продовжити ним користуватися."
+#~ msgid "A new version of the app is available. Please update to continue using the app."
+#~ msgstr "Доступна нова версія. Будь ласка, оновіть застосунок, щоб продовжити ним користуватися."
-#: src/view/com/util/ViewHeader.tsx:83
-#: src/view/screens/Search/Search.tsx:624
+#: src/view/com/util/ViewHeader.tsx:89
+#: src/view/screens/Search/Search.tsx:649
msgid "Access navigation links and settings"
-msgstr ""
+msgstr "Відкрити навігацію й налаштування"
-#: src/view/com/pager/FeedsTabBarMobile.tsx:89
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:52
msgid "Access profile and other navigation links"
-msgstr ""
+msgstr "Відкрити профіль та іншу навігацію"
-#: src/view/com/modals/EditImage.tsx:299
-#: src/view/screens/Settings/index.tsx:451
+#: src/view/com/modals/EditImage.tsx:300
+#: src/view/screens/Settings/index.tsx:470
msgid "Accessibility"
msgstr "Доступність"
-#: src/view/com/auth/login/LoginForm.tsx:166
-#: src/view/screens/Settings/index.tsx:308
-#: src/view/screens/Settings/index.tsx:721
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "account"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:144
+#: src/view/screens/Settings/index.tsx:327
+#: src/view/screens/Settings/index.tsx:743
msgid "Account"
msgstr "Обліковий запис"
-#: src/view/com/profile/ProfileHeader.tsx:245
+#: src/view/com/profile/ProfileMenu.tsx:139
msgid "Account blocked"
+msgstr "Обліковий запис заблоковано"
+
+#: src/view/com/profile/ProfileMenu.tsx:153
+msgid "Account followed"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:212
+#: src/view/com/profile/ProfileMenu.tsx:113
msgid "Account muted"
-msgstr ""
+msgstr "Обліковий запис ігнорується"
-#: src/view/com/modals/ModerationDetails.tsx:86
+#: src/components/moderation/ModerationDetailsDialog.tsx:93
+#: src/lib/moderation/useModerationCauseDescription.ts:91
msgid "Account Muted"
-msgstr ""
+msgstr "Обліковий запис ігнорується"
-#: src/view/com/modals/ModerationDetails.tsx:72
+#: src/components/moderation/ModerationDetailsDialog.tsx:82
msgid "Account Muted by List"
-msgstr ""
+msgstr "Обліковий запис ігнорується списком"
#: src/view/com/util/AccountDropdownBtn.tsx:41
msgid "Account options"
@@ -159,20 +135,26 @@ msgstr "Параметри облікового запису"
#: src/view/com/util/AccountDropdownBtn.tsx:25
msgid "Account removed from quick access"
-msgstr ""
+msgstr "Обліковий запис вилучено зі швидкого доступу"
-#: src/view/com/profile/ProfileHeader.tsx:267
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:137
+#: src/view/com/profile/ProfileMenu.tsx:128
msgid "Account unblocked"
+msgstr "Обліковий запис розблоковано"
+
+#: src/view/com/profile/ProfileMenu.tsx:166
+msgid "Account unfollowed"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:225
+#: src/view/com/profile/ProfileMenu.tsx:102
msgid "Account unmuted"
-msgstr ""
+msgstr "Обліковий запис більше не ігнорується"
+#: src/components/dialogs/MutedWords.tsx:164
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:150
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/screens/ProfileList.tsx:812
+#: src/view/screens/ProfileList.tsx:827
msgid "Add"
msgstr "Додати"
@@ -180,104 +162,124 @@ msgstr "Додати"
msgid "Add a content warning"
msgstr "Додати попередження про вміст"
-#: src/view/screens/ProfileList.tsx:802
+#: src/view/screens/ProfileList.tsx:817
msgid "Add a user to this list"
msgstr "Додати користувача до списку"
-#: src/view/screens/Settings/index.tsx:383
-#: src/view/screens/Settings/index.tsx:392
+#: src/components/dialogs/SwitchAccount.tsx:55
+#: src/view/screens/Settings/index.tsx:402
+#: src/view/screens/Settings/index.tsx:411
msgid "Add account"
msgstr "Додати обліковий запис"
#: src/view/com/composer/photos/Gallery.tsx:119
#: src/view/com/composer/photos/Gallery.tsx:180
-#: src/view/com/modals/AltImage.tsx:116
+#: src/view/com/modals/AltImage.tsx:117
msgid "Add alt text"
msgstr "Додати альтернативний текст"
-#: src/view/screens/AppPasswords.tsx:102
-#: src/view/screens/AppPasswords.tsx:143
-#: src/view/screens/AppPasswords.tsx:156
+#: src/view/screens/AppPasswords.tsx:104
+#: src/view/screens/AppPasswords.tsx:145
+#: src/view/screens/AppPasswords.tsx:158
msgid "Add App Password"
-msgstr ""
+msgstr "Додати пароль застосунку"
#: src/view/com/modals/report/InputIssueDetails.tsx:41
#: src/view/com/modals/report/Modal.tsx:191
-msgid "Add details"
-msgstr "Додайте подробиці"
+#~ msgid "Add details"
+#~ msgstr "Додайте подробиці"
#: src/view/com/modals/report/Modal.tsx:194
-msgid "Add details to report"
-msgstr "Додайте подробиці до скарги"
+#~ msgid "Add details to report"
+#~ msgstr "Додайте подробиці до скарги"
-#: src/view/com/composer/Composer.tsx:446
+#: src/view/com/composer/Composer.tsx:467
msgid "Add link card"
msgstr "Додати попередній перегляд"
-#: src/view/com/composer/Composer.tsx:451
+#: src/view/com/composer/Composer.tsx:472
msgid "Add link card:"
msgstr "Додати попередній перегляд:"
-#: src/view/com/modals/ChangeHandle.tsx:417
+#: src/components/dialogs/MutedWords.tsx:157
+msgid "Add mute word for configured settings"
+msgstr "Додати слово до ігнорування з обраними налаштуваннями"
+
+#: src/components/dialogs/MutedWords.tsx:86
+msgid "Add muted words and tags"
+msgstr "Додати ігноровані слова та теги"
+
+#: src/view/com/modals/ChangeHandle.tsx:416
msgid "Add the following DNS record to your domain:"
msgstr "Додайте наступний DNS-запис до вашого домену:"
-#: src/view/com/profile/ProfileHeader.tsx:309
+#: src/view/com/profile/ProfileMenu.tsx:263
+#: src/view/com/profile/ProfileMenu.tsx:266
msgid "Add to Lists"
msgstr "Додати до списку"
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/feeds/FeedSourceCard.tsx:234
msgid "Add to my feeds"
msgstr "Додати до моїх стрічок"
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:139
msgid "Added"
-msgstr ""
+msgstr "Додано"
#: src/view/com/modals/ListAddRemoveUsers.tsx:191
#: src/view/com/modals/UserAddRemoveLists.tsx:144
msgid "Added to list"
msgstr "Додано до списку"
-#: src/view/com/feeds/FeedSourceCard.tsx:125
+#: src/view/com/feeds/FeedSourceCard.tsx:108
msgid "Added to my feeds"
-msgstr ""
+msgstr "Додано до моїх стрічок"
-#: src/view/screens/PreferencesHomeFeed.tsx:173
+#: src/view/screens/PreferencesFollowingFeed.tsx:173
msgid "Adjust the number of likes a reply must have to be shown in your feed."
msgstr "Налаштуйте мінімальну кількість вподобань для того щоб відповідь відобразилася у вашій стрічці."
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:117
#: src/view/com/modals/SelfLabel.tsx:75
msgid "Adult Content"
msgstr "Вміст для дорослих"
#: src/view/com/modals/ContentFilteringSettings.tsx:141
-msgid "Adult content can only be enabled via the Web at <0/>."
-msgstr ""
+#~ msgid "Adult content can only be enabled via the Web at <0/>."
+#~ msgstr "Вміст для дорослих можна увімкнути лише у вебверсії на <0/>."
#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
#~ msgid "Adult content can only be enabled via the Web at <0>bsky.app0>."
#~ msgstr ""
-#: src/view/screens/Settings/index.tsx:664
+#: src/components/moderation/LabelPreference.tsx:242
+msgid "Adult content is disabled."
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:375
+#: src/view/screens/Settings/index.tsx:684
msgid "Advanced"
msgstr "Розширені"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:221
-#: src/view/com/modals/ChangePassword.tsx:168
+#: src/view/screens/Feeds.tsx:666
+msgid "All the feeds you've saved, right in one place."
+msgstr "Усі збережені стрічки в одному місці."
+
+#: src/screens/Login/ForgotPasswordForm.tsx:178
+#: src/view/com/modals/ChangePassword.tsx:170
msgid "Already have a code?"
-msgstr ""
+msgstr "Вже маєте код?"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:98
+#: src/screens/Login/ChooseAccountForm.tsx:39
msgid "Already signed in as @{0}"
-msgstr ""
+msgstr "Вже увійшли як @{0}"
#: src/view/com/composer/photos/Gallery.tsx:130
msgid "ALT"
msgstr "ALT"
-#: src/view/com/modals/EditImage.tsx:315
+#: src/view/com/modals/EditImage.tsx:316
msgid "Alt text"
msgstr "Альтернативний текст"
@@ -293,182 +295,213 @@ msgstr "Було надіслано лист на адресу {0}. Він мі
msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below."
msgstr "Було надіслано лист на вашу попередню адресу, {0}. Він містить код підтвердження, який ви можете ввести нижче."
-#: src/view/com/profile/FollowButton.tsx:30
-#: src/view/com/profile/FollowButton.tsx:40
-msgid "An issue occurred, please try again."
+#: src/lib/moderation/useReportOptions.ts:26
+msgid "An issue not included in these options"
msgstr ""
-#: src/view/com/notifications/FeedItem.tsx:236
+#: src/view/com/profile/FollowButton.tsx:35
+#: src/view/com/profile/FollowButton.tsx:45
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:188
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:198
+msgid "An issue occurred, please try again."
+msgstr "Виникла проблема, будь ласка, спробуйте ще раз."
+
+#: src/view/com/notifications/FeedItem.tsx:240
#: src/view/com/threadgate/WhoCanReply.tsx:178
msgid "and"
msgstr "та"
#: src/screens/Onboarding/index.tsx:32
msgid "Animals"
+msgstr "Тварини"
+
+#: src/lib/moderation/useReportOptions.ts:31
+msgid "Anti-Social Behavior"
msgstr ""
#: src/view/screens/LanguageSettings.tsx:95
msgid "App Language"
msgstr "Мова застосунку"
-#: src/view/screens/AppPasswords.tsx:228
+#: src/view/screens/AppPasswords.tsx:223
msgid "App password deleted"
-msgstr ""
+msgstr "Пароль застосунку видалено"
-#: src/view/com/modals/AddAppPasswords.tsx:134
+#: src/view/com/modals/AddAppPasswords.tsx:135
msgid "App Password names can only contain letters, numbers, spaces, dashes, and underscores."
-msgstr ""
+msgstr "Назва пароля може містити лише латинські літери, цифри, пробіли, мінуси та нижні підкреслення."
-#: src/view/com/modals/AddAppPasswords.tsx:99
+#: src/view/com/modals/AddAppPasswords.tsx:100
msgid "App Password names must be at least 4 characters long."
-msgstr ""
+msgstr "Назва пароля застосунку мусить бути хоча б 4 символи в довжину."
-#: src/view/screens/Settings/index.tsx:675
+#: src/view/screens/Settings/index.tsx:695
msgid "App password settings"
-msgstr ""
+msgstr "Налаштування пароля застосунків"
#: src/view/screens/Settings.tsx:650
#~ msgid "App passwords"
-#~ msgstr "Паролі для застосунків"
+#~ msgstr ""
-#: src/Navigation.tsx:237
-#: src/view/screens/AppPasswords.tsx:187
-#: src/view/screens/Settings/index.tsx:684
+#: src/Navigation.tsx:251
+#: src/view/screens/AppPasswords.tsx:189
+#: src/view/screens/Settings/index.tsx:704
msgid "App Passwords"
msgstr "Паролі для застосунків"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:250
-msgid "Appeal content warning"
-msgstr "Оскаржити попередження про вміст"
+#: src/components/moderation/LabelsOnMeDialog.tsx:133
+#: src/components/moderation/LabelsOnMeDialog.tsx:136
+msgid "Appeal"
+msgstr ""
-#: src/view/com/modals/AppealLabel.tsx:65
-msgid "Appeal Content Warning"
-msgstr "Оскаржити попередження про вміст"
+#: src/components/moderation/LabelsOnMeDialog.tsx:201
+msgid "Appeal \"{0}\" label"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:337
+#: src/view/com/util/forms/PostDropdownBtn.tsx:346
+#~ msgid "Appeal content warning"
+#~ msgstr "Оскаржити попередження про вміст"
#: src/view/com/modals/AppealLabel.tsx:65
-#~ msgid "Appeal Decision"
-#~ msgstr ""
+#~ msgid "Appeal Content Warning"
+#~ msgstr "Оскаржити попередження про вміст"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:192
+msgid "Appeal submitted."
+msgstr ""
#: src/view/com/util/moderation/LabelInfo.tsx:52
-msgid "Appeal this decision"
-msgstr "Оскаржити це рішення"
+#~ msgid "Appeal this decision"
+#~ msgstr "Оскаржити це рішення"
#: src/view/com/util/moderation/LabelInfo.tsx:56
-msgid "Appeal this decision."
-msgstr "Оскаржити це рішення"
+#~ msgid "Appeal this decision."
+#~ msgstr "Оскаржити це рішення"
-#: src/view/screens/Settings/index.tsx:466
+#: src/view/screens/Settings/index.tsx:485
msgid "Appearance"
msgstr "Оформлення"
-#: src/view/screens/Moderation.tsx:206
-#~ msgid "Apps that respect this setting, including the official Bluesky app and bsky.app website, won't show your content to logged out users."
-#~ msgstr ""
-
-#: src/view/screens/AppPasswords.tsx:224
+#: src/view/screens/AppPasswords.tsx:265
msgid "Are you sure you want to delete the app password \"{name}\"?"
msgstr "Ви дійсно хочете видалити пароль для застосунку \"{name}\"?"
-#: src/view/com/composer/Composer.tsx:143
+#: src/view/com/feeds/FeedSourceCard.tsx:280
+msgid "Are you sure you want to remove {0} from your feeds?"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:509
msgid "Are you sure you'd like to discard this draft?"
msgstr "Ви дійсно бажаєте видалити цю чернетку?"
-#: src/view/screens/ProfileList.tsx:364
+#: src/components/dialogs/MutedWords.tsx:281
msgid "Are you sure?"
msgstr "Ви впевнені?"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:233
-msgid "Are you sure? This cannot be undone."
-msgstr "Ви впевнені? Це не можна буде скасувати."
+#: src/view/com/util/forms/PostDropdownBtn.tsx:322
+#~ msgid "Are you sure? This cannot be undone."
+#~ msgstr "Ви впевнені? Це не можна буде скасувати."
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:60
msgid "Are you writing in <0>{0}0>?"
-msgstr ""
+msgstr "Ви пишете <0>{0}0>?"
#: src/screens/Onboarding/index.tsx:26
msgid "Art"
-msgstr ""
+msgstr "Мистецтво"
#: src/view/com/modals/SelfLabel.tsx:123
msgid "Artistic or non-erotic nudity."
msgstr "Художня або нееротична оголеність."
-#: src/view/screens/Moderation.tsx:189
-#~ msgid "Ask apps to limit the visibility of my account"
-#~ msgstr ""
-
-#: src/view/com/auth/create/CreateAccount.tsx:147
-#: src/view/com/auth/login/ChooseAccountForm.tsx:151
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:174
-#: src/view/com/auth/login/LoginForm.tsx:259
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:179
-#: src/view/com/modals/report/InputIssueDetails.tsx:46
-#: src/view/com/post-thread/PostThread.tsx:408
-#: src/view/com/post-thread/PostThread.tsx:458
-#: src/view/com/post-thread/PostThread.tsx:466
-#: src/view/com/profile/ProfileHeader.tsx:648
-#: src/view/com/util/ViewHeader.tsx:81
+#: src/screens/Signup/StepHandle.tsx:118
+msgid "At least 3 characters"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:246
+#: src/components/moderation/LabelsOnMeDialog.tsx:247
+#: src/screens/Login/ChooseAccountForm.tsx:73
+#: src/screens/Login/ChooseAccountForm.tsx:78
+#: src/screens/Login/ForgotPasswordForm.tsx:129
+#: src/screens/Login/ForgotPasswordForm.tsx:135
+#: src/screens/Login/LoginForm.tsx:221
+#: src/screens/Login/LoginForm.tsx:227
+#: src/screens/Login/SetNewPasswordForm.tsx:160
+#: src/screens/Login/SetNewPasswordForm.tsx:166
+#: src/screens/Profile/Header/Shell.tsx:96
+#: src/screens/Signup/index.tsx:179
+#: src/view/com/util/ViewHeader.tsx:87
msgid "Back"
msgstr "Назад"
-#: src/view/com/post-thread/PostThread.tsx:416
-msgctxt "action"
-msgid "Back"
-msgstr ""
+#: src/view/com/post-thread/PostThread.tsx:480
+#~ msgctxt "action"
+#~ msgid "Back"
+#~ msgstr "Назад"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:136
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:144
msgid "Based on your interest in {interestsText}"
-msgstr ""
+msgstr "Ґрунтуючись на вашому інтересі до {interestsText}"
-#: src/view/screens/Settings/index.tsx:523
+#: src/view/screens/Settings/index.tsx:542
msgid "Basics"
msgstr "Основні"
-#: src/view/com/auth/create/Step1.tsx:246
-#: src/view/com/modals/BirthDateSettings.tsx:73
+#: src/components/dialogs/BirthDateSettings.tsx:107
msgid "Birthday"
msgstr "Дата народження"
-#: src/view/screens/Settings/index.tsx:340
+#: src/view/screens/Settings/index.tsx:359
msgid "Birthday:"
msgstr "Дата народження:"
-#: src/view/com/profile/ProfileHeader.tsx:238
-#: src/view/com/profile/ProfileHeader.tsx:345
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+msgid "Block"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:300
+#: src/view/com/profile/ProfileMenu.tsx:307
msgid "Block Account"
msgstr "Заблокувати"
-#: src/view/screens/ProfileList.tsx:555
+#: src/view/com/profile/ProfileMenu.tsx:344
+msgid "Block Account?"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:530
msgid "Block accounts"
msgstr "Заблокувати облікові записи"
-#: src/view/screens/ProfileList.tsx:505
+#: src/view/screens/ProfileList.tsx:478
+#: src/view/screens/ProfileList.tsx:634
msgid "Block list"
msgstr "Заблокувати список"
-#: src/view/screens/ProfileList.tsx:315
+#: src/view/screens/ProfileList.tsx:629
msgid "Block these accounts?"
msgstr "Заблокувати ці облікові записи?"
-#: src/view/screens/ProfileList.tsx:319
-msgid "Block this List"
-msgstr ""
+#: src/view/screens/ProfileList.tsx:320
+#~ msgid "Block this List"
+#~ msgstr "Заблокувати список"
-#: src/view/com/lists/ListCard.tsx:109
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:60
+#: src/view/com/lists/ListCard.tsx:110
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:55
msgid "Blocked"
-msgstr ""
+msgstr "Заблоковано"
-#: src/view/screens/Moderation.tsx:123
+#: src/screens/Moderation/index.tsx:267
msgid "Blocked accounts"
msgstr "Заблоковані облікові записи"
-#: src/Navigation.tsx:130
+#: src/Navigation.tsx:134
#: src/view/screens/ModerationBlockedAccounts.tsx:107
msgid "Blocked Accounts"
msgstr "Заблоковані облікові записи"
-#: src/view/com/profile/ProfileHeader.tsx:240
+#: src/view/com/profile/ProfileMenu.tsx:356
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
msgstr "Заблоковані облікові записи не можуть вам відповідати, згадувати вас у своїх постах, і взаємодіяти з вами будь-яким іншим чином."
@@ -476,64 +509,82 @@ msgstr "Заблоковані облікові записи не можуть
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours."
msgstr "Заблоковані облікові записи не можуть вам відповідати, згадувати вас у своїх постах, і взаємодіяти з вами будь-яким іншим чином. Ви не будете бачити їхні пости і вони не будуть бачити ваші."
-#: src/view/com/post-thread/PostThread.tsx:267
+#: src/view/com/post-thread/PostThread.tsx:313
msgid "Blocked post."
msgstr "Заблокований пост."
-#: src/view/screens/ProfileList.tsx:317
+#: src/screens/Profile/Sections/Labels.tsx:152
+msgid "Blocking does not prevent this labeler from placing labels on your account."
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:631
msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
msgstr "Блокування - це відкрита інформація. Заблоковані користувачі не можуть відповісти у ваших темах, згадувати вас або іншим чином взаємодіяти з вами."
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:93
+#: src/view/com/profile/ProfileMenu.tsx:353
+msgid "Blocking will not prevent labels from being applied on your account, but it will stop this account from replying in your threads or interacting with you."
+msgstr ""
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:98
+#: src/view/com/auth/SplashScreen.web.tsx:169
msgid "Blog"
msgstr "Блог"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:31
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:32
#: src/view/com/auth/server-input/index.tsx:89
-#: src/view/com/auth/server-input/index.tsx:90
+#: src/view/com/auth/server-input/index.tsx:91
msgid "Bluesky"
msgstr "Bluesky"
-#: src/view/com/auth/server-input/index.tsx:150
+#: src/view/com/auth/server-input/index.tsx:154
msgid "Bluesky is an open network where you can choose your hosting provider. Custom hosting is now available in beta for developers."
-msgstr ""
+msgstr "Bluesky є відкритою мережею, де ви можете обрати свого хостинг-провайдера. Власний хостинг тепер доступний в бета-версії для розробників."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:80
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:80
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:82
msgid "Bluesky is flexible."
msgstr "Bluesky гнучкий."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:69
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:69
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:71
msgid "Bluesky is open."
msgstr "Bluesky відкритий."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:56
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:56
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:58
msgid "Bluesky is public."
msgstr "Bluesky публічний."
#: src/view/com/modals/Waitlist.tsx:70
-msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
-msgstr "Bluesky використовує систему запрошень для створення здоровішої спільноти. Якщо Ви не знаєте когось хто має запрошення, ви можете записатися до черги очікування і ми скоро надішлемо вам код запрошення."
+#~ msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
+#~ msgstr ""
-#: src/view/screens/Moderation.tsx:226
+#: src/screens/Moderation/index.tsx:533
msgid "Bluesky will not show your profile and posts to logged-out users. Other apps may not honor this request. This does not make your account private."
msgstr "Bluesky не буде показувати ваш профіль і повідомлення відвідувачам без облікового запису. Інші застосунки можуть не слідувати цьому запиту. Це не робить ваш обліковий запис приватним."
#: src/view/com/modals/ServerInput.tsx:78
#~ msgid "Bluesky.Social"
-#~ msgstr "Bluesky.Social"
+#~ msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:53
+msgid "Blur images"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:51
+msgid "Blur images and filter from feeds"
+msgstr ""
#: src/screens/Onboarding/index.tsx:33
msgid "Books"
-msgstr ""
+msgstr "Книги"
-#: src/view/screens/Settings/index.tsx:859
-msgid "Build version {0} {1}"
-msgstr "Версія {0} {1}"
+#: src/view/screens/Settings/index.tsx:893
+#~ msgid "Build version {0} {1}"
+#~ msgstr "Версія {0} {1}"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:87
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:92
+#: src/view/com/auth/SplashScreen.web.tsx:166
msgid "Business"
msgstr "Організація"
@@ -543,109 +594,119 @@ msgstr "Організація"
#: src/view/com/profile/ProfileSubpageHeader.tsx:157
msgid "by —"
-msgstr ""
+msgstr "від —"
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:100
msgid "by {0}"
+msgstr "від {0}"
+
+#: src/components/LabelingServiceCard/index.tsx:57
+msgid "By {0}"
msgstr ""
#: src/view/com/profile/ProfileSubpageHeader.tsx:161
msgid "by <0/>"
+msgstr "від <0/>"
+
+#: src/screens/Signup/StepInfo/Policies.tsx:74
+msgid "By creating an account you agree to the {els}."
msgstr ""
#: src/view/com/profile/ProfileSubpageHeader.tsx:159
msgid "by you"
-msgstr ""
+msgstr "створено вами"
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:60
-#: src/view/com/util/UserAvatar.tsx:224
-#: src/view/com/util/UserBanner.tsx:40
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:77
msgid "Camera"
msgstr "Камера"
-#: src/view/com/modals/AddAppPasswords.tsx:216
+#: src/view/com/modals/AddAppPasswords.tsx:217
msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long."
msgstr "Може містити лише літери, цифри, пробіли, дефіси та знаки підкреслення, і мати довжину від 4 до 32 символів."
-#: src/components/Prompt.tsx:91
-#: src/view/com/composer/Composer.tsx:300
-#: src/view/com/composer/Composer.tsx:305
+#: src/components/Menu/index.tsx:213
+#: src/components/Prompt.tsx:113
+#: src/components/Prompt.tsx:115
+#: src/components/TagMenu/index.tsx:268
+#: src/view/com/composer/Composer.tsx:317
+#: src/view/com/composer/Composer.tsx:322
#: src/view/com/modals/ChangeEmail.tsx:218
#: src/view/com/modals/ChangeEmail.tsx:220
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
-#: src/view/com/modals/CreateOrEditList.tsx:355
-#: src/view/com/modals/EditImage.tsx:323
-#: src/view/com/modals/EditProfile.tsx:249
+#: src/view/com/modals/ChangeHandle.tsx:154
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
+#: src/view/com/modals/CreateOrEditList.tsx:356
+#: src/view/com/modals/crop-image/CropImage.web.tsx:138
+#: src/view/com/modals/EditImage.tsx:324
+#: src/view/com/modals/EditProfile.tsx:250
#: src/view/com/modals/InAppBrowserConsent.tsx:78
-#: src/view/com/modals/LinkWarning.tsx:87
-#: src/view/com/modals/Repost.tsx:87
+#: src/view/com/modals/InAppBrowserConsent.tsx:80
+#: src/view/com/modals/LinkWarning.tsx:105
+#: src/view/com/modals/LinkWarning.tsx:107
+#: src/view/com/modals/Repost.tsx:88
#: src/view/com/modals/VerifyEmail.tsx:247
#: src/view/com/modals/VerifyEmail.tsx:253
-#: src/view/com/modals/Waitlist.tsx:142
-#: src/view/screens/Search/Search.tsx:693
-#: src/view/shell/desktop/Search.tsx:238
+#: src/view/screens/Search/Search.tsx:718
+#: src/view/shell/desktop/Search.tsx:239
msgid "Cancel"
msgstr "Скасувати"
-#: src/view/com/modals/Confirm.tsx:88
-#: src/view/com/modals/Confirm.tsx:91
-#: src/view/com/modals/CreateOrEditList.tsx:360
-#: src/view/com/modals/DeleteAccount.tsx:156
-#: src/view/com/modals/DeleteAccount.tsx:234
+#: src/view/com/modals/CreateOrEditList.tsx:361
+#: src/view/com/modals/DeleteAccount.tsx:155
+#: src/view/com/modals/DeleteAccount.tsx:233
msgctxt "action"
msgid "Cancel"
-msgstr ""
+msgstr "Скасувати"
-#: src/view/com/modals/DeleteAccount.tsx:152
-#: src/view/com/modals/DeleteAccount.tsx:230
+#: src/view/com/modals/DeleteAccount.tsx:151
+#: src/view/com/modals/DeleteAccount.tsx:229
msgid "Cancel account deletion"
msgstr "Скасувати видалення облікового запису"
-#: src/view/com/modals/AltImage.tsx:123
-#~ msgid "Cancel add image alt text"
-#~ msgstr ""
-
-#: src/view/com/modals/ChangeHandle.tsx:149
+#: src/view/com/modals/ChangeHandle.tsx:150
msgid "Cancel change handle"
-msgstr "Скасувати зміну псевдоніму"
+msgstr "Скасувати зміну псевдоніма"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:134
+#: src/view/com/modals/crop-image/CropImage.web.tsx:135
msgid "Cancel image crop"
msgstr "Скасувати обрізання зображення"
-#: src/view/com/modals/EditProfile.tsx:244
+#: src/view/com/modals/EditProfile.tsx:245
msgid "Cancel profile editing"
-msgstr "Скасувати редагування профілю"
+msgstr "Скасувати зміни профілю"
-#: src/view/com/modals/Repost.tsx:78
+#: src/view/com/modals/Repost.tsx:79
msgid "Cancel quote post"
-msgstr "Скасувати цитування повідомлення"
+msgstr "Скасувати цитування посту"
#: src/view/com/modals/ListAddRemoveUsers.tsx:87
-#: src/view/shell/desktop/Search.tsx:234
+#: src/view/shell/desktop/Search.tsx:235
msgid "Cancel search"
msgstr "Скасувати пошук"
#: src/view/com/modals/Waitlist.tsx:136
-msgid "Cancel waitlist signup"
-msgstr "Скасувати запис у чергу очікування"
+#~ msgid "Cancel waitlist signup"
+#~ msgstr ""
-#: src/view/screens/Settings/index.tsx:334
-msgctxt "action"
+#: src/view/com/modals/LinkWarning.tsx:106
+msgid "Cancels opening the linked website"
+msgstr ""
+
+#: src/view/com/modals/VerifyEmail.tsx:152
msgid "Change"
msgstr ""
-#: src/view/screens/Settings.tsx:306
-#~ msgid "Change"
-#~ msgstr "Змінити"
+#: src/view/screens/Settings/index.tsx:353
+msgctxt "action"
+msgid "Change"
+msgstr "Змінити"
-#: src/view/screens/Settings/index.tsx:696
+#: src/view/screens/Settings/index.tsx:716
msgid "Change handle"
msgstr "Змінити псевдонім"
-#: src/view/com/modals/ChangeHandle.tsx:161
-#: src/view/screens/Settings/index.tsx:705
+#: src/view/com/modals/ChangeHandle.tsx:162
+#: src/view/screens/Settings/index.tsx:727
msgid "Change Handle"
msgstr "Змінити псевдонім"
@@ -653,21 +714,22 @@ msgstr "Змінити псевдонім"
msgid "Change my email"
msgstr "Змінити адресу електронної пошти"
-#: src/view/screens/Settings/index.tsx:732
+#: src/view/screens/Settings/index.tsx:754
msgid "Change password"
-msgstr ""
+msgstr "Змінити пароль"
-#: src/view/screens/Settings/index.tsx:741
+#: src/view/com/modals/ChangePassword.tsx:141
+#: src/view/screens/Settings/index.tsx:765
msgid "Change Password"
-msgstr ""
+msgstr "Зміна пароля"
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:73
msgid "Change post language to {0}"
-msgstr ""
+msgstr "Змінити мову поста на {0}"
#: src/view/screens/Settings/index.tsx:733
-msgid "Change your Bluesky password"
-msgstr ""
+#~ msgid "Change your Bluesky password"
+#~ msgstr "Змінити ваш пароль Bluesky"
#: src/view/com/modals/ChangeEmail.tsx:109
msgid "Change Your Email"
@@ -676,7 +738,7 @@ msgstr "Змінити адресу електронної пошти"
#: src/screens/Deactivated.tsx:72
#: src/screens/Deactivated.tsx:76
msgid "Check my status"
-msgstr ""
+msgstr "Перевірити мій статус"
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:121
msgid "Check out some recommended feeds. Tap + to add them to your list of pinned feeds."
@@ -684,229 +746,280 @@ msgstr "Подивіться на деякі з рекомендованих с
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:185
msgid "Check out some recommended users. Follow them to see similar users."
-msgstr "Подивіться на деяких рекомендованих користувачів. Підпишіться на них щоб бачити схожих користувачів."
+msgstr "Ознайомтеся з деякими рекомендованими користувачами. Слідкуйте за ними, щоб побачити дописи від подібних користувачів."
-#: src/view/com/modals/DeleteAccount.tsx:169
+#: src/view/com/modals/DeleteAccount.tsx:168
msgid "Check your inbox for an email with the confirmation code to enter below:"
-msgstr "Пошукайте у вашій поштовій скриньці лист із кодом, щоб ввести нижче:"
+msgstr "Перевірте свою поштову скриньку на наявність електронного листа з кодом підтвердження та введіть його нижче:"
#: src/view/com/modals/Threadgate.tsx:72
msgid "Choose \"Everybody\" or \"Nobody\""
msgstr "Виберіть \"Усі\" або \"Ніхто\""
#: src/view/screens/Settings/index.tsx:697
-msgid "Choose a new Bluesky username or create"
-msgstr ""
+#~ msgid "Choose a new Bluesky username or create"
+#~ msgstr "Оберіть або створіть своє ім'я користувача"
#: src/view/com/auth/server-input/index.tsx:79
msgid "Choose Service"
msgstr "Оберіть хостинг-провайдера"
-#: src/screens/Onboarding/StepFinished.tsx:135
+#: src/screens/Onboarding/StepFinished.tsx:139
msgid "Choose the algorithms that power your custom feeds."
-msgstr ""
+msgstr "Оберіть алгоритми, що наповнюватимуть ваші стрічки."
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:83
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:83
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:85
msgid "Choose the algorithms that power your experience with custom feeds."
msgstr "Автори стрічок можуть обирати будь-які алгоритми для формування стрічки саме для вас."
-#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:65
-#~ msgid "Choose your"
-#~ msgstr ""
-
#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:103
#~ msgid "Choose your algorithmic feeds"
#~ msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:103
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:104
msgid "Choose your main feeds"
-msgstr ""
+msgstr "Виберіть ваші основні стрічки"
-#: src/view/com/auth/create/Step1.tsx:215
+#: src/screens/Signup/StepInfo/index.tsx:112
msgid "Choose your password"
msgstr "Вкажіть пароль"
-#: src/view/screens/Settings/index.tsx:834
-#: src/view/screens/Settings/index.tsx:835
+#: src/view/screens/Settings/index.tsx:868
msgid "Clear all legacy storage data"
msgstr ""
-#: src/view/screens/Settings/index.tsx:837
+#: src/view/screens/Settings/index.tsx:871
msgid "Clear all legacy storage data (restart after this)"
msgstr ""
-#: src/view/screens/Settings/index.tsx:846
-#: src/view/screens/Settings/index.tsx:847
+#: src/view/screens/Settings/index.tsx:880
msgid "Clear all storage data"
msgstr ""
-#: src/view/screens/Settings/index.tsx:849
+#: src/view/screens/Settings/index.tsx:883
msgid "Clear all storage data (restart after this)"
msgstr ""
#: src/view/com/util/forms/SearchInput.tsx:88
-#: src/view/screens/Search/Search.tsx:674
+#: src/view/screens/Search/Search.tsx:699
msgid "Clear search query"
msgstr "Очистити пошуковий запит"
+#: src/view/screens/Settings/index.tsx:869
+msgid "Clears all legacy storage data"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:881
+msgid "Clears all storage data"
+msgstr ""
+
#: src/view/screens/Support.tsx:40
msgid "click here"
-msgstr ""
+msgstr "натисніть тут"
+
+#: src/components/TagMenu/index.web.tsx:138
+msgid "Click here to open tag menu for {tag}"
+msgstr "Натисніть тут, щоб відкрити меню тегів для {tag}"
+
+#: src/components/RichText.tsx:192
+msgid "Click here to open tag menu for #{tag}"
+msgstr "Натисніть тут, щоб відкрити меню тегів для #{tag}"
#: src/screens/Onboarding/index.tsx:35
msgid "Climate"
-msgstr ""
+msgstr "Клімат"
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
msgid "Close"
-msgstr ""
+msgstr "Закрити"
-#: src/components/Dialog/index.web.tsx:78
+#: src/components/Dialog/index.web.tsx:106
+#: src/components/Dialog/index.web.tsx:218
msgid "Close active dialog"
-msgstr ""
+msgstr "Закрити діалогове вікно"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:38
+#: src/screens/Login/PasswordUpdatedForm.tsx:38
msgid "Close alert"
msgstr "Закрити сповіщення"
-#: src/view/com/util/BottomSheetCustomBackdrop.tsx:33
+#: src/view/com/util/BottomSheetCustomBackdrop.tsx:36
msgid "Close bottom drawer"
msgstr "Закрити нижнє меню"
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:26
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:36
msgid "Close image"
msgstr "Закрити зображення"
-#: src/view/com/lightbox/Lightbox.web.tsx:119
+#: src/view/com/lightbox/Lightbox.web.tsx:129
msgid "Close image viewer"
msgstr "Закрити перегляд зображення"
-#: src/view/shell/index.web.tsx:49
+#: src/view/shell/index.web.tsx:55
msgid "Close navigation footer"
msgstr "Закрити панель навігації"
-#: src/view/shell/index.web.tsx:50
+#: src/components/Menu/index.tsx:207
+#: src/components/TagMenu/index.tsx:262
+msgid "Close this dialog"
+msgstr "Закрити діалогове вікно"
+
+#: src/view/shell/index.web.tsx:56
msgid "Closes bottom navigation bar"
-msgstr ""
+msgstr "Закриває нижню панель навігації"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:39
+#: src/screens/Login/PasswordUpdatedForm.tsx:39
msgid "Closes password update alert"
-msgstr ""
+msgstr "Закриває сповіщення про оновлення пароля"
-#: src/view/com/composer/Composer.tsx:302
+#: src/view/com/composer/Composer.tsx:319
msgid "Closes post composer and discards post draft"
-msgstr ""
+msgstr "Закриває редактор постів і видаляє чернетку"
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:27
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:37
msgid "Closes viewer for header image"
-msgstr ""
+msgstr "Закриває перегляд зображення"
-#: src/view/com/notifications/FeedItem.tsx:317
+#: src/view/com/notifications/FeedItem.tsx:321
msgid "Collapses list of users for a given notification"
-msgstr ""
+msgstr "Згортає список користувачів для даного сповіщення"
#: src/screens/Onboarding/index.tsx:41
msgid "Comedy"
-msgstr ""
+msgstr "Комедія"
#: src/screens/Onboarding/index.tsx:27
msgid "Comics"
-msgstr ""
+msgstr "Комікси"
-#: src/Navigation.tsx:227
+#: src/Navigation.tsx:241
#: src/view/screens/CommunityGuidelines.tsx:32
msgid "Community Guidelines"
msgstr "Правила спільноти"
-#: src/screens/Onboarding/StepFinished.tsx:148
+#: src/screens/Onboarding/StepFinished.tsx:152
msgid "Complete onboarding and start using your account"
-msgstr ""
+msgstr "Завершіть ознайомлення та розпочніть користуватися вашим обліковим записом"
-#: src/view/com/composer/Composer.tsx:417
+#: src/screens/Signup/index.tsx:154
+msgid "Complete the challenge"
+msgstr "Виконайте завдання"
+
+#: src/view/com/composer/Composer.tsx:438
msgid "Compose posts up to {MAX_GRAPHEME_LENGTH} characters in length"
-msgstr ""
+msgstr "Створюйте пости до {MAX_GRAPHEME_LENGTH} символів у довжину"
#: src/view/com/composer/Prompt.tsx:24
msgid "Compose reply"
msgstr "Відповісти"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:67
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:81
msgid "Configure content filtering setting for category: {0}"
+msgstr "Налаштувати фільтрування вмісту для категорій: {0}"
+
+#: src/components/moderation/LabelPreference.tsx:81
+msgid "Configure content filtering setting for category: {name}"
msgstr ""
-#: src/components/Prompt.tsx:113
-#: src/view/com/modals/AppealLabel.tsx:98
+#: src/components/moderation/LabelPreference.tsx:244
+msgid "Configured in <0>moderation settings0>."
+msgstr ""
+
+#: src/components/Prompt.tsx:153
+#: src/components/Prompt.tsx:156
#: src/view/com/modals/SelfLabel.tsx:154
#: src/view/com/modals/VerifyEmail.tsx:231
#: src/view/com/modals/VerifyEmail.tsx:233
-#: src/view/screens/PreferencesHomeFeed.tsx:308
+#: src/view/screens/PreferencesFollowingFeed.tsx:308
#: src/view/screens/PreferencesThreads.tsx:159
msgid "Confirm"
msgstr "Підтвердити"
#: src/view/com/modals/Confirm.tsx:75
#: src/view/com/modals/Confirm.tsx:78
-msgctxt "action"
-msgid "Confirm"
-msgstr ""
+#~ msgctxt "action"
+#~ msgid "Confirm"
+#~ msgstr "Підтвердити"
#: src/view/com/modals/ChangeEmail.tsx:193
#: src/view/com/modals/ChangeEmail.tsx:195
msgid "Confirm Change"
msgstr "Підтвердити"
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:34
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:35
msgid "Confirm content language settings"
-msgstr "Підтвердити перелік мов"
+msgstr "Підтвердити налаштування мови вмісту"
-#: src/view/com/modals/DeleteAccount.tsx:220
+#: src/view/com/modals/DeleteAccount.tsx:219
msgid "Confirm delete account"
msgstr "Підтвердити видалення облікового запису"
#: src/view/com/modals/ContentFilteringSettings.tsx:156
-msgid "Confirm your age to enable adult content."
+#~ msgid "Confirm your age to enable adult content."
+#~ msgstr "Підтвердьте свій вік, щоб дозволити вміст для дорослих."
+
+#: src/screens/Moderation/index.tsx:301
+msgid "Confirm your age:"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:292
+msgid "Confirm your birthdate"
msgstr ""
#: src/view/com/modals/ChangeEmail.tsx:157
-#: src/view/com/modals/DeleteAccount.tsx:182
+#: src/view/com/modals/DeleteAccount.tsx:175
+#: src/view/com/modals/DeleteAccount.tsx:181
#: src/view/com/modals/VerifyEmail.tsx:165
msgid "Confirmation code"
msgstr "Код підтвердження"
#: src/view/com/modals/Waitlist.tsx:120
-msgid "Confirms signing up {email} to the waitlist"
-msgstr ""
+#~ msgid "Confirms signing up {email} to the waitlist"
+#~ msgstr ""
-#: src/view/com/auth/create/CreateAccount.tsx:182
-#: src/view/com/auth/login/LoginForm.tsx:278
+#: src/screens/Login/LoginForm.tsx:248
msgid "Connecting..."
msgstr "З’єднання..."
-#: src/view/com/auth/create/CreateAccount.tsx:202
+#: src/screens/Signup/index.tsx:219
msgid "Contact support"
+msgstr "Служба підтримки"
+
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "content"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:18
+msgid "Content Blocked"
msgstr ""
-#: src/view/screens/Moderation.tsx:81
-msgid "Content filtering"
-msgstr "Фільтрування вмісту"
+#: src/view/screens/Moderation.tsx:83
+#~ msgid "Content filtering"
+#~ msgstr "Фільтрування вмісту"
#: src/view/com/modals/ContentFilteringSettings.tsx:44
-msgid "Content Filtering"
-msgstr "Фільтрування вмісту"
+#~ msgid "Content Filtering"
+#~ msgstr "Фільтрування вмісту"
+
+#: src/screens/Moderation/index.tsx:285
+msgid "Content filters"
+msgstr ""
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74
#: src/view/screens/LanguageSettings.tsx:278
msgid "Content Languages"
msgstr "Мови"
-#: src/view/com/modals/ModerationDetails.tsx:65
+#: src/components/moderation/ModerationDetailsDialog.tsx:75
+#: src/lib/moderation/useModerationCauseDescription.ts:75
msgid "Content Not Available"
-msgstr ""
+msgstr "Вміст недоступний"
-#: src/view/com/modals/ModerationDetails.tsx:33
-#: src/view/com/util/moderation/ScreenHider.tsx:78
+#: src/components/moderation/ModerationDetailsDialog.tsx:46
+#: src/components/moderation/ScreenHider.tsx:99
+#: src/lib/moderation/useGlobalLabelStrings.ts:22
+#: src/lib/moderation/useModerationCauseDescription.ts:38
msgid "Content Warning"
msgstr "Попередження про вміст"
@@ -914,146 +1027,169 @@ msgstr "Попередження про вміст"
msgid "Content warnings"
msgstr "Попередження про вміст"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:170
-#: src/screens/Onboarding/StepFollowingFeed.tsx:153
-#: src/screens/Onboarding/StepInterests/index.tsx:248
-#: src/screens/Onboarding/StepModeration/index.tsx:118
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:108
+#: src/components/Menu/index.web.tsx:84
+msgid "Context menu backdrop, click to close the menu."
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:161
+#: src/screens/Onboarding/StepFollowingFeed.tsx:154
+#: src/screens/Onboarding/StepInterests/index.tsx:252
+#: src/screens/Onboarding/StepModeration/index.tsx:103
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:118
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:96
msgid "Continue"
-msgstr "Продовжити"
+msgstr "Далі"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:150
-#: src/screens/Onboarding/StepInterests/index.tsx:245
-#: src/screens/Onboarding/StepModeration/index.tsx:115
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:105
-msgid "Continue to next step"
+#: src/components/AccountList.tsx:108
+msgid "Continue as {0} (currently signed in)"
msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:167
+#: src/screens/Onboarding/StepFollowingFeed.tsx:151
+#: src/screens/Onboarding/StepInterests/index.tsx:249
+#: src/screens/Onboarding/StepModeration/index.tsx:100
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:115
+#: src/screens/Signup/index.tsx:198
+msgid "Continue to next step"
+msgstr "Перейти до наступного кроку"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:158
msgid "Continue to the next step"
-msgstr ""
+msgstr "Перейти до наступного кроку"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:191
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:199
msgid "Continue to the next step without following any accounts"
-msgstr ""
+msgstr "Перейдіть до наступного кроку, ні на кого не підписуючись"
#: src/screens/Onboarding/index.tsx:44
msgid "Cooking"
-msgstr ""
+msgstr "Кухарство"
-#: src/view/com/modals/AddAppPasswords.tsx:195
-#: src/view/com/modals/InviteCodes.tsx:182
+#: src/view/com/modals/AddAppPasswords.tsx:196
+#: src/view/com/modals/InviteCodes.tsx:183
msgid "Copied"
msgstr "Скопійовано"
-#: src/view/screens/Settings/index.tsx:241
+#: src/view/screens/Settings/index.tsx:251
msgid "Copied build version to clipboard"
-msgstr ""
+msgstr "Версію збірки скопійовано до буфера обміну"
-#: src/view/com/modals/AddAppPasswords.tsx:76
-#: src/view/com/modals/InviteCodes.tsx:152
-#: src/view/com/util/forms/PostDropdownBtn.tsx:112
+#: src/view/com/modals/AddAppPasswords.tsx:77
+#: src/view/com/modals/ChangeHandle.tsx:326
+#: src/view/com/modals/InviteCodes.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:158
msgid "Copied to clipboard"
-msgstr ""
+msgstr "Скопійовано"
-#: src/view/com/modals/AddAppPasswords.tsx:189
+#: src/view/com/modals/AddAppPasswords.tsx:190
msgid "Copies app password"
-msgstr ""
+msgstr "Копіює пароль застосунку"
-#: src/view/com/modals/AddAppPasswords.tsx:188
+#: src/view/com/modals/AddAppPasswords.tsx:189
msgid "Copy"
msgstr "Скопіювати"
-#: src/view/screens/ProfileList.tsx:417
+#: src/view/com/modals/ChangeHandle.tsx:480
+msgid "Copy {0}"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:388
msgid "Copy link to list"
-msgstr "Скопіювати посилання"
+msgstr "Копіювати посилання на список"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
msgid "Copy link to post"
-msgstr "Скопіювати посилання"
+msgstr "Копіювати посилання на пост"
-#: src/view/com/profile/ProfileHeader.tsx:294
-msgid "Copy link to profile"
-msgstr "Скопіювати посилання"
+#: src/view/com/profile/ProfileHeader.tsx:295
+#~ msgid "Copy link to profile"
+#~ msgstr "Копіювати посилання на профіль"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:139
+#: src/view/com/util/forms/PostDropdownBtn.tsx:220
+#: src/view/com/util/forms/PostDropdownBtn.tsx:222
msgid "Copy post text"
-msgstr "Скопіювати текст"
+msgstr "Копіювати текст повідомлення"
-#: src/Navigation.tsx:232
+#: src/Navigation.tsx:246
#: src/view/screens/CopyrightPolicy.tsx:29
msgid "Copyright Policy"
msgstr "Політика захисту авторського права"
-#: src/view/screens/ProfileFeed.tsx:96
+#: src/view/screens/ProfileFeed.tsx:103
msgid "Could not load feed"
msgstr "Не вдалося завантажити стрічку"
-#: src/view/screens/ProfileList.tsx:888
+#: src/view/screens/ProfileList.tsx:907
msgid "Could not load list"
msgstr "Не вдалося завантажити список"
#: src/view/com/auth/create/Step2.tsx:91
-msgid "Country"
-msgstr ""
+#~ msgid "Country"
+#~ msgstr ""
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:62
-#: src/view/com/auth/SplashScreen.tsx:46
-#: src/view/com/auth/SplashScreen.web.tsx:77
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:65
+#: src/view/com/auth/SplashScreen.tsx:75
+#: src/view/com/auth/SplashScreen.web.tsx:104
msgid "Create a new account"
msgstr "Створити новий обліковий запис"
-#: src/view/screens/Settings/index.tsx:384
+#: src/view/screens/Settings/index.tsx:403
msgid "Create a new Bluesky account"
-msgstr ""
+msgstr "Створити новий обліковий запис Bluesky"
-#: src/view/com/auth/create/CreateAccount.tsx:122
+#: src/screens/Signup/index.tsx:129
msgid "Create Account"
msgstr "Створити обліковий запис"
-#: src/view/com/modals/AddAppPasswords.tsx:226
+#: src/view/com/modals/AddAppPasswords.tsx:227
msgid "Create App Password"
-msgstr ""
+msgstr "Створити пароль застосунку"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:54
-#: src/view/com/auth/SplashScreen.tsx:43
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:55
+#: src/view/com/auth/SplashScreen.tsx:66
+#: src/view/com/auth/SplashScreen.web.tsx:95
msgid "Create new account"
msgstr "Створити новий обліковий запис"
-#: src/view/screens/AppPasswords.tsx:249
+#: src/components/ReportDialog/SelectReportOptionView.tsx:93
+msgid "Create report for {0}"
+msgstr ""
+
+#: src/view/screens/AppPasswords.tsx:246
msgid "Created {0}"
msgstr "Створено: {0}"
#: src/view/screens/ProfileFeed.tsx:616
-msgid "Created by <0/>"
-msgstr ""
+#~ msgid "Created by <0/>"
+#~ msgstr "Створено <0/>"
#: src/view/screens/ProfileFeed.tsx:614
-msgid "Created by you"
-msgstr ""
+#~ msgid "Created by you"
+#~ msgstr "Створено вами"
-#: src/view/com/composer/Composer.tsx:448
+#: src/view/com/composer/Composer.tsx:469
msgid "Creates a card with a thumbnail. The card links to {url}"
-msgstr ""
+msgstr "Створює картку з мініатюрою. Посилання картки: {url}"
#: src/screens/Onboarding/index.tsx:29
msgid "Culture"
-msgstr ""
+msgstr "Культура"
-#: src/view/com/auth/server-input/index.tsx:95
-#: src/view/com/auth/server-input/index.tsx:96
+#: src/view/com/auth/server-input/index.tsx:97
+#: src/view/com/auth/server-input/index.tsx:99
msgid "Custom"
-msgstr ""
+msgstr "Користувацький"
-#: src/view/com/modals/ChangeHandle.tsx:389
+#: src/view/com/modals/ChangeHandle.tsx:388
msgid "Custom domain"
msgstr "Власний домен"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:107
+#: src/view/screens/Feeds.tsx:692
msgid "Custom feeds built by the community bring you new experiences and help you find the content you love."
-msgstr ""
+msgstr "Кастомні стрічки, створені спільнотою, подарують вам нові враження та допоможуть знайти контент, який ви любите."
#: src/view/screens/PreferencesExternalEmbeds.tsx:55
msgid "Customize media from external sites."
@@ -1061,291 +1197,353 @@ msgstr "Налаштування медіа зі сторонніх вебсай
#: src/view/screens/Settings.tsx:687
#~ msgid "Danger Zone"
-#~ msgstr "Небезпечна зона"
+#~ msgstr ""
-#: src/view/screens/Settings/index.tsx:485
-#: src/view/screens/Settings/index.tsx:511
+#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:530
msgid "Dark"
-msgstr ""
+msgstr "Темна"
#: src/view/screens/Debug.tsx:63
msgid "Dark mode"
-msgstr ""
+msgstr "Темний режим"
-#: src/view/screens/Settings/index.tsx:498
+#: src/view/screens/Settings/index.tsx:517
msgid "Dark Theme"
+msgstr "Темна тема"
+
+#: src/screens/Signup/StepInfo/index.tsx:132
+msgid "Date of birth"
msgstr ""
-#: src/Navigation.tsx:204
-#~ msgid "Debug"
-#~ msgstr ""
+#: src/view/screens/Settings/index.tsx:841
+msgid "Debug Moderation"
+msgstr ""
#: src/view/screens/Debug.tsx:83
msgid "Debug panel"
+msgstr "Панель налагодження"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:319
+#: src/view/screens/AppPasswords.tsx:268
+#: src/view/screens/ProfileList.tsx:613
+msgid "Delete"
msgstr ""
-#: src/view/screens/Settings/index.tsx:772
+#: src/view/screens/Settings/index.tsx:796
msgid "Delete account"
msgstr "Видалити обліковий запис"
-#: src/view/com/modals/DeleteAccount.tsx:87
+#: src/view/com/modals/DeleteAccount.tsx:86
msgid "Delete Account"
msgstr "Видалити обліковий запис"
-#: src/view/screens/AppPasswords.tsx:222
-#: src/view/screens/AppPasswords.tsx:242
+#: src/view/screens/AppPasswords.tsx:239
msgid "Delete app password"
msgstr "Видалити пароль для застосунку"
-#: src/view/screens/ProfileList.tsx:363
-#: src/view/screens/ProfileList.tsx:444
+#: src/view/screens/AppPasswords.tsx:263
+msgid "Delete app password?"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:415
msgid "Delete List"
msgstr "Видалити список"
-#: src/view/com/modals/DeleteAccount.tsx:223
+#: src/view/com/modals/DeleteAccount.tsx:222
msgid "Delete my account"
msgstr "Видалити мій обліковий запис"
#: src/view/screens/Settings.tsx:706
#~ msgid "Delete my account…"
-#~ msgstr "Видалити мій обліковий запис…"
+#~ msgstr ""
-#: src/view/screens/Settings/index.tsx:784
+#: src/view/screens/Settings/index.tsx:808
msgid "Delete My Account…"
-msgstr ""
+msgstr "Видалити мій обліковий запис..."
-#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:302
+#: src/view/com/util/forms/PostDropdownBtn.tsx:304
msgid "Delete post"
msgstr "Видалити пост"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:232
+#: src/view/screens/ProfileList.tsx:608
+msgid "Delete this list?"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:314
msgid "Delete this post?"
msgstr "Видалити цей пост?"
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:69
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:64
msgid "Deleted"
-msgstr ""
+msgstr "Видалено"
-#: src/view/com/post-thread/PostThread.tsx:259
+#: src/view/com/post-thread/PostThread.tsx:305
msgid "Deleted post."
msgstr "Видалений пост."
-#: src/view/com/modals/CreateOrEditList.tsx:300
-#: src/view/com/modals/CreateOrEditList.tsx:321
-#: src/view/com/modals/EditProfile.tsx:198
-#: src/view/com/modals/EditProfile.tsx:210
+#: src/view/com/modals/CreateOrEditList.tsx:301
+#: src/view/com/modals/CreateOrEditList.tsx:322
+#: src/view/com/modals/EditProfile.tsx:199
+#: src/view/com/modals/EditProfile.tsx:211
msgid "Description"
msgstr "Опис"
-#: src/view/com/auth/create/Step1.tsx:96
-#~ msgid "Dev Server"
-#~ msgstr ""
-
#: src/view/screens/Settings.tsx:760
#~ msgid "Developer Tools"
-#~ msgstr "Інструменти розробника"
+#~ msgstr ""
-#: src/view/com/composer/Composer.tsx:211
+#: src/view/com/composer/Composer.tsx:218
msgid "Did you want to say anything?"
msgstr "Порожній пост. Ви хотіли щось написати?"
-#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:523
msgid "Dim"
+msgstr "Тьмяний"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:32
+#: src/lib/moderation/useLabelBehaviorDescription.ts:42
+#: src/lib/moderation/useLabelBehaviorDescription.ts:68
+#: src/screens/Moderation/index.tsx:341
+msgid "Disabled"
msgstr ""
-#: src/view/com/composer/Composer.tsx:144
+#: src/view/com/composer/Composer.tsx:511
msgid "Discard"
msgstr "Видалити"
-#: src/view/com/composer/Composer.tsx:138
-msgid "Discard draft"
-msgstr "Відкинути чернетку"
+#: src/view/com/composer/Composer.tsx:145
+#~ msgid "Discard draft"
+#~ msgstr "Відкинути чернетку"
+
+#: src/view/com/composer/Composer.tsx:508
+msgid "Discard draft?"
+msgstr ""
-#: src/view/screens/Moderation.tsx:207
+#: src/screens/Moderation/index.tsx:518
+#: src/screens/Moderation/index.tsx:522
msgid "Discourage apps from showing my account to logged-out users"
msgstr "Попросити застосунки не показувати мій обліковий запис без входу"
#: src/view/com/posts/FollowingEmptyState.tsx:74
#: src/view/com/posts/FollowingEndOfFeed.tsx:75
msgid "Discover new custom feeds"
-msgstr ""
+msgstr "Відкрийте для себе нові стрічки"
#: src/view/screens/Feeds.tsx:473
-msgid "Discover new feeds"
+#~ msgid "Discover new feeds"
+#~ msgstr ""
+
+#: src/view/screens/Feeds.tsx:689
+msgid "Discover New Feeds"
msgstr "Відкрийте для себе нові стрічки"
-#: src/view/com/modals/EditProfile.tsx:192
+#: src/view/com/modals/EditProfile.tsx:193
msgid "Display name"
msgstr "Ім'я"
-#: src/view/com/modals/EditProfile.tsx:180
+#: src/view/com/modals/EditProfile.tsx:181
msgid "Display Name"
msgstr "Ім'я"
-#: src/view/com/modals/ChangeHandle.tsx:487
-msgid "Domain verified!"
-msgstr "Домен перевірено!"
+#: src/view/com/modals/ChangeHandle.tsx:397
+msgid "DNS Panel"
+msgstr ""
-#: src/view/com/auth/create/Step1.tsx:166
-msgid "Don't have an invite code?"
+#: src/lib/moderation/useGlobalLabelStrings.ts:39
+msgid "Does not include nudity."
msgstr ""
-#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86
-#: src/view/com/modals/EditImage.tsx:333
-#: src/view/com/modals/ListAddRemoveUsers.tsx:144
-#: src/view/com/modals/SelfLabel.tsx:157
-#: src/view/com/modals/Threadgate.tsx:129
-#: src/view/com/modals/Threadgate.tsx:132
-#: src/view/com/modals/UserAddRemoveLists.tsx:95
-#: src/view/com/modals/UserAddRemoveLists.tsx:98
-#: src/view/screens/PreferencesThreads.tsx:162
-msgctxt "action"
-msgid "Done"
+#: src/screens/Signup/StepHandle.tsx:104
+msgid "Doesn't begin or end with a hyphen"
msgstr ""
-#: src/view/com/auth/server-input/index.tsx:165
-#: src/view/com/auth/server-input/index.tsx:166
-#: src/view/com/modals/AddAppPasswords.tsx:226
-#: src/view/com/modals/AltImage.tsx:139
-#: src/view/com/modals/ContentFilteringSettings.tsx:88
-#: src/view/com/modals/ContentFilteringSettings.tsx:96
-#: src/view/com/modals/crop-image/CropImage.web.tsx:152
-#: src/view/com/modals/InviteCodes.tsx:80
-#: src/view/com/modals/InviteCodes.tsx:123
-#: src/view/com/modals/ListAddRemoveUsers.tsx:142
-#: src/view/screens/PreferencesHomeFeed.tsx:311
-#: src/view/screens/Settings/ExportCarDialog.tsx:93
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "Domain Value"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:488
+msgid "Domain verified!"
+msgstr "Домен перевірено!"
+
+#: src/view/com/auth/create/Step1.tsx:170
+#~ msgid "Don't have an invite code?"
+#~ msgstr ""
+
+#: src/components/dialogs/BirthDateSettings.tsx:119
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/components/forms/DateField/index.tsx:74
+#: src/components/forms/DateField/index.tsx:80
+#: src/view/com/auth/server-input/index.tsx:169
+#: src/view/com/auth/server-input/index.tsx:170
+#: src/view/com/modals/AddAppPasswords.tsx:227
+#: src/view/com/modals/AltImage.tsx:140
+#: src/view/com/modals/crop-image/CropImage.web.tsx:153
+#: src/view/com/modals/InviteCodes.tsx:81
+#: src/view/com/modals/InviteCodes.tsx:124
+#: src/view/com/modals/ListAddRemoveUsers.tsx:142
+#: src/view/screens/PreferencesFollowingFeed.tsx:311
#: src/view/screens/Settings/ExportCarDialog.tsx:94
+#: src/view/screens/Settings/ExportCarDialog.tsx:96
msgid "Done"
msgstr "Готово"
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:42
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86
+#: src/view/com/modals/EditImage.tsx:334
+#: src/view/com/modals/ListAddRemoveUsers.tsx:144
+#: src/view/com/modals/SelfLabel.tsx:157
+#: src/view/com/modals/Threadgate.tsx:129
+#: src/view/com/modals/Threadgate.tsx:132
+#: src/view/com/modals/UserAddRemoveLists.tsx:95
+#: src/view/com/modals/UserAddRemoveLists.tsx:98
+#: src/view/screens/PreferencesThreads.tsx:162
+msgctxt "action"
+msgid "Done"
+msgstr "Готово"
+
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:43
msgid "Done{extraText}"
msgstr "Готово{extraText}"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:45
-msgid "Double tap to sign in"
-msgstr ""
+#: src/view/com/auth/login/ChooseAccountForm.tsx:46
+#~ msgid "Double tap to sign in"
+#~ msgstr "Двічі натисніть, щоб увійти"
#: src/view/screens/Settings/index.tsx:755
-msgid "Download Bluesky account data (repository)"
-msgstr ""
+#~ msgid "Download Bluesky account data (repository)"
+#~ msgstr "Завантажити дані облікового запису в Bluesky (репозиторій)"
#: src/view/screens/Settings/ExportCarDialog.tsx:59
#: src/view/screens/Settings/ExportCarDialog.tsx:63
msgid "Download CAR file"
-msgstr ""
+msgstr "Завантажити CAR файл"
-#: src/view/com/composer/text-input/TextInput.web.tsx:247
+#: src/view/com/composer/text-input/TextInput.web.tsx:249
msgid "Drop to add images"
-msgstr ""
+msgstr "Перетягніть і відпустіть, щоб додати зображення"
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:111
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:120
msgid "Due to Apple policies, adult content can only be enabled on the web after completing sign up."
+msgstr "Через політику компанії Apple, перегляд вмісту для дорослих можна ввімкнути лише в інтернеті після реєстрації."
+
+#: src/view/com/modals/ChangeHandle.tsx:258
+msgid "e.g. alice"
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:185
+#: src/view/com/modals/EditProfile.tsx:186
msgid "e.g. Alice Roberts"
+msgstr "напр. Тарас Шевченко"
+
+#: src/view/com/modals/ChangeHandle.tsx:380
+msgid "e.g. alice.com"
msgstr ""
-#: src/view/com/modals/EditProfile.tsx:203
+#: src/view/com/modals/EditProfile.tsx:204
msgid "e.g. Artist, dog-lover, and avid reader."
-msgstr ""
+msgstr "напр. Художниця, собачниця та завзята читачка."
-#: src/view/com/modals/CreateOrEditList.tsx:283
-msgid "e.g. Great Posters"
+#: src/lib/moderation/useGlobalLabelStrings.ts:43
+msgid "E.g. artistic nudes."
msgstr ""
#: src/view/com/modals/CreateOrEditList.tsx:284
+msgid "e.g. Great Posters"
+msgstr "напр. Чудові писарі"
+
+#: src/view/com/modals/CreateOrEditList.tsx:285
msgid "e.g. Spammers"
-msgstr ""
+msgstr "напр. Спамери"
-#: src/view/com/modals/CreateOrEditList.tsx:312
+#: src/view/com/modals/CreateOrEditList.tsx:313
msgid "e.g. The posters who never miss."
-msgstr ""
+msgstr "напр. Писарі, що нічого не пропускають."
-#: src/view/com/modals/CreateOrEditList.tsx:313
+#: src/view/com/modals/CreateOrEditList.tsx:314
msgid "e.g. Users that repeatedly reply with ads."
-msgstr ""
+msgstr "напр. Користувачі, що неодноразово відповідали рекламою."
-#: src/view/com/modals/InviteCodes.tsx:96
+#: src/view/com/modals/InviteCodes.tsx:97
msgid "Each code works once. You'll receive more invite codes periodically."
msgstr "Кожен код запрошення працює лише один раз. Час від часу ви будете отримувати нові коди."
#: src/view/com/lists/ListMembers.tsx:149
msgctxt "action"
msgid "Edit"
+msgstr "Редагувати"
+
+#: src/view/com/util/UserAvatar.tsx:299
+#: src/view/com/util/UserBanner.tsx:85
+msgid "Edit avatar"
msgstr ""
#: src/view/com/composer/photos/Gallery.tsx:144
-#: src/view/com/modals/EditImage.tsx:207
+#: src/view/com/modals/EditImage.tsx:208
msgid "Edit image"
msgstr "Редагувати зображення"
-#: src/view/screens/ProfileList.tsx:432
+#: src/view/screens/ProfileList.tsx:403
msgid "Edit list details"
msgstr "Редагувати опис списку"
-#: src/view/com/modals/CreateOrEditList.tsx:250
+#: src/view/com/modals/CreateOrEditList.tsx:251
msgid "Edit Moderation List"
-msgstr ""
+msgstr "Редагування списку"
-#: src/Navigation.tsx:242
+#: src/Navigation.tsx:256
#: src/view/screens/Feeds.tsx:434
#: src/view/screens/SavedFeeds.tsx:84
msgid "Edit My Feeds"
msgstr "Редагувати мої стрічки"
-#: src/view/com/modals/EditProfile.tsx:152
+#: src/view/com/modals/EditProfile.tsx:153
msgid "Edit my profile"
msgstr "Редагувати мій профіль"
-#: src/view/com/profile/ProfileHeader.tsx:417
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:171
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:168
msgid "Edit profile"
msgstr "Редагувати профіль"
-#: src/view/com/profile/ProfileHeader.tsx:422
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:174
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:171
msgid "Edit Profile"
msgstr "Редагувати профіль"
-#: src/view/screens/Feeds.tsx:356
+#: src/view/com/home/HomeHeaderLayout.web.tsx:62
+#: src/view/screens/Feeds.tsx:355
msgid "Edit Saved Feeds"
msgstr "Редагувати збережені стрічки"
-#: src/view/com/modals/CreateOrEditList.tsx:245
+#: src/view/com/modals/CreateOrEditList.tsx:246
msgid "Edit User List"
-msgstr ""
+msgstr "Редагувати список користувачів"
-#: src/view/com/modals/EditProfile.tsx:193
+#: src/view/com/modals/EditProfile.tsx:194
msgid "Edit your display name"
-msgstr ""
+msgstr "Редагувати ваш псевдонім для показу"
-#: src/view/com/modals/EditProfile.tsx:211
+#: src/view/com/modals/EditProfile.tsx:212
msgid "Edit your profile description"
-msgstr ""
+msgstr "Редагувати опис вашого профілю"
#: src/screens/Onboarding/index.tsx:34
msgid "Education"
-msgstr ""
+msgstr "Освіта"
-#: src/view/com/auth/create/Step1.tsx:195
-#: src/view/com/auth/create/Step2.tsx:194
-#: src/view/com/auth/create/Step2.tsx:269
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:156
+#: src/screens/Signup/StepInfo/index.tsx:80
#: src/view/com/modals/ChangeEmail.tsx:141
-#: src/view/com/modals/Waitlist.tsx:88
msgid "Email"
msgstr "Ел. адреса"
-#: src/view/com/auth/create/Step1.tsx:186
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:147
+#: src/screens/Login/ForgotPasswordForm.tsx:99
msgid "Email address"
msgstr "Адреса електронної пошти"
#: src/view/com/modals/ChangeEmail.tsx:56
#: src/view/com/modals/ChangeEmail.tsx:88
msgid "Email updated"
-msgstr ""
+msgstr "Електронну адресу змінено"
#: src/view/com/modals/ChangeEmail.tsx:111
msgid "Email Updated"
@@ -1353,95 +1551,121 @@ msgstr "Ел. адресу оновлено"
#: src/view/com/modals/VerifyEmail.tsx:78
msgid "Email verified"
-msgstr ""
+msgstr "Електронну адресу перевірено"
-#: src/view/screens/Settings/index.tsx:312
+#: src/view/screens/Settings/index.tsx:331
msgid "Email:"
msgstr "Ел. адреса:"
-#: src/view/com/modals/EmbedConsent.tsx:113
+#: src/components/dialogs/EmbedConsent.tsx:101
msgid "Enable {0} only"
msgstr "Увімкнути лише {0}"
-#: src/view/com/modals/ContentFilteringSettings.tsx:167
-msgid "Enable Adult Content"
+#: src/screens/Moderation/index.tsx:329
+msgid "Enable adult content"
msgstr ""
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:76
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:77
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:94
+msgid "Enable Adult Content"
+msgstr "Дозволити вміст для дорослих"
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:79
msgid "Enable adult content in your feeds"
+msgstr "Увімкнути вміст для дорослих у ваших стрічках"
+
+#: src/components/dialogs/EmbedConsent.tsx:82
+#: src/components/dialogs/EmbedConsent.tsx:89
+msgid "Enable external media"
msgstr ""
#: src/view/com/modals/EmbedConsent.tsx:97
-msgid "Enable External Media"
-msgstr "Увімкнути зовнішні медіа"
+#~ msgid "Enable External Media"
+#~ msgstr "Увімкнути зовнішні медіа"
#: src/view/screens/PreferencesExternalEmbeds.tsx:75
msgid "Enable media players for"
-msgstr ""
+msgstr "Увімкнути медіапрогравачі для"
-#: src/view/screens/PreferencesHomeFeed.tsx:147
+#: src/view/screens/PreferencesFollowingFeed.tsx:147
msgid "Enable this setting to only see replies between people you follow."
-msgstr "Увімкніть цей параметр, щоб бачити відповіді тільки між людьми, на яких ви підписані."
+msgstr "Увімкніть цей параметр, щоб бачити відповіді тільки від людей, на яких ви підписані."
-#: src/view/screens/Profile.tsx:455
+#: src/components/dialogs/EmbedConsent.tsx:94
+msgid "Enable this source only"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:339
+msgid "Enabled"
+msgstr ""
+
+#: src/screens/Profile/Sections/Feed.tsx:84
msgid "End of feed"
msgstr "Кінець стрічки"
-#: src/view/com/modals/AddAppPasswords.tsx:166
+#: src/view/com/modals/AddAppPasswords.tsx:167
msgid "Enter a name for this App Password"
+msgstr "Введіть ім'я для цього пароля застосунку"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:139
+msgid "Enter a password"
msgstr ""
+#: src/components/dialogs/MutedWords.tsx:99
+#: src/components/dialogs/MutedWords.tsx:100
+msgid "Enter a word or tag"
+msgstr "Введіть слово або тег"
+
#: src/view/com/modals/VerifyEmail.tsx:105
msgid "Enter Confirmation Code"
-msgstr ""
-
-#: src/view/com/auth/create/Step1.tsx:71
-#~ msgid "Enter the address of your provider:"
-#~ msgstr "Введіть адресу вашого хостинг-провайдера:"
+msgstr "Введіть код підтвердження"
-#: src/view/com/modals/ChangePassword.tsx:151
+#: src/view/com/modals/ChangePassword.tsx:153
msgid "Enter the code you received to change your password."
-msgstr ""
+msgstr "Введіть код, який ви отримали, щоб змінити пароль."
-#: src/view/com/modals/ChangeHandle.tsx:371
+#: src/view/com/modals/ChangeHandle.tsx:370
msgid "Enter the domain you want to use"
msgstr "Введіть домен, який ви хочете використовувати"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:107
+#: src/screens/Login/ForgotPasswordForm.tsx:119
msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password."
msgstr "Введіть адресу електронної пошти, яку ви використовували для створення облікового запису. Ми надішлемо вам код підтвердження, щоб ви могли встановити новий пароль."
-#: src/view/com/auth/create/Step1.tsx:247
-#: src/view/com/modals/BirthDateSettings.tsx:74
+#: src/components/dialogs/BirthDateSettings.tsx:108
msgid "Enter your birth date"
-msgstr ""
+msgstr "Введіть вашу дату народження"
#: src/view/com/modals/Waitlist.tsx:78
-msgid "Enter your email"
-msgstr ""
+#~ msgid "Enter your email"
+#~ msgstr ""
-#: src/view/com/auth/create/Step1.tsx:191
+#: src/screens/Login/ForgotPasswordForm.tsx:105
+#: src/screens/Signup/StepInfo/index.tsx:91
msgid "Enter your email address"
msgstr "Введіть адресу електронної пошти"
#: src/view/com/modals/ChangeEmail.tsx:41
msgid "Enter your new email above"
-msgstr ""
+msgstr "Введіть вашу нову електронну пошту вище"
#: src/view/com/modals/ChangeEmail.tsx:117
msgid "Enter your new email address below."
msgstr "Введіть нову адресу електронної пошти."
#: src/view/com/auth/create/Step2.tsx:188
-msgid "Enter your phone number"
-msgstr ""
+#~ msgid "Enter your phone number"
+#~ msgstr ""
-#: src/view/com/auth/login/Login.tsx:99
+#: src/screens/Login/index.tsx:101
msgid "Enter your username and password"
msgstr "Введіть псевдонім та пароль"
-#: src/view/screens/Search/Search.tsx:109
+#: src/screens/Signup/StepCaptcha/index.tsx:49
+msgid "Error receiving captcha response."
+msgstr "Помилка отримання відповіді Captcha."
+
+#: src/view/screens/Search/Search.tsx:111
msgid "Error:"
msgstr "Помилка:"
@@ -1449,106 +1673,132 @@ msgstr "Помилка:"
msgid "Everybody"
msgstr "Усі"
-#: src/view/com/modals/ChangeHandle.tsx:150
+#: src/lib/moderation/useReportOptions.ts:66
+msgid "Excessive mentions or replies"
+msgstr ""
+
+#: src/view/com/modals/DeleteAccount.tsx:230
+msgid "Exits account deletion process"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:151
msgid "Exits handle change process"
+msgstr "Вихід з процесу зміни псевдоніму користувача"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:136
+msgid "Exits image cropping process"
msgstr ""
-#: src/view/com/lightbox/Lightbox.web.tsx:120
+#: src/view/com/lightbox/Lightbox.web.tsx:130
msgid "Exits image view"
-msgstr ""
+msgstr "Вийти з режиму перегляду"
#: src/view/com/modals/ListAddRemoveUsers.tsx:88
-#: src/view/shell/desktop/Search.tsx:235
+#: src/view/shell/desktop/Search.tsx:236
msgid "Exits inputting search query"
-msgstr ""
+msgstr "Вихід із пошуку"
#: src/view/com/modals/Waitlist.tsx:138
-msgid "Exits signing up for waitlist with {email}"
-msgstr ""
+#~ msgid "Exits signing up for waitlist with {email}"
+#~ msgstr ""
-#: src/view/com/lightbox/Lightbox.web.tsx:163
+#: src/view/com/lightbox/Lightbox.web.tsx:183
msgid "Expand alt text"
-msgstr "Розгорнути альтернативний текст"
+msgstr "Розгорнути опис"
#: src/view/com/composer/ComposerReplyTo.tsx:81
#: src/view/com/composer/ComposerReplyTo.tsx:84
msgid "Expand or collapse the full post you are replying to"
+msgstr "Розгорнути або згорнути весь пост, на який ви відповідаєте"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:47
+msgid "Explicit or potentially disturbing media."
msgstr ""
-#: src/view/screens/Settings/index.tsx:753
-msgid "Export my data"
+#: src/lib/moderation/useGlobalLabelStrings.ts:35
+msgid "Explicit sexual images."
msgstr ""
+#: src/view/screens/Settings/index.tsx:777
+msgid "Export my data"
+msgstr "Експорт моїх даних"
+
#: src/view/screens/Settings/ExportCarDialog.tsx:44
-#: src/view/screens/Settings/index.tsx:764
+#: src/view/screens/Settings/index.tsx:788
msgid "Export My Data"
-msgstr ""
+msgstr "Експорт моїх даних"
-#: src/view/com/modals/EmbedConsent.tsx:64
+#: src/components/dialogs/EmbedConsent.tsx:55
+#: src/components/dialogs/EmbedConsent.tsx:59
msgid "External Media"
msgstr "Зовнішні медіа"
-#: src/view/com/modals/EmbedConsent.tsx:75
+#: src/components/dialogs/EmbedConsent.tsx:71
#: src/view/screens/PreferencesExternalEmbeds.tsx:66
msgid "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."
msgstr "Зовнішні медіа можуть дозволяти вебсайтам збирати інформацію про вас та ваш пристрій. Інформація не надсилається та не запитується, допоки не натиснуто кнопку «Відтворити»."
-#: src/Navigation.tsx:258
+#: src/Navigation.tsx:275
#: src/view/screens/PreferencesExternalEmbeds.tsx:52
-#: src/view/screens/Settings/index.tsx:657
+#: src/view/screens/Settings/index.tsx:677
msgid "External Media Preferences"
msgstr "Налаштування зовнішніх медіа"
-#: src/view/screens/Settings/index.tsx:648
+#: src/view/screens/Settings/index.tsx:668
msgid "External media settings"
-msgstr ""
+msgstr "Налаштування зовнішніх медіа"
-#: src/view/com/modals/AddAppPasswords.tsx:115
-#: src/view/com/modals/AddAppPasswords.tsx:119
+#: src/view/com/modals/AddAppPasswords.tsx:116
+#: src/view/com/modals/AddAppPasswords.tsx:120
msgid "Failed to create app password."
-msgstr ""
+msgstr "Не вдалося створити пароль застосунку."
-#: src/view/com/modals/CreateOrEditList.tsx:206
+#: src/view/com/modals/CreateOrEditList.tsx:207
msgid "Failed to create the list. Check your internet connection and try again."
-msgstr ""
+msgstr "Не вдалося створити список. Перевірте інтернет-з'єднання і спробуйте ще раз."
-#: src/view/com/util/forms/PostDropdownBtn.tsx:88
+#: src/view/com/util/forms/PostDropdownBtn.tsx:125
msgid "Failed to delete post, please try again"
-msgstr ""
+msgstr "Не вдалося видалити пост, спробуйте ще раз"
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:109
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:141
msgid "Failed to load recommended feeds"
msgstr "Не вдалося завантажити рекомендації стрічок"
-#: src/Navigation.tsx:192
-msgid "Feed"
+#: src/view/com/lightbox/Lightbox.tsx:83
+msgid "Failed to save image: {0}"
msgstr ""
-#: src/view/com/feeds/FeedSourceCard.tsx:229
+#: src/Navigation.tsx:196
+msgid "Feed"
+msgstr "Стрічка"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:218
msgid "Feed by {0}"
-msgstr ""
+msgstr "Стрічка від {0}"
-#: src/view/screens/Feeds.tsx:631
+#: src/view/screens/Feeds.tsx:605
msgid "Feed offline"
msgstr "Стрічка не працює"
#: src/view/com/feeds/FeedPage.tsx:143
-msgid "Feed Preferences"
-msgstr "Налаштування стрічки"
+#~ msgid "Feed Preferences"
+#~ msgstr ""
-#: src/view/shell/desktop/RightNav.tsx:69
-#: src/view/shell/Drawer.tsx:311
+#: src/view/shell/desktop/RightNav.tsx:61
+#: src/view/shell/Drawer.tsx:314
msgid "Feedback"
-msgstr "Надіслати відгук"
+msgstr "Зворотний зв'язок"
-#: src/Navigation.tsx:442
-#: src/view/screens/Feeds.tsx:548
-#: src/view/screens/Profile.tsx:184
-#: src/view/shell/bottom-bar/BottomBar.tsx:181
-#: src/view/shell/desktop/LeftNav.tsx:342
-#: src/view/shell/Drawer.tsx:476
-#: src/view/shell/Drawer.tsx:477
+#: src/Navigation.tsx:464
+#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:524
+#: src/view/screens/Profile.tsx:194
+#: src/view/shell/bottom-bar/BottomBar.tsx:191
+#: src/view/shell/desktop/LeftNav.tsx:346
+#: src/view/shell/Drawer.tsx:479
+#: src/view/shell/Drawer.tsx:480
msgid "Feeds"
msgstr "Стрічки"
@@ -1566,37 +1816,49 @@ msgstr "Стрічки створюються користувачами для
#: src/view/screens/SavedFeeds.tsx:156
msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information."
-msgstr "Стрічки - це алгоритми, створені користувачами з деяким досвідом програмування. <0/> для додаткової інформації."
+msgstr "Стрічки – це алгоритми, створені користувачами з деяким досвідом програмування. <0/> для додаткової інформації."
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:70
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:80
msgid "Feeds can be topical as well!"
+msgstr "Стрічки також можуть бути тематичними!"
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "File Contents"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:151
-msgid "Finalizing"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:66
+msgid "Filter from feeds"
msgstr ""
+#: src/screens/Onboarding/StepFinished.tsx:155
+msgid "Finalizing"
+msgstr "Завершення"
+
#: src/view/com/posts/CustomFeedEmptyState.tsx:47
#: src/view/com/posts/FollowingEmptyState.tsx:57
#: src/view/com/posts/FollowingEndOfFeed.tsx:58
msgid "Find accounts to follow"
-msgstr ""
+msgstr "Знайдіть облікові записи для стеження"
-#: src/view/screens/Search/Search.tsx:439
+#: src/view/screens/Search/Search.tsx:442
msgid "Find users on Bluesky"
msgstr "Знайти користувачів у Bluesky"
-#: src/view/screens/Search/Search.tsx:437
+#: src/view/screens/Search/Search.tsx:440
msgid "Find users with the search tool on the right"
-msgstr "Знайти користувачів за допомогою поля пошуку справа вгорі"
+msgstr "Знайдіть користувачів за допомогою інструменту пошуку праворуч"
-#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:155
msgid "Finding similar accounts..."
-msgstr "Пошук схожих користувачів..."
+msgstr "Пошук подібних облікових записів..."
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:111
+msgid "Fine-tune the content you see on your Following feed."
+msgstr "Оберіть, що ви хочете бачити у своїй стрічці підписок."
#: src/view/screens/PreferencesHomeFeed.tsx:111
-msgid "Fine-tune the content you see on your home screen."
-msgstr "Оберіть, що ви хочете бачити у своїй домашній стрічці."
+#~ msgid "Fine-tune the content you see on your home screen."
+#~ msgstr ""
#: src/view/screens/PreferencesThreads.tsx:60
msgid "Fine-tune the discussion threads."
@@ -1604,129 +1866,159 @@ msgstr "Налаштуйте відображення обговорень."
#: src/screens/Onboarding/index.tsx:38
msgid "Fitness"
-msgstr ""
+msgstr "Фітнес"
-#: src/screens/Onboarding/StepFinished.tsx:131
+#: src/screens/Onboarding/StepFinished.tsx:135
msgid "Flexible"
-msgstr ""
+msgstr "Гнучкий"
-#: src/view/com/modals/EditImage.tsx:115
+#: src/view/com/modals/EditImage.tsx:116
msgid "Flip horizontal"
-msgstr ""
+msgstr "Віддзеркалити горизонтально"
-#: src/view/com/modals/EditImage.tsx:120
-#: src/view/com/modals/EditImage.tsx:287
+#: src/view/com/modals/EditImage.tsx:121
+#: src/view/com/modals/EditImage.tsx:288
msgid "Flip vertically"
-msgstr ""
+msgstr "Віддзеркалити вертикально"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:181
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:512
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:189
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:236
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:146
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
msgid "Follow"
msgstr "Підписатися"
-#: src/view/com/profile/FollowButton.tsx:64
+#: src/view/com/profile/FollowButton.tsx:69
msgctxt "action"
msgid "Follow"
-msgstr ""
+msgstr "Підписатись"
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:58
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:122
-#: src/view/com/profile/ProfileHeader.tsx:503
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:221
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:128
msgid "Follow {0}"
+msgstr "Підписатися на {0}"
+
+#: src/view/com/profile/ProfileMenu.tsx:242
+#: src/view/com/profile/ProfileMenu.tsx:253
+msgid "Follow Account"
msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:179
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:187
msgid "Follow All"
-msgstr ""
+msgstr "Підписатися на всіх"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:174
-msgid "Follow selected accounts and continue to the next step"
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:144
+msgid "Follow Back"
msgstr ""
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:174
-#~ msgid "Follow selected accounts and continue to then next step"
-#~ msgstr ""
-
-#: src/view/com/auth/onboarding/RecommendedFollows.tsx:42
-#~ msgid "Follow some"
-#~ msgstr ""
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:182
+msgid "Follow selected accounts and continue to the next step"
+msgstr "Підпишіться на обрані облікові записи і переходьте до наступного кроку"
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:64
msgid "Follow some users to get started. We can recommend you more users based on who you find interesting."
msgstr "Підпишіться на кількох користувачів щоб почати їх читати. Ми зможемо порекомендувати вам більше користувачів, спираючись на те хто вас цікавить."
-#: src/view/com/profile/ProfileCard.tsx:194
+#: src/view/com/profile/ProfileCard.tsx:216
msgid "Followed by {0}"
-msgstr ""
+msgstr "Підписані {0}"
#: src/view/com/modals/Threadgate.tsx:98
msgid "Followed users"
msgstr "Ваші підписки"
-#: src/view/screens/PreferencesHomeFeed.tsx:154
+#: src/view/screens/PreferencesFollowingFeed.tsx:154
msgid "Followed users only"
msgstr "Тільки ваші підписки"
-#: src/view/com/notifications/FeedItem.tsx:166
+#: src/view/com/notifications/FeedItem.tsx:170
msgid "followed you"
-msgstr ""
+msgstr "підписка на вас"
+#: src/view/com/profile/ProfileFollowers.tsx:104
#: src/view/screens/ProfileFollowers.tsx:25
msgid "Followers"
msgstr "Підписники"
-#: src/view/com/profile/ProfileHeader.tsx:624
-#~ msgid "following"
-#~ msgstr "підписок"
-
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:494
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:234
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:149
+#: src/view/com/profile/ProfileFollows.tsx:104
#: src/view/screens/ProfileFollows.tsx:25
msgid "Following"
msgstr "Підписані"
-#: src/view/com/profile/ProfileHeader.tsx:148
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:93
msgid "Following {0}"
+msgstr "Підписання на \"{0}\""
+
+#: src/view/screens/Settings/index.tsx:553
+msgid "Following feed preferences"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:545
+#: src/Navigation.tsx:262
+#: src/view/com/home/HomeHeaderLayout.web.tsx:50
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:84
+#: src/view/screens/PreferencesFollowingFeed.tsx:104
+#: src/view/screens/Settings/index.tsx:562
+msgid "Following Feed Preferences"
+msgstr "Налаштування стрічки підписок"
+
+#: src/screens/Profile/Header/Handle.tsx:24
msgid "Follows you"
msgstr "Підписаний(-на) на вас"
#: src/view/com/profile/ProfileCard.tsx:141
msgid "Follows You"
-msgstr ""
+msgstr "Підписаний(-на) на вас"
#: src/screens/Onboarding/index.tsx:43
msgid "Food"
-msgstr ""
+msgstr "Їжа"
-#: src/view/com/modals/DeleteAccount.tsx:111
+#: src/view/com/modals/DeleteAccount.tsx:110
msgid "For security reasons, we'll need to send a confirmation code to your email address."
msgstr "З міркувань безпеки нам потрібно буде відправити код підтвердження на вашу електронну адресу."
-#: src/view/com/modals/AddAppPasswords.tsx:209
+#: src/view/com/modals/AddAppPasswords.tsx:210
msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one."
msgstr "З міркувань безпеки цей пароль відображається лише один раз. Якщо ви втратите цей пароль, вам потрібно буде згенерувати новий."
-#: src/view/com/auth/login/LoginForm.tsx:241
-msgid "Forgot"
-msgstr "Забули пароль"
+#: src/view/com/auth/login/LoginForm.tsx:244
+#~ msgid "Forgot"
+#~ msgstr "Забули пароль"
-#: src/view/com/auth/login/LoginForm.tsx:238
-msgid "Forgot password"
-msgstr "Забули пароль"
+#: src/view/com/auth/login/LoginForm.tsx:241
+#~ msgid "Forgot password"
+#~ msgstr "Забули пароль"
-#: src/view/com/auth/login/Login.tsx:127
-#: src/view/com/auth/login/Login.tsx:143
+#: src/screens/Login/index.tsx:129
+#: src/screens/Login/index.tsx:144
msgid "Forgot Password"
msgstr "Забули пароль"
-#: src/view/com/posts/FeedItem.tsx:189
+#: src/screens/Login/LoginForm.tsx:201
+msgid "Forgot password?"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:212
+msgid "Forgot?"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:52
+msgid "Frequently Posts Unwanted Content"
+msgstr ""
+
+#: src/screens/Hashtag.tsx:109
+#: src/screens/Hashtag.tsx:149
+msgid "From @{sanitizedAuthor}"
+msgstr "Від @{sanitizedAuthor}"
+
+#: src/view/com/posts/FeedItem.tsx:179
msgctxt "from-feed"
msgid "From <0/>"
-msgstr ""
+msgstr "Зі стрічки \"<0/>\""
#: src/view/com/composer/photos/SelectPhotoBtn.tsx:43
msgid "Gallery"
@@ -1737,108 +2029,144 @@ msgstr "Галерея"
msgid "Get Started"
msgstr "Почати"
-#: src/view/com/auth/LoggedOut.tsx:81
+#: src/lib/moderation/useReportOptions.ts:37
+msgid "Glaring violations of law or terms of service"
+msgstr ""
+
+#: src/components/moderation/ScreenHider.tsx:151
+#: src/components/moderation/ScreenHider.tsx:160
#: src/view/com/auth/LoggedOut.tsx:82
-#: src/view/com/util/moderation/ScreenHider.tsx:123
-#: src/view/shell/desktop/LeftNav.tsx:104
+#: src/view/com/auth/LoggedOut.tsx:83
+#: src/view/screens/NotFound.tsx:55
+#: src/view/screens/ProfileFeed.tsx:112
+#: src/view/screens/ProfileList.tsx:916
+#: src/view/shell/desktop/LeftNav.tsx:108
msgid "Go back"
msgstr "Назад"
-#: src/view/screens/ProfileFeed.tsx:105
-#: src/view/screens/ProfileFeed.tsx:110
-#: src/view/screens/ProfileList.tsx:897
-#: src/view/screens/ProfileList.tsx:902
+#: src/components/Error.tsx:91
+#: src/screens/Profile/ErrorState.tsx:62
+#: src/screens/Profile/ErrorState.tsx:66
+#: src/view/screens/NotFound.tsx:54
+#: src/view/screens/ProfileFeed.tsx:117
+#: src/view/screens/ProfileList.tsx:921
msgid "Go Back"
msgstr "Назад"
-#: src/screens/Onboarding/Layout.tsx:104
-#: src/screens/Onboarding/Layout.tsx:193
+#: src/components/ReportDialog/SelectReportOptionView.tsx:73
+#: src/components/ReportDialog/SubmitView.tsx:104
+#: src/screens/Onboarding/Layout.tsx:102
+#: src/screens/Onboarding/Layout.tsx:191
+#: src/screens/Signup/index.tsx:173
msgid "Go back to previous step"
+msgstr "Повернутися до попереднього кроку"
+
+#: src/view/screens/NotFound.tsx:55
+msgid "Go home"
msgstr ""
-#: src/view/screens/Search/Search.tsx:724
-#: src/view/shell/desktop/Search.tsx:262
-msgid "Go to @{queryMaybeHandle}"
+#: src/view/screens/NotFound.tsx:54
+msgid "Go Home"
msgstr ""
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:189
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:218
-#: src/view/com/auth/login/LoginForm.tsx:288
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:195
-#: src/view/com/modals/ChangePassword.tsx:165
+#: src/view/screens/Search/Search.tsx:749
+#: src/view/shell/desktop/Search.tsx:263
+msgid "Go to @{queryMaybeHandle}"
+msgstr "Перейти до @{queryMaybeHandle}"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:172
+#: src/view/com/modals/ChangePassword.tsx:167
msgid "Go to next"
msgstr "Далі"
-#: src/view/com/modals/ChangeHandle.tsx:265
+#: src/lib/moderation/useGlobalLabelStrings.ts:46
+msgid "Graphic Media"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:266
msgid "Handle"
msgstr "Псевдонім"
-#: src/view/com/auth/create/CreateAccount.tsx:197
-msgid "Having trouble?"
+#: src/lib/moderation/useReportOptions.ts:32
+msgid "Harassment, trolling, or intolerance"
msgstr ""
-#: src/view/shell/desktop/RightNav.tsx:98
-#: src/view/shell/Drawer.tsx:321
+#: src/Navigation.tsx:282
+msgid "Hashtag"
+msgstr "Хештег"
+
+#: src/components/RichText.tsx:188
+#~ msgid "Hashtag: {tag}"
+#~ msgstr ""
+
+#: src/components/RichText.tsx:191
+msgid "Hashtag: #{tag}"
+msgstr "Хештег: #{tag}"
+
+#: src/screens/Signup/index.tsx:217
+msgid "Having trouble?"
+msgstr "Виникли проблеми?"
+
+#: src/view/shell/desktop/RightNav.tsx:90
+#: src/view/shell/Drawer.tsx:324
msgid "Help"
msgstr "Довідка"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:132
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:140
msgid "Here are some accounts for you to follow"
-msgstr ""
+msgstr "Ось деякі облікові записи, на які ви підписані"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:132
-#~ msgid "Here are some accounts for your to follow"
-#~ msgstr ""
-
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:79
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:89
msgid "Here are some popular topical feeds. You can choose to follow as many as you like."
-msgstr ""
+msgstr "Ось декілька популярних тематичних стрічок. Ви можете підписатися на скільки забажаєте з них."
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:74
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:84
msgid "Here are some topical feeds based on your interests: {interestsText}. You can choose to follow as many as you like."
-msgstr ""
+msgstr "Ось декілька тематичних стрічок на основі ваших інтересів: {interestsText}. Ви можете підписатися на скільки забажаєте з них."
-#: src/view/com/modals/AddAppPasswords.tsx:153
+#: src/view/com/modals/AddAppPasswords.tsx:154
msgid "Here is your app password."
msgstr "Це ваш пароль для застосунків."
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:41
-#: src/view/com/modals/ContentFilteringSettings.tsx:251
-#: src/view/com/util/moderation/ContentHider.tsx:105
-#: src/view/com/util/moderation/PostHider.tsx:108
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:134
+#: src/components/moderation/PostHider.tsx:107
+#: src/lib/moderation/useLabelBehaviorDescription.ts:15
+#: src/lib/moderation/useLabelBehaviorDescription.ts:20
+#: src/lib/moderation/useLabelBehaviorDescription.ts:25
+#: src/lib/moderation/useLabelBehaviorDescription.ts:30
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:52
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:76
+#: src/view/com/util/forms/PostDropdownBtn.tsx:328
msgid "Hide"
msgstr "Приховати"
-#: src/view/com/modals/ContentFilteringSettings.tsx:224
-#: src/view/com/notifications/FeedItem.tsx:325
+#: src/view/com/notifications/FeedItem.tsx:329
msgctxt "action"
msgid "Hide"
-msgstr ""
+msgstr "Сховати"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:187
+#: src/view/com/util/forms/PostDropdownBtn.tsx:276
+#: src/view/com/util/forms/PostDropdownBtn.tsx:278
msgid "Hide post"
-msgstr "Приховати пост"
+msgstr "Сховати пост"
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:67
+#: src/components/moderation/PostHider.tsx:64
msgid "Hide the content"
-msgstr ""
+msgstr "Приховати вміст"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:191
+#: src/view/com/util/forms/PostDropdownBtn.tsx:325
msgid "Hide this post?"
-msgstr "Приховати цей пост?"
+msgstr "Сховати цей пост?"
-#: src/view/com/notifications/FeedItem.tsx:315
+#: src/view/com/notifications/FeedItem.tsx:319
msgid "Hide user list"
-msgstr "Приховати список користувачів"
-
-#: src/view/com/profile/ProfileHeader.tsx:486
-msgid "Hides posts from {0} in your feed"
-msgstr ""
+msgstr "Сховати список користувачів"
-#: src/view/com/posts/FeedErrorMessage.tsx:102
-#~ msgid "Hmm, some kind of issue occured when contacting the feed server. Please let the feed owner know about this issue."
-#~ msgstr ""
+#: src/view/com/profile/ProfileHeader.tsx:487
+#~ msgid "Hides posts from {0} in your feed"
+#~ msgstr "Приховує пости з {0} у вашій стрічці"
#: src/view/com/posts/FeedErrorMessage.tsx:111
msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue."
@@ -1860,15 +2188,19 @@ msgstr "Хм, сервер стрічки надіслав нам незрозу
msgid "Hmm, we're having trouble finding this feed. It may have been deleted."
msgstr "Хм, ми не можемо знайти цю стрічку. Можливо вона була видалена."
-#: src/view/com/posts/FeedErrorMessage.tsx:87
-#~ msgid "Hmmm, we're having trouble finding this feed. It may have been deleted."
-#~ msgstr ""
+#: src/screens/Moderation/index.tsx:59
+msgid "Hmmmm, it seems we're having trouble loading this data. See below for more details. If this issue persists, please contact us."
+msgstr ""
-#: src/Navigation.tsx:432
-#: src/view/shell/bottom-bar/BottomBar.tsx:137
-#: src/view/shell/desktop/LeftNav.tsx:306
-#: src/view/shell/Drawer.tsx:398
-#: src/view/shell/Drawer.tsx:399
+#: src/screens/Profile/ErrorState.tsx:31
+msgid "Hmmmm, we couldn't load that moderation service."
+msgstr ""
+
+#: src/Navigation.tsx:454
+#: src/view/shell/bottom-bar/BottomBar.tsx:147
+#: src/view/shell/desktop/LeftNav.tsx:310
+#: src/view/shell/Drawer.tsx:401
+#: src/view/shell/Drawer.tsx:402
msgid "Home"
msgstr "Головна"
@@ -1876,22 +2208,23 @@ msgstr "Головна"
#: src/view/com/pager/FeedsTabBarMobile.tsx:123
#: src/view/screens/PreferencesHomeFeed.tsx:104
#: src/view/screens/Settings/index.tsx:543
-msgid "Home Feed Preferences"
-msgstr "Налаштування домашньої стрічки"
+#~ msgid "Home Feed Preferences"
+#~ msgstr ""
-#: src/view/com/auth/create/Step1.tsx:78
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:120
+#: src/view/com/modals/ChangeHandle.tsx:420
+msgid "Host:"
+msgstr ""
+
+#: src/screens/Login/ForgotPasswordForm.tsx:89
+#: src/screens/Login/LoginForm.tsx:134
+#: src/screens/Signup/StepInfo/index.tsx:40
+#: src/view/com/modals/ChangeHandle.tsx:281
msgid "Hosting provider"
msgstr "Хостинг-провайдер"
-#: src/view/com/auth/create/Step1.tsx:76
-#: src/view/com/auth/create/Step1.tsx:81
-#~ msgid "Hosting provider address"
-#~ msgstr "Адреса хостинг-провайдера"
-
#: src/view/com/modals/InAppBrowserConsent.tsx:44
msgid "How should we open this link?"
-msgstr ""
+msgstr "Як ви хочете відкрити це посилання?"
#: src/view/com/modals/VerifyEmail.tsx:214
msgid "I have a code"
@@ -1899,403 +2232,452 @@ msgstr "У мене є код"
#: src/view/com/modals/VerifyEmail.tsx:216
msgid "I have a confirmation code"
-msgstr ""
+msgstr "У мене є код підтвердження"
-#: src/view/com/modals/ChangeHandle.tsx:283
+#: src/view/com/modals/ChangeHandle.tsx:284
msgid "I have my own domain"
msgstr "Я маю власний домен"
-#: src/view/com/lightbox/Lightbox.web.tsx:165
+#: src/view/com/lightbox/Lightbox.web.tsx:185
msgid "If alt text is long, toggles alt text expanded state"
-msgstr ""
+msgstr "Розкриває альтернативний текст, якщо текст задовгий"
#: src/view/com/modals/SelfLabel.tsx:127
msgid "If none are selected, suitable for all ages."
msgstr "Якщо не вибрано жодного варіанту - підходить для всіх."
-#: src/view/com/modals/ChangePassword.tsx:146
+#: src/screens/Signup/StepInfo/Policies.tsx:83
+msgid "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."
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:610
+msgid "If you delete this list, you won't be able to recover it."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:316
+msgid "If you remove this post, you won't be able to recover it."
+msgstr ""
+
+#: src/view/com/modals/ChangePassword.tsx:148
msgid "If you want to change your password, we will send you a code to verify that this is your account."
+msgstr "Якщо ви хочете змінити пароль, ми надішлемо вам код, щоб переконатися, що це ваш обліковий запис."
+
+#: src/lib/moderation/useReportOptions.ts:36
+msgid "Illegal and Urgent"
msgstr ""
#: src/view/com/util/images/Gallery.tsx:38
msgid "Image"
-msgstr ""
+msgstr "Зображення"
-#: src/view/com/modals/AltImage.tsx:120
+#: src/view/com/modals/AltImage.tsx:121
msgid "Image alt text"
-msgstr "Альтернативний текст"
+msgstr "Опис зображення"
#: src/view/com/util/UserAvatar.tsx:311
#: src/view/com/util/UserBanner.tsx:118
-msgid "Image options"
-msgstr "Редагування зображення"
+#~ msgid "Image options"
+#~ msgstr "Редагування зображення"
-#: src/view/com/search/Suggestions.tsx:104
-#: src/view/com/search/Suggestions.tsx:115
-#~ msgid "In Your Network"
-#~ msgstr ""
+#: src/lib/moderation/useReportOptions.ts:47
+msgid "Impersonation or false claims about identity or affiliation"
+msgstr ""
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:138
+#: src/screens/Login/SetNewPasswordForm.tsx:127
msgid "Input code sent to your email for password reset"
-msgstr ""
+msgstr "Введіть код, надісланий на вашу електронну пошту для скидання пароля"
-#: src/view/com/modals/DeleteAccount.tsx:184
+#: src/view/com/modals/DeleteAccount.tsx:183
msgid "Input confirmation code for account deletion"
-msgstr ""
-
-#: src/view/com/auth/create/Step1.tsx:196
-msgid "Input email for Bluesky account"
-msgstr ""
-
-#: src/view/com/auth/create/Step2.tsx:109
-#~ msgid "Input email for Bluesky waitlist"
-#~ msgstr ""
+msgstr "Введіть код підтвердження для видалення облікового запису"
-#: src/view/com/auth/create/Step1.tsx:80
-#~ msgid "Input hosting provider address"
-#~ msgstr ""
+#: src/view/com/auth/create/Step1.tsx:177
+#~ msgid "Input email for Bluesky account"
+#~ msgstr "Введіть адресу електронної пошти для облікового запису Bluesky"
-#: src/view/com/auth/create/Step1.tsx:154
-msgid "Input invite code to proceed"
-msgstr ""
+#: src/view/com/auth/create/Step1.tsx:151
+#~ msgid "Input invite code to proceed"
+#~ msgstr "Введіть код запрошення, щоб продовжити"
-#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/AddAppPasswords.tsx:181
msgid "Input name for app password"
-msgstr ""
+msgstr "Введіть ім'я для пароля застосунку"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:162
+#: src/screens/Login/SetNewPasswordForm.tsx:151
msgid "Input new password"
-msgstr ""
+msgstr "Введіть новий пароль"
-#: src/view/com/modals/DeleteAccount.tsx:203
+#: src/view/com/modals/DeleteAccount.tsx:202
msgid "Input password for account deletion"
-msgstr ""
+msgstr "Введіть пароль для видалення облікового запису"
#: src/view/com/auth/create/Step2.tsx:196
-msgid "Input phone number for SMS verification"
-msgstr ""
+#~ msgid "Input phone number for SMS verification"
+#~ msgstr ""
-#: src/view/com/auth/login/LoginForm.tsx:230
+#: src/screens/Login/LoginForm.tsx:195
msgid "Input the password tied to {identifier}"
-msgstr ""
+msgstr "Введіть пароль, прив'язаний до {identifier}"
-#: src/view/com/auth/login/LoginForm.tsx:197
+#: src/screens/Login/LoginForm.tsx:168
msgid "Input the username or email address you used at signup"
-msgstr ""
+msgstr "Введіть псевдонім або ел. адресу, які ви використовували для реєстрації"
#: src/view/com/auth/create/Step2.tsx:271
-msgid "Input the verification code we have texted to you"
-msgstr ""
+#~ msgid "Input the verification code we have texted to you"
+#~ msgstr ""
#: src/view/com/modals/Waitlist.tsx:90
-msgid "Input your email to get on the Bluesky waitlist"
-msgstr ""
+#~ msgid "Input your email to get on the Bluesky waitlist"
+#~ msgstr ""
-#: src/view/com/auth/login/LoginForm.tsx:229
+#: src/screens/Login/LoginForm.tsx:194
msgid "Input your password"
+msgstr "Введіть ваш пароль"
+
+#: src/view/com/modals/ChangeHandle.tsx:389
+msgid "Input your preferred hosting provider"
msgstr ""
-#: src/view/com/auth/create/Step3.tsx:42
+#: src/screens/Signup/StepHandle.tsx:62
msgid "Input your user handle"
-msgstr ""
+msgstr "Введіть ваш псевдонім"
-#: src/view/com/post-thread/PostThreadItem.tsx:225
+#: src/view/com/post-thread/PostThreadItem.tsx:221
msgid "Invalid or unsupported post record"
-msgstr ""
+msgstr "Невірний або непідтримуваний пост"
-#: src/view/com/auth/login/LoginForm.tsx:113
+#: src/screens/Login/LoginForm.tsx:114
msgid "Invalid username or password"
msgstr "Невірне ім'я користувача або пароль"
#: src/view/screens/Settings.tsx:411
#~ msgid "Invite"
-#~ msgstr "Запросити"
+#~ msgstr ""
-#: src/view/com/modals/InviteCodes.tsx:93
+#: src/view/com/modals/InviteCodes.tsx:94
msgid "Invite a Friend"
msgstr "Запросити друга"
-#: src/view/com/auth/create/Step1.tsx:144
-#: src/view/com/auth/create/Step1.tsx:153
+#: src/screens/Signup/StepInfo/index.tsx:58
msgid "Invite code"
msgstr "Код запрошення"
-#: src/view/com/auth/create/state.ts:199
+#: src/screens/Signup/state.ts:278
msgid "Invite code not accepted. Check that you input it correctly and try again."
msgstr "Код запрошення не прийнято. Переконайтеся в його правильності та повторіть спробу."
-#: src/view/com/modals/InviteCodes.tsx:170
+#: src/view/com/modals/InviteCodes.tsx:171
msgid "Invite codes: {0} available"
-msgstr ""
+msgstr "Коди запрошення: {0}"
#: src/view/shell/Drawer.tsx:645
#~ msgid "Invite codes: {invitesAvailable} available"
-#~ msgstr "Коди запрошення: {invitesAvailable}"
+#~ msgstr ""
-#: src/view/com/modals/InviteCodes.tsx:169
+#: src/view/com/modals/InviteCodes.tsx:170
msgid "Invite codes: 1 available"
-msgstr ""
+msgstr "Коди запрошення: 1"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:64
+#: src/screens/Onboarding/StepFollowingFeed.tsx:65
msgid "It shows posts from the people you follow as they happen."
-msgstr ""
+msgstr "Ми показуємо пости людей, за якими ви слідкуєте в тому порядку в якому вони публікуються."
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:99
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:104
+#: src/view/com/auth/SplashScreen.web.tsx:172
msgid "Jobs"
msgstr "Вакансії"
#: src/view/com/modals/Waitlist.tsx:67
-msgid "Join the waitlist"
-msgstr "Приєднатися до черги очікування"
+#~ msgid "Join the waitlist"
+#~ msgstr ""
-#: src/view/com/auth/create/Step1.tsx:170
#: src/view/com/auth/create/Step1.tsx:174
-msgid "Join the waitlist."
-msgstr "Приєднатися до черги очікування."
+#: src/view/com/auth/create/Step1.tsx:178
+#~ msgid "Join the waitlist."
+#~ msgstr ""
#: src/view/com/modals/Waitlist.tsx:128
-msgid "Join Waitlist"
-msgstr "Приєднатися до черги очікування"
+#~ msgid "Join Waitlist"
+#~ msgstr ""
#: src/screens/Onboarding/index.tsx:24
msgid "Journalism"
+msgstr "Журналістика"
+
+#: src/components/moderation/LabelsOnMe.tsx:59
+msgid "label has been placed on this {labelTarget}"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:144
+msgid "Labeled by {0}."
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:142
+msgid "Labeled by the author."
+msgstr ""
+
+#: src/view/screens/Profile.tsx:188
+msgid "Labels"
+msgstr ""
+
+#: src/screens/Profile/Sections/Labels.tsx:142
+msgid "Labels are annotations on users and content. They can be used to hide, warn, and categorize the network."
+msgstr ""
+
+#: src/components/moderation/LabelsOnMe.tsx:61
+msgid "labels have been placed on this {labelTarget}"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:62
+msgid "Labels on your account"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:64
+msgid "Labels on your content"
msgstr ""
#: src/view/com/composer/select-language/SelectLangBtn.tsx:104
msgid "Language selection"
msgstr "Вибір мови"
-#: src/view/screens/Settings/index.tsx:594
+#: src/view/screens/Settings/index.tsx:614
msgid "Language settings"
-msgstr ""
+msgstr "Налаштування мови"
-#: src/Navigation.tsx:140
+#: src/Navigation.tsx:144
#: src/view/screens/LanguageSettings.tsx:89
msgid "Language Settings"
msgstr "Налаштування мов"
-#: src/view/screens/Settings/index.tsx:603
+#: src/view/screens/Settings/index.tsx:623
msgid "Languages"
msgstr "Мови"
#: src/view/com/auth/create/StepHeader.tsx:20
-msgid "Last step!"
-msgstr ""
+#~ msgid "Last step!"
+#~ msgstr "Останній крок!"
#: src/view/com/util/moderation/ContentHider.tsx:103
-msgid "Learn more"
-msgstr "Дізнатися більше"
+#~ msgid "Learn more"
+#~ msgstr "Дізнатися більше"
-#: src/view/com/util/moderation/PostAlerts.tsx:47
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:65
-#: src/view/com/util/moderation/ScreenHider.tsx:104
+#: src/components/moderation/ScreenHider.tsx:136
msgid "Learn More"
msgstr "Дізнатися більше"
-#: src/view/com/util/moderation/ContentHider.tsx:85
-#: src/view/com/util/moderation/PostAlerts.tsx:40
-#: src/view/com/util/moderation/PostHider.tsx:78
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:49
-#: src/view/com/util/moderation/ScreenHider.tsx:101
+#: src/components/moderation/ContentHider.tsx:65
+#: src/components/moderation/ContentHider.tsx:128
+msgid "Learn more about the moderation applied to this content."
+msgstr ""
+
+#: src/components/moderation/PostHider.tsx:85
+#: src/components/moderation/ScreenHider.tsx:125
msgid "Learn more about this warning"
msgstr "Дізнатися більше про це попередження"
-#: src/view/screens/Moderation.tsx:243
+#: src/screens/Moderation/index.tsx:549
msgid "Learn more about what is public on Bluesky."
msgstr "Дізнатися більше про те, що є публічним в Bluesky."
+#: src/components/moderation/ContentHider.tsx:152
+msgid "Learn more."
+msgstr ""
+
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82
msgid "Leave them all unchecked to see any language."
msgstr "Залиште їх усі невідміченими, щоб бачити пости незалежно від мови."
-#: src/view/com/modals/LinkWarning.tsx:51
+#: src/view/com/modals/LinkWarning.tsx:65
msgid "Leaving Bluesky"
msgstr "Ви залишаєте Bluesky"
#: src/screens/Deactivated.tsx:128
msgid "left to go."
-msgstr ""
+msgstr "ще залишилося."
-#: src/view/screens/Settings/index.tsx:278
+#: src/view/screens/Settings/index.tsx:296
msgid "Legacy storage cleared, you need to restart the app now."
-msgstr ""
+msgstr "Старе сховище очищено, тепер вам потрібно перезапустити застосунок."
-#: src/view/com/auth/login/Login.tsx:128
-#: src/view/com/auth/login/Login.tsx:144
+#: src/screens/Login/index.tsx:130
+#: src/screens/Login/index.tsx:145
msgid "Let's get your password reset!"
msgstr "Давайте відновимо ваш пароль!"
-#: src/screens/Onboarding/StepFinished.tsx:151
+#: src/screens/Onboarding/StepFinished.tsx:155
msgid "Let's go!"
-msgstr ""
+msgstr "Злітаємо!"
#: src/view/com/util/UserAvatar.tsx:248
#: src/view/com/util/UserBanner.tsx:62
-msgid "Library"
-msgstr "Галерея"
+#~ msgid "Library"
+#~ msgstr "Галерея"
-#: src/view/screens/Settings/index.tsx:479
+#: src/view/screens/Settings/index.tsx:498
msgid "Light"
-msgstr ""
+msgstr "Світла"
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Like"
-msgstr ""
+msgstr "Вподобати"
-#: src/view/screens/ProfileFeed.tsx:591
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:258
+#: src/view/screens/ProfileFeed.tsx:573
msgid "Like this feed"
msgstr "Вподобати цю стрічку"
-#: src/Navigation.tsx:197
+#: src/components/LikesDialog.tsx:87
+#: src/Navigation.tsx:201
+#: src/Navigation.tsx:206
msgid "Liked by"
msgstr "Сподобалося"
+#: src/screens/Profile/ProfileLabelerLikedBy.tsx:29
#: src/view/screens/PostLikedBy.tsx:27
#: src/view/screens/ProfileFeedLikedBy.tsx:27
msgid "Liked By"
-msgstr ""
+msgstr "Сподобався користувачу"
-#: src/view/com/feeds/FeedSourceCard.tsx:277
+#: src/view/com/feeds/FeedSourceCard.tsx:268
msgid "Liked by {0} {1}"
+msgstr "Вподобано {0} {1}"
+
+#: src/components/LabelingServiceCard/index.tsx:72
+msgid "Liked by {count} {0}"
msgstr ""
-#: src/view/screens/ProfileFeed.tsx:606
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:278
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:292
+#: src/view/screens/ProfileFeed.tsx:588
msgid "Liked by {likeCount} {0}"
-msgstr ""
+msgstr "Вподобано {likeCount} {0}"
-#: src/view/com/notifications/FeedItem.tsx:170
+#: src/view/com/notifications/FeedItem.tsx:174
msgid "liked your custom feed"
-msgstr ""
-
-#: src/view/com/notifications/FeedItem.tsx:171
-#~ msgid "liked your custom feed '{0}'"
-#~ msgstr ""
+msgstr "вподобав(-ла) вашу стрічку"
-#: src/view/com/notifications/FeedItem.tsx:171
-#~ msgid "liked your custom feed{0}"
-#~ msgstr ""
-
-#: src/view/com/notifications/FeedItem.tsx:155
+#: src/view/com/notifications/FeedItem.tsx:159
msgid "liked your post"
-msgstr ""
+msgstr "сподобався ваш пост"
-#: src/view/screens/Profile.tsx:183
+#: src/view/screens/Profile.tsx:193
msgid "Likes"
msgstr "Вподобання"
#: src/view/com/post-thread/PostThreadItem.tsx:182
msgid "Likes on this post"
-msgstr ""
+msgstr "Вподобайки цього поста"
-#: src/view/screens/Moderation.tsx:203
-#~ msgid "Limit the visibility of my account"
-#~ msgstr ""
-
-#: src/view/screens/Moderation.tsx:203
-#~ msgid "Limit the visibility of my account to logged-out users"
-#~ msgstr ""
-
-#: src/Navigation.tsx:166
+#: src/Navigation.tsx:170
msgid "List"
-msgstr ""
+msgstr "Список"
-#: src/view/com/modals/CreateOrEditList.tsx:261
+#: src/view/com/modals/CreateOrEditList.tsx:262
msgid "List Avatar"
msgstr "Аватар списку"
-#: src/view/screens/ProfileList.tsx:323
+#: src/view/screens/ProfileList.tsx:311
msgid "List blocked"
-msgstr ""
+msgstr "Список заблоковано"
-#: src/view/com/feeds/FeedSourceCard.tsx:231
+#: src/view/com/feeds/FeedSourceCard.tsx:220
msgid "List by {0}"
-msgstr ""
+msgstr "Список від {0}"
-#: src/view/screens/ProfileList.tsx:377
+#: src/view/screens/ProfileList.tsx:355
msgid "List deleted"
-msgstr ""
+msgstr "Список видалено"
-#: src/view/screens/ProfileList.tsx:282
+#: src/view/screens/ProfileList.tsx:283
msgid "List muted"
-msgstr ""
+msgstr "Список ігнорується"
-#: src/view/com/modals/CreateOrEditList.tsx:275
+#: src/view/com/modals/CreateOrEditList.tsx:276
msgid "List Name"
msgstr "Назва списку"
-#: src/view/screens/ProfileList.tsx:342
+#: src/view/screens/ProfileList.tsx:325
msgid "List unblocked"
-msgstr ""
+msgstr "Список розблоковано"
-#: src/view/screens/ProfileList.tsx:301
+#: src/view/screens/ProfileList.tsx:297
msgid "List unmuted"
-msgstr ""
-
-#: src/Navigation.tsx:110
-#: src/view/screens/Profile.tsx:185
-#: src/view/shell/desktop/LeftNav.tsx:379
-#: src/view/shell/Drawer.tsx:492
-#: src/view/shell/Drawer.tsx:493
+msgstr "Список більше не ігнорується"
+
+#: src/Navigation.tsx:114
+#: src/view/screens/Profile.tsx:189
+#: src/view/screens/Profile.tsx:195
+#: src/view/shell/desktop/LeftNav.tsx:383
+#: src/view/shell/Drawer.tsx:495
+#: src/view/shell/Drawer.tsx:496
msgid "Lists"
msgstr "Списки"
-#: src/view/com/post-thread/PostThread.tsx:276
-#: src/view/com/post-thread/PostThread.tsx:284
-msgid "Load more posts"
-msgstr "Завантажити більше постів"
+#: src/view/com/post-thread/PostThread.tsx:333
+#: src/view/com/post-thread/PostThread.tsx:341
+#~ msgid "Load more posts"
+#~ msgstr "Завантажити більше постів"
#: src/view/screens/Notifications.tsx:159
msgid "Load new notifications"
msgstr "Завантажити нові сповіщення"
-#: src/view/com/feeds/FeedPage.tsx:190
-#: src/view/screens/Profile.tsx:440
-#: src/view/screens/ProfileFeed.tsx:494
-#: src/view/screens/ProfileList.tsx:680
+#: src/screens/Profile/Sections/Feed.tsx:70
+#: src/view/com/feeds/FeedPage.tsx:138
+#: src/view/screens/ProfileFeed.tsx:496
+#: src/view/screens/ProfileList.tsx:695
msgid "Load new posts"
msgstr "Завантажити нові пости"
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:99
msgid "Loading..."
msgstr "Завантаження..."
#: src/view/com/modals/ServerInput.tsx:50
#~ msgid "Local dev server"
-#~ msgstr "Локальний сервер розробки"
+#~ msgstr ""
-#: src/Navigation.tsx:207
+#: src/Navigation.tsx:221
msgid "Log"
-msgstr ""
+msgstr "Звіт"
#: src/screens/Deactivated.tsx:149
#: src/screens/Deactivated.tsx:152
#: src/screens/Deactivated.tsx:178
#: src/screens/Deactivated.tsx:181
msgid "Log out"
-msgstr ""
-
-#: src/view/screens/Moderation.tsx:134
-#~ msgid "Logged-out users"
-#~ msgstr ""
+msgstr "Вийти"
-#: src/view/screens/Moderation.tsx:136
+#: src/screens/Moderation/index.tsx:442
msgid "Logged-out visibility"
msgstr "Видимість для користувачів без облікового запису"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:133
+#: src/components/AccountList.tsx:54
msgid "Login to account that is not listed"
msgstr "Увійти до облікового запису, якого немає в списку"
-#: src/view/screens/ProfileFeed.tsx:472
-#~ msgid "Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!"
-#~ msgstr ""
+#: src/screens/Login/SetNewPasswordForm.tsx:116
+msgid "Looks like XXXXX-XXXXX"
+msgstr ""
-#: src/view/com/modals/LinkWarning.tsx:65
+#: src/view/com/modals/LinkWarning.tsx:79
msgid "Make sure this is where you intend to go!"
msgstr "Переконайтеся, що це дійсно той сайт, що ви збираєтеся відвідати!"
-#: src/view/screens/Profile.tsx:182
+#: src/components/dialogs/MutedWords.tsx:82
+msgid "Manage your muted words and tags"
+msgstr "Налаштовуйте ваші ігноровані слова та теги"
+
+#: src/view/com/auth/create/Step2.tsx:118
+#~ msgid "May not be longer than 253 characters"
+#~ msgstr "Не може бути довшим за 253 символи"
+
+#: src/view/com/auth/create/Step2.tsx:109
+#~ msgid "May only contain letters and numbers"
+#~ msgstr "Може містити лише літери та цифри"
+
+#: src/view/screens/Profile.tsx:192
msgid "Media"
msgstr "Медіа"
@@ -2307,119 +2689,178 @@ msgstr "згадані користувачі"
msgid "Mentioned users"
msgstr "Згадані користувачі"
-#: src/view/com/util/ViewHeader.tsx:81
-#: src/view/screens/Search/Search.tsx:623
+#: src/view/com/util/ViewHeader.tsx:87
+#: src/view/screens/Search/Search.tsx:648
msgid "Menu"
msgstr "Меню"
-#: src/view/com/posts/FeedErrorMessage.tsx:194
-#~ msgid "Message from server"
-#~ msgstr "Повідомлення від сервера"
-
-#: src/view/com/posts/FeedErrorMessage.tsx:197
+#: src/view/com/posts/FeedErrorMessage.tsx:192
msgid "Message from server: {0}"
+msgstr "Повідомлення від сервера: {0}"
+
+#: src/lib/moderation/useReportOptions.ts:45
+msgid "Misleading Account"
msgstr ""
-#: src/Navigation.tsx:115
-#: src/view/screens/Moderation.tsx:64
-#: src/view/screens/Settings/index.tsx:625
-#: src/view/shell/desktop/LeftNav.tsx:397
-#: src/view/shell/Drawer.tsx:511
-#: src/view/shell/Drawer.tsx:512
+#: src/Navigation.tsx:119
+#: src/screens/Moderation/index.tsx:104
+#: src/view/screens/Settings/index.tsx:645
+#: src/view/shell/desktop/LeftNav.tsx:401
+#: src/view/shell/Drawer.tsx:514
+#: src/view/shell/Drawer.tsx:515
msgid "Moderation"
msgstr "Модерація"
-#: src/view/com/lists/ListCard.tsx:92
+#: src/components/moderation/ModerationDetailsDialog.tsx:112
+msgid "Moderation details"
+msgstr ""
+
+#: src/view/com/lists/ListCard.tsx:93
#: src/view/com/modals/UserAddRemoveLists.tsx:206
msgid "Moderation list by {0}"
-msgstr ""
+msgstr "Список модерації від {0}"
-#: src/view/screens/ProfileList.tsx:774
+#: src/view/screens/ProfileList.tsx:789
msgid "Moderation list by <0/>"
-msgstr ""
+msgstr "Список модерації від <0/>"
-#: src/view/com/lists/ListCard.tsx:90
+#: src/view/com/lists/ListCard.tsx:91
#: src/view/com/modals/UserAddRemoveLists.tsx:204
-#: src/view/screens/ProfileList.tsx:772
+#: src/view/screens/ProfileList.tsx:787
msgid "Moderation list by you"
-msgstr ""
+msgstr "Список модерації від вас"
-#: src/view/com/modals/CreateOrEditList.tsx:197
+#: src/view/com/modals/CreateOrEditList.tsx:198
msgid "Moderation list created"
-msgstr ""
+msgstr "Список модерації створено"
-#: src/view/com/modals/CreateOrEditList.tsx:183
+#: src/view/com/modals/CreateOrEditList.tsx:184
msgid "Moderation list updated"
-msgstr ""
+msgstr "Список модерації оновлено"
-#: src/view/screens/Moderation.tsx:95
+#: src/screens/Moderation/index.tsx:243
msgid "Moderation lists"
msgstr "Списки для модерації"
-#: src/Navigation.tsx:120
+#: src/Navigation.tsx:124
#: src/view/screens/ModerationModlists.tsx:58
msgid "Moderation Lists"
msgstr "Списки для модерації"
-#: src/view/screens/Settings/index.tsx:619
+#: src/view/screens/Settings/index.tsx:639
msgid "Moderation settings"
+msgstr "Налаштування модерації"
+
+#: src/Navigation.tsx:216
+msgid "Moderation states"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:35
+#: src/screens/Moderation/index.tsx:215
+msgid "Moderation tools"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:48
+#: src/lib/moderation/useModerationCauseDescription.ts:40
msgid "Moderator has chosen to set a general warning on the content."
+msgstr "Модератор вирішив встановити загальне попередження на вміст."
+
+#: src/view/com/post-thread/PostThreadItem.tsx:541
+msgid "More"
msgstr ""
-#: src/view/shell/desktop/Feeds.tsx:63
+#: src/view/shell/desktop/Feeds.tsx:65
msgid "More feeds"
msgstr "Більше стрічок"
-#: src/view/com/profile/ProfileHeader.tsx:522
-#: src/view/screens/ProfileFeed.tsx:362
-#: src/view/screens/ProfileList.tsx:616
+#: src/view/screens/ProfileList.tsx:599
msgid "More options"
msgstr "Додаткові опції"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:270
-msgid "More post options"
-msgstr ""
+#: src/view/com/util/forms/PostDropdownBtn.tsx:315
+#~ msgid "More post options"
+#~ msgstr ""
#: src/view/screens/PreferencesThreads.tsx:82
msgid "Most-liked replies first"
msgstr "За кількістю вподобань"
-#: src/view/com/profile/ProfileHeader.tsx:326
+#: src/view/com/auth/create/Step2.tsx:122
+#~ msgid "Must be at least 3 characters"
+#~ msgstr "Має містити щонайменше 3 символи"
+
+#: src/components/TagMenu/index.tsx:249
+msgid "Mute"
+msgstr "Ігнорувати"
+
+#: src/components/TagMenu/index.web.tsx:105
+msgid "Mute {truncatedTag}"
+msgstr "Ігнорувати {truncatedTag}"
+
+#: src/view/com/profile/ProfileMenu.tsx:279
+#: src/view/com/profile/ProfileMenu.tsx:286
msgid "Mute Account"
msgstr "Ігнорувати обліковий запис"
-#: src/view/screens/ProfileList.tsx:543
+#: src/view/screens/ProfileList.tsx:518
msgid "Mute accounts"
msgstr "Ігнорувати облікові записи"
-#: src/view/screens/ProfileList.tsx:490
+#: src/components/TagMenu/index.tsx:209
+msgid "Mute all {displayTag} posts"
+msgstr "Ігнорувати всі пости {displayTag}"
+
+#: src/components/TagMenu/index.tsx:211
+#~ msgid "Mute all {tag} posts"
+#~ msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:148
+msgid "Mute in tags only"
+msgstr "Ігнорувати лише в тегах"
+
+#: src/components/dialogs/MutedWords.tsx:133
+msgid "Mute in text & tags"
+msgstr "Ігнорувати в тексті та тегах"
+
+#: src/view/screens/ProfileList.tsx:461
+#: src/view/screens/ProfileList.tsx:624
msgid "Mute list"
msgstr "Ігнорувати список"
-#: src/view/screens/ProfileList.tsx:274
+#: src/view/screens/ProfileList.tsx:619
msgid "Mute these accounts?"
msgstr "Ігнорувати ці облікові записи?"
-#: src/view/screens/ProfileList.tsx:278
-msgid "Mute this List"
-msgstr ""
+#: src/view/screens/ProfileList.tsx:279
+#~ msgid "Mute this List"
+#~ msgstr "Ігнорувати цей список"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/components/dialogs/MutedWords.tsx:126
+msgid "Mute this word in post text and tags"
+msgstr "Ігнорувати це слово у постах і тегах"
+
+#: src/components/dialogs/MutedWords.tsx:141
+msgid "Mute this word in tags only"
+msgstr "Ігнорувати це слово лише у тегах"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:257
msgid "Mute thread"
-msgstr "Ігнорувати пост"
+msgstr "Ігнорувати обговорення"
-#: src/view/com/lists/ListCard.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:267
+#: src/view/com/util/forms/PostDropdownBtn.tsx:269
+msgid "Mute words & tags"
+msgstr "Ігнорувати слова та теги"
+
+#: src/view/com/lists/ListCard.tsx:102
msgid "Muted"
-msgstr ""
+msgstr "Ігнорується"
-#: src/view/screens/Moderation.tsx:109
+#: src/screens/Moderation/index.tsx:255
msgid "Muted accounts"
msgstr "Ігноровані облікові записи"
-#: src/Navigation.tsx:125
+#: src/Navigation.tsx:129
#: src/view/screens/ModerationMutedAccounts.tsx:107
msgid "Muted Accounts"
msgstr "Ігноровані облікові записи"
@@ -2428,19 +2869,24 @@ msgstr "Ігноровані облікові записи"
msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private."
msgstr "Ігноровані облікові записи автоматично вилучаються із вашої стрічки та сповіщень. Ігнорування є повністю приватним."
-#: src/view/screens/ProfileList.tsx:276
+#: src/lib/moderation/useModerationCauseDescription.ts:85
+msgid "Muted by \"{0}\""
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:231
+msgid "Muted words & tags"
+msgstr "Ігноровані слова та теги"
+
+#: src/view/screens/ProfileList.tsx:621
msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them."
msgstr "Ігнорування є приватним. Ігноровані користувачі можуть взаємодіяти з вами, але ви не бачитимете їх пости і не отримуватимете від них сповіщень."
-#: src/view/screens/Moderation.tsx:134
-#~ msgid "My Account"
-#~ msgstr ""
-
-#: src/view/com/modals/BirthDateSettings.tsx:56
+#: src/components/dialogs/BirthDateSettings.tsx:35
+#: src/components/dialogs/BirthDateSettings.tsx:38
msgid "My Birthday"
msgstr "Мій день народження"
-#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:663
msgid "My Feeds"
msgstr "Мої стрічки"
@@ -2448,101 +2894,117 @@ msgstr "Мої стрічки"
msgid "My Profile"
msgstr "Мій профіль"
-#: src/view/screens/Settings/index.tsx:582
+#: src/view/screens/Settings/index.tsx:596
+msgid "My saved feeds"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:602
msgid "My Saved Feeds"
-msgstr "Мої збережені стрічки"
+msgstr "Мої збережені канали"
#: src/view/com/auth/server-input/index.tsx:118
-msgid "my-server.com"
-msgstr ""
+#~ msgid "my-server.com"
+#~ msgstr "my-server.com"
-#: src/view/com/modals/AddAppPasswords.tsx:179
-#: src/view/com/modals/CreateOrEditList.tsx:290
+#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/CreateOrEditList.tsx:291
msgid "Name"
msgstr "Ім'я"
-#: src/view/com/modals/CreateOrEditList.tsx:145
+#: src/view/com/modals/CreateOrEditList.tsx:146
msgid "Name is required"
+msgstr "Необхідна назва"
+
+#: src/lib/moderation/useReportOptions.ts:57
+#: src/lib/moderation/useReportOptions.ts:78
+#: src/lib/moderation/useReportOptions.ts:86
+msgid "Name or Description Violates Community Standards"
msgstr ""
#: src/screens/Onboarding/index.tsx:25
msgid "Nature"
-msgstr ""
+msgstr "Природа"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:190
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:219
-#: src/view/com/auth/login/LoginForm.tsx:289
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:196
-#: src/view/com/modals/ChangePassword.tsx:166
+#: src/screens/Login/ForgotPasswordForm.tsx:173
+#: src/screens/Login/LoginForm.tsx:254
+#: src/view/com/modals/ChangePassword.tsx:168
msgid "Navigates to the next screen"
-msgstr ""
+msgstr "Переходить до наступного екрана"
#: src/view/shell/Drawer.tsx:71
msgid "Navigates to your profile"
+msgstr "Переходить до вашого профілю"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:122
+msgid "Need to report a copyright violation?"
msgstr ""
#: src/view/com/modals/EmbedConsent.tsx:107
#: src/view/com/modals/EmbedConsent.tsx:123
-msgid "Never load embeds from {0}"
-msgstr "Не завантажувати вбудування з {0}"
+#~ msgid "Never load embeds from {0}"
+#~ msgstr "Не завантажувати вбудування з {0}"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:72
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:72
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:74
msgid "Never lose access to your followers and data."
msgstr "Ніколи не втрачайте доступ до ваших даних та підписників."
-#: src/screens/Onboarding/StepFinished.tsx:119
+#: src/screens/Onboarding/StepFinished.tsx:123
msgid "Never lose access to your followers or data."
+msgstr "Ніколи не втрачайте доступ до ваших підписників та даних."
+
+#: src/components/dialogs/MutedWords.tsx:293
+#~ msgid "Nevermind"
+#~ msgstr "Скасувати"
+
+#: src/view/com/modals/ChangeHandle.tsx:519
+msgid "Nevermind, create a handle for me"
msgstr ""
#: src/view/screens/Lists.tsx:76
msgctxt "action"
msgid "New"
-msgstr ""
+msgstr "Новий"
#: src/view/screens/ModerationModlists.tsx:78
msgid "New"
msgstr "Новий"
-#: src/view/com/modals/CreateOrEditList.tsx:252
+#: src/view/com/modals/CreateOrEditList.tsx:253
msgid "New Moderation List"
-msgstr ""
+msgstr "Новий список модерації"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:150
+#: src/view/com/modals/ChangePassword.tsx:212
msgid "New password"
-msgstr ""
+msgstr "Новий пароль"
-#: src/view/com/modals/ChangePassword.tsx:215
+#: src/view/com/modals/ChangePassword.tsx:217
msgid "New Password"
-msgstr ""
+msgstr "Новий Пароль"
-#: src/view/com/feeds/FeedPage.tsx:201
+#: src/view/com/feeds/FeedPage.tsx:149
msgctxt "action"
msgid "New post"
-msgstr ""
+msgstr "Новий пост"
-#: src/view/screens/Feeds.tsx:581
+#: src/view/screens/Feeds.tsx:555
#: src/view/screens/Notifications.tsx:168
-#: src/view/screens/Profile.tsx:382
-#: src/view/screens/ProfileFeed.tsx:432
-#: src/view/screens/ProfileList.tsx:195
-#: src/view/screens/ProfileList.tsx:223
-#: src/view/shell/desktop/LeftNav.tsx:248
+#: src/view/screens/Profile.tsx:452
+#: src/view/screens/ProfileFeed.tsx:434
+#: src/view/screens/ProfileList.tsx:199
+#: src/view/screens/ProfileList.tsx:227
+#: src/view/shell/desktop/LeftNav.tsx:252
msgid "New post"
msgstr "Новий пост"
-#: src/view/shell/desktop/LeftNav.tsx:258
+#: src/view/shell/desktop/LeftNav.tsx:262
msgctxt "action"
msgid "New Post"
-msgstr ""
-
-#: src/view/shell/desktop/LeftNav.tsx:258
-#~ msgid "New Post"
-#~ msgstr "Новий пост"
+msgstr "Новий пост"
-#: src/view/com/modals/CreateOrEditList.tsx:247
+#: src/view/com/modals/CreateOrEditList.tsx:248
msgid "New User List"
-msgstr ""
+msgstr "Новий список користувачів"
#: src/view/screens/PreferencesThreads.tsx:79
msgid "Newest replies first"
@@ -2550,72 +3012,81 @@ msgstr "Спочатку найновіші"
#: src/screens/Onboarding/index.tsx:23
msgid "News"
-msgstr ""
-
-#: src/view/com/auth/create/CreateAccount.tsx:161
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:182
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:192
-#: src/view/com/auth/login/LoginForm.tsx:291
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:187
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:198
+msgstr "Новини"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:143
+#: src/screens/Login/ForgotPasswordForm.tsx:150
+#: src/screens/Login/LoginForm.tsx:253
+#: src/screens/Login/LoginForm.tsx:260
+#: src/screens/Login/SetNewPasswordForm.tsx:174
+#: src/screens/Login/SetNewPasswordForm.tsx:180
+#: src/screens/Signup/index.tsx:205
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79
-#: src/view/com/modals/ChangePassword.tsx:251
#: src/view/com/modals/ChangePassword.tsx:253
+#: src/view/com/modals/ChangePassword.tsx:255
msgid "Next"
msgstr "Далі"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:103
msgctxt "action"
msgid "Next"
-msgstr ""
+msgstr "Далі"
-#: src/view/com/lightbox/Lightbox.web.tsx:149
+#: src/view/com/lightbox/Lightbox.web.tsx:169
msgid "Next image"
msgstr "Наступне зображення"
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:200
-#: src/view/screens/PreferencesHomeFeed.tsx:235
-#: src/view/screens/PreferencesHomeFeed.tsx:272
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:200
+#: src/view/screens/PreferencesFollowingFeed.tsx:235
+#: src/view/screens/PreferencesFollowingFeed.tsx:272
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "No"
msgstr "Ні"
-#: src/view/screens/ProfileFeed.tsx:584
-#: src/view/screens/ProfileList.tsx:754
+#: src/view/screens/ProfileFeed.tsx:562
+#: src/view/screens/ProfileList.tsx:769
msgid "No description"
msgstr "Опис відсутній"
-#: src/view/com/profile/ProfileHeader.tsx:169
+#: src/view/com/modals/ChangeHandle.tsx:405
+msgid "No DNS Panel"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:118
msgid "No longer following {0}"
+msgstr "Ви більше не підписані на {0}"
+
+#: src/screens/Signup/StepHandle.tsx:114
+msgid "No longer than 253 characters"
msgstr ""
#: src/view/com/notifications/Feed.tsx:109
msgid "No notifications yet!"
-msgstr ""
+msgstr "Ще ніяких сповіщень!"
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:97
-#: src/view/com/composer/text-input/web/Autocomplete.tsx:191
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:101
+#: src/view/com/composer/text-input/web/Autocomplete.tsx:195
msgid "No result"
msgstr "Результати відсутні"
-#: src/view/screens/Feeds.tsx:524
+#: src/components/Lists.tsx:183
+msgid "No results found"
+msgstr "Нічого не знайдено"
+
+#: src/view/screens/Feeds.tsx:495
msgid "No results found for \"{query}\""
msgstr "Нічого не знайдено за запитом «{query}»"
-#: src/view/com/modals/ListAddUser.tsx:142
-#: src/view/shell/desktop/Search.tsx:112
-#~ msgid "No results found for {0}"
-#~ msgstr ""
-
#: src/view/com/modals/ListAddRemoveUsers.tsx:127
-#: src/view/screens/Search/Search.tsx:280
-#: src/view/screens/Search/Search.tsx:308
+#: src/view/screens/Search/Search.tsx:283
+#: src/view/screens/Search/Search.tsx:311
msgid "No results found for {query}"
msgstr "Нічого не знайдено за запитом «{query}»"
-#: src/view/com/modals/EmbedConsent.tsx:129
+#: src/components/dialogs/EmbedConsent.tsx:105
+#: src/components/dialogs/EmbedConsent.tsx:112
msgid "No thanks"
msgstr "Ні, дякую"
@@ -2623,59 +3094,83 @@ msgstr "Ні, дякую"
msgid "Nobody"
msgstr "Ніхто"
-#: src/view/com/modals/SelfLabel.tsx:136
-#~ msgid "Not Applicable"
-#~ msgstr ""
+#: src/components/LikedByList.tsx:79
+#: src/components/LikesDialog.tsx:99
+msgid "Nobody has liked this yet. Maybe you should be the first!"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:42
+msgid "Non-sexual Nudity"
+msgstr ""
#: src/view/com/modals/SelfLabel.tsx:135
msgid "Not Applicable."
msgstr "Не застосовно."
-#: src/Navigation.tsx:105
-#: src/view/screens/Profile.tsx:106
+#: src/Navigation.tsx:109
+#: src/view/screens/Profile.tsx:99
msgid "Not Found"
-msgstr ""
+msgstr "Не знайдено"
#: src/view/com/modals/VerifyEmail.tsx:246
#: src/view/com/modals/VerifyEmail.tsx:252
msgid "Not right now"
-msgstr ""
+msgstr "Пізніше"
-#: src/view/screens/Moderation.tsx:227
-#~ msgid "Note: Bluesky is an open and public network, and enabling this will not make your profile private or limit the ability of logged in users to see your posts. This setting only limits the visibility of posts on the Bluesky app and website; third-party apps that display Bluesky content may not respect this setting, and could show your content to logged-out users."
-#~ msgstr ""
+#: src/view/com/profile/ProfileMenu.tsx:368
+#: src/view/com/util/forms/PostDropdownBtn.tsx:342
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:246
+msgid "Note about sharing"
+msgstr ""
-#: src/view/screens/Moderation.tsx:233
+#: src/screens/Moderation/index.tsx:540
msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites."
msgstr "Примітка: Bluesky є відкритою і публічною мережею. Цей параметр обмежує видимість вашого вмісту лише у застосунках і на сайті Bluesky, але інші застосунки можуть цього не дотримуватися. Ваш вміст все ще може бути показаний відвідувачам без облікового запису іншими застосунками і вебсайтами."
-#: src/view/screens/Moderation.tsx:227
-#~ msgid "Note: Third-party apps that display Bluesky content may not respect this setting."
-#~ msgstr ""
-
-#: src/Navigation.tsx:447
+#: src/Navigation.tsx:469
#: src/view/screens/Notifications.tsx:124
#: src/view/screens/Notifications.tsx:148
-#: src/view/shell/bottom-bar/BottomBar.tsx:205
-#: src/view/shell/desktop/LeftNav.tsx:361
-#: src/view/shell/Drawer.tsx:435
-#: src/view/shell/Drawer.tsx:436
+#: src/view/shell/bottom-bar/BottomBar.tsx:215
+#: src/view/shell/desktop/LeftNav.tsx:365
+#: src/view/shell/Drawer.tsx:438
+#: src/view/shell/Drawer.tsx:439
msgid "Notifications"
msgstr "Сповіщення"
#: src/view/com/modals/SelfLabel.tsx:103
msgid "Nudity"
+msgstr "Оголеність"
+
+#: src/lib/moderation/useReportOptions.ts:71
+msgid "Nudity or adult content not labeled as such"
msgstr ""
-#: src/view/com/util/ErrorBoundary.tsx:35
+#: src/lib/moderation/useReportOptions.ts:71
+#~ msgid "Nudity or pornography not labeled as such"
+#~ msgstr ""
+
+#: src/screens/Signup/index.tsx:142
+msgid "of"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:11
+msgid "Off"
+msgstr ""
+
+#: src/view/com/util/ErrorBoundary.tsx:49
msgid "Oh no!"
msgstr "О, ні!"
-#: src/screens/Onboarding/StepInterests/index.tsx:128
+#: src/screens/Onboarding/StepInterests/index.tsx:132
msgid "Oh no! Something went wrong."
+msgstr "Ой! Щось пішло не так."
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:126
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:327
+msgid "OK"
msgstr ""
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:41
+#: src/screens/Login/PasswordUpdatedForm.tsx:44
msgid "Okay"
msgstr "Добре"
@@ -2683,282 +3178,386 @@ msgstr "Добре"
msgid "Oldest replies first"
msgstr "Спочатку найдавніші"
-#: src/view/screens/Settings/index.tsx:234
+#: src/view/screens/Settings/index.tsx:244
msgid "Onboarding reset"
-msgstr ""
+msgstr "Скинути ознайомлення"
-#: src/view/com/composer/Composer.tsx:375
+#: src/view/com/composer/Composer.tsx:392
msgid "One or more images is missing alt text."
-msgstr "Для одного або кількох зображень відсутній альтернативний текст."
+msgstr "Для одного або кількох зображень відсутній опис."
#: src/view/com/threadgate/WhoCanReply.tsx:100
msgid "Only {0} can reply."
msgstr "Тільки {0} можуть відповідати."
-#: src/view/screens/AppPasswords.tsx:65
-#: src/view/screens/Profile.tsx:106
-msgid "Oops!"
+#: src/screens/Signup/StepHandle.tsx:97
+msgid "Only contains letters, numbers, and hyphens"
msgstr ""
-#: src/screens/Onboarding/StepFinished.tsx:115
+#: src/components/Lists.tsx:75
+msgid "Oops, something went wrong!"
+msgstr "Ой, щось пішло не так!"
+
+#: src/components/Lists.tsx:170
+#: src/view/screens/AppPasswords.tsx:67
+#: src/view/screens/Profile.tsx:99
+msgid "Oops!"
+msgstr "Ой!"
+
+#: src/screens/Onboarding/StepFinished.tsx:119
msgid "Open"
-msgstr ""
+msgstr "Відкрити"
-#: src/view/com/composer/Composer.tsx:470
-#: src/view/com/composer/Composer.tsx:471
+#: src/view/screens/Moderation.tsx:75
+#~ msgid "Open content filtering settings"
+#~ msgstr "Відкрити налаштування фільтрації контенту"
+
+#: src/view/com/composer/Composer.tsx:491
+#: src/view/com/composer/Composer.tsx:492
msgid "Open emoji picker"
msgstr "Емоджі"
-#: src/view/screens/Settings/index.tsx:712
+#: src/view/screens/ProfileFeed.tsx:300
+msgid "Open feed options menu"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:734
msgid "Open links with in-app browser"
+msgstr "Вбудований браузер"
+
+#: src/screens/Moderation/index.tsx:227
+msgid "Open muted words and tags settings"
msgstr ""
-#: src/view/com/pager/FeedsTabBarMobile.tsx:87
+#: src/view/screens/Moderation.tsx:92
+#~ msgid "Open muted words settings"
+#~ msgstr "Відкрити налаштування ігнорування слів"
+
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:50
msgid "Open navigation"
msgstr "Відкрити навігацію"
-#: src/view/screens/Settings/index.tsx:804
+#: src/view/com/util/forms/PostDropdownBtn.tsx:183
+msgid "Open post options menu"
+msgstr "Відкрити меню налаштувань посту"
+
+#: src/view/screens/Settings/index.tsx:828
+#: src/view/screens/Settings/index.tsx:838
msgid "Open storybook page"
+msgstr "Відкрити storybook сторінку"
+
+#: src/view/screens/Settings/index.tsx:816
+msgid "Open system log"
msgstr ""
#: src/view/com/util/forms/DropdownButton.tsx:154
msgid "Opens {numItems} options"
-msgstr ""
+msgstr "Відкриває меню з {numItems} опціями"
#: src/view/screens/Log.tsx:54
msgid "Opens additional details for a debug entry"
-msgstr ""
+msgstr "Відкриває додаткову інформацію про запис для налагодження"
-#: src/view/com/notifications/FeedItem.tsx:348
+#: src/view/com/notifications/FeedItem.tsx:353
msgid "Opens an expanded list of users in this notification"
-msgstr ""
+msgstr "Відкрити розширений список користувачів у цьому сповіщенні"
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:61
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:78
msgid "Opens camera on device"
-msgstr ""
+msgstr "Відкриває камеру на пристрої"
#: src/view/com/composer/Prompt.tsx:25
msgid "Opens composer"
-msgstr ""
+msgstr "Відкрити редактор"
-#: src/view/screens/Settings/index.tsx:595
+#: src/view/screens/Settings/index.tsx:615
msgid "Opens configurable language settings"
msgstr "Відкриває налаштування мов"
#: src/view/com/composer/photos/SelectPhotoBtn.tsx:44
msgid "Opens device photo gallery"
-msgstr ""
+msgstr "Відкриває фотогалерею пристрою"
-#: src/view/com/profile/ProfileHeader.tsx:419
-msgid "Opens editor for profile display name, avatar, background image, and description"
-msgstr ""
+#: src/view/com/profile/ProfileHeader.tsx:420
+#~ msgid "Opens editor for profile display name, avatar, background image, and description"
+#~ msgstr "Відкриває редактор для назви профілю, аватара, фонового зображення та опису"
-#: src/view/screens/Settings/index.tsx:649
+#: src/view/screens/Settings/index.tsx:669
msgid "Opens external embeds settings"
msgstr "Відкриває налаштування зовнішніх вбудувань"
-#: src/view/com/profile/ProfileHeader.tsx:574
-msgid "Opens followers list"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:57
+#: src/view/com/auth/SplashScreen.tsx:68
+#: src/view/com/auth/SplashScreen.web.tsx:97
+msgid "Opens flow to create a new Bluesky account"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:593
-msgid "Opens following list"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:75
+#: src/view/com/auth/SplashScreen.tsx:83
+#: src/view/com/auth/SplashScreen.web.tsx:112
+msgid "Opens flow to sign into your existing Bluesky account"
msgstr ""
+#: src/view/com/profile/ProfileHeader.tsx:575
+#~ msgid "Opens followers list"
+#~ msgstr "Відкриває список підписників"
+
+#: src/view/com/profile/ProfileHeader.tsx:594
+#~ msgid "Opens following list"
+#~ msgstr "Відкриває список нижче"
+
#: src/view/screens/Settings.tsx:412
#~ msgid "Opens invite code list"
#~ msgstr ""
-#: src/view/com/modals/InviteCodes.tsx:172
+#: src/view/com/modals/InviteCodes.tsx:173
msgid "Opens list of invite codes"
msgstr "Відкриває список кодів запрошення"
+#: src/view/screens/Settings/index.tsx:798
+msgid "Opens modal for account deletion confirmation. Requires email code"
+msgstr ""
+
#: src/view/screens/Settings/index.tsx:774
-msgid "Opens modal for account deletion confirmation. Requires email code."
+#~ msgid "Opens modal for account deletion confirmation. Requires email code."
+#~ msgstr "Відкриється модальне повідомлення для видалення облікового запису. Потрібен код електронної пошти."
+
+#: src/view/screens/Settings/index.tsx:756
+msgid "Opens modal for changing your Bluesky password"
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:281
+#: src/view/screens/Settings/index.tsx:718
+msgid "Opens modal for choosing a new Bluesky handle"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:779
+msgid "Opens modal for downloading your Bluesky account data (repository)"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:968
+msgid "Opens modal for email verification"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:282
msgid "Opens modal for using custom domain"
msgstr "Відкриває діалог налаштування власного домену як псевдоніму"
-#: src/view/screens/Settings/index.tsx:620
+#: src/view/screens/Settings/index.tsx:640
msgid "Opens moderation settings"
msgstr "Відкриває налаштування модерації"
-#: src/view/com/auth/login/LoginForm.tsx:239
+#: src/screens/Login/LoginForm.tsx:202
msgid "Opens password reset form"
-msgstr ""
+msgstr "Відкриває форму скидання пароля"
-#: src/view/screens/Feeds.tsx:357
+#: src/view/com/home/HomeHeaderLayout.web.tsx:63
+#: src/view/screens/Feeds.tsx:356
msgid "Opens screen to edit Saved Feeds"
-msgstr ""
+msgstr "Відкриває сторінку з усіма збереженими стрічками"
-#: src/view/screens/Settings/index.tsx:576
+#: src/view/screens/Settings/index.tsx:597
msgid "Opens screen with all saved feeds"
-msgstr "Відкриває сторінку з усіма збереженими стрічками"
+msgstr "Відкриває сторінку з усіма збереженими каналами"
+
+#: src/view/screens/Settings/index.tsx:696
+msgid "Opens the app password settings"
+msgstr ""
#: src/view/screens/Settings/index.tsx:676
-msgid "Opens the app password settings page"
-msgstr "Відкриває налаштування паролів для застосунків"
+#~ msgid "Opens the app password settings page"
+#~ msgstr "Відкриває налаштування паролів для застосунків"
+
+#: src/view/screens/Settings/index.tsx:554
+msgid "Opens the Following feed preferences"
+msgstr ""
#: src/view/screens/Settings/index.tsx:535
-msgid "Opens the home feed preferences"
-msgstr "Відкриває налаштування домашньої стрічки"
+#~ msgid "Opens the home feed preferences"
+#~ msgstr "Відкриває налаштування Головного каналу"
-#: src/view/screens/Settings/index.tsx:805
+#: src/view/com/modals/LinkWarning.tsx:93
+msgid "Opens the linked website"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:829
+#: src/view/screens/Settings/index.tsx:839
msgid "Opens the storybook page"
msgstr ""
-#: src/view/screens/Settings/index.tsx:793
+#: src/view/screens/Settings/index.tsx:817
msgid "Opens the system log page"
msgstr "Відкриває системний журнал"
-#: src/view/screens/Settings/index.tsx:556
+#: src/view/screens/Settings/index.tsx:575
msgid "Opens the threads preferences"
msgstr "Відкриває налаштування гілок"
#: src/view/com/util/forms/DropdownButton.tsx:280
msgid "Option {0} of {numItems}"
+msgstr "Опція {0} з {numItems}"
+
+#: src/components/ReportDialog/SubmitView.tsx:162
+msgid "Optionally provide additional information below:"
msgstr ""
#: src/view/com/modals/Threadgate.tsx:89
msgid "Or combine these options:"
msgstr "Або якісь із наступних варіантів:"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:122
-#~ msgid "Or you can try our \"Discover\" algorithm:"
-#~ msgstr ""
+#: src/lib/moderation/useReportOptions.ts:25
+msgid "Other"
+msgstr ""
-#: src/view/com/auth/login/ChooseAccountForm.tsx:138
+#: src/components/AccountList.tsx:73
msgid "Other account"
msgstr "Інший обліковий запис"
#: src/view/com/modals/ServerInput.tsx:88
#~ msgid "Other service"
-#~ msgstr "Інший хостинг-провайдер"
+#~ msgstr ""
#: src/view/com/composer/select-language/SelectLangBtn.tsx:91
msgid "Other..."
msgstr "Інші..."
+#: src/components/Lists.tsx:184
#: src/view/screens/NotFound.tsx:45
msgid "Page not found"
msgstr "Сторінку не знайдено"
#: src/view/screens/NotFound.tsx:42
msgid "Page Not Found"
-msgstr ""
+msgstr "Сторінку не знайдено"
-#: src/view/com/auth/create/Step1.tsx:210
-#: src/view/com/auth/create/Step1.tsx:220
-#: src/view/com/auth/login/LoginForm.tsx:226
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:161
-#: src/view/com/modals/DeleteAccount.tsx:202
+#: src/screens/Login/LoginForm.tsx:178
+#: src/screens/Signup/StepInfo/index.tsx:101
+#: src/view/com/modals/DeleteAccount.tsx:194
+#: src/view/com/modals/DeleteAccount.tsx:201
msgid "Password"
msgstr "Пароль"
-#: src/view/com/auth/login/Login.tsx:157
+#: src/view/com/modals/ChangePassword.tsx:142
+msgid "Password Changed"
+msgstr ""
+
+#: src/screens/Login/index.tsx:157
msgid "Password updated"
msgstr "Пароль змінено"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:28
+#: src/screens/Login/PasswordUpdatedForm.tsx:30
msgid "Password updated!"
msgstr "Пароль змінено!"
-#: src/Navigation.tsx:160
+#: src/Navigation.tsx:164
msgid "People followed by @{0}"
-msgstr ""
+msgstr "Люди, на яких підписаний(-на) @{0}"
-#: src/Navigation.tsx:153
+#: src/Navigation.tsx:157
msgid "People following @{0}"
-msgstr ""
+msgstr "Люди, які підписані на @{0}"
#: src/view/com/lightbox/Lightbox.tsx:66
msgid "Permission to access camera roll is required."
-msgstr ""
+msgstr "Потрібен дозвіл на доступ до камери."
#: src/view/com/lightbox/Lightbox.tsx:72
msgid "Permission to access camera roll was denied. Please enable it in your system settings."
-msgstr ""
+msgstr "Дозвіл на доступ до камери був заборонений. Будь ласка, включіть його в налаштуваннях системи."
#: src/screens/Onboarding/index.tsx:31
msgid "Pets"
-msgstr ""
+msgstr "Домашні улюбленці"
#: src/view/com/auth/create/Step2.tsx:183
-msgid "Phone number"
-msgstr ""
+#~ msgid "Phone number"
+#~ msgstr ""
#: src/view/com/modals/SelfLabel.tsx:121
msgid "Pictures meant for adults."
msgstr "Зображення, призначені для дорослих."
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:292
+#: src/view/screens/ProfileList.tsx:563
msgid "Pin to home"
+msgstr "Закріпити"
+
+#: src/view/screens/ProfileFeed.tsx:295
+msgid "Pin to Home"
msgstr ""
#: src/view/screens/SavedFeeds.tsx:88
msgid "Pinned Feeds"
msgstr "Закріплені стрічки"
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:111
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:123
msgid "Play {0}"
msgstr "Відтворити {0}"
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:54
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:55
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:57
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:58
msgid "Play Video"
msgstr "Відтворити відео"
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:110
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:122
msgid "Plays the GIF"
msgstr "Відтворює GIF"
-#: src/view/com/auth/create/state.ts:177
+#: src/screens/Signup/state.ts:241
msgid "Please choose your handle."
msgstr "Будь ласка, оберіть псевдонім."
-#: src/view/com/auth/create/state.ts:160
+#: src/screens/Signup/state.ts:234
msgid "Please choose your password."
msgstr "Будь ласка, оберіть ваш пароль."
+#: src/screens/Signup/state.ts:251
+msgid "Please complete the verification captcha."
+msgstr "Будь ласка, завершіть перевірку Captcha."
+
#: src/view/com/modals/ChangeEmail.tsx:67
msgid "Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed."
msgstr "Будь ласка, підтвердіть вашу електронну адресу, перш ніж змінити її. Це тимчасова вимога під час додавання інструментів оновлення електронної адреси, незабаром її видалять."
-#: src/view/com/modals/AddAppPasswords.tsx:90
+#: src/view/com/modals/AddAppPasswords.tsx:91
msgid "Please enter a name for your app password. All spaces is not allowed."
-msgstr ""
+msgstr "Будь ласка, введіть ім'я для пароля застосунку. Пробіли і пропуски не допускаються."
#: src/view/com/auth/create/Step2.tsx:206
-msgid "Please enter a phone number that can receive SMS text messages."
-msgstr ""
+#~ msgid "Please enter a phone number that can receive SMS text messages."
+#~ msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:145
+#: src/view/com/modals/AddAppPasswords.tsx:146
msgid "Please enter a unique name for this App Password or use our randomly generated one."
msgstr "Будь ласка, введіть унікальну назву для цього паролю або використовуйте нашу випадково згенеровану."
+#: src/components/dialogs/MutedWords.tsx:67
+msgid "Please enter a valid word, tag, or phrase to mute"
+msgstr "Будь ласка, введіть допустиме слово, тег або фразу для ігнорування"
+
#: src/view/com/auth/create/state.ts:170
-msgid "Please enter the code you received by SMS."
-msgstr ""
+#~ msgid "Please enter the code you received by SMS."
+#~ msgstr ""
#: src/view/com/auth/create/Step2.tsx:282
-msgid "Please enter the verification code sent to {phoneNumberFormatted}."
-msgstr ""
+#~ msgid "Please enter the verification code sent to {phoneNumberFormatted}."
+#~ msgstr ""
-#: src/view/com/auth/create/state.ts:146
+#: src/screens/Signup/state.ts:220
msgid "Please enter your email."
msgstr "Будь ласка, введіть адресу ел. пошти."
-#: src/view/com/modals/DeleteAccount.tsx:191
+#: src/view/com/modals/DeleteAccount.tsx:190
msgid "Please enter your password as well:"
msgstr "Будь ласка, також введіть ваш пароль:"
+#: src/components/moderation/LabelsOnMeDialog.tsx:221
+msgid "Please explain why you think this label was incorrectly applied by {0}"
+msgstr ""
+
#: src/view/com/modals/AppealLabel.tsx:72
#: src/view/com/modals/AppealLabel.tsx:75
-msgid "Please tell us why you think this content warning was incorrectly applied!"
-msgstr "Будь ласка, вкажіть чому ви вважаєте що попередження про вміст було додано неправильно?"
+#~ msgid "Please tell us why you think this content warning was incorrectly applied!"
+#~ msgstr "Будь ласка, вкажіть чому ви вважаєте що попередження про вміст було додано неправильно?"
#: src/view/com/modals/AppealLabel.tsx:72
#: src/view/com/modals/AppealLabel.tsx:75
@@ -2967,55 +3566,63 @@ msgstr "Будь ласка, вкажіть чому ви вважаєте що
#: src/view/com/modals/VerifyEmail.tsx:101
msgid "Please Verify Your Email"
-msgstr ""
+msgstr "Підтвердьте свою адресу електронної пошти"
-#: src/view/com/composer/Composer.tsx:215
+#: src/view/com/composer/Composer.tsx:222
msgid "Please wait for your link card to finish loading"
msgstr "Будь ласка, зачекайте доки завершиться створення попереднього перегляду для посилання"
#: src/screens/Onboarding/index.tsx:37
msgid "Politics"
-msgstr ""
+msgstr "Політика"
#: src/view/com/modals/SelfLabel.tsx:111
msgid "Porn"
-msgstr ""
+msgstr "Порнографія"
-#: src/view/com/composer/Composer.tsx:350
-#: src/view/com/composer/Composer.tsx:358
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#~ msgid "Pornography"
+#~ msgstr ""
+
+#: src/view/com/composer/Composer.tsx:367
+#: src/view/com/composer/Composer.tsx:375
msgctxt "action"
msgid "Post"
-msgstr ""
+msgstr "Запостити"
-#: src/view/com/post-thread/PostThread.tsx:246
+#: src/view/com/post-thread/PostThread.tsx:292
msgctxt "description"
msgid "Post"
-msgstr ""
+msgstr "Пост"
-#: src/view/com/composer/Composer.tsx:346
-#: src/view/com/post-thread/PostThread.tsx:225
-#: src/view/screens/PostThread.tsx:80
-#~ msgid "Post"
-#~ msgstr "Пост"
-
-#: src/view/com/post-thread/PostThreadItem.tsx:174
+#: src/view/com/post-thread/PostThreadItem.tsx:175
msgid "Post by {0}"
-msgstr ""
+msgstr "Пост від {0}"
-#: src/Navigation.tsx:172
-#: src/Navigation.tsx:179
-#: src/Navigation.tsx:186
+#: src/Navigation.tsx:176
+#: src/Navigation.tsx:183
+#: src/Navigation.tsx:190
msgid "Post by @{0}"
-msgstr ""
+msgstr "Пост від @{0}"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:84
+#: src/view/com/util/forms/PostDropdownBtn.tsx:105
msgid "Post deleted"
-msgstr ""
+msgstr "Пост видалено"
-#: src/view/com/post-thread/PostThread.tsx:398
+#: src/view/com/post-thread/PostThread.tsx:157
msgid "Post hidden"
msgstr "Пост приховано"
+#: src/components/moderation/ModerationDetailsDialog.tsx:97
+#: src/lib/moderation/useModerationCauseDescription.ts:99
+msgid "Post Hidden by Muted Word"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:100
+#: src/lib/moderation/useModerationCauseDescription.ts:108
+msgid "Post Hidden by You"
+msgstr ""
+
#: src/view/com/composer/select-language/SelectLangBtn.tsx:87
msgid "Post language"
msgstr "Мова посту"
@@ -3024,23 +3631,42 @@ msgstr "Мова посту"
msgid "Post Languages"
msgstr "Мови посту"
-#: src/view/com/post-thread/PostThread.tsx:450
+#: src/view/com/post-thread/PostThread.tsx:152
+#: src/view/com/post-thread/PostThread.tsx:164
msgid "Post not found"
msgstr "Пост не знайдено"
-#: src/view/screens/Profile.tsx:180
+#: src/components/TagMenu/index.tsx:253
+msgid "posts"
+msgstr "пости"
+
+#: src/view/screens/Profile.tsx:190
msgid "Posts"
msgstr "Пости"
+#: src/components/dialogs/MutedWords.tsx:89
+msgid "Posts can be muted based on their text, their tags, or both."
+msgstr "Пости можуть бути ігноровані за їхнім текстом, тегами чи за обома."
+
#: src/view/com/posts/FeedErrorMessage.tsx:64
msgid "Posts hidden"
-msgstr ""
+msgstr "Пости приховано"
-#: src/view/com/modals/LinkWarning.tsx:46
+#: src/view/com/modals/LinkWarning.tsx:60
msgid "Potentially Misleading Link"
msgstr "Потенційно оманливе посилання"
-#: src/view/com/lightbox/Lightbox.web.tsx:135
+#: src/components/forms/HostingProvider.tsx:45
+msgid "Press to change hosting provider"
+msgstr ""
+
+#: src/components/Error.tsx:74
+#: src/components/Lists.tsx:80
+#: src/screens/Signup/index.tsx:186
+msgid "Press to retry"
+msgstr ""
+
+#: src/view/com/lightbox/Lightbox.web.tsx:150
msgid "Previous image"
msgstr "Попереднє зображення"
@@ -3052,41 +3678,47 @@ msgstr "Основна мова"
msgid "Prioritize Your Follows"
msgstr "Пріоритезувати ваші підписки"
-#: src/view/screens/Settings/index.tsx:632
-#: src/view/shell/desktop/RightNav.tsx:80
+#: src/view/screens/Settings/index.tsx:652
+#: src/view/shell/desktop/RightNav.tsx:72
msgid "Privacy"
msgstr "Конфіденційність"
-#: src/Navigation.tsx:217
+#: src/Navigation.tsx:231
+#: src/screens/Signup/StepInfo/Policies.tsx:56
#: src/view/screens/PrivacyPolicy.tsx:29
-#: src/view/screens/Settings/index.tsx:891
-#: src/view/shell/Drawer.tsx:262
+#: src/view/screens/Settings/index.tsx:923
+#: src/view/shell/Drawer.tsx:265
msgid "Privacy Policy"
msgstr "Політика конфіденційності"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:198
+#: src/screens/Login/ForgotPasswordForm.tsx:156
msgid "Processing..."
msgstr "Обробка..."
-#: src/view/shell/bottom-bar/BottomBar.tsx:247
-#: src/view/shell/desktop/LeftNav.tsx:415
+#: src/view/screens/DebugMod.tsx:888
+#: src/view/screens/Profile.tsx:342
+msgid "profile"
+msgstr ""
+
+#: src/view/shell/bottom-bar/BottomBar.tsx:260
+#: src/view/shell/desktop/LeftNav.tsx:419
#: src/view/shell/Drawer.tsx:70
-#: src/view/shell/Drawer.tsx:546
-#: src/view/shell/Drawer.tsx:547
+#: src/view/shell/Drawer.tsx:549
+#: src/view/shell/Drawer.tsx:550
msgid "Profile"
msgstr "Профіль"
-#: src/view/com/modals/EditProfile.tsx:128
+#: src/view/com/modals/EditProfile.tsx:129
msgid "Profile updated"
-msgstr ""
+msgstr "Профіль оновлено"
-#: src/view/screens/Settings/index.tsx:949
+#: src/view/screens/Settings/index.tsx:981
msgid "Protect your account by verifying your email."
msgstr "Захистіть свій обліковий запис, підтвердивши свою електронну адресу."
-#: src/screens/Onboarding/StepFinished.tsx:101
+#: src/screens/Onboarding/StepFinished.tsx:105
msgid "Public"
-msgstr ""
+msgstr "Публічний"
#: src/view/screens/ModerationModlists.tsx:61
msgid "Public, shareable lists of users to mute or block in bulk."
@@ -3096,44 +3728,39 @@ msgstr "Публічні, поширювані списки користувач
msgid "Public, shareable lists which can drive feeds."
msgstr "Публічні, поширювані списки для створення стрічок."
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish post"
-msgstr ""
+msgstr "Опублікувати пост"
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish reply"
-msgstr ""
+msgstr "Опублікувати відповідь"
-#: src/view/com/modals/Repost.tsx:65
+#: src/view/com/modals/Repost.tsx:66
msgctxt "action"
msgid "Quote post"
-msgstr ""
+msgstr "Цитувати"
#: src/view/com/util/post-ctrls/RepostButton.web.tsx:58
msgid "Quote post"
msgstr "Цитувати пост"
-#: src/view/com/modals/Repost.tsx:70
+#: src/view/com/modals/Repost.tsx:71
msgctxt "action"
msgid "Quote Post"
-msgstr ""
-
-#: src/view/com/modals/Repost.tsx:56
-#~ msgid "Quote Post"
-#~ msgstr "Цитувати пост"
+msgstr "Цитувати"
#: src/view/screens/PreferencesThreads.tsx:86
msgid "Random (aka \"Poster's Roulette\")"
msgstr "У випадковому порядку"
-#: src/view/com/modals/EditImage.tsx:236
+#: src/view/com/modals/EditImage.tsx:237
msgid "Ratios"
msgstr "Співвідношення сторін"
-#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:73
-#: src/view/com/auth/onboarding/RecommendedFollows.tsx:50
-#~ msgid "Recommended"
-#~ msgstr ""
+#: src/view/screens/Search/Search.tsx:777
+msgid "Recent Searches"
+msgstr ""
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116
msgid "Recommended Feeds"
@@ -3143,35 +3770,50 @@ msgstr "Рекомендовані стрічки"
msgid "Recommended Users"
msgstr "Рекомендовані користувачі"
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/components/dialogs/MutedWords.tsx:286
+#: src/view/com/feeds/FeedSourceCard.tsx:283
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/SelfLabel.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/com/util/UserAvatar.tsx:285
-#: src/view/com/util/UserBanner.tsx:91
+#: src/view/com/posts/FeedErrorMessage.tsx:204
msgid "Remove"
-msgstr "Вилучити"
+msgstr "Видалити"
-#: src/view/com/feeds/FeedSourceCard.tsx:106
-msgid "Remove {0} from my feeds?"
-msgstr "Вилучити {0} зі збережених стрічок?"
+#: src/view/com/feeds/FeedSourceCard.tsx:108
+#~ msgid "Remove {0} from my feeds?"
+#~ msgstr "Вилучити {0} зі збережених стрічок?"
#: src/view/com/util/AccountDropdownBtn.tsx:22
msgid "Remove account"
-msgstr "Вилучити обліковий запис"
+msgstr "Видалити обліковий запис"
-#: src/view/com/posts/FeedErrorMessage.tsx:131
-#: src/view/com/posts/FeedErrorMessage.tsx:166
+#: src/view/com/util/UserAvatar.tsx:358
+msgid "Remove Avatar"
+msgstr ""
+
+#: src/view/com/util/UserBanner.tsx:148
+msgid "Remove Banner"
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:160
msgid "Remove feed"
-msgstr "Вилучити стрічку"
+msgstr "Видалити стрічку"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:201
+msgid "Remove feed?"
+msgstr ""
-#: src/view/com/feeds/FeedSourceCard.tsx:105
-#: src/view/com/feeds/FeedSourceCard.tsx:167
-#: src/view/com/feeds/FeedSourceCard.tsx:172
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/feeds/FeedSourceCard.tsx:173
+#: src/view/com/feeds/FeedSourceCard.tsx:233
+#: src/view/screens/ProfileFeed.tsx:335
+#: src/view/screens/ProfileFeed.tsx:341
msgid "Remove from my feeds"
msgstr "Вилучити з моїх стрічок"
+#: src/view/com/feeds/FeedSourceCard.tsx:278
+msgid "Remove from my feeds?"
+msgstr ""
+
#: src/view/com/composer/photos/Gallery.tsx:167
msgid "Remove image"
msgstr "Вилучити зображення"
@@ -3180,33 +3822,44 @@ msgstr "Вилучити зображення"
msgid "Remove image preview"
msgstr "Вилучити попередній перегляд зображення"
-#: src/view/com/modals/Repost.tsx:47
+#: src/components/dialogs/MutedWords.tsx:329
+msgid "Remove mute word from your list"
+msgstr "Вилучити ігноровані слова з вашого списку"
+
+#: src/view/com/modals/Repost.tsx:48
msgid "Remove repost"
-msgstr ""
+msgstr "Видалити репост"
-#: src/view/com/feeds/FeedSourceCard.tsx:173
-msgid "Remove this feed from my feeds?"
-msgstr "Вилучити цю стрічку з ваших стрічок?"
+#: src/view/com/feeds/FeedSourceCard.tsx:175
+#~ msgid "Remove this feed from my feeds?"
+#~ msgstr "Вилучити цю стрічку з ваших стрічок?"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:202
+msgid "Remove this feed from your saved feeds"
+msgstr ""
#: src/view/com/posts/FeedErrorMessage.tsx:132
-msgid "Remove this feed from your saved feeds?"
-msgstr "Вилучити цю стрічку зі збережених стрічок?"
+#~ msgid "Remove this feed from your saved feeds?"
+#~ msgstr "Вилучити цю стрічку зі збережених стрічок?"
#: src/view/com/modals/ListAddRemoveUsers.tsx:199
#: src/view/com/modals/UserAddRemoveLists.tsx:152
msgid "Removed from list"
msgstr "Вилучено зі списку"
-#: src/view/com/feeds/FeedSourceCard.tsx:111
-#: src/view/com/feeds/FeedSourceCard.tsx:178
+#: src/view/com/feeds/FeedSourceCard.tsx:121
msgid "Removed from my feeds"
+msgstr "Вилучено з моїх стрічок"
+
+#: src/view/screens/ProfileFeed.tsx:209
+msgid "Removed from your feeds"
msgstr ""
#: src/view/com/composer/ExternalEmbed.tsx:71
msgid "Removes default thumbnail from {0}"
-msgstr ""
+msgstr "Видаляє мініатюру за замовчуванням з {0}"
-#: src/view/screens/Profile.tsx:181
+#: src/view/screens/Profile.tsx:191
msgid "Replies"
msgstr "Відповіді"
@@ -3214,49 +3867,75 @@ msgstr "Відповіді"
msgid "Replies to this thread are disabled"
msgstr "Відповіді до цього посту вимкнено"
-#: src/view/com/composer/Composer.tsx:348
+#: src/view/com/composer/Composer.tsx:365
msgctxt "action"
msgid "Reply"
-msgstr ""
+msgstr "Відповісти"
-#: src/view/screens/PreferencesHomeFeed.tsx:144
+#: src/view/screens/PreferencesFollowingFeed.tsx:144
msgid "Reply Filters"
msgstr "Які відповіді показувати"
#: src/view/com/post/Post.tsx:166
-#: src/view/com/posts/FeedItem.tsx:287
+#: src/view/com/posts/FeedItem.tsx:280
msgctxt "description"
msgid "Reply to <0/>"
-msgstr ""
+msgstr "У відповідь <0/>"
#: src/view/com/modals/report/Modal.tsx:166
-msgid "Report {collectionName}"
-msgstr "Поскаржитись на {collectionName}"
+#~ msgid "Report {collectionName}"
+#~ msgstr "Поскаржитись на {collectionName}"
-#: src/view/com/profile/ProfileHeader.tsx:360
+#: src/view/com/profile/ProfileMenu.tsx:319
+#: src/view/com/profile/ProfileMenu.tsx:322
msgid "Report Account"
msgstr "Поскаржитись на обліковий запис"
-#: src/view/screens/ProfileFeed.tsx:292
+#: src/components/ReportDialog/index.tsx:49
+msgid "Report dialog"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:352
+#: src/view/screens/ProfileFeed.tsx:354
msgid "Report feed"
msgstr "Поскаржитись на стрічку"
-#: src/view/screens/ProfileList.tsx:458
+#: src/view/screens/ProfileList.tsx:429
msgid "Report List"
msgstr "Поскаржитись на список"
-#: src/view/com/modals/report/SendReportButton.tsx:37
-#: src/view/com/util/forms/PostDropdownBtn.tsx:210
+#: src/view/com/util/forms/PostDropdownBtn.tsx:292
+#: src/view/com/util/forms/PostDropdownBtn.tsx:294
msgid "Report post"
msgstr "Поскаржитись на пост"
-#: src/view/com/modals/Repost.tsx:43
-#: src/view/com/modals/Repost.tsx:48
-#: src/view/com/modals/Repost.tsx:53
+#: src/components/ReportDialog/SelectReportOptionView.tsx:42
+msgid "Report this content"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:55
+msgid "Report this feed"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:52
+msgid "Report this list"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:49
+msgid "Report this post"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:46
+msgid "Report this user"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:44
+#: src/view/com/modals/Repost.tsx:49
+#: src/view/com/modals/Repost.tsx:54
#: src/view/com/util/post-ctrls/RepostButton.tsx:61
msgctxt "action"
msgid "Repost"
-msgstr ""
+msgstr "Репост"
#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
msgid "Repost"
@@ -3267,33 +3946,25 @@ msgstr "Репостити"
msgid "Repost or quote post"
msgstr "Репостити або цитувати"
-#: src/view/screens/PostRepostedBy.tsx:27
-#~ msgid "Reposted by"
-#~ msgstr "Репост"
-
#: src/view/screens/PostRepostedBy.tsx:27
msgid "Reposted By"
-msgstr ""
+msgstr "Зробив(-ла) репост"
-#: src/view/com/posts/FeedItem.tsx:207
+#: src/view/com/posts/FeedItem.tsx:197
msgid "Reposted by {0}"
-msgstr ""
-
-#: src/view/com/posts/FeedItem.tsx:206
-#~ msgid "Reposted by {0})"
-#~ msgstr ""
+msgstr "{0} зробив(-ла) репост"
-#: src/view/com/posts/FeedItem.tsx:224
+#: src/view/com/posts/FeedItem.tsx:214
msgid "Reposted by <0/>"
-msgstr ""
+msgstr "<0/> зробив(-ла) репост"
-#: src/view/com/notifications/FeedItem.tsx:162
+#: src/view/com/notifications/FeedItem.tsx:166
msgid "reposted your post"
-msgstr ""
+msgstr "зробив(-ла) репост вашого допису"
#: src/view/com/post-thread/PostThreadItem.tsx:187
msgid "Reposts of this post"
-msgstr ""
+msgstr "Репости цього поста"
#: src/view/com/modals/ChangeEmail.tsx:181
#: src/view/com/modals/ChangeEmail.tsx:183
@@ -3301,183 +3972,213 @@ msgid "Request Change"
msgstr "Змінити"
#: src/view/com/auth/create/Step2.tsx:219
-msgid "Request code"
-msgstr ""
+#~ msgid "Request code"
+#~ msgstr ""
-#: src/view/com/modals/ChangePassword.tsx:239
#: src/view/com/modals/ChangePassword.tsx:241
+#: src/view/com/modals/ChangePassword.tsx:243
msgid "Request Code"
-msgstr ""
+msgstr "Надіслати запит на код"
-#: src/view/screens/Moderation.tsx:188
-#~ msgid "Request to limit the visibility of my account"
-#~ msgstr ""
-
-#: src/view/screens/Settings/index.tsx:456
+#: src/view/screens/Settings/index.tsx:475
msgid "Require alt text before posting"
-msgstr "Вимагати альтернативний текст до зображень перед публікацією"
+msgstr "Вимагати опис зображень перед публікацією"
-#: src/view/com/auth/create/Step1.tsx:149
+#: src/screens/Signup/StepInfo/index.tsx:69
msgid "Required for this provider"
msgstr "Вимагається цим хостинг-провайдером"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:124
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:136
+#: src/view/com/modals/ChangePassword.tsx:185
msgid "Reset code"
msgstr "Код підтвердження"
-#: src/view/com/modals/ChangePassword.tsx:190
+#: src/view/com/modals/ChangePassword.tsx:192
msgid "Reset Code"
-msgstr ""
+msgstr "Код скидання"
#: src/view/screens/Settings/index.tsx:824
-msgid "Reset onboarding"
-msgstr ""
+#~ msgid "Reset onboarding"
+#~ msgstr "Скинути ознайомлення"
-#: src/view/screens/Settings/index.tsx:827
+#: src/view/screens/Settings/index.tsx:858
+#: src/view/screens/Settings/index.tsx:861
msgid "Reset onboarding state"
msgstr ""
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:104
+#: src/screens/Login/ForgotPasswordForm.tsx:86
msgid "Reset password"
msgstr "Скинути пароль"
#: src/view/screens/Settings/index.tsx:814
-msgid "Reset preferences"
-msgstr ""
+#~ msgid "Reset preferences"
+#~ msgstr "Скинути налаштування"
-#: src/view/screens/Settings/index.tsx:817
+#: src/view/screens/Settings/index.tsx:848
+#: src/view/screens/Settings/index.tsx:851
msgid "Reset preferences state"
msgstr ""
-#: src/view/screens/Settings/index.tsx:825
+#: src/view/screens/Settings/index.tsx:859
msgid "Resets the onboarding state"
msgstr ""
-#: src/view/screens/Settings/index.tsx:815
+#: src/view/screens/Settings/index.tsx:849
msgid "Resets the preferences state"
msgstr ""
-#: src/view/com/auth/login/LoginForm.tsx:269
+#: src/screens/Login/LoginForm.tsx:235
msgid "Retries login"
-msgstr ""
+msgstr "Повторити спробу"
#: src/view/com/util/error/ErrorMessage.tsx:57
#: src/view/com/util/error/ErrorScreen.tsx:74
msgid "Retries the last action, which errored out"
-msgstr ""
-
-#: src/screens/Onboarding/StepInterests/index.tsx:221
-#: src/screens/Onboarding/StepInterests/index.tsx:224
-#: src/view/com/auth/create/CreateAccount.tsx:170
-#: src/view/com/auth/create/CreateAccount.tsx:175
-#: src/view/com/auth/create/Step2.tsx:255
-#: src/view/com/auth/login/LoginForm.tsx:268
-#: src/view/com/auth/login/LoginForm.tsx:271
+msgstr "Повторити останню дію, яка спричинила помилку"
+
+#: src/components/Error.tsx:79
+#: src/components/Lists.tsx:91
+#: src/screens/Login/LoginForm.tsx:234
+#: src/screens/Login/LoginForm.tsx:241
+#: src/screens/Onboarding/StepInterests/index.tsx:225
+#: src/screens/Onboarding/StepInterests/index.tsx:228
+#: src/screens/Signup/index.tsx:193
#: src/view/com/util/error/ErrorMessage.tsx:55
#: src/view/com/util/error/ErrorScreen.tsx:72
msgid "Retry"
msgstr "Повторити спробу"
-#: src/view/com/modals/ChangeHandle.tsx:169
-#~ msgid "Retry change handle"
+#: src/view/com/auth/create/Step2.tsx:247
+#~ msgid "Retry."
#~ msgstr ""
-#: src/view/com/auth/create/Step2.tsx:247
-msgid "Retry."
+#: src/components/Error.tsx:86
+#: src/view/screens/ProfileList.tsx:917
+msgid "Return to previous page"
+msgstr "Повернутися до попередньої сторінки"
+
+#: src/view/screens/NotFound.tsx:59
+msgid "Returns to home page"
msgstr ""
-#: src/view/screens/ProfileList.tsx:898
-msgid "Return to previous page"
+#: src/view/screens/NotFound.tsx:58
+#: src/view/screens/ProfileFeed.tsx:113
+msgid "Returns to previous page"
msgstr ""
#: src/view/shell/desktop/RightNav.tsx:55
-msgid "SANDBOX. Posts and accounts are not permanent."
-msgstr ""
+#~ msgid "SANDBOX. Posts and accounts are not permanent."
+#~ msgstr ""
-#: src/view/com/lightbox/Lightbox.tsx:132
-#: src/view/com/modals/CreateOrEditList.tsx:345
-msgctxt "action"
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/view/com/modals/ChangeHandle.tsx:174
+#: src/view/com/modals/CreateOrEditList.tsx:338
+#: src/view/com/modals/EditProfile.tsx:225
msgid "Save"
-msgstr ""
+msgstr "Зберегти"
-#: src/view/com/modals/BirthDateSettings.tsx:94
-#: src/view/com/modals/BirthDateSettings.tsx:97
-#: src/view/com/modals/ChangeHandle.tsx:173
-#: src/view/com/modals/CreateOrEditList.tsx:337
-#: src/view/com/modals/EditProfile.tsx:224
-#: src/view/screens/ProfileFeed.tsx:345
+#: src/view/com/lightbox/Lightbox.tsx:132
+#: src/view/com/modals/CreateOrEditList.tsx:346
+msgctxt "action"
msgid "Save"
msgstr "Зберегти"
-#: src/view/com/modals/AltImage.tsx:130
+#: src/view/com/modals/AltImage.tsx:131
msgid "Save alt text"
-msgstr "Зберегти альтернативний текст"
+msgstr "Зберегти опис"
-#: src/view/com/modals/UserAddRemoveLists.tsx:212
-#~ msgid "Save changes"
-#~ msgstr ""
+#: src/components/dialogs/BirthDateSettings.tsx:119
+msgid "Save birthday"
+msgstr ""
-#: src/view/com/modals/EditProfile.tsx:232
+#: src/view/com/modals/EditProfile.tsx:233
msgid "Save Changes"
msgstr "Зберегти зміни"
-#: src/view/com/modals/ChangeHandle.tsx:170
+#: src/view/com/modals/ChangeHandle.tsx:171
msgid "Save handle change"
msgstr "Зберегти новий псевдонім"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:144
+#: src/view/com/modals/crop-image/CropImage.web.tsx:145
msgid "Save image crop"
msgstr "Обрізати зображення"
+#: src/view/screens/ProfileFeed.tsx:336
+#: src/view/screens/ProfileFeed.tsx:342
+msgid "Save to my feeds"
+msgstr ""
+
#: src/view/screens/SavedFeeds.tsx:122
msgid "Saved Feeds"
msgstr "Збережені стрічки"
-#: src/view/com/modals/EditProfile.tsx:225
-msgid "Saves any changes to your profile"
+#: src/view/com/lightbox/Lightbox.tsx:81
+msgid "Saved to your camera roll."
msgstr ""
-#: src/view/com/modals/ChangeHandle.tsx:171
+#: src/view/screens/ProfileFeed.tsx:213
+msgid "Saved to your feeds"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:226
+msgid "Saves any changes to your profile"
+msgstr "Зберігає зміни вашого профілю"
+
+#: src/view/com/modals/ChangeHandle.tsx:172
msgid "Saves handle change to {handle}"
+msgstr "Зберігає зміню псевдоніму на {handle}"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:146
+msgid "Saves image crop settings"
msgstr ""
#: src/screens/Onboarding/index.tsx:36
msgid "Science"
-msgstr ""
+msgstr "Наука"
-#: src/view/screens/ProfileList.tsx:854
+#: src/view/screens/ProfileList.tsx:873
msgid "Scroll to top"
-msgstr ""
+msgstr "Прогорнути вгору"
-#: src/Navigation.tsx:437
-#: src/view/com/auth/LoggedOut.tsx:122
+#: src/Navigation.tsx:459
+#: src/view/com/auth/LoggedOut.tsx:123
#: src/view/com/modals/ListAddRemoveUsers.tsx:75
#: src/view/com/util/forms/SearchInput.tsx:67
#: src/view/com/util/forms/SearchInput.tsx:79
-#: src/view/screens/Search/Search.tsx:418
-#: src/view/screens/Search/Search.tsx:645
-#: src/view/screens/Search/Search.tsx:663
-#: src/view/shell/bottom-bar/BottomBar.tsx:159
-#: src/view/shell/desktop/LeftNav.tsx:324
-#: src/view/shell/desktop/Search.tsx:214
-#: src/view/shell/desktop/Search.tsx:223
-#: src/view/shell/Drawer.tsx:362
-#: src/view/shell/Drawer.tsx:363
+#: src/view/screens/Search/Search.tsx:421
+#: src/view/screens/Search/Search.tsx:670
+#: src/view/screens/Search/Search.tsx:688
+#: src/view/shell/bottom-bar/BottomBar.tsx:169
+#: src/view/shell/desktop/LeftNav.tsx:328
+#: src/view/shell/desktop/Search.tsx:215
+#: src/view/shell/desktop/Search.tsx:224
+#: src/view/shell/Drawer.tsx:365
+#: src/view/shell/Drawer.tsx:366
msgid "Search"
msgstr "Пошук"
-#: src/view/screens/Search/Search.tsx:712
-#: src/view/shell/desktop/Search.tsx:255
+#: src/view/screens/Search/Search.tsx:737
+#: src/view/shell/desktop/Search.tsx:256
msgid "Search for \"{query}\""
-msgstr ""
+msgstr "Шукати \"{query}\""
+
+#: src/components/TagMenu/index.tsx:145
+msgid "Search for all posts by @{authorHandle} with tag {displayTag}"
+msgstr "Пошук усіх повідомлень @{authorHandle} з тегом {displayTag}"
-#: src/view/screens/Search/Search.tsx:390
-#~ msgid "Search for posts and users."
+#: src/components/TagMenu/index.tsx:145
+#~ msgid "Search for all posts by @{authorHandle} with tag {tag}"
+#~ msgstr ""
+
+#: src/components/TagMenu/index.tsx:94
+msgid "Search for all posts with tag {displayTag}"
+msgstr "Пошук усіх повідомлень з тегом {displayTag}"
+
+#: src/components/TagMenu/index.tsx:90
+#~ msgid "Search for all posts with tag {tag}"
#~ msgstr ""
-#: src/view/com/auth/LoggedOut.tsx:104
#: src/view/com/auth/LoggedOut.tsx:105
+#: src/view/com/auth/LoggedOut.tsx:106
#: src/view/com/modals/ListAddRemoveUsers.tsx:70
msgid "Search for users"
msgstr "Пошук користувачів"
@@ -3486,206 +4187,295 @@ msgstr "Пошук користувачів"
msgid "Security Step Required"
msgstr "Потрібен код підтвердження"
+#: src/components/TagMenu/index.web.tsx:66
+msgid "See {truncatedTag} posts"
+msgstr "Переглянути дописи {truncatedTag}"
+
+#: src/components/TagMenu/index.web.tsx:83
+msgid "See {truncatedTag} posts by user"
+msgstr "Переглянути пости користувача з {truncatedTag}"
+
+#: src/components/TagMenu/index.tsx:128
+msgid "See <0>{displayTag}0> posts"
+msgstr "Переглянути пости з <0>{displayTag}0>"
+
+#: src/components/TagMenu/index.tsx:187
+msgid "See <0>{displayTag}0> posts by this user"
+msgstr "Переглянути пости цього користувача з <0>{displayTag}0>"
+
+#: src/components/TagMenu/index.tsx:128
+#~ msgid "See <0>{tag}0> posts"
+#~ msgstr ""
+
+#: src/components/TagMenu/index.tsx:189
+#~ msgid "See <0>{tag}0> posts by this user"
+#~ msgstr ""
+
#: src/view/screens/SavedFeeds.tsx:163
msgid "See this guide"
-msgstr ""
+msgstr "Перегляньте цей посібник"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:39
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:40
msgid "See what's next"
msgstr "Що далі?"
#: src/view/com/util/Selector.tsx:106
msgid "Select {item}"
+msgstr "Обрати {item}"
+
+#: src/screens/Login/ChooseAccountForm.tsx:61
+msgid "Select account"
msgstr ""
#: src/view/com/modals/ServerInput.tsx:75
#~ msgid "Select Bluesky Social"
-#~ msgstr "Вибрати Bluesky Social"
+#~ msgstr ""
-#: src/view/com/auth/login/Login.tsx:117
+#: src/screens/Login/index.tsx:120
msgid "Select from an existing account"
msgstr "Вибрати існуючий обліковий запис"
+#: src/view/screens/LanguageSettings.tsx:299
+msgid "Select languages"
+msgstr ""
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:30
+msgid "Select moderator"
+msgstr ""
+
#: src/view/com/util/Selector.tsx:107
msgid "Select option {i} of {numItems}"
-msgstr ""
+msgstr "Обрати варіант {i} із {numItems}"
-#: src/view/com/auth/create/Step1.tsx:99
-#: src/view/com/auth/login/LoginForm.tsx:150
-msgid "Select service"
-msgstr "Вибрати хостинг-провайдера"
+#: src/view/com/auth/create/Step1.tsx:96
+#: src/view/com/auth/login/LoginForm.tsx:153
+#~ msgid "Select service"
+#~ msgstr "Вибрати хостинг-провайдера"
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:52
msgid "Select some accounts below to follow"
+msgstr "Оберіть деякі облікові записи, щоб підписатися"
+
+#: src/components/ReportDialog/SubmitView.tsx:135
+msgid "Select the moderation service(s) to report to"
msgstr ""
#: src/view/com/auth/server-input/index.tsx:82
msgid "Select the service that hosts your data."
-msgstr ""
+msgstr "Виберіть хостинг-провайдера для ваших даних."
#: src/screens/Onboarding/StepModeration/index.tsx:49
#~ msgid "Select the types of content that you want to see (or not see), and we'll handle the rest."
#~ msgstr ""
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:90
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:100
msgid "Select topical feeds to follow from the list below"
-msgstr ""
+msgstr "Підпишіться на тематичні стрічки зі списку нижче"
-#: src/screens/Onboarding/StepModeration/index.tsx:75
+#: src/screens/Onboarding/StepModeration/index.tsx:63
msgid "Select what you want to see (or not see), and we’ll handle the rest."
-msgstr ""
+msgstr "Виберіть, що ви хочете бачити (або не бачити), а решту ми зробимо за вас."
#: src/view/screens/LanguageSettings.tsx:281
msgid "Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown."
-msgstr "Оберіть мови постів, які ви хочете бачити у збережених стрічках. Якщо не вибрано жодної - буде показано пости всіма мовами."
+msgstr "Оберіть мови постів, які ви хочете бачити у збережених каналах. Якщо не вибрано жодної – буде показано пости всіма мовами."
#: src/view/screens/LanguageSettings.tsx:98
-msgid "Select your app language for the default text to display in the app"
-msgstr "Оберіть мову інтерфейсу"
+#~ msgid "Select your app language for the default text to display in the app"
+#~ msgstr "Оберіть мову інтерфейсу"
-#: src/screens/Onboarding/StepInterests/index.tsx:196
-msgid "Select your interests from the options below"
+#: src/view/screens/LanguageSettings.tsx:98
+msgid "Select your app language for the default text to display in the app."
msgstr ""
-#: src/view/com/auth/create/Step2.tsx:155
-msgid "Select your phone's country"
+#: src/screens/Signup/StepInfo/index.tsx:133
+msgid "Select your date of birth"
msgstr ""
+#: src/screens/Onboarding/StepInterests/index.tsx:200
+msgid "Select your interests from the options below"
+msgstr "Виберіть ваші інтереси із нижченаведених варіантів"
+
+#: src/view/com/auth/create/Step2.tsx:155
+#~ msgid "Select your phone's country"
+#~ msgstr ""
+
#: src/view/screens/LanguageSettings.tsx:190
msgid "Select your preferred language for translations in your feed."
msgstr "Оберіть бажану мову для перекладів у вашій стрічці."
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:116
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:117
msgid "Select your primary algorithmic feeds"
-msgstr ""
+msgstr "Оберіть ваші основні алгоритмічні стрічки"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:142
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:133
msgid "Select your secondary algorithmic feeds"
-msgstr ""
+msgstr "Оберіть ваші другорядні алгоритмічні стрічки"
#: src/view/com/modals/VerifyEmail.tsx:202
#: src/view/com/modals/VerifyEmail.tsx:204
msgid "Send Confirmation Email"
msgstr "Надіслати лист із кодом підтвердження"
-#: src/view/com/modals/DeleteAccount.tsx:131
+#: src/view/com/modals/DeleteAccount.tsx:130
msgid "Send email"
msgstr "Надіслати ел. листа"
-#: src/view/com/modals/DeleteAccount.tsx:144
+#: src/view/com/modals/DeleteAccount.tsx:143
msgctxt "action"
msgid "Send Email"
-msgstr ""
-
-#: src/view/com/modals/DeleteAccount.tsx:138
-#~ msgid "Send Email"
-#~ msgstr "Надіслати ел. листа"
+msgstr "Надіслати ел. лист"
-#: src/view/shell/Drawer.tsx:295
-#: src/view/shell/Drawer.tsx:316
+#: src/view/shell/Drawer.tsx:298
+#: src/view/shell/Drawer.tsx:319
msgid "Send feedback"
msgstr "Надіслати відгук"
+#: src/components/ReportDialog/SubmitView.tsx:214
+#: src/components/ReportDialog/SubmitView.tsx:218
+msgid "Send report"
+msgstr ""
+
#: src/view/com/modals/report/SendReportButton.tsx:45
-msgid "Send Report"
-msgstr "Поскаржитись"
+#~ msgid "Send Report"
+#~ msgstr "Поскаржитись"
-#: src/view/com/modals/DeleteAccount.tsx:133
-msgid "Sends email with confirmation code for account deletion"
+#: src/components/ReportDialog/SelectLabelerView.tsx:44
+msgid "Send report to {0}"
msgstr ""
-#: src/view/com/auth/server-input/index.tsx:110
+#: src/view/com/modals/DeleteAccount.tsx:132
+msgid "Sends email with confirmation code for account deletion"
+msgstr "Надсилає електронний лист з кодом підтвердження видалення облікового запису"
+
+#: src/view/com/auth/server-input/index.tsx:114
msgid "Server address"
-msgstr ""
+msgstr "Адреса сервера"
#: src/view/com/modals/ContentFilteringSettings.tsx:311
-msgid "Set {value} for {labelGroup} content moderation policy"
-msgstr ""
+#~ msgid "Set {value} for {labelGroup} content moderation policy"
+#~ msgstr "Встановити {value} для політики модерації вмісту {labelGroup}"
#: src/view/com/modals/ContentFilteringSettings.tsx:160
#: src/view/com/modals/ContentFilteringSettings.tsx:179
-msgctxt "action"
-msgid "Set Age"
+#~ msgctxt "action"
+#~ msgid "Set Age"
+#~ msgstr "Встановити вік"
+
+#: src/screens/Moderation/index.tsx:304
+msgid "Set birthdate"
msgstr ""
#: src/view/screens/Settings/index.tsx:488
-msgid "Set color theme to dark"
-msgstr ""
+#~ msgid "Set color theme to dark"
+#~ msgstr "Встановити темне оформлення"
#: src/view/screens/Settings/index.tsx:481
-msgid "Set color theme to light"
-msgstr ""
+#~ msgid "Set color theme to light"
+#~ msgstr "Встановити світле оформлення"
#: src/view/screens/Settings/index.tsx:475
-msgid "Set color theme to system setting"
-msgstr ""
+#~ msgid "Set color theme to system setting"
+#~ msgstr "Встановити системне оформлення"
#: src/view/screens/Settings/index.tsx:514
-msgid "Set dark theme to the dark theme"
-msgstr ""
+#~ msgid "Set dark theme to the dark theme"
+#~ msgstr "Встановити темну тему"
#: src/view/screens/Settings/index.tsx:507
-msgid "Set dark theme to the dim theme"
-msgstr ""
+#~ msgid "Set dark theme to the dim theme"
+#~ msgstr "Встановити темну тьмяну тему"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:104
+#: src/screens/Login/SetNewPasswordForm.tsx:102
msgid "Set new password"
msgstr "Зміна пароля"
-#: src/view/com/auth/create/Step1.tsx:221
-msgid "Set password"
-msgstr ""
+#: src/view/com/auth/create/Step1.tsx:202
+#~ msgid "Set password"
+#~ msgstr "Встановити пароль"
-#: src/view/screens/PreferencesHomeFeed.tsx:225
+#: src/view/screens/PreferencesFollowingFeed.tsx:225
msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible."
-msgstr "Вимкніть це налаштування, щоб приховати всі цитовані пости у вашій стрічці. Не впливає на репости без цитування."
+msgstr "Вимкніть цей параметр, щоб приховати всі цитовані пости у вашій стрічці. Не впливає на репости без цитування."
-#: src/view/screens/PreferencesHomeFeed.tsx:122
+#: src/view/screens/PreferencesFollowingFeed.tsx:122
msgid "Set this setting to \"No\" to hide all replies from your feed."
-msgstr "Вимкніть це налаштування, щоб приховати всі відповіді у вашій стрічці."
+msgstr "Вимкніть цей параметр, щоб приховати всі відповіді у вашій стрічці."
-#: src/view/screens/PreferencesHomeFeed.tsx:191
+#: src/view/screens/PreferencesFollowingFeed.tsx:191
msgid "Set this setting to \"No\" to hide all reposts from your feed."
-msgstr "Вимкніть це налаштування, щоб приховати всі репости у вашій стрічці."
+msgstr "Вимкніть цей параметр, щоб приховати всі репости у вашій стрічці."
#: src/view/screens/PreferencesThreads.tsx:122
msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature."
msgstr "Увімкніть це налаштування, щоб показувати відповіді у вигляді гілок. Це експериментальна функція."
#: src/view/screens/PreferencesHomeFeed.tsx:261
-msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
+#~ msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
+#~ msgstr ""
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:261
+msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your Following feed. This is an experimental feature."
msgstr "Увімкніть це налаштування, щоб іноді бачити пости зі збережених стрічок у вашій домашній стрічці. Це експериментальна функція."
-#: src/screens/Onboarding/Layout.tsx:50
+#: src/screens/Onboarding/Layout.tsx:48
msgid "Set up your account"
-msgstr ""
+msgstr "Налаштуйте ваш обліковий запис"
-#: src/view/com/modals/ChangeHandle.tsx:266
+#: src/view/com/modals/ChangeHandle.tsx:267
msgid "Sets Bluesky username"
+msgstr "Встановлює псевдонім Bluesky"
+
+#: src/view/screens/Settings/index.tsx:507
+msgid "Sets color theme to dark"
msgstr ""
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:157
-msgid "Sets email for password reset"
+#: src/view/screens/Settings/index.tsx:500
+msgid "Sets color theme to light"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:494
+msgid "Sets color theme to system setting"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:533
+msgid "Sets dark theme to the dark theme"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:526
+msgid "Sets dark theme to the dim theme"
msgstr ""
+#: src/screens/Login/ForgotPasswordForm.tsx:113
+msgid "Sets email for password reset"
+msgstr "Встановлює ел. адресу для скидання пароля"
+
#: src/view/com/auth/login/ForgotPasswordForm.tsx:122
-msgid "Sets hosting provider for password reset"
+#~ msgid "Sets hosting provider for password reset"
+#~ msgstr "Встановлює хостинг-провайдером для скидання пароля"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:124
+msgid "Sets image aspect ratio to square"
msgstr ""
-#: src/view/com/auth/create/Step1.tsx:143
-#~ msgid "Sets hosting provider to {label}"
-#~ msgstr ""
+#: src/view/com/modals/crop-image/CropImage.web.tsx:114
+msgid "Sets image aspect ratio to tall"
+msgstr ""
-#: src/view/com/auth/create/Step1.tsx:100
-#: src/view/com/auth/login/LoginForm.tsx:151
-msgid "Sets server for the Bluesky client"
+#: src/view/com/modals/crop-image/CropImage.web.tsx:104
+msgid "Sets image aspect ratio to wide"
msgstr ""
-#: src/Navigation.tsx:135
-#: src/view/screens/Settings/index.tsx:294
-#: src/view/shell/desktop/LeftNav.tsx:433
-#: src/view/shell/Drawer.tsx:567
-#: src/view/shell/Drawer.tsx:568
+#: src/view/com/auth/create/Step1.tsx:97
+#: src/view/com/auth/login/LoginForm.tsx:154
+#~ msgid "Sets server for the Bluesky client"
+#~ msgstr "Встановлює сервер для застосунку Bluesky"
+
+#: src/Navigation.tsx:139
+#: src/view/screens/Settings/index.tsx:313
+#: src/view/shell/desktop/LeftNav.tsx:437
+#: src/view/shell/Drawer.tsx:570
+#: src/view/shell/Drawer.tsx:571
msgid "Settings"
msgstr "Налаштування"
@@ -3693,76 +4483,105 @@ msgstr "Налаштування"
msgid "Sexual activity or erotic nudity."
msgstr "Сексуальна активність або еротична оголеність."
+#: src/lib/moderation/useGlobalLabelStrings.ts:38
+msgid "Sexually Suggestive"
+msgstr ""
+
#: src/view/com/lightbox/Lightbox.tsx:141
msgctxt "action"
msgid "Share"
-msgstr ""
+msgstr "Поширити"
-#: src/view/com/profile/ProfileHeader.tsx:294
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
-#: src/view/screens/ProfileList.tsx:417
+#: src/view/com/profile/ProfileMenu.tsx:215
+#: src/view/com/profile/ProfileMenu.tsx:224
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:235
+#: src/view/screens/ProfileList.tsx:388
msgid "Share"
msgstr "Поширити"
-#: src/view/screens/ProfileFeed.tsx:304
+#: src/view/com/profile/ProfileMenu.tsx:373
+#: src/view/com/util/forms/PostDropdownBtn.tsx:347
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:251
+msgid "Share anyway"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:362
+#: src/view/screens/ProfileFeed.tsx:364
msgid "Share feed"
msgstr "Поширити стрічку"
-#: src/view/screens/ProfileFeed.tsx:276
-#~ msgid "Share link"
-#~ msgstr ""
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
+msgid "Share Link"
+msgstr ""
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:43
-#: src/view/com/modals/ContentFilteringSettings.tsx:266
-#: src/view/com/util/moderation/ContentHider.tsx:107
-#: src/view/com/util/moderation/PostHider.tsx:108
-#: src/view/screens/Settings/index.tsx:344
+#: src/view/com/modals/LinkWarning.tsx:92
+msgid "Shares the linked website"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:136
+#: src/components/moderation/PostHider.tsx:107
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:54
+#: src/view/screens/Settings/index.tsx:363
msgid "Show"
-msgstr "Показати"
+msgstr "Показувати"
-#: src/view/screens/PreferencesHomeFeed.tsx:68
+#: src/view/screens/PreferencesFollowingFeed.tsx:68
msgid "Show all replies"
-msgstr ""
+msgstr "Показати всі відповіді"
-#: src/view/com/util/moderation/ScreenHider.tsx:132
+#: src/components/moderation/ScreenHider.tsx:169
+#: src/components/moderation/ScreenHider.tsx:172
msgid "Show anyway"
msgstr "Всеодно показати"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:27
+#: src/lib/moderation/useLabelBehaviorDescription.ts:63
+msgid "Show badge"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:61
+msgid "Show badge and filter from feeds"
+msgstr ""
+
#: src/view/com/modals/EmbedConsent.tsx:87
-msgid "Show embeds from {0}"
-msgstr "Показати вбудування з {0}"
+#~ msgid "Show embeds from {0}"
+#~ msgstr "Показати вбудування з {0}"
-#: src/view/com/profile/ProfileHeader.tsx:458
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:200
msgid "Show follows similar to {0}"
-msgstr ""
+msgstr "Показати підписки, схожі на {0}"
-#: src/view/com/post-thread/PostThreadItem.tsx:539
-#: src/view/com/post/Post.tsx:197
-#: src/view/com/posts/FeedItem.tsx:363
+#: src/view/com/post-thread/PostThreadItem.tsx:507
+#: src/view/com/post/Post.tsx:201
+#: src/view/com/posts/FeedItem.tsx:355
msgid "Show More"
-msgstr ""
+msgstr "Показати більше"
-#: src/view/screens/PreferencesHomeFeed.tsx:258
+#: src/view/screens/PreferencesFollowingFeed.tsx:258
msgid "Show Posts from My Feeds"
msgstr "Показувати пости зі збережених стрічок"
-#: src/view/screens/PreferencesHomeFeed.tsx:222
+#: src/view/screens/PreferencesFollowingFeed.tsx:222
msgid "Show Quote Posts"
msgstr "Показувати цитати"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:118
+#: src/screens/Onboarding/StepFollowingFeed.tsx:119
msgid "Show quote-posts in Following feed"
-msgstr ""
+msgstr "Показувати цитування у стрічці \"Following\""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:134
+#: src/screens/Onboarding/StepFollowingFeed.tsx:135
msgid "Show quotes in Following"
-msgstr ""
+msgstr "Показувати цитування у стрічці \"Following\""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:94
+#: src/screens/Onboarding/StepFollowingFeed.tsx:95
msgid "Show re-posts in Following feed"
-msgstr ""
+msgstr "Показувати репости у стрічці \"Following\""
-#: src/view/screens/PreferencesHomeFeed.tsx:119
+#: src/view/screens/PreferencesFollowingFeed.tsx:119
msgid "Show Replies"
msgstr "Показувати відповіді"
@@ -3770,87 +4589,98 @@ msgstr "Показувати відповіді"
msgid "Show replies by people you follow before all other replies."
msgstr "Показувати відповіді від людей, за якими ви слідкуєте, вище інших."
-#: src/screens/Onboarding/StepFollowingFeed.tsx:86
+#: src/screens/Onboarding/StepFollowingFeed.tsx:87
msgid "Show replies in Following"
-msgstr ""
+msgstr "Показувати відповіді у стрічці \"Following\""
-#: src/screens/Onboarding/StepFollowingFeed.tsx:70
+#: src/screens/Onboarding/StepFollowingFeed.tsx:71
msgid "Show replies in Following feed"
-msgstr ""
+msgstr "Показувати відповіді у стрічці \"Following\""
-#: src/view/screens/PreferencesHomeFeed.tsx:70
+#: src/view/screens/PreferencesFollowingFeed.tsx:70
msgid "Show replies with at least {value} {0}"
-msgstr ""
+msgstr "Показувати відповіді від {value} {0}"
-#: src/view/screens/PreferencesHomeFeed.tsx:188
+#: src/view/screens/PreferencesFollowingFeed.tsx:188
msgid "Show Reposts"
msgstr "Показувати репости"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:110
+#: src/screens/Onboarding/StepFollowingFeed.tsx:111
msgid "Show reposts in Following"
-msgstr ""
+msgstr "Показувати репости у стрічці \"Following\""
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:68
+#: src/components/moderation/PostHider.tsx:64
msgid "Show the content"
-msgstr ""
+msgstr "Показати вміст"
-#: src/view/com/notifications/FeedItem.tsx:346
+#: src/view/com/notifications/FeedItem.tsx:351
msgid "Show users"
msgstr "Показати користувачів"
-#: src/view/com/profile/ProfileHeader.tsx:461
-msgid "Shows a list of users similar to this user."
+#: src/lib/moderation/useLabelBehaviorDescription.ts:58
+msgid "Show warning"
msgstr ""
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:124
-#: src/view/com/profile/ProfileHeader.tsx:505
-msgid "Shows posts from {0} in your feed"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:56
+msgid "Show warning and filter from feeds"
msgstr ""
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:70
-#: src/view/com/auth/login/Login.tsx:98
-#: src/view/com/auth/SplashScreen.tsx:54
-#: src/view/shell/bottom-bar/BottomBar.tsx:285
-#: src/view/shell/bottom-bar/BottomBar.tsx:286
-#: src/view/shell/bottom-bar/BottomBar.tsx:288
+#: src/view/com/profile/ProfileHeader.tsx:462
+#~ msgid "Shows a list of users similar to this user."
+#~ msgstr "Показує список користувачів, схожих на цього."
+
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:130
+msgid "Shows posts from {0} in your feed"
+msgstr "Показує дописи з {0} у вашій стрічці"
+
+#: src/screens/Login/index.tsx:100
+#: src/screens/Login/index.tsx:119
+#: src/screens/Login/LoginForm.tsx:131
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:73
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:83
+#: src/view/com/auth/SplashScreen.tsx:81
+#: src/view/com/auth/SplashScreen.tsx:90
+#: src/view/com/auth/SplashScreen.web.tsx:110
+#: src/view/com/auth/SplashScreen.web.tsx:119
+#: src/view/shell/bottom-bar/BottomBar.tsx:300
+#: src/view/shell/bottom-bar/BottomBar.tsx:301
+#: src/view/shell/bottom-bar/BottomBar.tsx:303
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:178
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:179
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:181
#: src/view/shell/NavSignupCard.tsx:58
#: src/view/shell/NavSignupCard.tsx:59
+#: src/view/shell/NavSignupCard.tsx:61
msgid "Sign in"
msgstr "Увійти"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:78
-#: src/view/com/auth/SplashScreen.tsx:57
-#: src/view/com/auth/SplashScreen.web.tsx:87
-msgid "Sign In"
-msgstr "Увійти"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:82
+#: src/view/com/auth/SplashScreen.tsx:86
+#: src/view/com/auth/SplashScreen.web.tsx:91
+#~ msgid "Sign In"
+#~ msgstr "Увійти"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:44
+#: src/components/AccountList.tsx:109
msgid "Sign in as {0}"
msgstr "Увійти як {0}"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:118
-#: src/view/com/auth/login/Login.tsx:116
+#: src/screens/Login/ChooseAccountForm.tsx:64
msgid "Sign in as..."
msgstr "Увійти як..."
-#: src/view/com/auth/login/LoginForm.tsx:137
-msgid "Sign into"
-msgstr "Увійти до"
+#: src/view/com/auth/login/LoginForm.tsx:140
+#~ msgid "Sign into"
+#~ msgstr "Увійти до"
-#: src/view/com/modals/SwitchAccount.tsx:64
-#: src/view/com/modals/SwitchAccount.tsx:69
-#: src/view/screens/Settings/index.tsx:100
-#: src/view/screens/Settings/index.tsx:103
+#: src/view/screens/Settings/index.tsx:107
+#: src/view/screens/Settings/index.tsx:110
msgid "Sign out"
msgstr "Вийти"
-#: src/view/shell/bottom-bar/BottomBar.tsx:275
-#: src/view/shell/bottom-bar/BottomBar.tsx:276
-#: src/view/shell/bottom-bar/BottomBar.tsx:278
+#: src/view/shell/bottom-bar/BottomBar.tsx:290
+#: src/view/shell/bottom-bar/BottomBar.tsx:291
+#: src/view/shell/bottom-bar/BottomBar.tsx:293
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:168
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:169
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:171
@@ -3864,51 +4694,62 @@ msgstr "Зареєструватися"
msgid "Sign up or sign in to join the conversation"
msgstr "Зареєструйтеся або увійдіть, щоб приєднатися до розмови"
-#: src/view/com/util/moderation/ScreenHider.tsx:76
+#: src/components/moderation/ScreenHider.tsx:97
+#: src/lib/moderation/useGlobalLabelStrings.ts:28
msgid "Sign-in Required"
msgstr "Необхідно увійти для перегляду"
-#: src/view/screens/Settings/index.tsx:355
+#: src/view/screens/Settings/index.tsx:374
msgid "Signed in as"
msgstr "Ви увійшли як"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:103
+#: src/screens/Login/ChooseAccountForm.tsx:48
msgid "Signed in as @{0}"
-msgstr ""
+msgstr "Ви увійшли як @{0}"
-#: src/view/com/modals/SwitchAccount.tsx:66
-msgid "Signs {0} out of Bluesky"
-msgstr ""
+#: src/view/com/modals/SwitchAccount.tsx:70
+#~ msgid "Signs {0} out of Bluesky"
+#~ msgstr "Виходить з Bluesky облікового запису {0}"
-#: src/screens/Onboarding/StepInterests/index.tsx:235
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:195
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:33
+#: src/screens/Onboarding/StepInterests/index.tsx:239
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:203
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:35
msgid "Skip"
msgstr "Пропустити"
-#: src/screens/Onboarding/StepInterests/index.tsx:232
+#: src/screens/Onboarding/StepInterests/index.tsx:236
msgid "Skip this flow"
-msgstr ""
+msgstr "Пропустити цей процес"
#: src/view/com/auth/create/Step2.tsx:82
-msgid "SMS verification"
-msgstr ""
+#~ msgid "SMS verification"
+#~ msgstr ""
#: src/screens/Onboarding/index.tsx:40
msgid "Software Dev"
-msgstr ""
+msgstr "Розробка П/З"
#: src/view/com/modals/ProfilePreview.tsx:62
#~ msgid "Something went wrong and we're not sure what."
#~ msgstr ""
-#: src/view/com/modals/Waitlist.tsx:51
-msgid "Something went wrong. Check your email and try again."
+#: src/components/ReportDialog/index.tsx:59
+#: src/screens/Moderation/index.tsx:114
+#: src/screens/Profile/Sections/Labels.tsx:76
+msgid "Something went wrong, please try again."
msgstr ""
-#: src/App.native.tsx:61
+#: src/components/Lists.tsx:203
+#~ msgid "Something went wrong!"
+#~ msgstr "Щось пішло не так!"
+
+#: src/view/com/modals/Waitlist.tsx:51
+#~ msgid "Something went wrong. Check your email and try again."
+#~ msgstr ""
+
+#: src/App.native.tsx:66
msgid "Sorry! Your session expired. Please log in again."
-msgstr ""
+msgstr "Даруйте! Ваш сеанс вичерпався. Будь ласка, увійдіть знову."
#: src/view/screens/PreferencesThreads.tsx:69
msgid "Sort Replies"
@@ -3918,11 +4759,23 @@ msgstr "Сортувати відповіді"
msgid "Sort replies to the same post by:"
msgstr "Оберіть, як сортувати відповіді до постів:"
+#: src/components/moderation/LabelsOnMeDialog.tsx:146
+msgid "Source:"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:65
+msgid "Spam"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:53
+msgid "Spam; excessive mentions or replies"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:30
msgid "Sports"
-msgstr ""
+msgstr "Спорт"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:122
+#: src/view/com/modals/crop-image/CropImage.web.tsx:123
msgid "Square"
msgstr "Квадратне"
@@ -3930,61 +4783,70 @@ msgstr "Квадратне"
#~ msgid "Staging"
#~ msgstr ""
-#: src/view/screens/Settings/index.tsx:871
+#: src/view/screens/Settings/index.tsx:903
msgid "Status page"
msgstr "Сторінка стану"
-#: src/view/com/auth/create/StepHeader.tsx:22
-msgid "Step {0} of {numSteps}"
+#: src/screens/Signup/index.tsx:142
+msgid "Step"
msgstr ""
-#: src/view/com/auth/create/StepHeader.tsx:15
-#~ msgid "Step {step} of 3"
-#~ msgstr ""
+#: src/view/com/auth/create/StepHeader.tsx:22
+#~ msgid "Step {0} of {numSteps}"
+#~ msgstr "Крок {0} / {numSteps}"
-#: src/view/screens/Settings/index.tsx:274
+#: src/view/screens/Settings/index.tsx:292
msgid "Storage cleared, you need to restart the app now."
-msgstr ""
+msgstr "Сховище очищено, тепер вам треба перезапустити застосунок."
-#: src/Navigation.tsx:202
-#: src/view/screens/Settings/index.tsx:807
+#: src/Navigation.tsx:211
+#: src/view/screens/Settings/index.tsx:831
msgid "Storybook"
msgstr ""
-#: src/view/com/modals/AppealLabel.tsx:101
+#: src/components/moderation/LabelsOnMeDialog.tsx:255
+#: src/components/moderation/LabelsOnMeDialog.tsx:256
msgid "Submit"
msgstr "Надіслати"
-#: src/view/screens/ProfileList.tsx:607
+#: src/view/screens/ProfileList.tsx:590
msgid "Subscribe"
msgstr "Підписатися"
-#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:173
+#: src/screens/Profile/Sections/Labels.tsx:180
+msgid "Subscribe to @{0} to use these labels:"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:221
+msgid "Subscribe to Labeler"
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:172
#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:307
msgid "Subscribe to the {0} feed"
+msgstr "Підписатися на {0} стрічку"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:184
+msgid "Subscribe to this labeler"
msgstr ""
-#: src/view/screens/ProfileList.tsx:603
+#: src/view/screens/ProfileList.tsx:586
msgid "Subscribe to this list"
msgstr "Підписатися на цей список"
-#: src/view/com/lists/ListCard.tsx:101
-#~ msgid "Subscribed"
-#~ msgstr ""
-
-#: src/view/screens/Search/Search.tsx:373
+#: src/view/screens/Search/Search.tsx:376
msgid "Suggested Follows"
msgstr "Пропоновані підписки"
-#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:64
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:65
msgid "Suggested for you"
-msgstr ""
+msgstr "Пропозиції для вас"
#: src/view/com/modals/SelfLabel.tsx:95
msgid "Suggestive"
-msgstr ""
+msgstr "Непристойний"
-#: src/Navigation.tsx:212
+#: src/Navigation.tsx:226
#: src/view/screens/Support.tsx:30
#: src/view/screens/Support.tsx:33
msgid "Support"
@@ -3994,60 +4856,98 @@ msgstr "Підтримка"
#~ msgid "Swipe up to see more"
#~ msgstr ""
-#: src/view/com/modals/SwitchAccount.tsx:117
+#: src/components/dialogs/SwitchAccount.tsx:46
+#: src/components/dialogs/SwitchAccount.tsx:49
msgid "Switch Account"
msgstr "Перемикнути обліковий запис"
-#: src/view/com/modals/SwitchAccount.tsx:97
-#: src/view/screens/Settings/index.tsx:130
+#: src/view/screens/Settings/index.tsx:139
msgid "Switch to {0}"
-msgstr ""
+msgstr "Переключитися на {0}"
-#: src/view/com/modals/SwitchAccount.tsx:98
-#: src/view/screens/Settings/index.tsx:131
+#: src/view/screens/Settings/index.tsx:140
msgid "Switches the account you are logged in to"
-msgstr ""
+msgstr "Переключає обліковий запис"
-#: src/view/screens/Settings/index.tsx:472
+#: src/view/screens/Settings/index.tsx:491
msgid "System"
-msgstr ""
+msgstr "Системне"
-#: src/view/screens/Settings/index.tsx:795
+#: src/view/screens/Settings/index.tsx:819
msgid "System log"
msgstr "Системний журнал"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:112
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "tag"
+msgstr "тег"
+
+#: src/components/TagMenu/index.tsx:78
+msgid "Tag menu: {displayTag}"
+msgstr "Меню тегів: {displayTag}"
+
+#: src/components/TagMenu/index.tsx:74
+#~ msgid "Tag menu: {tag}"
+#~ msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:113
msgid "Tall"
msgstr "Високе"
#: src/view/com/util/images/AutoSizedImage.tsx:70
msgid "Tap to view fully"
-msgstr ""
+msgstr "Торкніться, щоб переглянути повністю"
#: src/screens/Onboarding/index.tsx:39
msgid "Tech"
-msgstr ""
+msgstr "Технології"
-#: src/view/shell/desktop/RightNav.tsx:89
+#: src/view/shell/desktop/RightNav.tsx:81
msgid "Terms"
msgstr "Умови"
-#: src/Navigation.tsx:222
-#: src/view/screens/Settings/index.tsx:885
+#: src/Navigation.tsx:236
+#: src/screens/Signup/StepInfo/Policies.tsx:49
+#: src/view/screens/Settings/index.tsx:917
#: src/view/screens/TermsOfService.tsx:29
-#: src/view/shell/Drawer.tsx:256
+#: src/view/shell/Drawer.tsx:259
msgid "Terms of Service"
msgstr "Умови Використання"
-#: src/view/com/modals/AppealLabel.tsx:70
-#: src/view/com/modals/report/InputIssueDetails.tsx:51
+#: src/lib/moderation/useReportOptions.ts:58
+#: src/lib/moderation/useReportOptions.ts:79
+#: src/lib/moderation/useReportOptions.ts:87
+msgid "Terms used violate community standards"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "text"
+msgstr "текст"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:219
msgid "Text input field"
msgstr "Поле вводу тексту"
-#: src/view/com/profile/ProfileHeader.tsx:262
+#: src/components/ReportDialog/SubmitView.tsx:78
+msgid "Thank you. Your report has been sent."
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:465
+msgid "That contains the following:"
+msgstr ""
+
+#: src/screens/Signup/index.tsx:84
+msgid "That handle is already taken."
+msgstr "Цей псевдонім вже зайнятий."
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:283
+#: src/view/com/profile/ProfileMenu.tsx:349
msgid "The account will be able to interact with you after unblocking."
msgstr "Обліковий запис зможе взаємодіяти з вами після розблокування."
+#: src/components/moderation/ModerationDetailsDialog.tsx:127
+msgid "the author"
+msgstr ""
+
#: src/view/screens/CommunityGuidelines.tsx:36
msgid "The Community Guidelines have been moved to <0/>"
msgstr "Правила Спільноти переміщено до <0/>"
@@ -4056,11 +4956,20 @@ msgstr "Правила Спільноти переміщено до <0/>"
msgid "The Copyright Policy has been moved to <0/>"
msgstr "Політику захисту авторського права переміщено до <0/>"
-#: src/screens/Onboarding/Layout.tsx:60
-msgid "The following steps will help customize your Bluesky experience."
+#: src/components/moderation/LabelsOnMeDialog.tsx:48
+msgid "The following labels were applied to your account."
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:49
+msgid "The following labels were applied to your content."
msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:453
+#: src/screens/Onboarding/Layout.tsx:58
+msgid "The following steps will help customize your Bluesky experience."
+msgstr "Наступні кроки допоможуть налаштувати Ваш досвід використання Bluesky."
+
+#: src/view/com/post-thread/PostThread.tsx:153
+#: src/view/com/post-thread/PostThread.tsx:165
msgid "The post may have been deleted."
msgstr "Можливо цей пост було видалено."
@@ -4070,155 +4979,166 @@ msgstr "Політика конфіденційності була перемі
#: src/view/screens/Support.tsx:36
msgid "The support form has been moved. If you need help, please <0/> or visit {HELP_DESK_URL} to get in touch with us."
-msgstr ""
-
-#: src/view/screens/Support.tsx:36
-#~ msgid "The support form has been moved. If you need help, please<0/> or visit {HELP_DESK_URL} to get in touch with us."
-#~ msgstr "Форма підтримки була переміщена. Якщо вам потрібна допомога, будь ласка, <0/> або відвідайте {HELP_DESK_URL}, щоб зв'язатися з нами."
+msgstr "Форму підтримки переміщено. Якщо вам потрібна допомога, будь ласка, <0/> або відвідайте {HELP_DESK_URL}, щоб зв'язатися з нами."
#: src/view/screens/TermsOfService.tsx:33
msgid "The Terms of Service have been moved to"
msgstr "Умови Використання перенесено до"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:150
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:141
msgid "There are many feeds to try:"
-msgstr ""
+msgstr "Також є багато інших стрічок, щоб спробувати:"
-#: src/view/screens/ProfileFeed.tsx:549
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:112
+#: src/view/screens/ProfileFeed.tsx:544
msgid "There was an an issue contacting the server, please check your internet connection and try again."
-msgstr ""
+msgstr "Виникла проблема з доступом до сервера. Перевірте підключення до Інтернету і повторіть спробу знову."
-#: src/view/com/posts/FeedErrorMessage.tsx:139
+#: src/view/com/posts/FeedErrorMessage.tsx:138
msgid "There was an an issue removing this feed. Please check your internet connection and try again."
-msgstr ""
+msgstr "Виникла проблема при видаленні цієї стрічки. Перевірте підключення до Інтернету і повторіть спробу."
-#: src/view/screens/ProfileFeed.tsx:209
+#: src/view/screens/ProfileFeed.tsx:218
msgid "There was an an issue updating your feeds, please check your internet connection and try again."
-msgstr ""
+msgstr "Виникла проблема з оновленням ваших стрічок. Перевірте підключення до Інтернету і повторіть спробу."
-#: src/view/screens/ProfileFeed.tsx:236
-#: src/view/screens/ProfileList.tsx:266
+#: src/view/screens/ProfileFeed.tsx:245
+#: src/view/screens/ProfileList.tsx:275
#: src/view/screens/SavedFeeds.tsx:209
#: src/view/screens/SavedFeeds.tsx:231
#: src/view/screens/SavedFeeds.tsx:252
msgid "There was an issue contacting the server"
-msgstr ""
+msgstr "При з'єднанні з сервером виникла проблема"
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:57
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:66
-#: src/view/com/feeds/FeedSourceCard.tsx:113
-#: src/view/com/feeds/FeedSourceCard.tsx:127
-#: src/view/com/feeds/FeedSourceCard.tsx:181
+#: src/view/com/feeds/FeedSourceCard.tsx:110
+#: src/view/com/feeds/FeedSourceCard.tsx:123
msgid "There was an issue contacting your server"
-msgstr ""
+msgstr "При з'єднанні з вашим сервером виникла проблема"
#: src/view/com/notifications/Feed.tsx:117
msgid "There was an issue fetching notifications. Tap here to try again."
-msgstr ""
+msgstr "Виникла проблема з завантаженням сповіщень. Натисніть тут, щоб повторити спробу."
-#: src/view/com/posts/Feed.tsx:263
+#: src/view/com/posts/Feed.tsx:287
msgid "There was an issue fetching posts. Tap here to try again."
-msgstr ""
+msgstr "Виникла проблема з завантаженням постів. Натисніть тут, щоб повторити спробу."
#: src/view/com/lists/ListMembers.tsx:172
msgid "There was an issue fetching the list. Tap here to try again."
-msgstr ""
+msgstr "Виникла проблема з завантаженням списку. Натисніть тут, щоб повторити спробу."
#: src/view/com/feeds/ProfileFeedgens.tsx:148
#: src/view/com/lists/ProfileLists.tsx:155
msgid "There was an issue fetching your lists. Tap here to try again."
+msgstr "Виникла проблема з завантаженням ваших списків. Натисніть тут, щоб повторити спробу."
+
+#: src/components/ReportDialog/SubmitView.tsx:83
+msgid "There was an issue sending your report. Please check your internet connection."
msgstr ""
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:63
-#: src/view/com/modals/ContentFilteringSettings.tsx:126
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:65
msgid "There was an issue syncing your preferences with the server"
-msgstr ""
+msgstr "Виникла проблема під час синхронізації ваших налаштувань із сервером"
-#: src/view/screens/AppPasswords.tsx:66
+#: src/view/screens/AppPasswords.tsx:68
msgid "There was an issue with fetching your app passwords"
-msgstr ""
-
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:93
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:105
-#: src/view/com/profile/ProfileHeader.tsx:156
-#: src/view/com/profile/ProfileHeader.tsx:177
-#: src/view/com/profile/ProfileHeader.tsx:216
-#: src/view/com/profile/ProfileHeader.tsx:229
-#: src/view/com/profile/ProfileHeader.tsx:249
-#: src/view/com/profile/ProfileHeader.tsx:271
+msgstr "Виникла проблема з завантаженням ваших паролів для застосунків"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:105
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:127
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:99
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:111
+#: src/view/com/profile/ProfileMenu.tsx:106
+#: src/view/com/profile/ProfileMenu.tsx:117
+#: src/view/com/profile/ProfileMenu.tsx:132
+#: src/view/com/profile/ProfileMenu.tsx:143
+#: src/view/com/profile/ProfileMenu.tsx:157
+#: src/view/com/profile/ProfileMenu.tsx:170
msgid "There was an issue! {0}"
-msgstr ""
+msgstr "Виникла проблема! {0}"
-#: src/view/screens/ProfileList.tsx:287
-#: src/view/screens/ProfileList.tsx:306
-#: src/view/screens/ProfileList.tsx:328
-#: src/view/screens/ProfileList.tsx:347
+#: src/view/screens/ProfileList.tsx:288
+#: src/view/screens/ProfileList.tsx:302
+#: src/view/screens/ProfileList.tsx:316
+#: src/view/screens/ProfileList.tsx:330
msgid "There was an issue. Please check your internet connection and try again."
-msgstr ""
+msgstr "Виникла проблема. Перевірте підключення до Інтернету і повторіть спробу."
-#: src/view/com/util/ErrorBoundary.tsx:36
+#: src/view/com/util/ErrorBoundary.tsx:51
msgid "There was an unexpected issue in the application. Please let us know if this happened to you!"
msgstr "У застосунку сталася неочікувана проблема. Будь ласка, повідомте нас, якщо ви отримали це повідомлення!"
#: src/screens/Deactivated.tsx:106
msgid "There's been a rush of new users to Bluesky! We'll activate your account as soon as we can."
-msgstr ""
+msgstr "Відбувався наплив нових користувачів у Bluesky! Ми активуємо ваш обліковий запис як тільки зможемо."
#: src/view/com/auth/create/Step2.tsx:55
-msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
-msgstr ""
-
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:138
-msgid "These are popular accounts you might like:"
-msgstr ""
-
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:138
-#~ msgid "These are popular accounts you might like."
+#~ msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
#~ msgstr ""
-#: src/view/com/util/moderation/LabelInfo.tsx:45
-#~ msgid "This {0} has been labeled."
-#~ msgstr ""
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:146
+msgid "These are popular accounts you might like:"
+msgstr "Ці популярні користувачі можуть вам сподобатися:"
-#: src/view/com/util/moderation/ScreenHider.tsx:88
+#: src/components/moderation/ScreenHider.tsx:116
msgid "This {screenDescription} has been flagged:"
msgstr "Цей {screenDescription} був позначений:"
-#: src/view/com/util/moderation/ScreenHider.tsx:83
+#: src/components/moderation/ScreenHider.tsx:111
msgid "This account has requested that users sign in to view their profile."
msgstr "Цей користувач вказав, що не хоче, аби його профіль бачили відвідувачі без облікового запису."
-#: src/view/com/modals/EmbedConsent.tsx:68
+#: src/components/moderation/LabelsOnMeDialog.tsx:204
+msgid "This appeal will be sent to <0>{0}0>."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:19
+msgid "This content has been hidden by the moderators."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:24
+msgid "This content has received a general warning from moderators."
+msgstr ""
+
+#: src/components/dialogs/EmbedConsent.tsx:64
msgid "This content is hosted by {0}. Do you want to enable external media?"
msgstr "Цей вміст розміщено {0}. Увімкнути зовнішні медіа?"
-#: src/view/com/modals/ModerationDetails.tsx:67
+#: src/components/moderation/ModerationDetailsDialog.tsx:77
+#: src/lib/moderation/useModerationCauseDescription.ts:77
msgid "This content is not available because one of the users involved has blocked the other."
-msgstr ""
+msgstr "Цей контент недоступний, оскільки один із залучених користувачів заблокував іншого."
#: src/view/com/posts/FeedErrorMessage.tsx:108
msgid "This content is not viewable without a Bluesky account."
msgstr "Цей вміст не доступний для перегляду без облікового запису Bluesky."
#: src/view/screens/Settings/ExportCarDialog.tsx:75
-msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
+#~ msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
+#~ msgstr "Ця функція знаходиться в беті. Ви можете дізнатися більше про експорт репозиторіїв в <0>у цьому блозі.0>"
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:75
+msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost0>."
msgstr ""
#: src/view/com/posts/FeedErrorMessage.tsx:114
msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later."
msgstr "Ця стрічка зараз отримує забагато запитів і тимчасово недоступна. Спробуйте ще раз пізніше."
-#: src/view/screens/Profile.tsx:420
-#: src/view/screens/ProfileFeed.tsx:475
-#: src/view/screens/ProfileList.tsx:660
+#: src/screens/Profile/Sections/Feed.tsx:50
+#: src/view/screens/ProfileFeed.tsx:477
+#: src/view/screens/ProfileList.tsx:675
msgid "This feed is empty!"
-msgstr ""
+msgstr "Стрічка порожня!"
#: src/view/com/posts/CustomFeedEmptyState.tsx:37
msgid "This feed is empty! You may need to follow more users or tune your language settings."
-msgstr ""
+msgstr "Ця стрічка порожня! Можливо, вам треба підписатися на більшу кількість користувачів або змінити ваші налаштування мови."
-#: src/view/com/modals/BirthDateSettings.tsx:61
+#: src/components/dialogs/BirthDateSettings.tsx:41
msgid "This information is not shared with other users."
msgstr "Ця інформація не розкривається іншим користувачам."
@@ -4226,52 +5146,110 @@ msgstr "Ця інформація не розкривається іншим к
msgid "This is important in case you ever need to change your email or reset your password."
msgstr "Це важливо для випадку, якщо вам коли-небудь потрібно буде змінити адресу електронної пошти або відновити пароль."
-#: src/view/com/auth/create/Step1.tsx:55
-#~ msgid "This is the service that keeps you online."
-#~ msgstr "Це сервіс який зберігає дані вашого облікового запису."
+#: src/components/moderation/ModerationDetailsDialog.tsx:124
+msgid "This label was applied by {0}."
+msgstr ""
+
+#: src/screens/Profile/Sections/Labels.tsx:167
+msgid "This labeler hasn't declared what labels it publishes, and may not be active."
+msgstr ""
-#: src/view/com/modals/LinkWarning.tsx:58
+#: src/view/com/modals/LinkWarning.tsx:72
msgid "This link is taking you to the following website:"
msgstr "Це посилання веде на сайт:"
-#: src/view/screens/ProfileList.tsx:834
+#: src/view/screens/ProfileList.tsx:853
msgid "This list is empty!"
+msgstr "Список порожній!"
+
+#: src/screens/Profile/ErrorState.tsx:40
+msgid "This moderation service is unavailable. See below for more details. If this issue persists, contact us."
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:106
+#: src/view/com/modals/AddAppPasswords.tsx:107
msgid "This name is already in use"
-msgstr ""
+msgstr "Це ім'я вже використовується"
-#: src/view/com/post-thread/PostThreadItem.tsx:122
+#: src/view/com/post-thread/PostThreadItem.tsx:125
msgid "This post has been deleted."
msgstr "Цей пост було видалено."
-#: src/view/com/modals/ModerationDetails.tsx:62
+#: src/view/com/util/forms/PostDropdownBtn.tsx:344
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:248
+msgid "This post is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:326
+msgid "This post will be hidden from feeds."
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:370
+msgid "This profile is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/Policies.tsx:37
+msgid "This service has not provided terms of service or a privacy policy."
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:445
+msgid "This should create a domain record at:"
+msgstr ""
+
+#: src/view/com/profile/ProfileFollowers.tsx:87
+msgid "This user doesn't have any followers."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:72
+#: src/lib/moderation/useModerationCauseDescription.ts:68
msgid "This user has blocked you. You cannot view their content."
+msgstr "Цей користувач заблокував вас. Ви не можете бачити їх пости."
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:30
+msgid "This user has requested that their content only be shown to signed-in users."
msgstr ""
#: src/view/com/modals/ModerationDetails.tsx:42
-msgid "This user is included in the <0/> list which you have blocked."
-msgstr ""
+#~ msgid "This user is included in the <0/> list which you have blocked."
+#~ msgstr "Цей користувач в списку \"<0/>\" на який ви підписались та заблокували."
#: src/view/com/modals/ModerationDetails.tsx:74
-msgid "This user is included in the <0/> list which you have muted."
+#~ msgid "This user is included in the <0/> list which you have muted."
+#~ msgstr "Цей користувач в списку \"<0/>\" який ви ігноруєте."
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:55
+msgid "This user is included in the <0>{0}0> list which you have blocked."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:84
+msgid "This user is included in the <0>{0}0> list which you have muted."
msgstr ""
#: src/view/com/modals/ModerationDetails.tsx:74
#~ msgid "This user is included the <0/> list which you have muted."
#~ msgstr ""
+#: src/view/com/profile/ProfileFollows.tsx:87
+msgid "This user isn't following anyone."
+msgstr ""
+
#: src/view/com/modals/SelfLabel.tsx:137
msgid "This warning is only available for posts with media attached."
msgstr "Це попередження доступне тільки для записів з прикріпленими медіа-файлами."
-#: src/view/com/util/forms/PostDropdownBtn.tsx:192
-msgid "This will hide this post from your feeds."
-msgstr "Це приховає цей пост із вашої стрічки."
+#: src/components/dialogs/MutedWords.tsx:283
+msgid "This will delete {0} from your muted words. You can always add it back later."
+msgstr "Це видалить {0} зі ваших ігнорованих слів. Ви завжди можете додати його назад."
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:282
+#~ msgid "This will hide this post from your feeds."
+#~ msgstr "Це дія приховає цей пост із вашої стрічки."
+
+#: src/view/screens/Settings/index.tsx:574
+msgid "Thread preferences"
+msgstr ""
#: src/view/screens/PreferencesThreads.tsx:53
-#: src/view/screens/Settings/index.tsx:565
+#: src/view/screens/Settings/index.tsx:584
msgid "Thread Preferences"
msgstr "Налаштування гілок"
@@ -4279,112 +5257,177 @@ msgstr "Налаштування гілок"
msgid "Threaded Mode"
msgstr "Режим гілок"
-#: src/Navigation.tsx:252
+#: src/Navigation.tsx:269
msgid "Threads Preferences"
+msgstr "Налаштування обговорень"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:33
+msgid "To whom would you like to send this report?"
msgstr ""
+#: src/components/dialogs/MutedWords.tsx:112
+msgid "Toggle between muted word options."
+msgstr "Перемикання між опціями ігнорування слів."
+
#: src/view/com/util/forms/DropdownButton.tsx:246
msgid "Toggle dropdown"
msgstr "Розкрити/сховати"
-#: src/view/com/modals/EditImage.tsx:271
+#: src/screens/Moderation/index.tsx:332
+msgid "Toggle to enable or disable adult content"
+msgstr ""
+
+#: src/view/com/modals/EditImage.tsx:272
msgid "Transformations"
msgstr "Редагування"
-#: src/view/com/post-thread/PostThreadItem.tsx:686
-#: src/view/com/post-thread/PostThreadItem.tsx:688
-#: src/view/com/util/forms/PostDropdownBtn.tsx:125
+#: src/view/com/post-thread/PostThreadItem.tsx:644
+#: src/view/com/post-thread/PostThreadItem.tsx:646
+#: src/view/com/util/forms/PostDropdownBtn.tsx:212
+#: src/view/com/util/forms/PostDropdownBtn.tsx:214
msgid "Translate"
msgstr "Перекласти"
#: src/view/com/util/error/ErrorScreen.tsx:82
msgctxt "action"
msgid "Try again"
-msgstr ""
+msgstr "Спробувати ще раз"
-#: src/view/com/util/error/ErrorScreen.tsx:73
-#~ msgid "Try again"
-#~ msgstr "Спробувати ще раз"
+#: src/view/com/modals/ChangeHandle.tsx:428
+msgid "Type:"
+msgstr ""
-#: src/view/screens/ProfileList.tsx:505
+#: src/view/screens/ProfileList.tsx:478
msgid "Un-block list"
msgstr "Розблокувати список"
-#: src/view/screens/ProfileList.tsx:490
+#: src/view/screens/ProfileList.tsx:461
msgid "Un-mute list"
msgstr "Перестати ігнорувати"
-#: src/view/com/auth/create/CreateAccount.tsx:66
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:87
-#: src/view/com/auth/login/Login.tsx:76
-#: src/view/com/auth/login/LoginForm.tsx:118
+#: src/screens/Login/ForgotPasswordForm.tsx:74
+#: src/screens/Login/index.tsx:78
+#: src/screens/Login/LoginForm.tsx:119
+#: src/screens/Login/SetNewPasswordForm.tsx:77
+#: src/screens/Signup/index.tsx:63
#: src/view/com/modals/ChangePassword.tsx:70
msgid "Unable to contact your service. Please check your Internet connection."
msgstr "Не вдалося зв'язатися з вашим хостинг-провайдером. Перевірте ваше підключення до Інтернету."
-#: src/view/com/profile/ProfileHeader.tsx:432
-#: src/view/screens/ProfileList.tsx:589
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:181
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+#: src/view/screens/ProfileList.tsx:572
msgid "Unblock"
msgstr "Розблокувати"
-#: src/view/com/profile/ProfileHeader.tsx:435
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:186
msgctxt "action"
msgid "Unblock"
-msgstr ""
+msgstr "Розблокувати"
-#: src/view/com/profile/ProfileHeader.tsx:260
-#: src/view/com/profile/ProfileHeader.tsx:344
+#: src/view/com/profile/ProfileMenu.tsx:299
+#: src/view/com/profile/ProfileMenu.tsx:305
msgid "Unblock Account"
msgstr "Розблокувати обліковий запис"
-#: src/view/com/modals/Repost.tsx:42
-#: src/view/com/modals/Repost.tsx:55
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:281
+#: src/view/com/profile/ProfileMenu.tsx:343
+msgid "Unblock Account?"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:43
+#: src/view/com/modals/Repost.tsx:56
#: src/view/com/util/post-ctrls/RepostButton.tsx:60
#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
msgid "Undo repost"
msgstr "Скасувати репост"
-#: src/view/com/profile/FollowButton.tsx:55
-msgctxt "action"
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
msgid "Unfollow"
msgstr ""
-#: src/view/com/profile/ProfileHeader.tsx:484
+#: src/view/com/profile/FollowButton.tsx:60
+msgctxt "action"
+msgid "Unfollow"
+msgstr "Відписатись"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:220
msgid "Unfollow {0}"
+msgstr "Відписатися від {0}"
+
+#: src/view/com/profile/ProfileMenu.tsx:241
+#: src/view/com/profile/ProfileMenu.tsx:251
+msgid "Unfollow Account"
msgstr ""
-#: src/view/com/auth/create/state.ts:300
-msgid "Unfortunately, you do not meet the requirements to create an account."
-msgstr "На жаль, ви не відповідаєте вимогам для створення облікового запису."
+#: src/view/com/auth/create/state.ts:262
+#~ msgid "Unfortunately, you do not meet the requirements to create an account."
+#~ msgstr "На жаль, ви не відповідаєте вимогам для створення облікового запису."
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Unlike"
+msgstr "Прибрати вподобання"
+
+#: src/view/screens/ProfileFeed.tsx:573
+msgid "Unlike this feed"
msgstr ""
-#: src/view/screens/ProfileList.tsx:596
+#: src/components/TagMenu/index.tsx:249
+#: src/view/screens/ProfileList.tsx:579
msgid "Unmute"
-msgstr ""
+msgstr "Не ігнорувати"
-#: src/view/com/profile/ProfileHeader.tsx:325
+#: src/components/TagMenu/index.web.tsx:104
+msgid "Unmute {truncatedTag}"
+msgstr "Не ігнорувати {truncatedTag}"
+
+#: src/view/com/profile/ProfileMenu.tsx:278
+#: src/view/com/profile/ProfileMenu.tsx:284
msgid "Unmute Account"
msgstr "Перестати ігнорувати"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/components/TagMenu/index.tsx:208
+msgid "Unmute all {displayTag} posts"
+msgstr "Перестати ігнорувати всі пости {displayTag}"
+
+#: src/components/TagMenu/index.tsx:210
+#~ msgid "Unmute all {tag} posts"
+#~ msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:256
msgid "Unmute thread"
msgstr "Перестати ігнорувати"
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:295
+#: src/view/screens/ProfileList.tsx:563
msgid "Unpin"
+msgstr "Відкріпити"
+
+#: src/view/screens/ProfileFeed.tsx:292
+msgid "Unpin from home"
msgstr ""
-#: src/view/screens/ProfileList.tsx:473
+#: src/view/screens/ProfileList.tsx:444
msgid "Unpin moderation list"
msgstr "Відкріпити список модерації"
-#: src/view/screens/ProfileFeed.tsx:345
-msgid "Unsave"
+#: src/view/screens/ProfileFeed.tsx:346
+#~ msgid "Unsave"
+#~ msgstr "Скасувати збереження"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:219
+msgid "Unsubscribe"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:183
+msgid "Unsubscribe from this labeler"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:70
+msgid "Unwanted Sexual Content"
msgstr ""
#: src/view/com/modals/UserAddRemoveLists.tsx:70
@@ -4392,36 +5435,71 @@ msgid "Update {displayName} in Lists"
msgstr "Змінити належність {displayName} до списків"
#: src/lib/hooks/useOTAUpdate.ts:15
-msgid "Update Available"
-msgstr "Доступне оновлення"
+#~ msgid "Update Available"
+#~ msgstr "Доступне оновлення"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:204
+#: src/view/com/modals/ChangeHandle.tsx:508
+msgid "Update to {handle}"
+msgstr ""
+
+#: src/screens/Login/SetNewPasswordForm.tsx:186
msgid "Updating..."
msgstr "Оновлення..."
-#: src/view/com/modals/ChangeHandle.tsx:455
+#: src/view/com/modals/ChangeHandle.tsx:454
msgid "Upload a text file to:"
msgstr "Завантажити текстовий файл до:"
-#: src/view/screens/AppPasswords.tsx:195
+#: src/view/com/util/UserAvatar.tsx:326
+#: src/view/com/util/UserAvatar.tsx:329
+#: src/view/com/util/UserBanner.tsx:116
+#: src/view/com/util/UserBanner.tsx:119
+msgid "Upload from Camera"
+msgstr ""
+
+#: src/view/com/util/UserAvatar.tsx:343
+#: src/view/com/util/UserBanner.tsx:133
+msgid "Upload from Files"
+msgstr ""
+
+#: src/view/com/util/UserAvatar.tsx:337
+#: src/view/com/util/UserAvatar.tsx:341
+#: src/view/com/util/UserBanner.tsx:127
+#: src/view/com/util/UserBanner.tsx:131
+msgid "Upload from Library"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:408
+msgid "Use a file on your server"
+msgstr ""
+
+#: src/view/screens/AppPasswords.tsx:197
msgid "Use app passwords to login to other Bluesky clients without giving full access to your account or password."
msgstr "Використовуйте паролі для застосунків для входу в інших застосунках для Bluesky. Це дозволить використовувати їх, не надаючи повний доступ до вашого облікового запису і вашого основного пароля."
-#: src/view/com/modals/ChangeHandle.tsx:515
+#: src/view/com/modals/ChangeHandle.tsx:517
+msgid "Use bsky.social as hosting provider"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:516
msgid "Use default provider"
msgstr "Використовувати провайдера за замовчуванням"
#: src/view/com/modals/InAppBrowserConsent.tsx:56
#: src/view/com/modals/InAppBrowserConsent.tsx:58
msgid "Use in-app browser"
-msgstr ""
+msgstr "У вбудованому браузері"
#: src/view/com/modals/InAppBrowserConsent.tsx:66
#: src/view/com/modals/InAppBrowserConsent.tsx:68
msgid "Use my default browser"
+msgstr "У звичайному браузері"
+
+#: src/view/com/modals/ChangeHandle.tsx:400
+msgid "Use the DNS panel"
msgstr ""
-#: src/view/com/modals/AddAppPasswords.tsx:155
+#: src/view/com/modals/AddAppPasswords.tsx:156
msgid "Use this to sign into the other app along with your handle."
msgstr "Скористайтесь ним для входу в інші застосунки."
@@ -4429,59 +5507,67 @@ msgstr "Скористайтесь ним для входу в інші заст
#~ msgid "Use your domain as your Bluesky client service provider"
#~ msgstr ""
-#: src/view/com/modals/InviteCodes.tsx:200
+#: src/view/com/modals/InviteCodes.tsx:201
msgid "Used by:"
msgstr "Використано:"
-#: src/view/com/modals/ModerationDetails.tsx:54
+#: src/components/moderation/ModerationDetailsDialog.tsx:64
+#: src/lib/moderation/useModerationCauseDescription.ts:56
msgid "User Blocked"
+msgstr "Користувача заблоковано"
+
+#: src/lib/moderation/useModerationCauseDescription.ts:48
+msgid "User Blocked by \"{0}\""
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:40
+#: src/components/moderation/ModerationDetailsDialog.tsx:53
msgid "User Blocked by List"
+msgstr "Користувача заблоковано списком"
+
+#: src/lib/moderation/useModerationCauseDescription.ts:66
+msgid "User Blocking You"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:60
+#: src/components/moderation/ModerationDetailsDialog.tsx:70
msgid "User Blocks You"
-msgstr ""
+msgstr "Користувач заблокував вас"
-#: src/view/com/auth/create/Step3.tsx:41
-msgid "User handle"
-msgstr "Псевдонім"
+#: src/view/com/auth/create/Step2.tsx:79
+#~ msgid "User handle"
+#~ msgstr "Псевдонім"
-#: src/view/com/lists/ListCard.tsx:84
+#: src/view/com/lists/ListCard.tsx:85
#: src/view/com/modals/UserAddRemoveLists.tsx:198
msgid "User list by {0}"
-msgstr ""
+msgstr "Список користувачів від {0}"
-#: src/view/screens/ProfileList.tsx:762
+#: src/view/screens/ProfileList.tsx:777
msgid "User list by <0/>"
-msgstr ""
+msgstr "Список користувачів від <0/>"
-#: src/view/com/lists/ListCard.tsx:82
+#: src/view/com/lists/ListCard.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:196
-#: src/view/screens/ProfileList.tsx:760
+#: src/view/screens/ProfileList.tsx:775
msgid "User list by you"
-msgstr ""
+msgstr "Список користувачів від вас"
-#: src/view/com/modals/CreateOrEditList.tsx:196
+#: src/view/com/modals/CreateOrEditList.tsx:197
msgid "User list created"
-msgstr ""
+msgstr "Список користувачів створено"
-#: src/view/com/modals/CreateOrEditList.tsx:182
+#: src/view/com/modals/CreateOrEditList.tsx:183
msgid "User list updated"
-msgstr ""
+msgstr "Список користувачів оновлено"
#: src/view/screens/Lists.tsx:58
msgid "User Lists"
msgstr "Списки користувачів"
-#: src/view/com/auth/login/LoginForm.tsx:177
-#: src/view/com/auth/login/LoginForm.tsx:195
+#: src/screens/Login/LoginForm.tsx:151
msgid "Username or email address"
msgstr "Ім'я користувача або електронна адреса"
-#: src/view/screens/ProfileList.tsx:796
+#: src/view/screens/ProfileList.tsx:811
msgid "Users"
msgstr "Користувачі"
@@ -4489,27 +5575,35 @@ msgstr "Користувачі"
msgid "users followed by <0/>"
msgstr "користувачі, на яких підписані <0/>"
-#: src/view/com/threadgate/WhoCanReply.tsx:115
-#~ msgid "Users followed by <0/>"
-#~ msgstr ""
-
#: src/view/com/modals/Threadgate.tsx:106
msgid "Users in \"{0}\""
msgstr "Користувачі в «{0}»"
+#: src/components/LikesDialog.tsx:85
+msgid "Users that have liked this content or profile"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:436
+msgid "Value:"
+msgstr ""
+
#: src/view/com/auth/create/Step2.tsx:243
-msgid "Verification code"
+#~ msgid "Verification code"
+#~ msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:509
+msgid "Verify {0}"
msgstr ""
-#: src/view/screens/Settings/index.tsx:910
+#: src/view/screens/Settings/index.tsx:942
msgid "Verify email"
msgstr "Підтвердити електронну адресу"
-#: src/view/screens/Settings/index.tsx:935
+#: src/view/screens/Settings/index.tsx:967
msgid "Verify my email"
msgstr "Підтвердити мою електронну адресу"
-#: src/view/screens/Settings/index.tsx:944
+#: src/view/screens/Settings/index.tsx:976
msgid "Verify My Email"
msgstr "Підтвердити мою електронну адресу"
@@ -4520,123 +5614,172 @@ msgstr "Підтвердити нову адресу електронної по
#: src/view/com/modals/VerifyEmail.tsx:103
msgid "Verify Your Email"
+msgstr "Підтвердьте адресу вашої електронної пошти"
+
+#: src/view/screens/Settings/index.tsx:893
+msgid "Version {0}"
msgstr ""
#: src/screens/Onboarding/index.tsx:42
msgid "Video Games"
-msgstr ""
+msgstr "Відеоігри"
-#: src/view/com/profile/ProfileHeader.tsx:661
+#: src/screens/Profile/Header/Shell.tsx:107
msgid "View {0}'s avatar"
-msgstr ""
+msgstr "Переглянути аватар {0}"
#: src/view/screens/Log.tsx:52
msgid "View debug entry"
msgstr "Переглянути запис для налагодження"
-#: src/view/com/posts/FeedSlice.tsx:103
+#: src/components/ReportDialog/SelectReportOptionView.tsx:131
+msgid "View details"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:126
+msgid "View details for reporting a copyright violation"
+msgstr ""
+
+#: src/view/com/posts/FeedSlice.tsx:99
msgid "View full thread"
+msgstr "Переглянути обговорення"
+
+#: src/components/moderation/LabelsOnMe.tsx:51
+msgid "View information about these labels"
msgstr ""
-#: src/view/com/posts/FeedErrorMessage.tsx:172
+#: src/view/com/posts/FeedErrorMessage.tsx:166
msgid "View profile"
-msgstr ""
+msgstr "Переглянути профіль"
#: src/view/com/profile/ProfileSubpageHeader.tsx:128
msgid "View the avatar"
msgstr "Переглянути аватар"
-#: src/view/com/modals/LinkWarning.tsx:75
+#: src/components/LabelingServiceCard/index.tsx:140
+msgid "View the labeling service provided by @{0}"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:585
+msgid "View users who like this feed"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
msgid "Visit Site"
msgstr "Відвідати сайт"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:42
-#: src/view/com/modals/ContentFilteringSettings.tsx:259
+#: src/components/moderation/LabelPreference.tsx:135
+#: src/lib/moderation/useLabelBehaviorDescription.ts:17
+#: src/lib/moderation/useLabelBehaviorDescription.ts:22
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:53
msgid "Warn"
+msgstr "Попереджати"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:48
+msgid "Warn content"
msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:134
-msgid "We also think you'll like \"For You\" by Skygaze:"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:46
+msgid "Warn content and filter from feeds"
msgstr ""
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:134
+#~ msgid "We also think you'll like \"For You\" by Skygaze:"
+#~ msgstr "Гадаємо, вам також сподобається «For You» від Skygaze:"
+
+#: src/screens/Hashtag.tsx:133
+msgid "We couldn't find any results for that hashtag."
+msgstr "Ми не змогли знайти жодних результатів для цього хештегу."
+
#: src/screens/Deactivated.tsx:133
msgid "We estimate {estimatedTime} until your account is ready."
-msgstr ""
+msgstr "Ми оцінюємо {estimatedTime} до готовності вашого облікового запису."
-#: src/screens/Onboarding/StepFinished.tsx:93
+#: src/screens/Onboarding/StepFinished.tsx:97
msgid "We hope you have a wonderful time. Remember, Bluesky is:"
-msgstr ""
-
-#: src/view/com/posts/DiscoverFallbackHeader.tsx:29
-#~ msgid "We ran out of posts from your follows. Here's the latest from"
-#~ msgstr ""
+msgstr "Ми сподіваємося, що ви проведете чудово свій час. Пам'ятайте, Bluesky — це:"
#: src/view/com/posts/DiscoverFallbackHeader.tsx:29
msgid "We ran out of posts from your follows. Here's the latest from <0/>."
-msgstr ""
+msgstr "У нас закінчилися дописи у ваших підписках. Ось останні пости зі стрічки <0/>."
#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:118
#~ msgid "We recommend \"For You\" by Skygaze:"
#~ msgstr ""
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:124
+#: src/components/dialogs/MutedWords.tsx:203
+msgid "We recommend avoiding common words that appear in many posts, since it can result in no posts being shown."
+msgstr "Ми рекомендуємо уникати загальних слів, що зʼявляються у багатьох постах, оскільки це може призвести до того, що жодного поста не буде показано."
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:125
msgid "We recommend our \"Discover\" feed:"
+msgstr "Ми рекомендуємо стрічку «Discover»:"
+
+#: src/components/dialogs/BirthDateSettings.tsx:52
+msgid "We were unable to load your birth date preferences. Please try again."
msgstr ""
-#: src/screens/Onboarding/StepInterests/index.tsx:133
-msgid "We weren't able to connect. Please try again to continue setting up your account. If it continues to fail, you can skip this flow."
+#: src/screens/Moderation/index.tsx:385
+msgid "We were unable to load your configured labelers at this time."
msgstr ""
+#: src/screens/Onboarding/StepInterests/index.tsx:137
+msgid "We weren't able to connect. Please try again to continue setting up your account. If it continues to fail, you can skip this flow."
+msgstr "Ми не змогли під'єднатися. Будь ласка, спробуйте ще раз, щоб продовжити налаштування свого облікового запису. Якщо помилка повторюється, то ви можете пропустити цей процес."
+
#: src/screens/Deactivated.tsx:137
msgid "We will let you know when your account is ready."
-msgstr ""
+msgstr "Ми повідомимо вас, коли ваш обліковий запис буде готовий."
#: src/view/com/modals/AppealLabel.tsx:48
-msgid "We'll look into your appeal promptly."
-msgstr ""
+#~ msgid "We'll look into your appeal promptly."
+#~ msgstr "Ми скоро розглянемо вашу апеляцію."
-#: src/screens/Onboarding/StepInterests/index.tsx:138
+#: src/screens/Onboarding/StepInterests/index.tsx:142
msgid "We'll use this to help customize your experience."
-msgstr ""
+msgstr "Ми скористаємося цим, щоб підлаштувати Ваш досвід."
-#: src/view/com/auth/create/CreateAccount.tsx:123
+#: src/screens/Signup/index.tsx:130
msgid "We're so excited to have you join us!"
msgstr "Ми дуже раді, що ви приєдналися!"
-#: src/view/com/posts/FeedErrorMessage.tsx:99
-#~ msgid "We're sorry, but this content is not viewable without a Bluesky account."
-#~ msgstr ""
-
-#: src/view/com/posts/FeedErrorMessage.tsx:105
-#~ msgid "We're sorry, but this feed is currently receiving high traffic and is temporarily unavailable. Please try again later."
-#~ msgstr ""
-
-#: src/view/screens/ProfileList.tsx:85
+#: src/view/screens/ProfileList.tsx:89
msgid "We're sorry, but we were unable to resolve this list. If this persists, please contact the list creator, @{handleOrDid}."
-msgstr ""
+msgstr "Дуже прикро, але нам не вдалося знайти цей список. Якщо це продовжується, будь ласка, зв'яжіться з його автором: @{handleOrDid}."
+
+#: src/components/dialogs/MutedWords.tsx:229
+msgid "We're sorry, but we weren't able to load your muted words at this time. Please try again."
+msgstr "На жаль, ми не змогли зараз завантажити ваші ігноровані слова. Будь ласка, спробуйте ще раз."
-#: src/view/screens/Search/Search.tsx:253
+#: src/view/screens/Search/Search.tsx:256
msgid "We're sorry, but your search could not be completed. Please try again in a few minutes."
msgstr "Даруйте, нам не вдалося виконати пошук за вашим запитом. Будь ласка, спробуйте ще раз через кілька хвилин."
+#: src/components/Lists.tsx:188
#: src/view/screens/NotFound.tsx:48
msgid "We're sorry! We can't find the page you were looking for."
msgstr "Нам дуже прикро! Ми не можемо знайти сторінку, яку ви шукали."
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:46
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:321
+msgid "We're sorry! You can only subscribe to ten labelers, and you've reached your limit of ten."
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:48
msgid "Welcome to <0>Bluesky0>"
msgstr "Ласкаво просимо до <0>Bluesky0>"
-#: src/screens/Onboarding/StepInterests/index.tsx:130
+#: src/screens/Onboarding/StepInterests/index.tsx:134
msgid "What are your interests?"
-msgstr ""
+msgstr "Чим ви цікавитесь?"
#: src/view/com/modals/report/Modal.tsx:169
-msgid "What is the issue with this {collectionName}?"
-msgstr "Яка проблема з {collectionName}?"
+#~ msgid "What is the issue with this {collectionName}?"
+#~ msgstr "Яка проблема з {collectionName}?"
-#: src/view/com/auth/SplashScreen.tsx:34
-#: src/view/com/composer/Composer.tsx:279
+#: src/view/com/auth/SplashScreen.tsx:58
+#: src/view/com/auth/SplashScreen.web.tsx:84
+#: src/view/com/composer/Composer.tsx:296
msgid "What's up?"
msgstr "Як справи?"
@@ -4653,36 +5796,52 @@ msgstr "Якими мовами ви хочете бачити пости у а
msgid "Who can reply"
msgstr "Хто може відповідати"
-#: src/view/com/threadgate/WhoCanReply.tsx:79
-#~ msgid "Who can reply?"
-#~ msgstr ""
+#: src/components/ReportDialog/SelectReportOptionView.tsx:43
+msgid "Why should this content be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:56
+msgid "Why should this feed be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:53
+msgid "Why should this list be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:50
+msgid "Why should this post be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:47
+msgid "Why should this user be reviewed?"
+msgstr ""
-#: src/view/com/modals/crop-image/CropImage.web.tsx:102
+#: src/view/com/modals/crop-image/CropImage.web.tsx:103
msgid "Wide"
msgstr "Широке"
-#: src/view/com/composer/Composer.tsx:415
+#: src/view/com/composer/Composer.tsx:436
msgid "Write post"
msgstr "Написати пост"
-#: src/view/com/composer/Composer.tsx:278
-#: src/view/com/composer/Prompt.tsx:33
+#: src/view/com/composer/Composer.tsx:295
+#: src/view/com/composer/Prompt.tsx:37
msgid "Write your reply"
msgstr "Написати відповідь"
#: src/screens/Onboarding/index.tsx:28
msgid "Writers"
-msgstr ""
+msgstr "Письменники"
#: src/view/com/auth/create/Step2.tsx:263
-msgid "XXXXXX"
-msgstr ""
+#~ msgid "XXXXXX"
+#~ msgstr ""
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:77
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:201
-#: src/view/screens/PreferencesHomeFeed.tsx:236
-#: src/view/screens/PreferencesHomeFeed.tsx:271
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:201
+#: src/view/screens/PreferencesFollowingFeed.tsx:236
+#: src/view/screens/PreferencesFollowingFeed.tsx:271
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "Yes"
@@ -4694,31 +5853,35 @@ msgstr "Так"
#: src/screens/Deactivated.tsx:130
msgid "You are in line."
+msgstr "Ви в черзі."
+
+#: src/view/com/profile/ProfileFollows.tsx:86
+msgid "You are not following anyone."
msgstr ""
#: src/view/com/posts/FollowingEmptyState.tsx:67
#: src/view/com/posts/FollowingEndOfFeed.tsx:68
msgid "You can also discover new Custom Feeds to follow."
-msgstr ""
+msgstr "Також ви можете знайти кастомні стрічки для підписання."
#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:123
#~ msgid "You can also try our \"Discover\" algorithm:"
#~ msgstr ""
-#: src/view/com/auth/create/Step1.tsx:106
-#~ msgid "You can change hosting providers at any time."
-#~ msgstr "Ви можете змінити хостинг-провайдера у будь-який час."
-
-#: src/screens/Onboarding/StepFollowingFeed.tsx:142
+#: src/screens/Onboarding/StepFollowingFeed.tsx:143
msgid "You can change these settings later."
-msgstr ""
+msgstr "Ви можете змінити ці налаштування пізніше."
-#: src/view/com/auth/login/Login.tsx:158
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:31
+#: src/screens/Login/index.tsx:158
+#: src/screens/Login/PasswordUpdatedForm.tsx:33
msgid "You can now sign in with your new password."
msgstr "Тепер ви можете увійти за допомогою нового пароля."
-#: src/view/com/modals/InviteCodes.tsx:66
+#: src/view/com/profile/ProfileFollowers.tsx:86
+msgid "You do not have any followers."
+msgstr ""
+
+#: src/view/com/modals/InviteCodes.tsx:67
msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer."
msgstr "У вас ще немає кодів запрошення! З часом ми надамо вам декілька."
@@ -4726,7 +5889,7 @@ msgstr "У вас ще немає кодів запрошення! З часом
msgid "You don't have any pinned feeds."
msgstr "У вас немає закріплених стрічок."
-#: src/view/screens/Feeds.tsx:451
+#: src/view/screens/Feeds.tsx:452
msgid "You don't have any saved feeds!"
msgstr "У вас немає збережених стрічок!"
@@ -4734,25 +5897,44 @@ msgstr "У вас немає збережених стрічок!"
msgid "You don't have any saved feeds."
msgstr "У вас немає збережених стрічок."
-#: src/view/com/post-thread/PostThread.tsx:401
+#: src/view/com/post-thread/PostThread.tsx:159
msgid "You have blocked the author or you have been blocked by the author."
msgstr "Ви заблокували автора або автор заблокував вас."
-#: src/view/com/modals/ModerationDetails.tsx:56
+#: src/components/moderation/ModerationDetailsDialog.tsx:66
+#: src/lib/moderation/useModerationCauseDescription.ts:50
+#: src/lib/moderation/useModerationCauseDescription.ts:58
msgid "You have blocked this user. You cannot view their content."
-msgstr ""
+msgstr "Ви заблокували цього користувача. Ви не можете бачити їх вміст."
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:57
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:92
+#: src/screens/Login/SetNewPasswordForm.tsx:54
+#: src/screens/Login/SetNewPasswordForm.tsx:91
#: src/view/com/modals/ChangePassword.tsx:87
#: src/view/com/modals/ChangePassword.tsx:121
msgid "You have entered an invalid code. It should look like XXXXX-XXXXX."
+msgstr "Ви ввели неправильний код. Він має виглядати так: XXXXX-XXXXX."
+
+#: src/lib/moderation/useModerationCauseDescription.ts:109
+msgid "You have hidden this post"
msgstr ""
-#: src/view/com/modals/ModerationDetails.tsx:87
-msgid "You have muted this user."
+#: src/components/moderation/ModerationDetailsDialog.tsx:101
+msgid "You have hidden this post."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:94
+#: src/lib/moderation/useModerationCauseDescription.ts:92
+msgid "You have muted this account."
+msgstr ""
+
+#: src/lib/moderation/useModerationCauseDescription.ts:86
+msgid "You have muted this user"
msgstr ""
+#: src/view/com/modals/ModerationDetails.tsx:87
+#~ msgid "You have muted this user."
+#~ msgstr "Ви включили функцію ігнорування цього користувача."
+
#: src/view/com/feeds/ProfileFeedgens.tsx:136
msgid "You have no feeds."
msgstr "У вас немає стрічок."
@@ -4763,88 +5945,117 @@ msgid "You have no lists."
msgstr "У вас немає списків."
#: src/view/screens/ModerationBlockedAccounts.tsx:132
-msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
-msgstr "Ви ще не заблокували жодного облікового запису. Щоб заблокувати когось, перейдіть до їх профілю та виберіть опцію \"Заблокувати\" у меню їх облікового запису."
+msgid "You have not blocked any accounts yet. To block an account, go to their profile and select \"Block account\" from the menu on their account."
+msgstr ""
+
+#: src/view/screens/ModerationBlockedAccounts.tsx:132
+#~ msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
+#~ msgstr "Ви ще не заблокували жодного облікового запису. Щоб заблокувати когось, перейдіть до їх профілю та виберіть опцію \"Заблокувати\" у меню їх облікового запису."
-#: src/view/screens/AppPasswords.tsx:87
+#: src/view/screens/AppPasswords.tsx:89
msgid "You have not created any app passwords yet. You can create one by pressing the button below."
msgstr "Ви ще не створили жодного пароля для застосунків. Ви можете створити новий пароль, натиснувши кнопку нижче."
#: src/view/screens/ModerationMutedAccounts.tsx:131
-msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
-msgstr "Ви ще не ігноруєте жодного облікового запису. Щоб ігнорувати когось, перейдіть до їх профілю та виберіть опцію \"Ігнорувати\" у меню їх облікового запису."
+msgid "You have not muted any accounts yet. To mute an account, go to their profile and select \"Mute account\" from the menu on their account."
+msgstr ""
-#: src/view/com/modals/ContentFilteringSettings.tsx:175
-msgid "You must be 18 or older to enable adult content."
+#: src/view/screens/ModerationMutedAccounts.tsx:131
+#~ msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
+#~ msgstr "Ви ще не ігноруєте жодного облікового запису. Щоб ігнорувати когось, перейдіть до їх профілю та виберіть опцію \"Ігнорувати\" у меню їх облікового запису."
+
+#: src/components/dialogs/MutedWords.tsx:249
+msgid "You haven't muted any words or tags yet"
+msgstr "У вас ще немає ігнорованих слів чи тегів"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:68
+msgid "You may appeal these labels if you feel they were placed in error."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/Policies.tsx:79
+msgid "You must be 13 years of age or older to sign up."
msgstr ""
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:103
+#: src/view/com/modals/ContentFilteringSettings.tsx:175
+#~ msgid "You must be 18 or older to enable adult content."
+#~ msgstr "Щоб увімкнути відображення вмісту для дорослих вам повинно бути не менше 18 років."
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:110
msgid "You must be 18 years or older to enable adult content"
+msgstr "Ви повинні бути старше 18 років, щоб дозволити перегляд контенту для дорослих"
+
+#: src/components/ReportDialog/SubmitView.tsx:205
+msgid "You must select at least one labeler for a report"
msgstr ""
-#: src/view/com/util/forms/PostDropdownBtn.tsx:98
+#: src/view/com/util/forms/PostDropdownBtn.tsx:144
msgid "You will no longer receive notifications for this thread"
-msgstr ""
+msgstr "Ви більше не будете отримувати сповіщення з цього обговорення"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:147
msgid "You will now receive notifications for this thread"
-msgstr ""
+msgstr "Ви будете отримувати сповіщення з цього обговорення"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:107
+#: src/screens/Login/SetNewPasswordForm.tsx:104
msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password."
msgstr "Ви отримаєте електронний лист із кодом підтвердження. Введіть цей код тут, а потім введіть новий пароль."
-#: src/screens/Onboarding/StepModeration/index.tsx:72
+#: src/screens/Onboarding/StepModeration/index.tsx:60
msgid "You're in control"
-msgstr ""
+msgstr "Все під вашим контролем"
#: src/screens/Deactivated.tsx:87
#: src/screens/Deactivated.tsx:88
#: src/screens/Deactivated.tsx:103
msgid "You're in line"
-msgstr ""
+msgstr "Ви в черзі"
-#: src/screens/Onboarding/StepFinished.tsx:90
+#: src/screens/Onboarding/StepFinished.tsx:94
msgid "You're ready to go!"
+msgstr "Все готово!"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:98
+#: src/lib/moderation/useModerationCauseDescription.ts:101
+msgid "You've chosen to hide a word or tag within this post."
msgstr ""
#: src/view/com/posts/FollowingEndOfFeed.tsx:48
msgid "You've reached the end of your feed! Find some more accounts to follow."
-msgstr ""
+msgstr "Ваша домашня стрічка закінчилась! Підпишіться на більше користувачів щоб отримувати більше постів."
-#: src/view/com/auth/create/Step1.tsx:74
+#: src/screens/Signup/index.tsx:150
msgid "Your account"
msgstr "Ваш акаунт"
-#: src/view/com/modals/DeleteAccount.tsx:67
+#: src/view/com/modals/DeleteAccount.tsx:68
msgid "Your account has been deleted"
-msgstr ""
+msgstr "Ваш обліковий запис видалено"
#: src/view/screens/Settings/ExportCarDialog.tsx:47
msgid "Your account repository, containing all public data records, can be downloaded as a \"CAR\" file. This file does not include media embeds, such as images, or your private data, which must be fetched separately."
-msgstr ""
+msgstr "Дані з вашого облікового запису, які містять усі загальнодоступні записи, можна завантажити як \"CAR\" файл. Цей файл не містить медіафайлів, таких як зображення, або особисті дані, які необхідно отримати окремо."
-#: src/view/com/auth/create/Step1.tsx:234
+#: src/screens/Signup/StepInfo/index.tsx:121
msgid "Your birth date"
msgstr "Ваша дата народження"
#: src/view/com/modals/InAppBrowserConsent.tsx:47
msgid "Your choice will be saved, but can be changed later in settings."
-msgstr ""
+msgstr "Ваш вибір буде запам'ятовано, ви у будь-який момент зможете змінити його в налаштуваннях."
-#: src/screens/Onboarding/StepFollowingFeed.tsx:61
+#: src/screens/Onboarding/StepFollowingFeed.tsx:62
msgid "Your default feed is \"Following\""
-msgstr ""
+msgstr "Ваша стрічка за замовчуванням \"Following\""
-#: src/view/com/auth/create/state.ts:153
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:70
+#: src/screens/Login/ForgotPasswordForm.tsx:57
+#: src/screens/Signup/state.ts:227
#: src/view/com/modals/ChangePassword.tsx:54
msgid "Your email appears to be invalid."
msgstr "Не вдалося розпізнати адресу електронної пошти."
#: src/view/com/modals/Waitlist.tsx:109
-msgid "Your email has been saved! We'll be in touch soon."
-msgstr "Вашу електронну адресу збережено! Ми скоро зв'яжемося з вами."
+#~ msgid "Your email has been saved! We'll be in touch soon."
+#~ msgstr ""
#: src/view/com/modals/ChangeEmail.tsx:125
msgid "Your email has been updated but not verified. As a next step, please verify your new email."
@@ -4856,61 +6067,48 @@ msgstr "Ваша електронна пошта ще не підтвердже
#: src/view/com/posts/FollowingEmptyState.tsx:47
msgid "Your following feed is empty! Follow more users to see what's happening."
-msgstr ""
+msgstr "Ваша домашня стрічка порожня! Підпишіться на більше користувачів щоб отримувати більше постів."
-#: src/view/com/auth/create/Step3.tsx:45
+#: src/screens/Signup/StepHandle.tsx:72
msgid "Your full handle will be"
msgstr "Ваш повний псевдонім буде"
-#: src/view/com/modals/ChangeHandle.tsx:270
+#: src/view/com/modals/ChangeHandle.tsx:271
msgid "Your full handle will be <0>@{0}0>"
-msgstr ""
-
-#: src/view/com/auth/create/Step1.tsx:53
-#~ msgid "Your hosting provider"
-#~ msgstr "Ваш хостинг-провайдер"
+msgstr "Вашим повним псевдонімом буде <0>@{0}0>"
#: src/view/screens/Settings.tsx:430
#: src/view/shell/desktop/RightNav.tsx:137
#: src/view/shell/Drawer.tsx:660
#~ msgid "Your invite codes are hidden when logged in using an App Password"
-#~ msgstr "Ваші коди запрошення приховано, якщо ви увійшли за допомогою пароля для застосунків"
+#~ msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:220
+msgid "Your muted words"
+msgstr "Ваші ігноровані слова"
-#: src/view/com/modals/ChangePassword.tsx:155
+#: src/view/com/modals/ChangePassword.tsx:157
msgid "Your password has been changed successfully!"
-msgstr ""
+msgstr "Ваш пароль успішно змінено!"
-#: src/view/com/composer/Composer.tsx:267
+#: src/view/com/composer/Composer.tsx:284
msgid "Your post has been published"
-msgstr ""
+msgstr "Пост опубліковано"
-#: src/screens/Onboarding/StepFinished.tsx:105
+#: src/screens/Onboarding/StepFinished.tsx:109
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:59
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:59
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:61
msgid "Your posts, likes, and blocks are public. Mutes are private."
msgstr "Ваші повідомлення, вподобання і блоки є публічними. Ігнорування - приватні."
-#: src/view/com/modals/SwitchAccount.tsx:84
-#: src/view/screens/Settings/index.tsx:118
+#: src/view/screens/Settings/index.tsx:125
msgid "Your profile"
msgstr "Ваш профіль"
-#: src/view/screens/Moderation.tsx:205
-#~ msgid "Your profile and account will not be visible to anyone visiting the Bluesky app without an account, or to account holders who are not logged in. Enabling this will not make your profile private."
-#~ msgstr ""
-
-#: src/view/screens/Moderation.tsx:220
-#~ msgid "Your profile and content will not be visible to anyone visiting the Bluesky app without an account. Enabling this will not make your profile private."
-#~ msgstr ""
-
-#: src/view/screens/Moderation.tsx:220
-#~ msgid "Your profile and posts will not be visible to people visiting the Bluesky app or website without having an account and being logged in."
-#~ msgstr ""
-
-#: src/view/com/composer/Composer.tsx:266
+#: src/view/com/composer/Composer.tsx:283
msgid "Your reply has been published"
-msgstr ""
+msgstr "Відповідь опубліковано"
-#: src/view/com/auth/create/Step3.tsx:28
+#: src/screens/Signup/index.tsx:152
msgid "Your user handle"
msgstr "Ваш псевдонім"
diff --git a/src/locale/locales/zh-CN/messages.po b/src/locale/locales/zh-CN/messages.po
index a49f13300c..cbd335e836 100644
--- a/src/locale/locales/zh-CN/messages.po
+++ b/src/locale/locales/zh-CN/messages.po
@@ -1,6 +1,6 @@
msgid ""
msgstr ""
-"POT-Creation-Date: 2024-02-07 19:20+0800\n"
+"POT-Creation-Date: 2024-04-06 12:55+0800\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: \n"
-"Last-Translator: Mikan Harada \n"
+"Last-Translator: Frudrax Cheng \n"
"Language-Team: Frudrax Cheng, Simon Chan, U2FsdGVkX1, Mikan Harada\n"
"Plural-Forms: \n"
@@ -17,39 +17,25 @@ msgstr ""
msgid "(no email)"
msgstr "(没有邮件)"
-#: src/view/shell/desktop/RightNav.tsx:168
-#~ msgid "{0, plural, one {# invite code available} other {# invite codes available}}"
-#~ msgstr "{0, plural, one {# 条邀请码可用} other {# 条邀请码可用}}"
-
-#: src/view/com/profile/ProfileHeader.tsx:592
+#: src/screens/Profile/Header/Metrics.tsx:44
msgid "{following} following"
-msgstr "{following} 正在关注"
-
-#: src/view/shell/desktop/RightNav.tsx:151
-#~ msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}"
-#~ msgstr "{invitesAvailable, plural, one {邀请码: # 可用} other {邀请码: # 可用}}"
-
-#: src/view/screens/Settings.tsx:435
-#: src/view/shell/Drawer.tsx:664
-#~ msgid "{invitesAvailable} invite code available"
-#~ msgstr "{invitesAvailable} 条邀请码可用"
-
-#: src/view/screens/Settings.tsx:437
-#: src/view/shell/Drawer.tsx:666
-#~ msgid "{invitesAvailable} invite codes available"
-#~ msgstr "{invitesAvailable} 条邀请码可用"
+msgstr "{following} 个正在关注"
-#: src/view/shell/Drawer.tsx:440
+#: src/view/shell/Drawer.tsx:443
msgid "{numUnreadNotifications} unread"
-msgstr "{numUnreadNotifications} 未读"
+msgstr "{numUnreadNotifications} 个未读"
#: src/view/com/threadgate/WhoCanReply.tsx:158
msgid "<0/> members"
-msgstr "<0/> 成员"
+msgstr "<0/> 个成员"
-#: src/view/com/profile/ProfileHeader.tsx:594
+#: src/view/shell/Drawer.tsx:97
+msgid "<0>{0}0> following"
+msgstr "<0>{0}0> 个正在关注"
+
+#: src/screens/Profile/Header/Metrics.tsx:45
msgid "<0>{following} 0><1>following1>"
-msgstr "<0>{following} 0><1>正在关注1>"
+msgstr "<0>{following} 0><1>个正在关注1>"
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:30
msgid "<0>Choose your0><1>Recommended1><2>Feeds2>"
@@ -63,51 +49,52 @@ msgstr "<0>关注一些0><1>推荐的1><2>用户2>"
msgid "<0>Welcome to0><1>Bluesky1>"
msgstr "<0>欢迎来到0><1>Bluesky1>"
-#: src/view/com/profile/ProfileHeader.tsx:557
+#: src/screens/Profile/Header/Handle.tsx:42
msgid "⚠Invalid Handle"
msgstr "⚠无效的用户识别符"
-#: src/view/com/util/moderation/LabelInfo.tsx:45
-msgid "A content warning has been applied to this {0}."
-msgstr "此处已启用内容警告 {0}."
-
-#: src/lib/hooks/useOTAUpdate.ts:16
-msgid "A new version of the app is available. Please update to continue using the app."
-msgstr "App 新版本已发布,请更新以继续使用。"
-
-#: src/view/com/util/ViewHeader.tsx:83
-#: src/view/screens/Search/Search.tsx:624
+#: src/view/com/util/ViewHeader.tsx:89
+#: src/view/screens/Search/Search.tsx:649
msgid "Access navigation links and settings"
msgstr "访问导航链接及设置"
-#: src/view/com/pager/FeedsTabBarMobile.tsx:89
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:52
msgid "Access profile and other navigation links"
msgstr "访问个人资料及其他导航链接"
-#: src/view/com/modals/EditImage.tsx:299
-#: src/view/screens/Settings/index.tsx:451
+#: src/view/com/modals/EditImage.tsx:300
+#: src/view/screens/Settings/index.tsx:470
msgid "Accessibility"
msgstr "无障碍"
-#: src/view/com/auth/login/LoginForm.tsx:166
-#: src/view/screens/Settings/index.tsx:308
-#: src/view/screens/Settings/index.tsx:721
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "account"
+msgstr "账户"
+
+#: src/screens/Login/LoginForm.tsx:144
+#: src/view/screens/Settings/index.tsx:327
+#: src/view/screens/Settings/index.tsx:743
msgid "Account"
msgstr "账户"
-#: src/view/com/profile/ProfileHeader.tsx:245
+#: src/view/com/profile/ProfileMenu.tsx:139
msgid "Account blocked"
msgstr "已屏蔽账户"
-#: src/view/com/profile/ProfileHeader.tsx:212
+#: src/view/com/profile/ProfileMenu.tsx:153
+msgid "Account followed"
+msgstr "已关注账户"
+
+#: src/view/com/profile/ProfileMenu.tsx:113
msgid "Account muted"
msgstr "已隐藏账户"
-#: src/view/com/modals/ModerationDetails.tsx:86
+#: src/components/moderation/ModerationDetailsDialog.tsx:93
+#: src/lib/moderation/useModerationCauseDescription.ts:91
msgid "Account Muted"
msgstr "已隐藏账户"
-#: src/view/com/modals/ModerationDetails.tsx:72
+#: src/components/moderation/ModerationDetailsDialog.tsx:82
msgid "Account Muted by List"
msgstr "账户已被列表隐藏"
@@ -119,73 +106,79 @@ msgstr "账户选项"
msgid "Account removed from quick access"
msgstr "已从快速访问中移除账户"
-#: src/view/com/profile/ProfileHeader.tsx:267
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:137
+#: src/view/com/profile/ProfileMenu.tsx:128
msgid "Account unblocked"
msgstr "已取消屏蔽账户"
-#: src/view/com/profile/ProfileHeader.tsx:225
+#: src/view/com/profile/ProfileMenu.tsx:166
+msgid "Account unfollowed"
+msgstr "已取消关注账户"
+
+#: src/view/com/profile/ProfileMenu.tsx:102
msgid "Account unmuted"
msgstr "已取消隐藏账户"
+#: src/components/dialogs/MutedWords.tsx:164
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:150
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/screens/ProfileList.tsx:812
+#: src/view/screens/ProfileList.tsx:827
msgid "Add"
msgstr "添加"
#: src/view/com/modals/SelfLabel.tsx:56
msgid "Add a content warning"
-msgstr "添加内容警告"
+msgstr "新增内容警告"
-#: src/view/screens/ProfileList.tsx:802
+#: src/view/screens/ProfileList.tsx:817
msgid "Add a user to this list"
msgstr "将用户添加至列表"
-#: src/view/screens/Settings/index.tsx:383
-#: src/view/screens/Settings/index.tsx:392
+#: src/components/dialogs/SwitchAccount.tsx:55
+#: src/view/screens/Settings/index.tsx:402
+#: src/view/screens/Settings/index.tsx:411
msgid "Add account"
msgstr "添加账户"
#: src/view/com/composer/photos/Gallery.tsx:119
#: src/view/com/composer/photos/Gallery.tsx:180
-#: src/view/com/modals/AltImage.tsx:116
+#: src/view/com/modals/AltImage.tsx:117
msgid "Add alt text"
-msgstr "添加替代文字"
+msgstr "新增替代文字"
-#: src/view/screens/AppPasswords.tsx:102
-#: src/view/screens/AppPasswords.tsx:143
-#: src/view/screens/AppPasswords.tsx:156
+#: src/view/screens/AppPasswords.tsx:104
+#: src/view/screens/AppPasswords.tsx:145
+#: src/view/screens/AppPasswords.tsx:158
msgid "Add App Password"
-msgstr "添加 App 专用密码"
-
-#: src/view/com/modals/report/InputIssueDetails.tsx:41
-#: src/view/com/modals/report/Modal.tsx:191
-msgid "Add details"
-msgstr "添加细节"
+msgstr "新增应用专用密码"
-#: src/view/com/modals/report/Modal.tsx:194
-msgid "Add details to report"
-msgstr "补充反馈详细内容"
-
-#: src/view/com/composer/Composer.tsx:446
+#: src/view/com/composer/Composer.tsx:467
msgid "Add link card"
msgstr "添加链接卡片"
-#: src/view/com/composer/Composer.tsx:451
+#: src/view/com/composer/Composer.tsx:472
msgid "Add link card:"
msgstr "添加链接卡片:"
-#: src/view/com/modals/ChangeHandle.tsx:417
+#: src/components/dialogs/MutedWords.tsx:157
+msgid "Add mute word for configured settings"
+msgstr "为配置的设置添加隐藏词"
+
+#: src/components/dialogs/MutedWords.tsx:86
+msgid "Add muted words and tags"
+msgstr "添加隐藏词和话题标签"
+
+#: src/view/com/modals/ChangeHandle.tsx:416
msgid "Add the following DNS record to your domain:"
-msgstr "将以下DNS记录添加到你的域名:"
+msgstr "将以下 DNS 记录新增到你的域名:"
-#: src/view/com/profile/ProfileHeader.tsx:309
+#: src/view/com/profile/ProfileMenu.tsx:263
+#: src/view/com/profile/ProfileMenu.tsx:266
msgid "Add to Lists"
msgstr "添加至列表"
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/feeds/FeedSourceCard.tsx:234
msgid "Add to my feeds"
msgstr "添加至自定义信息流"
@@ -196,34 +189,41 @@ msgstr "已添加"
#: src/view/com/modals/ListAddRemoveUsers.tsx:191
#: src/view/com/modals/UserAddRemoveLists.tsx:144
msgid "Added to list"
-msgstr "添加至列表"
+msgstr "已添加至列表"
-#: src/view/com/feeds/FeedSourceCard.tsx:125
+#: src/view/com/feeds/FeedSourceCard.tsx:108
msgid "Added to my feeds"
-msgstr "添加至自定义信息流"
+msgstr "已添加至自定义信息流"
-#: src/view/screens/PreferencesHomeFeed.tsx:173
+#: src/view/screens/PreferencesFollowingFeed.tsx:173
msgid "Adjust the number of likes a reply must have to be shown in your feed."
-msgstr "调整回复中需要具有的点赞数才会在你的信息流中显示。"
+msgstr "调整回复中需要具有的喜欢数才会在你的信息流中显示。"
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:117
#: src/view/com/modals/SelfLabel.tsx:75
msgid "Adult Content"
msgstr "成人内容"
-#: src/view/com/modals/ContentFilteringSettings.tsx:141
-msgid "Adult content can only be enabled via the Web at <0/>."
-msgstr "要显示成人内容,你必须访问网页端上的<0/>。"
+#: src/components/moderation/LabelPreference.tsx:242
+msgid "Adult content is disabled."
+msgstr "成人内容显示已被禁用"
-#: src/view/screens/Settings/index.tsx:664
+#: src/screens/Moderation/index.tsx:375
+#: src/view/screens/Settings/index.tsx:684
msgid "Advanced"
msgstr "详细设置"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:221
-#: src/view/com/modals/ChangePassword.tsx:168
+#: src/view/screens/Feeds.tsx:666
+msgid "All the feeds you've saved, right in one place."
+msgstr "你保存的所有信息流都集中在一处。"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:178
+#: src/view/com/modals/ChangePassword.tsx:170
msgid "Already have a code?"
-msgstr "已经有确认码了?"
+msgstr "已经有验证码了?"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:98
+#: src/screens/Login/ChooseAccountForm.tsx:39
msgid "Already signed in as @{0}"
msgstr "已以@{0}身份登录"
@@ -231,13 +231,13 @@ msgstr "已以@{0}身份登录"
msgid "ALT"
msgstr "ALT"
-#: src/view/com/modals/EditImage.tsx:315
+#: src/view/com/modals/EditImage.tsx:316
msgid "Alt text"
msgstr "替代文字"
#: src/view/com/composer/photos/Gallery.tsx:209
msgid "Alt text describes images for blind and low-vision users, and helps give context to everyone."
-msgstr "为图片添加替代文字,以帮助盲人及视障群体了解图片内容。"
+msgstr "为图片新增替代文字,以帮助盲人及视障群体了解图片内容。"
#: src/view/com/modals/VerifyEmail.tsx:124
msgid "An email has been sent to {0}. It includes a confirmation code which you can enter below."
@@ -247,12 +247,18 @@ msgstr "一封电子邮件已发送至 {0}。请查阅邮件内容并复制验
msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below."
msgstr "一封电子邮件已发送至先前填写的邮箱 {0}。请查阅邮件内容并复制验证码至下方。"
-#: src/view/com/profile/FollowButton.tsx:30
-#: src/view/com/profile/FollowButton.tsx:40
+#: src/lib/moderation/useReportOptions.ts:26
+msgid "An issue not included in these options"
+msgstr "不在这些选项中的问题"
+
+#: src/view/com/profile/FollowButton.tsx:35
+#: src/view/com/profile/FollowButton.tsx:45
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:188
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:198
msgid "An issue occurred, please try again."
msgstr "出现问题,请重试。"
-#: src/view/com/notifications/FeedItem.tsx:236
+#: src/view/com/notifications/FeedItem.tsx:240
#: src/view/com/threadgate/WhoCanReply.tsx:178
msgid "and"
msgstr "和"
@@ -261,72 +267,69 @@ msgstr "和"
msgid "Animals"
msgstr "动物"
+#: src/lib/moderation/useReportOptions.ts:31
+msgid "Anti-Social Behavior"
+msgstr "反社会行为"
+
#: src/view/screens/LanguageSettings.tsx:95
msgid "App Language"
msgstr "应用语言"
-#: src/view/screens/AppPasswords.tsx:228
+#: src/view/screens/AppPasswords.tsx:223
msgid "App password deleted"
-msgstr "App 专用密码已删除"
+msgstr "应用专用密码已删除"
-#: src/view/com/modals/AddAppPasswords.tsx:134
+#: src/view/com/modals/AddAppPasswords.tsx:135
msgid "App Password names can only contain letters, numbers, spaces, dashes, and underscores."
-msgstr "App 专用密码只能包含字母、数字、空格、破折号及下划线。"
+msgstr "应用专用密码只能包含字母、数字、空格、破折号及下划线。"
-#: src/view/com/modals/AddAppPasswords.tsx:99
+#: src/view/com/modals/AddAppPasswords.tsx:100
msgid "App Password names must be at least 4 characters long."
-msgstr "App 专用密码必须至少为 4 个字符。"
+msgstr "应用专用密码必须至少为 4 个字符。"
-#: src/view/screens/Settings/index.tsx:675
+#: src/view/screens/Settings/index.tsx:695
msgid "App password settings"
-msgstr "App 专用密码设置"
+msgstr "应用专用密码设置"
-#: src/view/screens/Settings.tsx:650
-#~ msgid "App passwords"
-#~ msgstr "App 专用密码"
-
-#: src/Navigation.tsx:237
-#: src/view/screens/AppPasswords.tsx:187
-#: src/view/screens/Settings/index.tsx:684
+#: src/Navigation.tsx:251
+#: src/view/screens/AppPasswords.tsx:189
+#: src/view/screens/Settings/index.tsx:704
msgid "App Passwords"
-msgstr "App 专用密码"
+msgstr "应用专用密码"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:250
-msgid "Appeal content warning"
-msgstr "申诉内容警告"
+#: src/components/moderation/LabelsOnMeDialog.tsx:133
+#: src/components/moderation/LabelsOnMeDialog.tsx:136
+msgid "Appeal"
+msgstr "申诉"
-#: src/view/com/modals/AppealLabel.tsx:65
-msgid "Appeal Content Warning"
-msgstr "申诉内容警告"
+#: src/components/moderation/LabelsOnMeDialog.tsx:201
+msgid "Appeal \"{0}\" label"
+msgstr "申诉 \"{0}\" 标记"
-#: src/view/com/util/moderation/LabelInfo.tsx:52
-msgid "Appeal this decision"
-msgstr "对此决定提出申诉"
+#: src/components/moderation/LabelsOnMeDialog.tsx:192
+msgid "Appeal submitted."
+msgstr "申诉已提交"
-#: src/view/com/util/moderation/LabelInfo.tsx:56
-msgid "Appeal this decision."
-msgstr "对此决定提出申诉。"
-
-#: src/view/screens/Settings/index.tsx:466
+#: src/view/screens/Settings/index.tsx:485
msgid "Appearance"
msgstr "外观"
-#: src/view/screens/AppPasswords.tsx:224
+#: src/view/screens/AppPasswords.tsx:265
msgid "Are you sure you want to delete the app password \"{name}\"?"
-msgstr "你确定要删除这条 App 专用密码 \"{name}\"?"
+msgstr "你确定要删除这条应用专用密码 \"{name}\" 吗?"
-#: src/view/com/composer/Composer.tsx:143
+#: src/view/com/feeds/FeedSourceCard.tsx:280
+msgid "Are you sure you want to remove {0} from your feeds?"
+msgstr "你确定要从你的信息流中删除 {0} 吗?"
+
+#: src/view/com/composer/Composer.tsx:509
msgid "Are you sure you'd like to discard this draft?"
msgstr "你确定要丢弃此草稿吗?"
-#: src/view/screens/ProfileList.tsx:364
+#: src/components/dialogs/MutedWords.tsx:281
msgid "Are you sure?"
msgstr "你确定吗?"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:233
-msgid "Are you sure? This cannot be undone."
-msgstr "你确定吗?此操作无法撤销。"
-
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:60
msgid "Are you writing in <0>{0}0>?"
msgstr "你是用 <0>{0}0> 编写的吗?"
@@ -339,78 +342,84 @@ msgstr "艺术"
msgid "Artistic or non-erotic nudity."
msgstr "艺术作品或非色情的裸体。"
-#: src/view/com/auth/create/CreateAccount.tsx:147
-#: src/view/com/auth/login/ChooseAccountForm.tsx:151
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:174
-#: src/view/com/auth/login/LoginForm.tsx:259
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:179
-#: src/view/com/modals/report/InputIssueDetails.tsx:46
-#: src/view/com/post-thread/PostThread.tsx:408
-#: src/view/com/post-thread/PostThread.tsx:458
-#: src/view/com/post-thread/PostThread.tsx:466
-#: src/view/com/profile/ProfileHeader.tsx:648
-#: src/view/com/util/ViewHeader.tsx:81
-msgid "Back"
-msgstr "返回"
+#: src/screens/Signup/StepHandle.tsx:118
+msgid "At least 3 characters"
+msgstr ""
-#: src/view/com/post-thread/PostThread.tsx:416
-msgctxt "action"
+#: src/components/moderation/LabelsOnMeDialog.tsx:246
+#: src/components/moderation/LabelsOnMeDialog.tsx:247
+#: src/screens/Login/ChooseAccountForm.tsx:73
+#: src/screens/Login/ChooseAccountForm.tsx:78
+#: src/screens/Login/ForgotPasswordForm.tsx:129
+#: src/screens/Login/ForgotPasswordForm.tsx:135
+#: src/screens/Login/LoginForm.tsx:221
+#: src/screens/Login/LoginForm.tsx:227
+#: src/screens/Login/SetNewPasswordForm.tsx:160
+#: src/screens/Login/SetNewPasswordForm.tsx:166
+#: src/screens/Profile/Header/Shell.tsx:96
+#: src/screens/Signup/index.tsx:179
+#: src/view/com/util/ViewHeader.tsx:87
msgid "Back"
msgstr "返回"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:136
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:144
msgid "Based on your interest in {interestsText}"
msgstr "基于你对 {interestsText} 感兴趣"
-#: src/view/screens/Settings/index.tsx:523
+#: src/view/screens/Settings/index.tsx:542
msgid "Basics"
msgstr "基础信息"
-#: src/view/com/auth/create/Step1.tsx:246
-#: src/view/com/modals/BirthDateSettings.tsx:73
+#: src/components/dialogs/BirthDateSettings.tsx:107
msgid "Birthday"
msgstr "生日"
-#: src/view/screens/Settings/index.tsx:340
+#: src/view/screens/Settings/index.tsx:359
msgid "Birthday:"
-msgstr "生日:"
+msgstr "生日:"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+msgid "Block"
+msgstr "屏蔽"
-#: src/view/com/profile/ProfileHeader.tsx:238
-#: src/view/com/profile/ProfileHeader.tsx:345
+#: src/view/com/profile/ProfileMenu.tsx:300
+#: src/view/com/profile/ProfileMenu.tsx:307
msgid "Block Account"
msgstr "屏蔽账户"
-#: src/view/screens/ProfileList.tsx:555
+#: src/view/com/profile/ProfileMenu.tsx:344
+msgid "Block Account?"
+msgstr "屏蔽账户?"
+
+#: src/view/screens/ProfileList.tsx:530
msgid "Block accounts"
msgstr "屏蔽账户"
-#: src/view/screens/ProfileList.tsx:505
+#: src/view/screens/ProfileList.tsx:478
+#: src/view/screens/ProfileList.tsx:634
msgid "Block list"
msgstr "屏蔽列表"
-#: src/view/screens/ProfileList.tsx:315
+#: src/view/screens/ProfileList.tsx:629
msgid "Block these accounts?"
msgstr "屏蔽这些账户?"
-#: src/view/screens/ProfileList.tsx:319
-msgid "Block this List"
-msgstr "屏蔽这个列表"
-
-#: src/view/com/lists/ListCard.tsx:109
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:60
+#: src/view/com/lists/ListCard.tsx:110
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:55
msgid "Blocked"
msgstr "已屏蔽"
-#: src/view/screens/Moderation.tsx:123
+#: src/screens/Moderation/index.tsx:267
msgid "Blocked accounts"
msgstr "已屏蔽账户"
-#: src/Navigation.tsx:130
+#: src/Navigation.tsx:134
#: src/view/screens/ModerationBlockedAccounts.tsx:107
msgid "Blocked Accounts"
msgstr "已屏蔽账户"
-#: src/view/com/profile/ProfileHeader.tsx:240
+#: src/view/com/profile/ProfileMenu.tsx:356
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
msgstr "被屏蔽的账户无法在你的帖子中回复、提及你或以其他方式与你互动。"
@@ -418,71 +427,77 @@ msgstr "被屏蔽的账户无法在你的帖子中回复、提及你或以其他
msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours."
msgstr "被屏蔽的账户无法在你的帖子中回复、提及你或以其他方式与你互动。你将不会看到他们所发的内容,同样他们也无法查看你的内容。"
-#: src/view/com/post-thread/PostThread.tsx:267
+#: src/view/com/post-thread/PostThread.tsx:313
msgid "Blocked post."
msgstr "已屏蔽帖子。"
-#: src/view/screens/ProfileList.tsx:317
+#: src/screens/Profile/Sections/Labels.tsx:152
+msgid "Blocking does not prevent this labeler from placing labels on your account."
+msgstr "屏蔽不能阻止这个人在你的账户上放置标记"
+
+#: src/view/screens/ProfileList.tsx:631
msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
-msgstr "屏蔽是公共性的。被屏蔽的账户无法在你的帖子中回复、提及你或以其他方式与你互动。"
+msgstr "屏蔽是公开的。被屏蔽的账户无法在你的帖子中回复、提及你或以其他方式与你互动。"
+
+#: src/view/com/profile/ProfileMenu.tsx:353
+msgid "Blocking will not prevent labels from being applied on your account, but it will stop this account from replying in your threads or interacting with you."
+msgstr "屏蔽不会阻止标记被放置到你的账户上,但会阻止此账户在你发布的帖子中回复或与你互动。"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:93
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:98
+#: src/view/com/auth/SplashScreen.web.tsx:169
msgid "Blog"
msgstr "博客"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:31
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:32
#: src/view/com/auth/server-input/index.tsx:89
-#: src/view/com/auth/server-input/index.tsx:90
+#: src/view/com/auth/server-input/index.tsx:91
msgid "Bluesky"
msgstr "Bluesky"
-#: src/view/com/auth/server-input/index.tsx:150
+#: src/view/com/auth/server-input/index.tsx:154
msgid "Bluesky is an open network where you can choose your hosting provider. Custom hosting is now available in beta for developers."
-msgstr ""
+msgstr "Bluesky 是一个开放的公共网络,你可以选择自己的托管提供商。现在,自定义托管现在已经进入开发者测试阶段。"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:80
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:80
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:82
msgid "Bluesky is flexible."
msgstr "Bluesky 非常灵活。"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:69
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:69
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:71
msgid "Bluesky is open."
msgstr "Bluesky 保持开放。"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:56
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:56
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:58
msgid "Bluesky is public."
msgstr "Bluesky 为公众而生。"
-#: src/view/com/modals/Waitlist.tsx:70
-msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
-msgstr "Bluesky 使用邀请制来打造更健康的社群环境。 如果你不认识拥有邀请码的人,你可以先填写并提交候补列表,我们会尽快审核并发送邀请码。"
-
-#: src/view/screens/Moderation.tsx:226
+#: src/screens/Moderation/index.tsx:533
msgid "Bluesky will not show your profile and posts to logged-out users. Other apps may not honor this request. This does not make your account private."
msgstr "Bluesky 不会向未登录的用户显示你的个人资料和帖子。但其他应用可能不会遵照此请求,这无法确保你的账户隐私。"
-#: src/view/com/modals/ServerInput.tsx:78
-#~ msgid "Bluesky.Social"
-#~ msgstr "Bluesky.Social"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:53
+msgid "Blur images"
+msgstr "模糊化图片"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:51
+msgid "Blur images and filter from feeds"
+msgstr "模糊化图片并从信息流中过滤"
#: src/screens/Onboarding/index.tsx:33
msgid "Books"
msgstr "书籍"
-#: src/view/screens/Settings/index.tsx:859
-msgid "Build version {0} {1}"
-msgstr "构建版本号 {0} {1}"
+#: src/view/screens/Settings/index.tsx:893
+#~ msgid "Build version {0} {1}"
+#~ msgstr "构建版本号 {0} {1}"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:87
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:92
+#: src/view/com/auth/SplashScreen.web.tsx:166
msgid "Business"
msgstr "商务"
-#: src/view/com/modals/ServerInput.tsx:115
-#~ msgid "Button disabled. Input custom domain to proceed."
-#~ msgstr "按钮已禁用。输入自定义域名以继续。"
-
#: src/view/com/profile/ProfileSubpageHeader.tsx:157
msgid "by —"
msgstr "来自 —"
@@ -491,95 +506,109 @@ msgstr "来自 —"
msgid "by {0}"
msgstr "来自 {0}"
+#: src/components/LabelingServiceCard/index.tsx:57
+msgid "By {0}"
+msgstr "来自 {0}"
+
#: src/view/com/profile/ProfileSubpageHeader.tsx:161
msgid "by <0/>"
msgstr "来自 <0/>"
+#: src/screens/Signup/StepInfo/Policies.tsx:74
+msgid "By creating an account you agree to the {els}."
+msgstr "创建账户即默认表明你同意我们的 {els}。"
+
#: src/view/com/profile/ProfileSubpageHeader.tsx:159
msgid "by you"
msgstr "来自你"
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:60
-#: src/view/com/util/UserAvatar.tsx:224
-#: src/view/com/util/UserBanner.tsx:40
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:77
msgid "Camera"
msgstr "相机"
-#: src/view/com/modals/AddAppPasswords.tsx:216
+#: src/view/com/modals/AddAppPasswords.tsx:217
msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long."
msgstr "只能包含字母、数字、空格、破折号及下划线。 长度必须至少 4 个字符,但不超过 32 个字符。"
-#: src/components/Prompt.tsx:91
-#: src/view/com/composer/Composer.tsx:300
-#: src/view/com/composer/Composer.tsx:305
+#: src/components/Menu/index.tsx:213
+#: src/components/Prompt.tsx:113
+#: src/components/Prompt.tsx:115
+#: src/components/TagMenu/index.tsx:268
+#: src/view/com/composer/Composer.tsx:317
+#: src/view/com/composer/Composer.tsx:322
#: src/view/com/modals/ChangeEmail.tsx:218
#: src/view/com/modals/ChangeEmail.tsx:220
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
-#: src/view/com/modals/CreateOrEditList.tsx:355
-#: src/view/com/modals/EditImage.tsx:323
-#: src/view/com/modals/EditProfile.tsx:249
+#: src/view/com/modals/ChangeHandle.tsx:154
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
+#: src/view/com/modals/CreateOrEditList.tsx:356
+#: src/view/com/modals/crop-image/CropImage.web.tsx:138
+#: src/view/com/modals/EditImage.tsx:324
+#: src/view/com/modals/EditProfile.tsx:250
#: src/view/com/modals/InAppBrowserConsent.tsx:78
-#: src/view/com/modals/LinkWarning.tsx:87
-#: src/view/com/modals/Repost.tsx:87
+#: src/view/com/modals/InAppBrowserConsent.tsx:80
+#: src/view/com/modals/LinkWarning.tsx:105
+#: src/view/com/modals/LinkWarning.tsx:107
+#: src/view/com/modals/Repost.tsx:88
#: src/view/com/modals/VerifyEmail.tsx:247
#: src/view/com/modals/VerifyEmail.tsx:253
-#: src/view/com/modals/Waitlist.tsx:142
-#: src/view/screens/Search/Search.tsx:693
-#: src/view/shell/desktop/Search.tsx:238
+#: src/view/screens/Search/Search.tsx:718
+#: src/view/shell/desktop/Search.tsx:239
msgid "Cancel"
msgstr "取消"
-#: src/view/com/modals/Confirm.tsx:88
-#: src/view/com/modals/Confirm.tsx:91
-#: src/view/com/modals/CreateOrEditList.tsx:360
-#: src/view/com/modals/DeleteAccount.tsx:156
-#: src/view/com/modals/DeleteAccount.tsx:234
+#: src/view/com/modals/CreateOrEditList.tsx:361
+#: src/view/com/modals/DeleteAccount.tsx:155
+#: src/view/com/modals/DeleteAccount.tsx:233
msgctxt "action"
msgid "Cancel"
msgstr "取消"
-#: src/view/com/modals/DeleteAccount.tsx:152
-#: src/view/com/modals/DeleteAccount.tsx:230
+#: src/view/com/modals/DeleteAccount.tsx:151
+#: src/view/com/modals/DeleteAccount.tsx:229
msgid "Cancel account deletion"
-msgstr "撤销账户删除申请"
+msgstr "取消账户删除申请"
-#: src/view/com/modals/ChangeHandle.tsx:149
+#: src/view/com/modals/ChangeHandle.tsx:150
msgid "Cancel change handle"
-msgstr "撤销修改用户识别符"
+msgstr "取消修改用户识别符"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:134
+#: src/view/com/modals/crop-image/CropImage.web.tsx:135
msgid "Cancel image crop"
-msgstr "撤销图片裁剪"
+msgstr "取消裁剪图片"
-#: src/view/com/modals/EditProfile.tsx:244
+#: src/view/com/modals/EditProfile.tsx:245
msgid "Cancel profile editing"
-msgstr "撤销个人资料编辑"
+msgstr "取消编辑个人资料"
-#: src/view/com/modals/Repost.tsx:78
+#: src/view/com/modals/Repost.tsx:79
msgid "Cancel quote post"
-msgstr "撤销引用帖子"
+msgstr "取消引用帖子"
#: src/view/com/modals/ListAddRemoveUsers.tsx:87
-#: src/view/shell/desktop/Search.tsx:234
+#: src/view/shell/desktop/Search.tsx:235
msgid "Cancel search"
-msgstr "撤销搜索"
+msgstr "取消搜索"
-#: src/view/com/modals/Waitlist.tsx:136
-msgid "Cancel waitlist signup"
-msgstr "撤销候补列表申请"
+#: src/view/com/modals/LinkWarning.tsx:106
+msgid "Cancels opening the linked website"
+msgstr "取消打开链接的网站"
+
+#: src/view/com/modals/VerifyEmail.tsx:152
+msgid "Change"
+msgstr "更改"
-#: src/view/screens/Settings/index.tsx:334
+#: src/view/screens/Settings/index.tsx:353
msgctxt "action"
msgid "Change"
msgstr "更改"
-#: src/view/screens/Settings/index.tsx:696
+#: src/view/screens/Settings/index.tsx:716
msgid "Change handle"
msgstr "更改用户识别符"
-#: src/view/com/modals/ChangeHandle.tsx:161
-#: src/view/screens/Settings/index.tsx:705
+#: src/view/com/modals/ChangeHandle.tsx:162
+#: src/view/screens/Settings/index.tsx:727
msgid "Change Handle"
msgstr "更改用户识别符"
@@ -587,11 +616,12 @@ msgstr "更改用户识别符"
msgid "Change my email"
msgstr "更改我的邮箱地址"
-#: src/view/screens/Settings/index.tsx:732
+#: src/view/screens/Settings/index.tsx:754
msgid "Change password"
msgstr "更改密码"
-#: src/view/screens/Settings/index.tsx:741
+#: src/view/com/modals/ChangePassword.tsx:141
+#: src/view/screens/Settings/index.tsx:765
msgid "Change Password"
msgstr "更改密码"
@@ -599,10 +629,6 @@ msgstr "更改密码"
msgid "Change post language to {0}"
msgstr "更改帖子的发布语言至 {0}"
-#: src/view/screens/Settings/index.tsx:733
-msgid "Change your Bluesky password"
-msgstr "更改你的 Bluesky 密码"
-
#: src/view/com/modals/ChangeEmail.tsx:109
msgid "Change Your Email"
msgstr "更改你的邮箱地址"
@@ -614,13 +640,13 @@ msgstr "检查我的状态"
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:121
msgid "Check out some recommended feeds. Tap + to add them to your list of pinned feeds."
-msgstr "查看一些推荐的信息流。点击 + 去将他们添加到你的固定信息流列表中。"
+msgstr "查看一些推荐的信息流。点击 + 去将他们新增到你的固定信息流列表中。"
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:185
msgid "Check out some recommended users. Follow them to see similar users."
msgstr "查看一些推荐的用户。关注他们还将推荐相似的用户。"
-#: src/view/com/modals/DeleteAccount.tsx:169
+#: src/view/com/modals/DeleteAccount.tsx:168
msgid "Check your inbox for an email with the confirmation code to enter below:"
msgstr "查看发送至你电子邮箱的确认邮件,并在下方输入收到的验证码:"
@@ -628,108 +654,124 @@ msgstr "查看发送至你电子邮箱的确认邮件,并在下方输入收到
msgid "Choose \"Everybody\" or \"Nobody\""
msgstr "选择 \"所有人\" 或是 \"没有人\""
-#: src/view/screens/Settings/index.tsx:697
-msgid "Choose a new Bluesky username or create"
-msgstr "选择一个新的 Bluesky 用户名或重新创建"
-
#: src/view/com/auth/server-input/index.tsx:79
msgid "Choose Service"
msgstr "选择服务"
-#: src/screens/Onboarding/StepFinished.tsx:135
+#: src/screens/Onboarding/StepFinished.tsx:139
msgid "Choose the algorithms that power your custom feeds."
msgstr "选择支持你的自定义信息流的算法。"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:83
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:83
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:85
msgid "Choose the algorithms that power your experience with custom feeds."
msgstr "选择可改进你自定义信息流的算法。"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:103
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:104
msgid "Choose your main feeds"
-msgstr "选择你的首选信息流"
+msgstr "选择你的主要信息流"
-#: src/view/com/auth/create/Step1.tsx:215
+#: src/screens/Signup/StepInfo/index.tsx:112
msgid "Choose your password"
msgstr "选择你的密码"
-#: src/view/screens/Settings/index.tsx:834
-#: src/view/screens/Settings/index.tsx:835
+#: src/view/screens/Settings/index.tsx:868
msgid "Clear all legacy storage data"
msgstr "清除所有旧存储数据"
-#: src/view/screens/Settings/index.tsx:837
+#: src/view/screens/Settings/index.tsx:871
msgid "Clear all legacy storage data (restart after this)"
msgstr "清除所有旧存储数据(并重启)"
-#: src/view/screens/Settings/index.tsx:846
-#: src/view/screens/Settings/index.tsx:847
+#: src/view/screens/Settings/index.tsx:880
msgid "Clear all storage data"
msgstr "清除所有数据"
-#: src/view/screens/Settings/index.tsx:849
+#: src/view/screens/Settings/index.tsx:883
msgid "Clear all storage data (restart after this)"
msgstr "清除所有数据(并重启)"
#: src/view/com/util/forms/SearchInput.tsx:88
-#: src/view/screens/Search/Search.tsx:674
+#: src/view/screens/Search/Search.tsx:699
msgid "Clear search query"
msgstr "清除搜索历史记录"
+#: src/view/screens/Settings/index.tsx:869
+msgid "Clears all legacy storage data"
+msgstr "清除所有旧版存储数据"
+
+#: src/view/screens/Settings/index.tsx:881
+msgid "Clears all storage data"
+msgstr "清除所有数据"
+
#: src/view/screens/Support.tsx:40
msgid "click here"
msgstr "点击这里"
+#: src/components/TagMenu/index.web.tsx:138
+msgid "Click here to open tag menu for {tag}"
+msgstr "点击这里打开 {tag} 的标签菜单"
+
+#: src/components/RichText.tsx:192
+msgid "Click here to open tag menu for #{tag}"
+msgstr "点击这里打开 #{tag} 的标签菜单"
+
#: src/screens/Onboarding/index.tsx:35
msgid "Climate"
msgstr "气象"
-#: src/view/com/modals/ChangePassword.tsx:265
-#: src/view/com/modals/ChangePassword.tsx:268
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
msgid "Close"
msgstr "关闭"
-#: src/components/Dialog/index.web.tsx:78
+#: src/components/Dialog/index.web.tsx:106
+#: src/components/Dialog/index.web.tsx:218
msgid "Close active dialog"
msgstr "关闭活动对话框"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:38
+#: src/screens/Login/PasswordUpdatedForm.tsx:38
msgid "Close alert"
msgstr "关闭警告"
-#: src/view/com/util/BottomSheetCustomBackdrop.tsx:33
+#: src/view/com/util/BottomSheetCustomBackdrop.tsx:36
msgid "Close bottom drawer"
-msgstr "关闭底栏抽屉"
+msgstr "关闭底部抽屉"
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:26
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:36
msgid "Close image"
msgstr "关闭图片"
-#: src/view/com/lightbox/Lightbox.web.tsx:119
+#: src/view/com/lightbox/Lightbox.web.tsx:129
msgid "Close image viewer"
msgstr "关闭图片查看器"
-#: src/view/shell/index.web.tsx:49
+#: src/view/shell/index.web.tsx:55
msgid "Close navigation footer"
msgstr "关闭导航页脚"
-#: src/view/shell/index.web.tsx:50
+#: src/components/Menu/index.tsx:207
+#: src/components/TagMenu/index.tsx:262
+msgid "Close this dialog"
+msgstr "关闭该窗口"
+
+#: src/view/shell/index.web.tsx:56
msgid "Closes bottom navigation bar"
-msgstr "关闭底栏"
+msgstr "关闭底部导航栏"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:39
+#: src/screens/Login/PasswordUpdatedForm.tsx:39
msgid "Closes password update alert"
msgstr "关闭密码更新警告"
-#: src/view/com/composer/Composer.tsx:302
+#: src/view/com/composer/Composer.tsx:319
msgid "Closes post composer and discards post draft"
msgstr "关闭帖子编辑页并丢弃草稿"
-#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:27
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:37
msgid "Closes viewer for header image"
msgstr "关闭标题图片查看器"
-#: src/view/com/notifications/FeedItem.tsx:317
+#: src/view/com/notifications/FeedItem.tsx:321
msgid "Collapses list of users for a given notification"
msgstr "折叠给定通知的用户列表"
@@ -741,16 +783,20 @@ msgstr "喜剧"
msgid "Comics"
msgstr "漫画"
-#: src/Navigation.tsx:227
+#: src/Navigation.tsx:241
#: src/view/screens/CommunityGuidelines.tsx:32
msgid "Community Guidelines"
msgstr "社群准则"
-#: src/screens/Onboarding/StepFinished.tsx:148
+#: src/screens/Onboarding/StepFinished.tsx:152
msgid "Complete onboarding and start using your account"
msgstr "完成引导并开始使用你的账户"
-#: src/view/com/composer/Composer.tsx:417
+#: src/screens/Signup/index.tsx:154
+msgid "Complete the challenge"
+msgstr "完成验证"
+
+#: src/view/com/composer/Composer.tsx:438
msgid "Compose posts up to {MAX_GRAPHEME_LENGTH} characters in length"
msgstr "撰写帖子的长度最多为 {MAX_GRAPHEME_LENGTH} 个字符"
@@ -758,81 +804,90 @@ msgstr "撰写帖子的长度最多为 {MAX_GRAPHEME_LENGTH} 个字符"
msgid "Compose reply"
msgstr "撰写回复"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:67
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:81
msgid "Configure content filtering setting for category: {0}"
-msgstr "配置类别的内容过滤设置:{0}"
+msgstr "为类别 {0} 配置内容过滤设置"
-#: src/components/Prompt.tsx:113
-#: src/view/com/modals/AppealLabel.tsx:98
+#: src/components/moderation/LabelPreference.tsx:81
+msgid "Configure content filtering setting for category: {name}"
+msgstr ""
+
+#: src/components/moderation/LabelPreference.tsx:244
+msgid "Configured in <0>moderation settings0>."
+msgstr "在 <0>限制设置0> 中配置。"
+
+#: src/components/Prompt.tsx:153
+#: src/components/Prompt.tsx:156
#: src/view/com/modals/SelfLabel.tsx:154
#: src/view/com/modals/VerifyEmail.tsx:231
#: src/view/com/modals/VerifyEmail.tsx:233
-#: src/view/screens/PreferencesHomeFeed.tsx:308
+#: src/view/screens/PreferencesFollowingFeed.tsx:308
#: src/view/screens/PreferencesThreads.tsx:159
msgid "Confirm"
msgstr "确认"
-#: src/view/com/modals/Confirm.tsx:75
-#: src/view/com/modals/Confirm.tsx:78
-msgctxt "action"
-msgid "Confirm"
-msgstr "确认"
-
#: src/view/com/modals/ChangeEmail.tsx:193
#: src/view/com/modals/ChangeEmail.tsx:195
msgid "Confirm Change"
msgstr "确认更改"
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:34
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:35
msgid "Confirm content language settings"
msgstr "确认内容语言设置"
-#: src/view/com/modals/DeleteAccount.tsx:220
+#: src/view/com/modals/DeleteAccount.tsx:219
msgid "Confirm delete account"
msgstr "确认删除账户"
-#: src/view/com/modals/ContentFilteringSettings.tsx:156
-msgid "Confirm your age to enable adult content."
-msgstr "确认你的年龄以启用成人内容。"
+#: src/screens/Moderation/index.tsx:301
+msgid "Confirm your age:"
+msgstr "确认你的年龄:"
+
+#: src/screens/Moderation/index.tsx:292
+msgid "Confirm your birthdate"
+msgstr "确认你的出生年月:"
#: src/view/com/modals/ChangeEmail.tsx:157
-#: src/view/com/modals/DeleteAccount.tsx:182
+#: src/view/com/modals/DeleteAccount.tsx:175
+#: src/view/com/modals/DeleteAccount.tsx:181
#: src/view/com/modals/VerifyEmail.tsx:165
msgid "Confirmation code"
msgstr "验证码"
-#: src/view/com/modals/Waitlist.tsx:120
-msgid "Confirms signing up {email} to the waitlist"
-msgstr "确认将 {email} 注册到候补列表"
-
-#: src/view/com/auth/create/CreateAccount.tsx:182
-#: src/view/com/auth/login/LoginForm.tsx:278
+#: src/screens/Login/LoginForm.tsx:248
msgid "Connecting..."
msgstr "连接中..."
-#: src/view/com/auth/create/CreateAccount.tsx:202
+#: src/screens/Signup/index.tsx:219
msgid "Contact support"
msgstr "联系支持"
-#: src/view/screens/Moderation.tsx:81
-msgid "Content filtering"
-msgstr "内容过滤"
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "content"
+msgstr "内容"
-#: src/view/com/modals/ContentFilteringSettings.tsx:44
-msgid "Content Filtering"
-msgstr "内容过滤"
+#: src/lib/moderation/useGlobalLabelStrings.ts:18
+msgid "Content Blocked"
+msgstr "内容已屏蔽"
+
+#: src/screens/Moderation/index.tsx:285
+msgid "Content filters"
+msgstr "内容过滤器"
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74
#: src/view/screens/LanguageSettings.tsx:278
msgid "Content Languages"
msgstr "内容语言"
-#: src/view/com/modals/ModerationDetails.tsx:65
+#: src/components/moderation/ModerationDetailsDialog.tsx:75
+#: src/lib/moderation/useModerationCauseDescription.ts:75
msgid "Content Not Available"
msgstr "内容不可用"
-#: src/view/com/modals/ModerationDetails.tsx:33
-#: src/view/com/util/moderation/ScreenHider.tsx:78
+#: src/components/moderation/ModerationDetailsDialog.tsx:46
+#: src/components/moderation/ScreenHider.tsx:99
+#: src/lib/moderation/useGlobalLabelStrings.ts:22
+#: src/lib/moderation/useModerationCauseDescription.ts:38
msgid "Content Warning"
msgstr "内容警告"
@@ -840,127 +895,133 @@ msgstr "内容警告"
msgid "Content warnings"
msgstr "内容警告"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:170
-#: src/screens/Onboarding/StepFollowingFeed.tsx:153
-#: src/screens/Onboarding/StepInterests/index.tsx:248
-#: src/screens/Onboarding/StepModeration/index.tsx:118
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:108
+#: src/components/Menu/index.web.tsx:84
+msgid "Context menu backdrop, click to close the menu."
+msgstr "上下文菜单背景,点击关闭菜单。"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:161
+#: src/screens/Onboarding/StepFollowingFeed.tsx:154
+#: src/screens/Onboarding/StepInterests/index.tsx:252
+#: src/screens/Onboarding/StepModeration/index.tsx:103
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:118
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:96
msgid "Continue"
msgstr "继续"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:150
-#: src/screens/Onboarding/StepInterests/index.tsx:245
-#: src/screens/Onboarding/StepModeration/index.tsx:115
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:105
+#: src/components/AccountList.tsx:108
+msgid "Continue as {0} (currently signed in)"
+msgstr ""
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:151
+#: src/screens/Onboarding/StepInterests/index.tsx:249
+#: src/screens/Onboarding/StepModeration/index.tsx:100
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:115
+#: src/screens/Signup/index.tsx:198
msgid "Continue to next step"
msgstr "继续下一步"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:167
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:158
msgid "Continue to the next step"
msgstr "继续下一步"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:191
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:199
msgid "Continue to the next step without following any accounts"
-msgstr "不关注任何账户,继续下一步"
+msgstr "继续下一步,不关注任何账户"
#: src/screens/Onboarding/index.tsx:44
msgid "Cooking"
msgstr "烹饪"
-#: src/view/com/modals/AddAppPasswords.tsx:195
-#: src/view/com/modals/InviteCodes.tsx:182
+#: src/view/com/modals/AddAppPasswords.tsx:196
+#: src/view/com/modals/InviteCodes.tsx:183
msgid "Copied"
msgstr "已复制"
-#: src/view/screens/Settings/index.tsx:241
+#: src/view/screens/Settings/index.tsx:251
msgid "Copied build version to clipboard"
msgstr "已复制构建版本号至剪贴板"
-#: src/view/com/modals/AddAppPasswords.tsx:76
-#: src/view/com/modals/InviteCodes.tsx:152
-#: src/view/com/util/forms/PostDropdownBtn.tsx:112
+#: src/view/com/modals/AddAppPasswords.tsx:77
+#: src/view/com/modals/ChangeHandle.tsx:326
+#: src/view/com/modals/InviteCodes.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:158
msgid "Copied to clipboard"
msgstr "已复制至剪贴板"
-#: src/view/com/modals/AddAppPasswords.tsx:189
+#: src/view/com/modals/AddAppPasswords.tsx:190
msgid "Copies app password"
-msgstr "已复制 App 专用密码"
+msgstr "已复制应用专用密码"
-#: src/view/com/modals/AddAppPasswords.tsx:188
+#: src/view/com/modals/AddAppPasswords.tsx:189
msgid "Copy"
msgstr "复制"
-#: src/view/screens/ProfileList.tsx:417
+#: src/view/com/modals/ChangeHandle.tsx:480
+msgid "Copy {0}"
+msgstr "复制 {0}"
+
+#: src/view/screens/ProfileList.tsx:388
msgid "Copy link to list"
msgstr "复制列表链接"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
msgid "Copy link to post"
msgstr "复制帖子链接"
-#: src/view/com/profile/ProfileHeader.tsx:294
-msgid "Copy link to profile"
-msgstr "复制个人资料链接"
-
-#: src/view/com/util/forms/PostDropdownBtn.tsx:139
+#: src/view/com/util/forms/PostDropdownBtn.tsx:220
+#: src/view/com/util/forms/PostDropdownBtn.tsx:222
msgid "Copy post text"
msgstr "复制帖子文字"
-#: src/Navigation.tsx:232
+#: src/Navigation.tsx:246
#: src/view/screens/CopyrightPolicy.tsx:29
msgid "Copyright Policy"
msgstr "版权许可"
-#: src/view/screens/ProfileFeed.tsx:96
+#: src/view/screens/ProfileFeed.tsx:103
msgid "Could not load feed"
msgstr "无法加载信息流"
-#: src/view/screens/ProfileList.tsx:888
+#: src/view/screens/ProfileList.tsx:907
msgid "Could not load list"
msgstr "无法加载列表"
-#: src/view/com/auth/create/Step2.tsx:91
-msgid "Country"
-msgstr "国家"
-
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:62
-#: src/view/com/auth/SplashScreen.tsx:46
-#: src/view/com/auth/SplashScreen.web.tsx:77
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:65
+#: src/view/com/auth/SplashScreen.tsx:75
+#: src/view/com/auth/SplashScreen.web.tsx:104
msgid "Create a new account"
msgstr "创建新的账户"
-#: src/view/screens/Settings/index.tsx:384
+#: src/view/screens/Settings/index.tsx:403
msgid "Create a new Bluesky account"
msgstr "创建新的 Bluesky 账户"
-#: src/view/com/auth/create/CreateAccount.tsx:122
+#: src/screens/Signup/index.tsx:129
msgid "Create Account"
msgstr "创建账户"
-#: src/view/com/modals/AddAppPasswords.tsx:226
+#: src/view/com/modals/AddAppPasswords.tsx:227
msgid "Create App Password"
-msgstr "创建 App 专用密码"
+msgstr "创建应用专用密码"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:54
-#: src/view/com/auth/SplashScreen.tsx:43
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:55
+#: src/view/com/auth/SplashScreen.tsx:66
+#: src/view/com/auth/SplashScreen.web.tsx:95
msgid "Create new account"
msgstr "创建新的账户"
-#: src/view/screens/AppPasswords.tsx:249
+#: src/components/ReportDialog/SelectReportOptionView.tsx:93
+msgid "Create report for {0}"
+msgstr "创建 {0} 的举报"
+
+#: src/view/screens/AppPasswords.tsx:246
msgid "Created {0}"
msgstr "{0} 已创建"
-#: src/view/screens/ProfileFeed.tsx:616
-msgid "Created by <0/>"
-msgstr "由 <0/> 创建"
-
-#: src/view/screens/ProfileFeed.tsx:614
-msgid "Created by you"
-msgstr "由你创建"
-
-#: src/view/com/composer/Composer.tsx:448
+#: src/view/com/composer/Composer.tsx:469
msgid "Creates a card with a thumbnail. The card links to {url}"
msgstr "创建带有缩略图的卡片。该卡片链接到 {url}"
@@ -968,118 +1029,136 @@ msgstr "创建带有缩略图的卡片。该卡片链接到 {url}"
msgid "Culture"
msgstr "文化"
-#: src/view/com/auth/server-input/index.tsx:95
-#: src/view/com/auth/server-input/index.tsx:96
+#: src/view/com/auth/server-input/index.tsx:97
+#: src/view/com/auth/server-input/index.tsx:99
msgid "Custom"
-msgstr ""
+msgstr "自定义"
-#: src/view/com/modals/ChangeHandle.tsx:389
+#: src/view/com/modals/ChangeHandle.tsx:388
msgid "Custom domain"
msgstr "自定义域名"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:107
+#: src/view/screens/Feeds.tsx:692
msgid "Custom feeds built by the community bring you new experiences and help you find the content you love."
-msgstr "由社区构建的自定义信息流能为你带来新的体验,并帮助你找到你喜欢的内容。"
+msgstr "由社群构建的自定义信息流能为你带来新的体验,并帮助你找到你喜欢的内容。"
#: src/view/screens/PreferencesExternalEmbeds.tsx:55
msgid "Customize media from external sites."
msgstr "自定义外部站点的媒体。"
-#: src/view/screens/Settings.tsx:687
-#~ msgid "Danger Zone"
-#~ msgstr "实验室"
-
-#: src/view/screens/Settings/index.tsx:485
-#: src/view/screens/Settings/index.tsx:511
+#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:530
msgid "Dark"
-msgstr "深黑"
+msgstr "暗色"
#: src/view/screens/Debug.tsx:63
msgid "Dark mode"
msgstr "深色模式"
-#: src/view/screens/Settings/index.tsx:498
+#: src/view/screens/Settings/index.tsx:517
msgid "Dark Theme"
msgstr "深色模式"
+#: src/screens/Signup/StepInfo/index.tsx:132
+msgid "Date of birth"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:841
+msgid "Debug Moderation"
+msgstr "调试限制"
+
#: src/view/screens/Debug.tsx:83
msgid "Debug panel"
msgstr "调试面板"
-#: src/view/screens/Settings/index.tsx:772
+#: src/view/com/util/forms/PostDropdownBtn.tsx:319
+#: src/view/screens/AppPasswords.tsx:268
+#: src/view/screens/ProfileList.tsx:613
+msgid "Delete"
+msgstr "删除"
+
+#: src/view/screens/Settings/index.tsx:796
msgid "Delete account"
-msgstr "删除账号"
+msgstr "删除账户"
-#: src/view/com/modals/DeleteAccount.tsx:87
+#: src/view/com/modals/DeleteAccount.tsx:86
msgid "Delete Account"
-msgstr "删除账号"
+msgstr "删除账户"
-#: src/view/screens/AppPasswords.tsx:222
-#: src/view/screens/AppPasswords.tsx:242
+#: src/view/screens/AppPasswords.tsx:239
msgid "Delete app password"
-msgstr "删除 App 专用密码"
+msgstr "删除应用专用密码"
-#: src/view/screens/ProfileList.tsx:363
-#: src/view/screens/ProfileList.tsx:444
+#: src/view/screens/AppPasswords.tsx:263
+msgid "Delete app password?"
+msgstr "删除应用专用密码?"
+
+#: src/view/screens/ProfileList.tsx:415
msgid "Delete List"
msgstr "删除列表"
-#: src/view/com/modals/DeleteAccount.tsx:223
+#: src/view/com/modals/DeleteAccount.tsx:222
msgid "Delete my account"
msgstr "删除我的账户"
-#: src/view/screens/Settings.tsx:706
-#~ msgid "Delete my account…"
-#~ msgstr "删除我的账户…"
-
-#: src/view/screens/Settings/index.tsx:784
+#: src/view/screens/Settings/index.tsx:808
msgid "Delete My Account…"
msgstr "删除我的账户…"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:302
+#: src/view/com/util/forms/PostDropdownBtn.tsx:304
msgid "Delete post"
msgstr "删除帖子"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:232
+#: src/view/screens/ProfileList.tsx:608
+msgid "Delete this list?"
+msgstr "删除这个列表?"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:314
msgid "Delete this post?"
msgstr "删除这条帖子?"
-#: src/view/com/util/post-embeds/QuoteEmbed.tsx:69
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:64
msgid "Deleted"
msgstr "已删除"
-#: src/view/com/post-thread/PostThread.tsx:259
+#: src/view/com/post-thread/PostThread.tsx:305
msgid "Deleted post."
msgstr "已删除帖子。"
-#: src/view/com/modals/CreateOrEditList.tsx:300
-#: src/view/com/modals/CreateOrEditList.tsx:321
-#: src/view/com/modals/EditProfile.tsx:198
-#: src/view/com/modals/EditProfile.tsx:210
+#: src/view/com/modals/CreateOrEditList.tsx:301
+#: src/view/com/modals/CreateOrEditList.tsx:322
+#: src/view/com/modals/EditProfile.tsx:199
+#: src/view/com/modals/EditProfile.tsx:211
msgid "Description"
msgstr "描述"
-#: src/view/screens/Settings.tsx:760
-#~ msgid "Developer Tools"
-#~ msgstr "开发者工具"
-
-#: src/view/com/composer/Composer.tsx:211
+#: src/view/com/composer/Composer.tsx:218
msgid "Did you want to say anything?"
msgstr "有什么想说的吗?"
-#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:523
msgid "Dim"
msgstr "暗淡"
-#: src/view/com/composer/Composer.tsx:144
+#: src/lib/moderation/useLabelBehaviorDescription.ts:32
+#: src/lib/moderation/useLabelBehaviorDescription.ts:42
+#: src/lib/moderation/useLabelBehaviorDescription.ts:68
+#: src/screens/Moderation/index.tsx:341
+msgid "Disabled"
+msgstr "关闭"
+
+#: src/view/com/composer/Composer.tsx:511
msgid "Discard"
msgstr "丢弃"
-#: src/view/com/composer/Composer.tsx:138
-msgid "Discard draft"
-msgstr "丢弃草稿"
+#: src/view/com/composer/Composer.tsx:508
+msgid "Discard draft?"
+msgstr "丢弃草稿?"
-#: src/view/screens/Moderation.tsx:207
+#: src/screens/Moderation/index.tsx:518
+#: src/screens/Moderation/index.tsx:522
msgid "Discourage apps from showing my account to logged-out users"
msgstr "阻止应用向未登录用户显示我的账户"
@@ -1088,28 +1167,58 @@ msgstr "阻止应用向未登录用户显示我的账户"
msgid "Discover new custom feeds"
msgstr "探索新的自定义信息流"
-#: src/view/screens/Feeds.tsx:473
-msgid "Discover new feeds"
+#: src/view/screens/Feeds.tsx:689
+msgid "Discover New Feeds"
msgstr "探索新的信息流"
-#: src/view/com/modals/EditProfile.tsx:192
+#: src/view/com/modals/EditProfile.tsx:193
msgid "Display name"
msgstr "显示名称"
-#: src/view/com/modals/EditProfile.tsx:180
+#: src/view/com/modals/EditProfile.tsx:181
msgid "Display Name"
msgstr "显示名称"
-#: src/view/com/modals/ChangeHandle.tsx:487
+#: src/view/com/modals/ChangeHandle.tsx:397
+msgid "DNS Panel"
+msgstr "DNS 面板"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:39
+msgid "Does not include nudity."
+msgstr "不包含裸露内容"
+
+#: src/screens/Signup/StepHandle.tsx:104
+msgid "Doesn't begin or end with a hyphen"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "Domain Value"
+msgstr "域名记录"
+
+#: src/view/com/modals/ChangeHandle.tsx:488
msgid "Domain verified!"
msgstr "域名已认证!"
-#: src/view/com/auth/create/Step1.tsx:166
-msgid "Don't have an invite code?"
-msgstr "没有邀请码?"
+#: src/components/dialogs/BirthDateSettings.tsx:119
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/components/forms/DateField/index.tsx:74
+#: src/components/forms/DateField/index.tsx:80
+#: src/view/com/auth/server-input/index.tsx:169
+#: src/view/com/auth/server-input/index.tsx:170
+#: src/view/com/modals/AddAppPasswords.tsx:227
+#: src/view/com/modals/AltImage.tsx:140
+#: src/view/com/modals/crop-image/CropImage.web.tsx:153
+#: src/view/com/modals/InviteCodes.tsx:81
+#: src/view/com/modals/InviteCodes.tsx:124
+#: src/view/com/modals/ListAddRemoveUsers.tsx:142
+#: src/view/screens/PreferencesFollowingFeed.tsx:311
+#: src/view/screens/Settings/ExportCarDialog.tsx:94
+#: src/view/screens/Settings/ExportCarDialog.tsx:96
+msgid "Done"
+msgstr "完成"
#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86
-#: src/view/com/modals/EditImage.tsx:333
+#: src/view/com/modals/EditImage.tsx:334
#: src/view/com/modals/ListAddRemoveUsers.tsx:144
#: src/view/com/modals/SelfLabel.tsx:157
#: src/view/com/modals/Threadgate.tsx:129
@@ -1121,72 +1230,64 @@ msgctxt "action"
msgid "Done"
msgstr "完成"
-#: src/view/com/auth/server-input/index.tsx:165
-#: src/view/com/auth/server-input/index.tsx:166
-#: src/view/com/modals/AddAppPasswords.tsx:226
-#: src/view/com/modals/AltImage.tsx:139
-#: src/view/com/modals/ContentFilteringSettings.tsx:88
-#: src/view/com/modals/ContentFilteringSettings.tsx:96
-#: src/view/com/modals/crop-image/CropImage.web.tsx:152
-#: src/view/com/modals/InviteCodes.tsx:80
-#: src/view/com/modals/InviteCodes.tsx:123
-#: src/view/com/modals/ListAddRemoveUsers.tsx:142
-#: src/view/screens/PreferencesHomeFeed.tsx:311
-#: src/view/screens/Settings/ExportCarDialog.tsx:93
-#: src/view/screens/Settings/ExportCarDialog.tsx:94
-msgid "Done"
-msgstr "完成"
-
-#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:42
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:43
msgid "Done{extraText}"
msgstr "完成{extraText}"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:45
-msgid "Double tap to sign in"
-msgstr "双击以登录"
-
-#: src/view/screens/Settings/index.tsx:755
-msgid "Download Bluesky account data (repository)"
-msgstr ""
+#: src/view/com/auth/login/ChooseAccountForm.tsx:46
+#~ msgid "Double tap to sign in"
+#~ msgstr "双击以登录"
#: src/view/screens/Settings/ExportCarDialog.tsx:59
#: src/view/screens/Settings/ExportCarDialog.tsx:63
msgid "Download CAR file"
-msgstr ""
+msgstr "下载 CAR 文件"
-#: src/view/com/composer/text-input/TextInput.web.tsx:247
+#: src/view/com/composer/text-input/TextInput.web.tsx:249
msgid "Drop to add images"
-msgstr "拖放即可添加图片"
+msgstr "拖放即可新增图片"
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:111
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:120
msgid "Due to Apple policies, adult content can only be enabled on the web after completing sign up."
-msgstr "受 Apple 政策限制,成人内容只能在完成注册后在网页端启用显示。"
+msgstr "受 Apple 政策限制,显示成人内容只能在完成注册后在网页端设置中启用。"
+
+#: src/view/com/modals/ChangeHandle.tsx:258
+msgid "e.g. alice"
+msgstr "例如:alice"
-#: src/view/com/modals/EditProfile.tsx:185
+#: src/view/com/modals/EditProfile.tsx:186
msgid "e.g. Alice Roberts"
-msgstr "例:张蓝天"
+msgstr "例如:爱丽丝·罗伯特"
-#: src/view/com/modals/EditProfile.tsx:203
+#: src/view/com/modals/ChangeHandle.tsx:380
+msgid "e.g. alice.com"
+msgstr "例如:alice.com"
+
+#: src/view/com/modals/EditProfile.tsx:204
msgid "e.g. Artist, dog-lover, and avid reader."
-msgstr "例:普通艺术家一枚,喜欢撸猫。"
+msgstr "例如:艺术家、爱狗人士和狂热读者。"
-#: src/view/com/modals/CreateOrEditList.tsx:283
-msgid "e.g. Great Posters"
-msgstr "例:发布重要帖子的用户"
+#: src/lib/moderation/useGlobalLabelStrings.ts:43
+msgid "E.g. artistic nudes."
+msgstr "例如:裸露艺术"
#: src/view/com/modals/CreateOrEditList.tsx:284
+msgid "e.g. Great Posters"
+msgstr "例如:优秀的发帖者"
+
+#: src/view/com/modals/CreateOrEditList.tsx:285
msgid "e.g. Spammers"
-msgstr "例:垃圾内容制造者"
+msgstr "例如:垃圾内容制造者"
-#: src/view/com/modals/CreateOrEditList.tsx:312
+#: src/view/com/modals/CreateOrEditList.tsx:313
msgid "e.g. The posters who never miss."
-msgstr "例:你绝不能错过其发布帖子的用户。"
+msgstr "例如:绝不容错过的发帖者。"
-#: src/view/com/modals/CreateOrEditList.tsx:313
+#: src/view/com/modals/CreateOrEditList.tsx:314
msgid "e.g. Users that repeatedly reply with ads."
-msgstr "例:散布广告内容的用户。"
+msgstr "例如:散布广告内容的用户。"
-#: src/view/com/modals/InviteCodes.tsx:96
+#: src/view/com/modals/InviteCodes.tsx:97
msgid "Each code works once. You'll receive more invite codes periodically."
msgstr "每个邀请码仅可使用一次。你将不定期获得新的邀请码。"
@@ -1195,50 +1296,58 @@ msgctxt "action"
msgid "Edit"
msgstr "编辑"
+#: src/view/com/util/UserAvatar.tsx:299
+#: src/view/com/util/UserBanner.tsx:85
+msgid "Edit avatar"
+msgstr "编辑头像"
+
#: src/view/com/composer/photos/Gallery.tsx:144
-#: src/view/com/modals/EditImage.tsx:207
+#: src/view/com/modals/EditImage.tsx:208
msgid "Edit image"
msgstr "编辑图片"
-#: src/view/screens/ProfileList.tsx:432
+#: src/view/screens/ProfileList.tsx:403
msgid "Edit list details"
msgstr "编辑列表详情"
-#: src/view/com/modals/CreateOrEditList.tsx:250
+#: src/view/com/modals/CreateOrEditList.tsx:251
msgid "Edit Moderation List"
msgstr "编辑限制列表"
-#: src/Navigation.tsx:242
+#: src/Navigation.tsx:256
#: src/view/screens/Feeds.tsx:434
#: src/view/screens/SavedFeeds.tsx:84
msgid "Edit My Feeds"
msgstr "编辑自定义信息流"
-#: src/view/com/modals/EditProfile.tsx:152
+#: src/view/com/modals/EditProfile.tsx:153
msgid "Edit my profile"
msgstr "编辑个人资料"
-#: src/view/com/profile/ProfileHeader.tsx:417
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:171
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:168
msgid "Edit profile"
-msgstr "编辑资料"
+msgstr "编辑个人资料"
-#: src/view/com/profile/ProfileHeader.tsx:422
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:174
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:171
msgid "Edit Profile"
-msgstr "编辑资料"
+msgstr "编辑个人资料"
-#: src/view/screens/Feeds.tsx:356
+#: src/view/com/home/HomeHeaderLayout.web.tsx:62
+#: src/view/screens/Feeds.tsx:355
msgid "Edit Saved Feeds"
msgstr "编辑保存的信息流"
-#: src/view/com/modals/CreateOrEditList.tsx:245
+#: src/view/com/modals/CreateOrEditList.tsx:246
msgid "Edit User List"
msgstr "编辑用户列表"
-#: src/view/com/modals/EditProfile.tsx:193
+#: src/view/com/modals/EditProfile.tsx:194
msgid "Edit your display name"
msgstr "编辑你的显示名称"
-#: src/view/com/modals/EditProfile.tsx:211
+#: src/view/com/modals/EditProfile.tsx:212
msgid "Edit your profile description"
msgstr "编辑你的账户描述"
@@ -1246,17 +1355,12 @@ msgstr "编辑你的账户描述"
msgid "Education"
msgstr "教育"
-#: src/view/com/auth/create/Step1.tsx:195
-#: src/view/com/auth/create/Step2.tsx:194
-#: src/view/com/auth/create/Step2.tsx:269
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:156
+#: src/screens/Signup/StepInfo/index.tsx:80
#: src/view/com/modals/ChangeEmail.tsx:141
-#: src/view/com/modals/Waitlist.tsx:88
msgid "Email"
msgstr "电子邮箱"
-#: src/view/com/auth/create/Step1.tsx:186
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:147
+#: src/screens/Login/ForgotPasswordForm.tsx:99
msgid "Email address"
msgstr "邮箱地址"
@@ -1273,69 +1377,91 @@ msgstr "电子邮箱已更新"
msgid "Email verified"
msgstr "电子邮箱已验证"
-#: src/view/screens/Settings/index.tsx:312
+#: src/view/screens/Settings/index.tsx:331
msgid "Email:"
msgstr "电子邮箱:"
-#: src/view/com/modals/EmbedConsent.tsx:113
+#: src/components/dialogs/EmbedConsent.tsx:101
msgid "Enable {0} only"
msgstr "仅启用 {0}"
-#: src/view/com/modals/ContentFilteringSettings.tsx:167
+#: src/screens/Moderation/index.tsx:329
+msgid "Enable adult content"
+msgstr "启用成人内容"
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:94
msgid "Enable Adult Content"
msgstr "启用成人内容"
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:76
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:77
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:79
msgid "Enable adult content in your feeds"
msgstr "在你的信息流中启用成人内容"
+#: src/components/dialogs/EmbedConsent.tsx:82
+#: src/components/dialogs/EmbedConsent.tsx:89
+msgid "Enable external media"
+msgstr ""
+
#: src/view/com/modals/EmbedConsent.tsx:97
-msgid "Enable External Media"
-msgstr "启用外部媒体"
+#~ msgid "Enable External Media"
+#~ msgstr "启用外部媒体"
#: src/view/screens/PreferencesExternalEmbeds.tsx:75
msgid "Enable media players for"
msgstr "启用媒体播放器"
-#: src/view/screens/PreferencesHomeFeed.tsx:147
+#: src/view/screens/PreferencesFollowingFeed.tsx:147
msgid "Enable this setting to only see replies between people you follow."
msgstr "启用此设置以仅查看你关注的人之间的回复。"
-#: src/view/screens/Profile.tsx:455
+#: src/components/dialogs/EmbedConsent.tsx:94
+msgid "Enable this source only"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:339
+msgid "Enabled"
+msgstr "已启用"
+
+#: src/screens/Profile/Sections/Feed.tsx:84
msgid "End of feed"
-msgstr "结束信息流"
+msgstr "信息流的末尾"
-#: src/view/com/modals/AddAppPasswords.tsx:166
+#: src/view/com/modals/AddAppPasswords.tsx:167
msgid "Enter a name for this App Password"
-msgstr "为此 App 专用密码命名"
+msgstr "为此应用专用密码命名"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:139
+msgid "Enter a password"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:99
+#: src/components/dialogs/MutedWords.tsx:100
+msgid "Enter a word or tag"
+msgstr "输入一个词或标签"
#: src/view/com/modals/VerifyEmail.tsx:105
msgid "Enter Confirmation Code"
msgstr "输入验证码"
-#: src/view/com/modals/ChangePassword.tsx:151
+#: src/view/com/modals/ChangePassword.tsx:153
msgid "Enter the code you received to change your password."
msgstr "输入你收到的确认码以更改密码。"
-#: src/view/com/modals/ChangeHandle.tsx:371
+#: src/view/com/modals/ChangeHandle.tsx:370
msgid "Enter the domain you want to use"
msgstr "输入你想使用的域名"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:107
+#: src/screens/Login/ForgotPasswordForm.tsx:119
msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password."
-msgstr "输入你用于创建账户的电子邮箱。我们将向你发送重置码,以便你重新设置密码。"
+msgstr "输入你用于创建账户的电子邮箱。我们将向你发送用于密码重设的确认码。"
-#: src/view/com/auth/create/Step1.tsx:247
-#: src/view/com/modals/BirthDateSettings.tsx:74
+#: src/components/dialogs/BirthDateSettings.tsx:108
msgid "Enter your birth date"
msgstr "输入你的出生日期"
-#: src/view/com/modals/Waitlist.tsx:78
-msgid "Enter your email"
-msgstr "输入你的电子邮箱"
-
-#: src/view/com/auth/create/Step1.tsx:191
+#: src/screens/Login/ForgotPasswordForm.tsx:105
+#: src/screens/Signup/StepInfo/index.tsx:91
msgid "Enter your email address"
msgstr "输入你的电子邮箱"
@@ -1347,15 +1473,15 @@ msgstr "请在上方输入你新的电子邮箱"
msgid "Enter your new email address below."
msgstr "请在下方输入你新的电子邮箱。"
-#: src/view/com/auth/create/Step2.tsx:188
-msgid "Enter your phone number"
-msgstr "输入你的手机号码"
-
-#: src/view/com/auth/login/Login.tsx:99
+#: src/screens/Login/index.tsx:101
msgid "Enter your username and password"
msgstr "输入你的用户名和密码"
-#: src/view/screens/Search/Search.tsx:109
+#: src/screens/Signup/StepCaptcha/index.tsx:49
+msgid "Error receiving captcha response."
+msgstr "Captcha 响应错误"
+
+#: src/view/screens/Search/Search.tsx:111
msgid "Error:"
msgstr "错误:"
@@ -1363,24 +1489,32 @@ msgstr "错误:"
msgid "Everybody"
msgstr "所有人"
-#: src/view/com/modals/ChangeHandle.tsx:150
+#: src/lib/moderation/useReportOptions.ts:66
+msgid "Excessive mentions or replies"
+msgstr "过多的提及或回复"
+
+#: src/view/com/modals/DeleteAccount.tsx:230
+msgid "Exits account deletion process"
+msgstr "退出账户删除流程"
+
+#: src/view/com/modals/ChangeHandle.tsx:151
msgid "Exits handle change process"
msgstr "退出修改用户识别符流程"
-#: src/view/com/lightbox/Lightbox.web.tsx:120
+#: src/view/com/modals/crop-image/CropImage.web.tsx:136
+msgid "Exits image cropping process"
+msgstr "退出图片裁剪流程"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:130
msgid "Exits image view"
msgstr "退出图片查看器"
#: src/view/com/modals/ListAddRemoveUsers.tsx:88
-#: src/view/shell/desktop/Search.tsx:235
+#: src/view/shell/desktop/Search.tsx:236
msgid "Exits inputting search query"
-msgstr "退出搜索查询"
+msgstr "退出搜索查询输入"
-#: src/view/com/modals/Waitlist.tsx:138
-msgid "Exits signing up for waitlist with {email}"
-msgstr "将 {email} 从候补列表中移除"
-
-#: src/view/com/lightbox/Lightbox.web.tsx:163
+#: src/view/com/lightbox/Lightbox.web.tsx:183
msgid "Expand alt text"
msgstr "展开替代文本"
@@ -1389,44 +1523,53 @@ msgstr "展开替代文本"
msgid "Expand or collapse the full post you are replying to"
msgstr "展开或折叠你要回复的完整帖子"
-#: src/view/screens/Settings/index.tsx:753
+#: src/lib/moderation/useGlobalLabelStrings.ts:47
+msgid "Explicit or potentially disturbing media."
+msgstr "明确或潜在引起不适的媒体内容。"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:35
+msgid "Explicit sexual images."
+msgstr "明确的性暗示图片。"
+
+#: src/view/screens/Settings/index.tsx:777
msgid "Export my data"
-msgstr ""
+msgstr "导出账户数据"
#: src/view/screens/Settings/ExportCarDialog.tsx:44
-#: src/view/screens/Settings/index.tsx:764
+#: src/view/screens/Settings/index.tsx:788
msgid "Export My Data"
-msgstr ""
+msgstr "导出账户数据"
-#: src/view/com/modals/EmbedConsent.tsx:64
+#: src/components/dialogs/EmbedConsent.tsx:55
+#: src/components/dialogs/EmbedConsent.tsx:59
msgid "External Media"
msgstr "外部媒体"
-#: src/view/com/modals/EmbedConsent.tsx:75
+#: src/components/dialogs/EmbedConsent.tsx:71
#: src/view/screens/PreferencesExternalEmbeds.tsx:66
msgid "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."
msgstr "外部媒体可能允许网站收集有关你和你设备的有关信息。在你按下\"查看\"按钮之前,将不会发送或请求任何外部信息。"
-#: src/Navigation.tsx:258
+#: src/Navigation.tsx:275
#: src/view/screens/PreferencesExternalEmbeds.tsx:52
-#: src/view/screens/Settings/index.tsx:657
+#: src/view/screens/Settings/index.tsx:677
msgid "External Media Preferences"
msgstr "外部媒体首选项"
-#: src/view/screens/Settings/index.tsx:648
+#: src/view/screens/Settings/index.tsx:668
msgid "External media settings"
msgstr "外部媒体设置"
-#: src/view/com/modals/AddAppPasswords.tsx:115
-#: src/view/com/modals/AddAppPasswords.tsx:119
+#: src/view/com/modals/AddAppPasswords.tsx:116
+#: src/view/com/modals/AddAppPasswords.tsx:120
msgid "Failed to create app password."
-msgstr "创建 App 专用密码失败。"
+msgstr "创建应用专用密码失败。"
-#: src/view/com/modals/CreateOrEditList.tsx:206
+#: src/view/com/modals/CreateOrEditList.tsx:207
msgid "Failed to create the list. Check your internet connection and try again."
msgstr "无法创建列表。请检查你的互联网连接并重试。"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:88
+#: src/view/com/util/forms/PostDropdownBtn.tsx:125
msgid "Failed to delete post, please try again"
msgstr "无法删除帖子,请重试"
@@ -1435,41 +1578,38 @@ msgstr "无法删除帖子,请重试"
msgid "Failed to load recommended feeds"
msgstr "无法加载推荐信息流"
-#: src/Navigation.tsx:192
+#: src/view/com/lightbox/Lightbox.tsx:83
+msgid "Failed to save image: {0}"
+msgstr "无法保存此图片:{0}"
+
+#: src/Navigation.tsx:196
msgid "Feed"
msgstr "信息流"
-#: src/view/com/feeds/FeedSourceCard.tsx:229
+#: src/view/com/feeds/FeedSourceCard.tsx:218
msgid "Feed by {0}"
-msgstr "信息流由 {0} 创建"
+msgstr "由 {0} 创建的信息流"
-#: src/view/screens/Feeds.tsx:631
+#: src/view/screens/Feeds.tsx:605
msgid "Feed offline"
msgstr "信息流已离线"
-#: src/view/com/feeds/FeedPage.tsx:143
-msgid "Feed Preferences"
-msgstr "信息流首选项"
-
-#: src/view/shell/desktop/RightNav.tsx:69
-#: src/view/shell/Drawer.tsx:311
+#: src/view/shell/desktop/RightNav.tsx:61
+#: src/view/shell/Drawer.tsx:314
msgid "Feedback"
msgstr "反馈"
-#: src/Navigation.tsx:442
-#: src/view/screens/Feeds.tsx:548
-#: src/view/screens/Profile.tsx:184
-#: src/view/shell/bottom-bar/BottomBar.tsx:181
-#: src/view/shell/desktop/LeftNav.tsx:342
-#: src/view/shell/Drawer.tsx:476
-#: src/view/shell/Drawer.tsx:477
+#: src/Navigation.tsx:464
+#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:524
+#: src/view/screens/Profile.tsx:194
+#: src/view/shell/bottom-bar/BottomBar.tsx:191
+#: src/view/shell/desktop/LeftNav.tsx:346
+#: src/view/shell/Drawer.tsx:479
+#: src/view/shell/Drawer.tsx:480
msgid "Feeds"
msgstr "信息流"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
-#~ msgid "Feeds are created by users and organizations. They offer you varied experiences and suggest content you may like using algorithms."
-#~ msgstr "信息流由用户和组织创建,结合算法为你推荐可能喜欢的内容,可为你带来不一样的体验。"
-
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:57
msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting."
msgstr "信息流由用户创建并管理。选择一些你感兴趣的信息流。"
@@ -1478,11 +1618,19 @@ msgstr "信息流由用户创建并管理。选择一些你感兴趣的信息流
msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information."
msgstr "创建信息流要求一些编程基础。查看 <0/> 以获取详情。"
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:70
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:80
msgid "Feeds can be topical as well!"
-msgstr "信息流也可以是话题性的!"
+msgstr "信息流也可以围绕某些话题!"
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "File Contents"
+msgstr "文件内容"
-#: src/screens/Onboarding/StepFinished.tsx:151
+#: src/lib/moderation/useLabelBehaviorDescription.ts:66
+msgid "Filter from feeds"
+msgstr "从信息流中过滤"
+
+#: src/screens/Onboarding/StepFinished.tsx:155
msgid "Finalizing"
msgstr "最终确定"
@@ -1492,65 +1640,76 @@ msgstr "最终确定"
msgid "Find accounts to follow"
msgstr "寻找一些账户关注"
-#: src/view/screens/Search/Search.tsx:439
+#: src/view/screens/Search/Search.tsx:442
msgid "Find users on Bluesky"
msgstr "寻找一些正在使用 Bluesky 的用户"
-#: src/view/screens/Search/Search.tsx:437
+#: src/view/screens/Search/Search.tsx:440
msgid "Find users with the search tool on the right"
-msgstr "使用右侧的工具来搜索用户"
+msgstr "使用右侧的搜索工具来查找用户"
-#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:155
msgid "Finding similar accounts..."
-msgstr "寻找类似的账户..."
+msgstr "正在寻找类似的账户..."
-#: src/view/screens/PreferencesHomeFeed.tsx:111
-msgid "Fine-tune the content you see on your home screen."
-msgstr "微调你在主页上所看到的内容。"
+#: src/view/screens/PreferencesFollowingFeed.tsx:111
+msgid "Fine-tune the content you see on your Following feed."
+msgstr "调整你在关注信息流上所看到的内容。"
#: src/view/screens/PreferencesThreads.tsx:60
msgid "Fine-tune the discussion threads."
-msgstr "微调讨论主题。"
+msgstr "调整讨论主题。"
#: src/screens/Onboarding/index.tsx:38
msgid "Fitness"
msgstr "健康"
-#: src/screens/Onboarding/StepFinished.tsx:131
+#: src/screens/Onboarding/StepFinished.tsx:135
msgid "Flexible"
msgstr "灵活"
-#: src/view/com/modals/EditImage.tsx:115
+#: src/view/com/modals/EditImage.tsx:116
msgid "Flip horizontal"
msgstr "水平翻转"
-#: src/view/com/modals/EditImage.tsx:120
-#: src/view/com/modals/EditImage.tsx:287
+#: src/view/com/modals/EditImage.tsx:121
+#: src/view/com/modals/EditImage.tsx:288
msgid "Flip vertically"
msgstr "垂直翻转"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:181
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:512
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:189
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:236
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:146
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
msgid "Follow"
msgstr "关注"
-#: src/view/com/profile/FollowButton.tsx:64
+#: src/view/com/profile/FollowButton.tsx:69
msgctxt "action"
msgid "Follow"
msgstr "关注"
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:58
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:122
-#: src/view/com/profile/ProfileHeader.tsx:503
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:221
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:128
msgid "Follow {0}"
msgstr "关注 {0}"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:179
+#: src/view/com/profile/ProfileMenu.tsx:242
+#: src/view/com/profile/ProfileMenu.tsx:253
+msgid "Follow Account"
+msgstr "关注账户"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:187
msgid "Follow All"
msgstr "关注所有"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:174
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:144
+msgid "Follow Back"
+msgstr ""
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:182
msgid "Follow selected accounts and continue to the next step"
msgstr "关注选择的用户并继续下一步"
@@ -1558,7 +1717,7 @@ msgstr "关注选择的用户并继续下一步"
msgid "Follow some users to get started. We can recommend you more users based on who you find interesting."
msgstr "关注一些用户以开始,我们可以根据你感兴趣的用户向你推荐更多类似用户。"
-#: src/view/com/profile/ProfileCard.tsx:194
+#: src/view/com/profile/ProfileCard.tsx:216
msgid "Followed by {0}"
msgstr "由 {0} 关注"
@@ -1566,62 +1725,93 @@ msgstr "由 {0} 关注"
msgid "Followed users"
msgstr "已关注的用户"
-#: src/view/screens/PreferencesHomeFeed.tsx:154
+#: src/view/screens/PreferencesFollowingFeed.tsx:154
msgid "Followed users only"
msgstr "仅限已关注的用户"
-#: src/view/com/notifications/FeedItem.tsx:166
+#: src/view/com/notifications/FeedItem.tsx:170
msgid "followed you"
-msgstr "已关注"
+msgstr "关注了你"
+#: src/view/com/profile/ProfileFollowers.tsx:104
#: src/view/screens/ProfileFollowers.tsx:25
msgid "Followers"
msgstr "关注者"
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:136
-#: src/view/com/profile/ProfileHeader.tsx:494
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:234
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:149
+#: src/view/com/profile/ProfileFollows.tsx:104
#: src/view/screens/ProfileFollows.tsx:25
msgid "Following"
msgstr "正在关注"
-#: src/view/com/profile/ProfileHeader.tsx:148
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:93
msgid "Following {0}"
msgstr "正在关注 {0}"
-#: src/view/com/profile/ProfileHeader.tsx:545
+#: src/view/screens/Settings/index.tsx:553
+msgid "Following feed preferences"
+msgstr "关注信息流首选项"
+
+#: src/Navigation.tsx:262
+#: src/view/com/home/HomeHeaderLayout.web.tsx:50
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:84
+#: src/view/screens/PreferencesFollowingFeed.tsx:104
+#: src/view/screens/Settings/index.tsx:562
+msgid "Following Feed Preferences"
+msgstr "关注信息流首选项"
+
+#: src/screens/Profile/Header/Handle.tsx:24
msgid "Follows you"
-msgstr "已关注"
+msgstr "关注了你"
#: src/view/com/profile/ProfileCard.tsx:141
msgid "Follows You"
-msgstr "已关注"
+msgstr "关注了你"
#: src/screens/Onboarding/index.tsx:43
msgid "Food"
msgstr "食物"
-#: src/view/com/modals/DeleteAccount.tsx:111
+#: src/view/com/modals/DeleteAccount.tsx:110
msgid "For security reasons, we'll need to send a confirmation code to your email address."
msgstr "出于安全原因,我们需要向你的电子邮箱发送验证码。"
-#: src/view/com/modals/AddAppPasswords.tsx:209
+#: src/view/com/modals/AddAppPasswords.tsx:210
msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one."
msgstr "出于安全原因,你将无法再次查看此内容。如果你丢失了该密码,则需要生成一个新的密码。"
-#: src/view/com/auth/login/LoginForm.tsx:241
-msgid "Forgot"
-msgstr "忘记"
+#: src/view/com/auth/login/LoginForm.tsx:244
+#~ msgid "Forgot"
+#~ msgstr "忘记"
-#: src/view/com/auth/login/LoginForm.tsx:238
-msgid "Forgot password"
-msgstr "忘记密码"
+#: src/view/com/auth/login/LoginForm.tsx:241
+#~ msgid "Forgot password"
+#~ msgstr "忘记密码"
-#: src/view/com/auth/login/Login.tsx:127
-#: src/view/com/auth/login/Login.tsx:143
+#: src/screens/Login/index.tsx:129
+#: src/screens/Login/index.tsx:144
msgid "Forgot Password"
msgstr "忘记密码"
-#: src/view/com/posts/FeedItem.tsx:189
+#: src/screens/Login/LoginForm.tsx:201
+msgid "Forgot password?"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:212
+msgid "Forgot?"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:52
+msgid "Frequently Posts Unwanted Content"
+msgstr "频繁发布不受欢迎的内容"
+
+#: src/screens/Hashtag.tsx:109
+#: src/screens/Hashtag.tsx:149
+msgid "From @{sanitizedAuthor}"
+msgstr "来自 @{sanitizedAuthor}"
+
+#: src/view/com/posts/FeedItem.tsx:179
msgctxt "from-feed"
msgid "From <0/>"
msgstr "来自 <0/>"
@@ -1635,101 +1825,137 @@ msgstr "相册"
msgid "Get Started"
msgstr "开始"
-#: src/view/com/auth/LoggedOut.tsx:81
+#: src/lib/moderation/useReportOptions.ts:37
+msgid "Glaring violations of law or terms of service"
+msgstr "明显违反法律或服务条款"
+
+#: src/components/moderation/ScreenHider.tsx:151
+#: src/components/moderation/ScreenHider.tsx:160
#: src/view/com/auth/LoggedOut.tsx:82
-#: src/view/com/util/moderation/ScreenHider.tsx:123
-#: src/view/shell/desktop/LeftNav.tsx:104
+#: src/view/com/auth/LoggedOut.tsx:83
+#: src/view/screens/NotFound.tsx:55
+#: src/view/screens/ProfileFeed.tsx:112
+#: src/view/screens/ProfileList.tsx:916
+#: src/view/shell/desktop/LeftNav.tsx:108
msgid "Go back"
msgstr "返回"
-#: src/view/screens/ProfileFeed.tsx:105
-#: src/view/screens/ProfileFeed.tsx:110
-#: src/view/screens/ProfileList.tsx:897
-#: src/view/screens/ProfileList.tsx:902
+#: src/components/Error.tsx:91
+#: src/screens/Profile/ErrorState.tsx:62
+#: src/screens/Profile/ErrorState.tsx:66
+#: src/view/screens/NotFound.tsx:54
+#: src/view/screens/ProfileFeed.tsx:117
+#: src/view/screens/ProfileList.tsx:921
msgid "Go Back"
msgstr "返回"
-#: src/screens/Onboarding/Layout.tsx:104
-#: src/screens/Onboarding/Layout.tsx:193
+#: src/components/ReportDialog/SelectReportOptionView.tsx:73
+#: src/components/ReportDialog/SubmitView.tsx:104
+#: src/screens/Onboarding/Layout.tsx:102
+#: src/screens/Onboarding/Layout.tsx:191
+#: src/screens/Signup/index.tsx:173
msgid "Go back to previous step"
msgstr "返回上一步"
-#: src/view/screens/Search/Search.tsx:724
-#: src/view/shell/desktop/Search.tsx:262
+#: src/view/screens/NotFound.tsx:55
+msgid "Go home"
+msgstr "返回主页"
+
+#: src/view/screens/NotFound.tsx:54
+msgid "Go Home"
+msgstr "返回主页"
+
+#: src/view/screens/Search/Search.tsx:749
+#: src/view/shell/desktop/Search.tsx:263
msgid "Go to @{queryMaybeHandle}"
-msgstr "转到 @{queryMaybeHandle}"
+msgstr "前往 @{queryMaybeHandle}"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:189
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:218
-#: src/view/com/auth/login/LoginForm.tsx:288
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:195
-#: src/view/com/modals/ChangePassword.tsx:165
+#: src/screens/Login/ForgotPasswordForm.tsx:172
+#: src/view/com/modals/ChangePassword.tsx:167
msgid "Go to next"
-msgstr "转到下一个"
+msgstr "前往下一步"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:46
+msgid "Graphic Media"
+msgstr "图形媒体"
-#: src/view/com/modals/ChangeHandle.tsx:265
+#: src/view/com/modals/ChangeHandle.tsx:266
msgid "Handle"
msgstr "用户识别符"
-#: src/view/com/auth/create/CreateAccount.tsx:197
+#: src/lib/moderation/useReportOptions.ts:32
+msgid "Harassment, trolling, or intolerance"
+msgstr "骚扰、恶作剧或其他无法容忍的行为"
+
+#: src/Navigation.tsx:282
+msgid "Hashtag"
+msgstr "话题标签"
+
+#: src/components/RichText.tsx:191
+msgid "Hashtag: #{tag}"
+msgstr "话题标签:#{tag}"
+
+#: src/screens/Signup/index.tsx:217
msgid "Having trouble?"
msgstr "任何疑问?"
-#: src/view/shell/desktop/RightNav.tsx:98
-#: src/view/shell/Drawer.tsx:321
+#: src/view/shell/desktop/RightNav.tsx:90
+#: src/view/shell/Drawer.tsx:324
msgid "Help"
msgstr "帮助"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:132
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:140
msgid "Here are some accounts for you to follow"
-msgstr "这里是一些推荐关注的用户"
+msgstr "这里有一些推荐关注的用户"
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:79
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:89
msgid "Here are some popular topical feeds. You can choose to follow as many as you like."
-msgstr "这里是一些流行的信息流供你挑选。"
+msgstr "这里有一些流行的信息流供你挑选。"
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:74
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:84
msgid "Here are some topical feeds based on your interests: {interestsText}. You can choose to follow as many as you like."
-msgstr "这里是一些基于你兴趣所推荐的信息流供你挑选:{interestsText}。"
+msgstr "这里有一些基于你兴趣所推荐的信息流供你挑选:{interestsText}。关注的信息流数量没有限制。"
-#: src/view/com/modals/AddAppPasswords.tsx:153
+#: src/view/com/modals/AddAppPasswords.tsx:154
msgid "Here is your app password."
-msgstr "这里是你的 App 专用密码。"
-
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:41
-#: src/view/com/modals/ContentFilteringSettings.tsx:251
-#: src/view/com/util/moderation/ContentHider.tsx:105
-#: src/view/com/util/moderation/PostHider.tsx:108
+msgstr "这里是你的应用专用密码。"
+
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:134
+#: src/components/moderation/PostHider.tsx:107
+#: src/lib/moderation/useLabelBehaviorDescription.ts:15
+#: src/lib/moderation/useLabelBehaviorDescription.ts:20
+#: src/lib/moderation/useLabelBehaviorDescription.ts:25
+#: src/lib/moderation/useLabelBehaviorDescription.ts:30
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:52
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:76
+#: src/view/com/util/forms/PostDropdownBtn.tsx:328
msgid "Hide"
msgstr "隐藏"
-#: src/view/com/modals/ContentFilteringSettings.tsx:224
-#: src/view/com/notifications/FeedItem.tsx:325
+#: src/view/com/notifications/FeedItem.tsx:329
msgctxt "action"
msgid "Hide"
msgstr "隐藏"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:187
+#: src/view/com/util/forms/PostDropdownBtn.tsx:276
+#: src/view/com/util/forms/PostDropdownBtn.tsx:278
msgid "Hide post"
msgstr "隐藏帖子"
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:67
+#: src/components/moderation/PostHider.tsx:64
msgid "Hide the content"
msgstr "隐藏内容"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:191
+#: src/view/com/util/forms/PostDropdownBtn.tsx:325
msgid "Hide this post?"
msgstr "隐藏这条帖子?"
-#: src/view/com/notifications/FeedItem.tsx:315
+#: src/view/com/notifications/FeedItem.tsx:319
msgid "Hide user list"
msgstr "隐藏用户列表"
-#: src/view/com/profile/ProfileHeader.tsx:486
-msgid "Hides posts from {0} in your feed"
-msgstr "在你的信息流中隐藏来自 {0} 的帖子"
-
#: src/view/com/posts/FeedErrorMessage.tsx:111
msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue."
msgstr "连接信息流服务器出现问题,请联系信息流的维护者反馈此问题。"
@@ -1748,25 +1974,32 @@ msgstr "信息流服务器返回错误的响应,请联系信息流的维护者
#: src/view/com/posts/FeedErrorMessage.tsx:96
msgid "Hmm, we're having trouble finding this feed. It may have been deleted."
-msgstr "我们无法找到该信息流,似乎已被删除。"
+msgstr "无法找到该信息流,似乎已被删除。"
+
+#: src/screens/Moderation/index.tsx:59
+msgid "Hmmmm, it seems we're having trouble loading this data. See below for more details. If this issue persists, please contact us."
+msgstr "看起来在加载数据时遇到了问题,请查看下方获取更多详情。如果问题仍然存在,请联系我们。"
+
+#: src/screens/Profile/ErrorState.tsx:31
+msgid "Hmmmm, we couldn't load that moderation service."
+msgstr "无法加载该限制提供服务。"
-#: src/Navigation.tsx:432
-#: src/view/shell/bottom-bar/BottomBar.tsx:137
-#: src/view/shell/desktop/LeftNav.tsx:306
-#: src/view/shell/Drawer.tsx:398
-#: src/view/shell/Drawer.tsx:399
+#: src/Navigation.tsx:454
+#: src/view/shell/bottom-bar/BottomBar.tsx:147
+#: src/view/shell/desktop/LeftNav.tsx:310
+#: src/view/shell/Drawer.tsx:401
+#: src/view/shell/Drawer.tsx:402
msgid "Home"
msgstr "主页"
-#: src/Navigation.tsx:247
-#: src/view/com/pager/FeedsTabBarMobile.tsx:123
-#: src/view/screens/PreferencesHomeFeed.tsx:104
-#: src/view/screens/Settings/index.tsx:543
-msgid "Home Feed Preferences"
-msgstr "主页信息流首选项"
+#: src/view/com/modals/ChangeHandle.tsx:420
+msgid "Host:"
+msgstr "主机:"
-#: src/view/com/auth/create/Step1.tsx:78
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:120
+#: src/screens/Login/ForgotPasswordForm.tsx:89
+#: src/screens/Login/LoginForm.tsx:134
+#: src/screens/Signup/StepInfo/index.tsx:40
+#: src/view/com/modals/ChangeHandle.tsx:281
msgid "Hosting provider"
msgstr "托管服务提供商"
@@ -1782,11 +2015,11 @@ msgstr "我有验证码"
msgid "I have a confirmation code"
msgstr "我有验证码"
-#: src/view/com/modals/ChangeHandle.tsx:283
+#: src/view/com/modals/ChangeHandle.tsx:284
msgid "I have my own domain"
msgstr "我拥有自己的域名"
-#: src/view/com/lightbox/Lightbox.web.tsx:165
+#: src/view/com/lightbox/Lightbox.web.tsx:185
msgid "If alt text is long, toggles alt text expanded state"
msgstr "若替代文本过长,则切换替代文本的展开状态"
@@ -1794,189 +2027,207 @@ msgstr "若替代文本过长,则切换替代文本的展开状态"
msgid "If none are selected, suitable for all ages."
msgstr "若不勾选,则默认为全年龄向。"
-#: src/view/com/modals/ChangePassword.tsx:146
+#: src/screens/Signup/StepInfo/Policies.tsx:83
+msgid "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."
+msgstr "如果你根据你所在国家的法律定义还不是成年人,则你的父母或法定监护人必须代表你阅读这些条款。"
+
+#: src/view/screens/ProfileList.tsx:610
+msgid "If you delete this list, you won't be able to recover it."
+msgstr "如果你删除此列表,将无法恢复"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:316
+msgid "If you remove this post, you won't be able to recover it."
+msgstr "如果你移除此列表,将无法恢复"
+
+#: src/view/com/modals/ChangePassword.tsx:148
msgid "If you want to change your password, we will send you a code to verify that this is your account."
-msgstr "如果你想要更改密码,我们将向你发送一个确认码以验证这是你的账户。"
+msgstr "如果你想要更改密码,我们将向你发送一个验证码以验证这是你的账户。"
+
+#: src/lib/moderation/useReportOptions.ts:36
+msgid "Illegal and Urgent"
+msgstr "违法"
#: src/view/com/util/images/Gallery.tsx:38
msgid "Image"
msgstr "图片"
-#: src/view/com/modals/AltImage.tsx:120
+#: src/view/com/modals/AltImage.tsx:121
msgid "Image alt text"
msgstr "图片替代文本"
-#: src/view/com/util/UserAvatar.tsx:311
-#: src/view/com/util/UserBanner.tsx:118
-msgid "Image options"
-msgstr "图片选项"
+#: src/lib/moderation/useReportOptions.ts:47
+msgid "Impersonation or false claims about identity or affiliation"
+msgstr "冒充或虚假身份及从属关系"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:138
+#: src/screens/Login/SetNewPasswordForm.tsx:127
msgid "Input code sent to your email for password reset"
msgstr "输入发送到你电子邮箱的验证码以重置密码"
-#: src/view/com/modals/DeleteAccount.tsx:184
+#: src/view/com/modals/DeleteAccount.tsx:183
msgid "Input confirmation code for account deletion"
msgstr "输入删除用户的验证码"
-#: src/view/com/auth/create/Step1.tsx:196
-msgid "Input email for Bluesky account"
-msgstr "输入 Bluesky 账户的电子邮箱"
+#: src/view/com/auth/create/Step1.tsx:177
+#~ msgid "Input email for Bluesky account"
+#~ msgstr "输入 Bluesky 账户的电子邮箱"
-#: src/view/com/auth/create/Step1.tsx:154
-msgid "Input invite code to proceed"
-msgstr "输入邀请码以继续"
+#: src/view/com/auth/create/Step1.tsx:151
+#~ msgid "Input invite code to proceed"
+#~ msgstr "输入邀请码以继续"
-#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/AddAppPasswords.tsx:181
msgid "Input name for app password"
-msgstr "输入 App 专用密码名称"
+msgstr "输入应用专用密码名称"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:162
+#: src/screens/Login/SetNewPasswordForm.tsx:151
msgid "Input new password"
msgstr "输入新的密码"
-#: src/view/com/modals/DeleteAccount.tsx:203
+#: src/view/com/modals/DeleteAccount.tsx:202
msgid "Input password for account deletion"
msgstr "输入密码以删除账户"
-#: src/view/com/auth/create/Step2.tsx:196
-msgid "Input phone number for SMS verification"
-msgstr "输入手机号码进行短信验证"
-
-#: src/view/com/auth/login/LoginForm.tsx:230
+#: src/screens/Login/LoginForm.tsx:195
msgid "Input the password tied to {identifier}"
msgstr "输入与 {identifier} 关联的密码"
-#: src/view/com/auth/login/LoginForm.tsx:197
+#: src/screens/Login/LoginForm.tsx:168
msgid "Input the username or email address you used at signup"
msgstr "输入注册时使用的用户名或电子邮箱"
-#: src/view/com/auth/create/Step2.tsx:271
-msgid "Input the verification code we have texted to you"
-msgstr "输入收到的短信验证码"
-
-#: src/view/com/modals/Waitlist.tsx:90
-msgid "Input your email to get on the Bluesky waitlist"
-msgstr "输入你的电子邮箱以加入 Bluesky 候补列表"
-
-#: src/view/com/auth/login/LoginForm.tsx:229
+#: src/screens/Login/LoginForm.tsx:194
msgid "Input your password"
msgstr "输入你的密码"
-#: src/view/com/auth/create/Step3.tsx:42
+#: src/view/com/modals/ChangeHandle.tsx:389
+msgid "Input your preferred hosting provider"
+msgstr "输入你首选的托管服务提供商"
+
+#: src/screens/Signup/StepHandle.tsx:62
msgid "Input your user handle"
msgstr "输入你的用户识别符"
-#: src/view/com/post-thread/PostThreadItem.tsx:225
+#: src/view/com/post-thread/PostThreadItem.tsx:221
msgid "Invalid or unsupported post record"
msgstr "帖子记录无效或不受支持"
-#: src/view/com/auth/login/LoginForm.tsx:113
+#: src/screens/Login/LoginForm.tsx:114
msgid "Invalid username or password"
msgstr "用户名或密码无效"
-#: src/view/screens/Settings.tsx:411
-#~ msgid "Invite"
-#~ msgstr "邀请"
-
-#: src/view/com/modals/InviteCodes.tsx:93
+#: src/view/com/modals/InviteCodes.tsx:94
msgid "Invite a Friend"
msgstr "邀请朋友"
-#: src/view/com/auth/create/Step1.tsx:144
-#: src/view/com/auth/create/Step1.tsx:153
+#: src/screens/Signup/StepInfo/index.tsx:58
msgid "Invite code"
msgstr "邀请码"
-#: src/view/com/auth/create/state.ts:199
+#: src/screens/Signup/state.ts:278
msgid "Invite code not accepted. Check that you input it correctly and try again."
msgstr "邀请码无效,请检查你输入的邀请码并重试。"
-#: src/view/com/modals/InviteCodes.tsx:170
+#: src/view/com/modals/InviteCodes.tsx:171
msgid "Invite codes: {0} available"
-msgstr "邀请码:{0} 可用"
+msgstr "邀请码:{0} 个可用"
-#: src/view/shell/Drawer.tsx:645
-#~ msgid "Invite codes: {invitesAvailable} available"
-#~ msgstr "邀请码:{invitesAvailable} 可用"
-
-#: src/view/com/modals/InviteCodes.tsx:169
+#: src/view/com/modals/InviteCodes.tsx:170
msgid "Invite codes: 1 available"
-msgstr "邀请码:1 可用"
+msgstr "邀请码:1 个可用"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:64
+#: src/screens/Onboarding/StepFollowingFeed.tsx:65
msgid "It shows posts from the people you follow as they happen."
msgstr "他会显示你所关注的人发布的帖子。"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:99
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:104
+#: src/view/com/auth/SplashScreen.web.tsx:172
msgid "Jobs"
msgstr "工作"
-#: src/view/com/modals/Waitlist.tsx:67
-msgid "Join the waitlist"
-msgstr "加入候补列表"
-
-#: src/view/com/auth/create/Step1.tsx:170
-#: src/view/com/auth/create/Step1.tsx:174
-msgid "Join the waitlist."
-msgstr "加入候补列表。"
-
-#: src/view/com/modals/Waitlist.tsx:128
-msgid "Join Waitlist"
-msgstr "加入候补列表"
-
#: src/screens/Onboarding/index.tsx:24
msgid "Journalism"
msgstr "新闻学"
+#: src/components/moderation/LabelsOnMe.tsx:59
+msgid "label has been placed on this {labelTarget}"
+msgstr "标记已放置在 {labelTarget} 上"
+
+#: src/components/moderation/ContentHider.tsx:144
+msgid "Labeled by {0}."
+msgstr "由 {0} 标记。"
+
+#: src/components/moderation/ContentHider.tsx:142
+msgid "Labeled by the author."
+msgstr "由作者标记。"
+
+#: src/view/screens/Profile.tsx:188
+msgid "Labels"
+msgstr "标记"
+
+#: src/screens/Profile/Sections/Labels.tsx:142
+msgid "Labels are annotations on users and content. They can be used to hide, warn, and categorize the network."
+msgstr "标记是对特定内容及用户的提示。可以针对特定内容默认隐藏内容、显示警告或直接显示。"
+
+#: src/components/moderation/LabelsOnMe.tsx:61
+msgid "labels have been placed on this {labelTarget}"
+msgstr "标记已放置在 {labelTarget} 上"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:62
+msgid "Labels on your account"
+msgstr "你账户上的标记"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:64
+msgid "Labels on your content"
+msgstr "你内容上的标记"
+
#: src/view/com/composer/select-language/SelectLangBtn.tsx:104
msgid "Language selection"
msgstr "选择语言"
-#: src/view/screens/Settings/index.tsx:594
+#: src/view/screens/Settings/index.tsx:614
msgid "Language settings"
msgstr "语言设置"
-#: src/Navigation.tsx:140
+#: src/Navigation.tsx:144
#: src/view/screens/LanguageSettings.tsx:89
msgid "Language Settings"
msgstr "语言设置"
-#: src/view/screens/Settings/index.tsx:603
+#: src/view/screens/Settings/index.tsx:623
msgid "Languages"
msgstr "语言"
#: src/view/com/auth/create/StepHeader.tsx:20
-msgid "Last step!"
-msgstr "最后一步!"
-
-#: src/view/com/util/moderation/ContentHider.tsx:103
-msgid "Learn more"
-msgstr "了解详情"
+#~ msgid "Last step!"
+#~ msgstr "最后一步!"
-#: src/view/com/util/moderation/PostAlerts.tsx:47
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:65
-#: src/view/com/util/moderation/ScreenHider.tsx:104
+#: src/components/moderation/ScreenHider.tsx:136
msgid "Learn More"
msgstr "了解详情"
-#: src/view/com/util/moderation/ContentHider.tsx:85
-#: src/view/com/util/moderation/PostAlerts.tsx:40
-#: src/view/com/util/moderation/PostHider.tsx:78
-#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:49
-#: src/view/com/util/moderation/ScreenHider.tsx:101
+#: src/components/moderation/ContentHider.tsx:65
+#: src/components/moderation/ContentHider.tsx:128
+msgid "Learn more about the moderation applied to this content."
+msgstr "了解有关应用于此内容的限制的更多详情。"
+
+#: src/components/moderation/PostHider.tsx:85
+#: src/components/moderation/ScreenHider.tsx:125
msgid "Learn more about this warning"
-msgstr "了解关于这个警告的更多详情"
+msgstr "了解有关这个警告的更多详情"
-#: src/view/screens/Moderation.tsx:243
+#: src/screens/Moderation/index.tsx:549
msgid "Learn more about what is public on Bluesky."
msgstr "了解有关 Bluesky 公开内容的更多详情。"
+#: src/components/moderation/ContentHider.tsx:152
+msgid "Learn more."
+msgstr "了解详情。"
+
#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82
msgid "Leave them all unchecked to see any language."
-msgstr "全部不选中以查看任何语言。"
+msgstr "全部留空以查看所有语言的帖子。"
-#: src/view/com/modals/LinkWarning.tsx:51
+#: src/view/com/modals/LinkWarning.tsx:65
msgid "Leaving Bluesky"
msgstr "离开 Bluesky"
@@ -1984,139 +2235,135 @@ msgstr "离开 Bluesky"
msgid "left to go."
msgstr "尚未完成。"
-#: src/view/screens/Settings/index.tsx:278
+#: src/view/screens/Settings/index.tsx:296
msgid "Legacy storage cleared, you need to restart the app now."
msgstr "旧存储数据已清除,你需要立即重新启动应用。"
-#: src/view/com/auth/login/Login.tsx:128
-#: src/view/com/auth/login/Login.tsx:144
+#: src/screens/Login/index.tsx:130
+#: src/screens/Login/index.tsx:145
msgid "Let's get your password reset!"
msgstr "让我们来重置你的密码!"
-#: src/screens/Onboarding/StepFinished.tsx:151
+#: src/screens/Onboarding/StepFinished.tsx:155
msgid "Let's go!"
msgstr "让我们开始!"
-#: src/view/com/util/UserAvatar.tsx:248
-#: src/view/com/util/UserBanner.tsx:62
-msgid "Library"
-msgstr "图书馆"
-
-#: src/view/screens/Settings/index.tsx:479
+#: src/view/screens/Settings/index.tsx:498
msgid "Light"
msgstr "亮色"
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Like"
-msgstr "点赞"
+msgstr "喜欢"
-#: src/view/screens/ProfileFeed.tsx:591
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:258
+#: src/view/screens/ProfileFeed.tsx:573
msgid "Like this feed"
-msgstr "点赞这个信息流"
+msgstr "喜欢这个信息流"
-#: src/Navigation.tsx:197
+#: src/components/LikesDialog.tsx:87
+#: src/Navigation.tsx:201
+#: src/Navigation.tsx:206
msgid "Liked by"
-msgstr "点赞"
+msgstr "喜欢"
+#: src/screens/Profile/ProfileLabelerLikedBy.tsx:29
#: src/view/screens/PostLikedBy.tsx:27
#: src/view/screens/ProfileFeedLikedBy.tsx:27
msgid "Liked By"
-msgstr "点赞"
+msgstr "喜欢"
-#: src/view/com/feeds/FeedSourceCard.tsx:277
+#: src/view/com/feeds/FeedSourceCard.tsx:268
msgid "Liked by {0} {1}"
-msgstr "{0} {1} 点赞"
+msgstr "{0} 个 {1} 喜欢"
-#: src/view/screens/ProfileFeed.tsx:606
+#: src/components/LabelingServiceCard/index.tsx:72
+msgid "Liked by {count} {0}"
+msgstr "被 {count} {0} 喜欢"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:278
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:292
+#: src/view/screens/ProfileFeed.tsx:588
msgid "Liked by {likeCount} {0}"
-msgstr "{likeCount} {0} 点赞"
+msgstr "{likeCount} 个 {0} 喜欢"
-#: src/view/com/notifications/FeedItem.tsx:170
+#: src/view/com/notifications/FeedItem.tsx:174
msgid "liked your custom feed"
-msgstr "点赞你的自定义信息流"
+msgstr "赞了你的自定义信息流"
-#: src/view/com/notifications/FeedItem.tsx:155
+#: src/view/com/notifications/FeedItem.tsx:159
msgid "liked your post"
-msgstr "点赞你的帖子"
+msgstr "赞了你的帖子"
-#: src/view/screens/Profile.tsx:183
+#: src/view/screens/Profile.tsx:193
msgid "Likes"
-msgstr "点赞"
+msgstr "喜欢"
#: src/view/com/post-thread/PostThreadItem.tsx:182
msgid "Likes on this post"
-msgstr "点赞这条帖子"
+msgstr "这条帖子的喜欢数"
-#: src/Navigation.tsx:166
+#: src/Navigation.tsx:170
msgid "List"
msgstr "列表"
-#: src/view/com/modals/CreateOrEditList.tsx:261
+#: src/view/com/modals/CreateOrEditList.tsx:262
msgid "List Avatar"
msgstr "列表头像"
-#: src/view/screens/ProfileList.tsx:323
+#: src/view/screens/ProfileList.tsx:311
msgid "List blocked"
msgstr "列表已屏蔽"
-#: src/view/com/feeds/FeedSourceCard.tsx:231
+#: src/view/com/feeds/FeedSourceCard.tsx:220
msgid "List by {0}"
msgstr "列表由 {0} 创建"
-#: src/view/screens/ProfileList.tsx:377
+#: src/view/screens/ProfileList.tsx:355
msgid "List deleted"
msgstr "列表已删除"
-#: src/view/screens/ProfileList.tsx:282
+#: src/view/screens/ProfileList.tsx:283
msgid "List muted"
msgstr "列表已隐藏"
-#: src/view/com/modals/CreateOrEditList.tsx:275
+#: src/view/com/modals/CreateOrEditList.tsx:276
msgid "List Name"
msgstr "列表名称"
-#: src/view/screens/ProfileList.tsx:342
+#: src/view/screens/ProfileList.tsx:325
msgid "List unblocked"
-msgstr "取消屏蔽列表"
+msgstr "解除对列表的屏蔽"
-#: src/view/screens/ProfileList.tsx:301
+#: src/view/screens/ProfileList.tsx:297
msgid "List unmuted"
-msgstr "取消隐藏列表"
-
-#: src/Navigation.tsx:110
-#: src/view/screens/Profile.tsx:185
-#: src/view/shell/desktop/LeftNav.tsx:379
-#: src/view/shell/Drawer.tsx:492
-#: src/view/shell/Drawer.tsx:493
+msgstr "解除对列表的隐藏"
+
+#: src/Navigation.tsx:114
+#: src/view/screens/Profile.tsx:189
+#: src/view/screens/Profile.tsx:195
+#: src/view/shell/desktop/LeftNav.tsx:383
+#: src/view/shell/Drawer.tsx:495
+#: src/view/shell/Drawer.tsx:496
msgid "Lists"
msgstr "列表"
-#: src/view/com/post-thread/PostThread.tsx:276
-#: src/view/com/post-thread/PostThread.tsx:284
-msgid "Load more posts"
-msgstr "加载更多帖子"
-
#: src/view/screens/Notifications.tsx:159
msgid "Load new notifications"
msgstr "加载新的通知"
-#: src/view/com/feeds/FeedPage.tsx:190
-#: src/view/screens/Profile.tsx:440
-#: src/view/screens/ProfileFeed.tsx:494
-#: src/view/screens/ProfileList.tsx:680
+#: src/screens/Profile/Sections/Feed.tsx:70
+#: src/view/com/feeds/FeedPage.tsx:138
+#: src/view/screens/ProfileFeed.tsx:496
+#: src/view/screens/ProfileList.tsx:695
msgid "Load new posts"
msgstr "加载新的帖子"
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:99
msgid "Loading..."
msgstr "加载中..."
-#: src/view/com/modals/ServerInput.tsx:50
-#~ msgid "Local dev server"
-#~ msgstr "本地开发服务器"
-
-#: src/Navigation.tsx:207
+#: src/Navigation.tsx:221
msgid "Log"
msgstr "日志"
@@ -2127,19 +2374,35 @@ msgstr "日志"
msgid "Log out"
msgstr "登出"
-#: src/view/screens/Moderation.tsx:136
+#: src/screens/Moderation/index.tsx:442
msgid "Logged-out visibility"
msgstr "未登录用户可见性"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:133
+#: src/components/AccountList.tsx:54
msgid "Login to account that is not listed"
msgstr "登录未列出的账户"
-#: src/view/com/modals/LinkWarning.tsx:65
+#: src/screens/Login/SetNewPasswordForm.tsx:116
+msgid "Looks like XXXXX-XXXXX"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:79
msgid "Make sure this is where you intend to go!"
-msgstr "请确认!"
+msgstr "请确认目标页面地址是否正确!"
-#: src/view/screens/Profile.tsx:182
+#: src/components/dialogs/MutedWords.tsx:82
+msgid "Manage your muted words and tags"
+msgstr "管理你的隐藏词和话题标签"
+
+#: src/view/com/auth/create/Step2.tsx:118
+#~ msgid "May not be longer than 253 characters"
+#~ msgstr "不能长于 253 个字符"
+
+#: src/view/com/auth/create/Step2.tsx:109
+#~ msgid "May only contain letters and numbers"
+#~ msgstr "只能包含字母和数字"
+
+#: src/view/screens/Profile.tsx:192
msgid "Media"
msgstr "媒体"
@@ -2151,115 +2414,166 @@ msgstr "提到的用户"
msgid "Mentioned users"
msgstr "提到的用户"
-#: src/view/com/util/ViewHeader.tsx:81
-#: src/view/screens/Search/Search.tsx:623
+#: src/view/com/util/ViewHeader.tsx:87
+#: src/view/screens/Search/Search.tsx:648
msgid "Menu"
msgstr "菜单"
-#: src/view/com/posts/FeedErrorMessage.tsx:197
+#: src/view/com/posts/FeedErrorMessage.tsx:192
msgid "Message from server: {0}"
msgstr "来自服务器的信息:{0}"
-#: src/Navigation.tsx:115
-#: src/view/screens/Moderation.tsx:64
-#: src/view/screens/Settings/index.tsx:625
-#: src/view/shell/desktop/LeftNav.tsx:397
-#: src/view/shell/Drawer.tsx:511
-#: src/view/shell/Drawer.tsx:512
+#: src/lib/moderation/useReportOptions.ts:45
+msgid "Misleading Account"
+msgstr "误导性账户"
+
+#: src/Navigation.tsx:119
+#: src/screens/Moderation/index.tsx:104
+#: src/view/screens/Settings/index.tsx:645
+#: src/view/shell/desktop/LeftNav.tsx:401
+#: src/view/shell/Drawer.tsx:514
+#: src/view/shell/Drawer.tsx:515
msgid "Moderation"
msgstr "限制"
-#: src/view/com/lists/ListCard.tsx:92
+#: src/components/moderation/ModerationDetailsDialog.tsx:112
+msgid "Moderation details"
+msgstr "限制详情"
+
+#: src/view/com/lists/ListCard.tsx:93
#: src/view/com/modals/UserAddRemoveLists.tsx:206
msgid "Moderation list by {0}"
-msgstr "限制列表由 {0} 创建"
+msgstr "由 {0} 创建的限制列表"
-#: src/view/screens/ProfileList.tsx:774
+#: src/view/screens/ProfileList.tsx:789
msgid "Moderation list by <0/>"
-msgstr "限制列表由 0> 创建"
+msgstr "由 0> 创建的限制列表"
-#: src/view/com/lists/ListCard.tsx:90
+#: src/view/com/lists/ListCard.tsx:91
#: src/view/com/modals/UserAddRemoveLists.tsx:204
-#: src/view/screens/ProfileList.tsx:772
+#: src/view/screens/ProfileList.tsx:787
msgid "Moderation list by you"
-msgstr "限制列表由你创建"
+msgstr "你创建的限制列表"
-#: src/view/com/modals/CreateOrEditList.tsx:197
+#: src/view/com/modals/CreateOrEditList.tsx:198
msgid "Moderation list created"
msgstr "限制列表已创建"
-#: src/view/com/modals/CreateOrEditList.tsx:183
+#: src/view/com/modals/CreateOrEditList.tsx:184
msgid "Moderation list updated"
msgstr "限制列表已更新"
-#: src/view/screens/Moderation.tsx:95
+#: src/screens/Moderation/index.tsx:243
msgid "Moderation lists"
msgstr "限制列表"
-#: src/Navigation.tsx:120
+#: src/Navigation.tsx:124
#: src/view/screens/ModerationModlists.tsx:58
msgid "Moderation Lists"
msgstr "限制列表"
-#: src/view/screens/Settings/index.tsx:619
+#: src/view/screens/Settings/index.tsx:639
msgid "Moderation settings"
msgstr "限制设置"
-#: src/view/com/modals/ModerationDetails.tsx:35
-msgid "Moderator has chosen to set a general warning on the content."
-msgstr "限制选择对内容设置一般警告。"
+#: src/Navigation.tsx:216
+msgid "Moderation states"
+msgstr "限制状态"
-#: src/view/shell/desktop/Feeds.tsx:63
+#: src/screens/Moderation/index.tsx:215
+msgid "Moderation tools"
+msgstr "限制工具"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:48
+#: src/lib/moderation/useModerationCauseDescription.ts:40
+msgid "Moderator has chosen to set a general warning on the content."
+msgstr "由限制者对内容设置的一般警告。"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:541
+msgid "More"
+msgstr "更多"
+
+#: src/view/shell/desktop/Feeds.tsx:65
msgid "More feeds"
msgstr "更多信息流"
-#: src/view/com/profile/ProfileHeader.tsx:522
-#: src/view/screens/ProfileFeed.tsx:362
-#: src/view/screens/ProfileList.tsx:616
+#: src/view/screens/ProfileList.tsx:599
msgid "More options"
msgstr "更多选项"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:270
-msgid "More post options"
-msgstr "更多帖子选项"
-
#: src/view/screens/PreferencesThreads.tsx:82
msgid "Most-liked replies first"
-msgstr "最多点赞优先"
+msgstr "优先显示最多喜欢"
+
+#: src/view/com/auth/create/Step2.tsx:122
+#~ msgid "Must be at least 3 characters"
+#~ msgstr "需要至少 3 个字符"
+
+#: src/components/TagMenu/index.tsx:249
+msgid "Mute"
+msgstr "隐藏"
+
+#: src/components/TagMenu/index.web.tsx:105
+msgid "Mute {truncatedTag}"
+msgstr "隐藏 {truncatedTag}"
-#: src/view/com/profile/ProfileHeader.tsx:326
+#: src/view/com/profile/ProfileMenu.tsx:279
+#: src/view/com/profile/ProfileMenu.tsx:286
msgid "Mute Account"
msgstr "隐藏账户"
-#: src/view/screens/ProfileList.tsx:543
+#: src/view/screens/ProfileList.tsx:518
msgid "Mute accounts"
msgstr "隐藏账户"
-#: src/view/screens/ProfileList.tsx:490
+#: src/components/TagMenu/index.tsx:209
+msgid "Mute all {displayTag} posts"
+msgstr "隐藏所有 {displayTag} 的帖子"
+
+#: src/components/dialogs/MutedWords.tsx:148
+msgid "Mute in tags only"
+msgstr "仅隐藏话题标签"
+
+#: src/components/dialogs/MutedWords.tsx:133
+msgid "Mute in text & tags"
+msgstr "隐藏文本和话题标签"
+
+#: src/view/screens/ProfileList.tsx:461
+#: src/view/screens/ProfileList.tsx:624
msgid "Mute list"
msgstr "隐藏列表"
-#: src/view/screens/ProfileList.tsx:274
+#: src/view/screens/ProfileList.tsx:619
msgid "Mute these accounts?"
msgstr "隐藏这些账户?"
-#: src/view/screens/ProfileList.tsx:278
-msgid "Mute this List"
-msgstr "隐藏这个列表"
+#: src/components/dialogs/MutedWords.tsx:126
+msgid "Mute this word in post text and tags"
+msgstr "在帖子文本和话题标签中隐藏该词"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/components/dialogs/MutedWords.tsx:141
+msgid "Mute this word in tags only"
+msgstr "仅在话题标签中隐藏该词"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:257
msgid "Mute thread"
msgstr "隐藏讨论串"
-#: src/view/com/lists/ListCard.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:267
+#: src/view/com/util/forms/PostDropdownBtn.tsx:269
+msgid "Mute words & tags"
+msgstr "隐藏词和话题标签"
+
+#: src/view/com/lists/ListCard.tsx:102
msgid "Muted"
msgstr "已隐藏"
-#: src/view/screens/Moderation.tsx:109
+#: src/screens/Moderation/index.tsx:255
msgid "Muted accounts"
msgstr "已隐藏账户"
-#: src/Navigation.tsx:125
+#: src/Navigation.tsx:129
#: src/view/screens/ModerationMutedAccounts.tsx:107
msgid "Muted Accounts"
msgstr "已隐藏账户"
@@ -2268,48 +2582,61 @@ msgstr "已隐藏账户"
msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private."
msgstr "已隐藏的账户将不会在你的通知或时间线中显示,被隐藏账户将不会收到通知。"
-#: src/view/screens/ProfileList.tsx:276
+#: src/lib/moderation/useModerationCauseDescription.ts:85
+msgid "Muted by \"{0}\""
+msgstr "被 \"{0}\" 隐藏"
+
+#: src/screens/Moderation/index.tsx:231
+msgid "Muted words & tags"
+msgstr "已隐藏词和话题标签"
+
+#: src/view/screens/ProfileList.tsx:621
msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them."
msgstr "被隐藏的账户将不会得知你已将他隐藏,已隐藏的账户将不会在你的通知或时间线中显示。"
-#: src/view/com/modals/BirthDateSettings.tsx:56
+#: src/components/dialogs/BirthDateSettings.tsx:35
+#: src/components/dialogs/BirthDateSettings.tsx:38
msgid "My Birthday"
msgstr "我的生日"
-#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:663
msgid "My Feeds"
msgstr "自定义信息流"
#: src/view/shell/desktop/LeftNav.tsx:65
msgid "My Profile"
-msgstr "个人资料"
+msgstr "我的个人资料"
-#: src/view/screens/Settings/index.tsx:582
-msgid "My Saved Feeds"
+#: src/view/screens/Settings/index.tsx:596
+msgid "My saved feeds"
msgstr "我保存的信息流"
-#: src/view/com/auth/server-input/index.tsx:118
-msgid "my-server.com"
-msgstr ""
+#: src/view/screens/Settings/index.tsx:602
+msgid "My Saved Feeds"
+msgstr "我保存的信息流"
-#: src/view/com/modals/AddAppPasswords.tsx:179
-#: src/view/com/modals/CreateOrEditList.tsx:290
+#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/CreateOrEditList.tsx:291
msgid "Name"
msgstr "名称"
-#: src/view/com/modals/CreateOrEditList.tsx:145
+#: src/view/com/modals/CreateOrEditList.tsx:146
msgid "Name is required"
msgstr "名称是必填项"
+#: src/lib/moderation/useReportOptions.ts:57
+#: src/lib/moderation/useReportOptions.ts:78
+#: src/lib/moderation/useReportOptions.ts:86
+msgid "Name or Description Violates Community Standards"
+msgstr "名称或描述违反了社群准则"
+
#: src/screens/Onboarding/index.tsx:25
msgid "Nature"
msgstr "自然"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:190
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:219
-#: src/view/com/auth/login/LoginForm.tsx:289
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:196
-#: src/view/com/modals/ChangePassword.tsx:166
+#: src/screens/Login/ForgotPasswordForm.tsx:173
+#: src/screens/Login/LoginForm.tsx:254
+#: src/view/com/modals/ChangePassword.tsx:168
msgid "Navigates to the next screen"
msgstr "转到下一页"
@@ -2317,20 +2644,28 @@ msgstr "转到下一页"
msgid "Navigates to your profile"
msgstr "转到个人资料"
+#: src/components/ReportDialog/SelectReportOptionView.tsx:122
+msgid "Need to report a copyright violation?"
+msgstr "需要举报侵犯版权行为吗?"
+
#: src/view/com/modals/EmbedConsent.tsx:107
#: src/view/com/modals/EmbedConsent.tsx:123
-msgid "Never load embeds from {0}"
-msgstr "请勿加载来自 {0} 的嵌入内容"
+#~ msgid "Never load embeds from {0}"
+#~ msgstr "请勿加载来自 {0} 的嵌入内容"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:72
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:72
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:74
msgid "Never lose access to your followers and data."
msgstr "永远不会失去对你的关注者和数据的访问。"
-#: src/screens/Onboarding/StepFinished.tsx:119
+#: src/screens/Onboarding/StepFinished.tsx:123
msgid "Never lose access to your followers or data."
msgstr "永远不会失去对你的关注者或数据的访问。"
+#: src/view/com/modals/ChangeHandle.tsx:519
+msgid "Nevermind, create a handle for me"
+msgstr "没关系,为我创建一个用户识别符"
+
#: src/view/screens/Lists.tsx:76
msgctxt "action"
msgid "New"
@@ -2340,109 +2675,123 @@ msgstr "新建"
msgid "New"
msgstr "新建"
-#: src/view/com/modals/CreateOrEditList.tsx:252
+#: src/view/com/modals/CreateOrEditList.tsx:253
msgid "New Moderation List"
msgstr "新的限制列表"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:150
+#: src/view/com/modals/ChangePassword.tsx:212
msgid "New password"
msgstr "新密码"
-#: src/view/com/modals/ChangePassword.tsx:215
+#: src/view/com/modals/ChangePassword.tsx:217
msgid "New Password"
msgstr "新密码"
-#: src/view/com/feeds/FeedPage.tsx:201
+#: src/view/com/feeds/FeedPage.tsx:149
msgctxt "action"
msgid "New post"
msgstr "新帖子"
-#: src/view/screens/Feeds.tsx:581
+#: src/view/screens/Feeds.tsx:555
#: src/view/screens/Notifications.tsx:168
-#: src/view/screens/Profile.tsx:382
-#: src/view/screens/ProfileFeed.tsx:432
-#: src/view/screens/ProfileList.tsx:195
-#: src/view/screens/ProfileList.tsx:223
-#: src/view/shell/desktop/LeftNav.tsx:248
+#: src/view/screens/Profile.tsx:452
+#: src/view/screens/ProfileFeed.tsx:434
+#: src/view/screens/ProfileList.tsx:199
+#: src/view/screens/ProfileList.tsx:227
+#: src/view/shell/desktop/LeftNav.tsx:252
msgid "New post"
msgstr "新帖子"
-#: src/view/shell/desktop/LeftNav.tsx:258
+#: src/view/shell/desktop/LeftNav.tsx:262
msgctxt "action"
msgid "New Post"
msgstr "新帖子"
-#: src/view/com/modals/CreateOrEditList.tsx:247
+#: src/view/com/modals/CreateOrEditList.tsx:248
msgid "New User List"
msgstr "新的用户列表"
#: src/view/screens/PreferencesThreads.tsx:79
msgid "Newest replies first"
-msgstr "最新回复优先"
+msgstr "优先显示最新回复"
#: src/screens/Onboarding/index.tsx:23
msgid "News"
msgstr "新闻"
-#: src/view/com/auth/create/CreateAccount.tsx:161
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:182
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:192
-#: src/view/com/auth/login/LoginForm.tsx:291
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:187
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:198
+#: src/screens/Login/ForgotPasswordForm.tsx:143
+#: src/screens/Login/ForgotPasswordForm.tsx:150
+#: src/screens/Login/LoginForm.tsx:253
+#: src/screens/Login/LoginForm.tsx:260
+#: src/screens/Login/SetNewPasswordForm.tsx:174
+#: src/screens/Login/SetNewPasswordForm.tsx:180
+#: src/screens/Signup/index.tsx:205
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79
-#: src/view/com/modals/ChangePassword.tsx:251
#: src/view/com/modals/ChangePassword.tsx:253
+#: src/view/com/modals/ChangePassword.tsx:255
msgid "Next"
-msgstr "下一个"
+msgstr "下一步"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:103
msgctxt "action"
msgid "Next"
-msgstr "下一个"
+msgstr "下一步"
-#: src/view/com/lightbox/Lightbox.web.tsx:149
+#: src/view/com/lightbox/Lightbox.web.tsx:169
msgid "Next image"
msgstr "下一张图片"
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:200
-#: src/view/screens/PreferencesHomeFeed.tsx:235
-#: src/view/screens/PreferencesHomeFeed.tsx:272
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:200
+#: src/view/screens/PreferencesFollowingFeed.tsx:235
+#: src/view/screens/PreferencesFollowingFeed.tsx:272
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "No"
msgstr "停用"
-#: src/view/screens/ProfileFeed.tsx:584
-#: src/view/screens/ProfileList.tsx:754
+#: src/view/screens/ProfileFeed.tsx:562
+#: src/view/screens/ProfileList.tsx:769
msgid "No description"
msgstr "没有描述"
-#: src/view/com/profile/ProfileHeader.tsx:169
+#: src/view/com/modals/ChangeHandle.tsx:405
+msgid "No DNS Panel"
+msgstr "没有 DNS 面板"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:118
msgid "No longer following {0}"
msgstr "不再关注 {0}"
+#: src/screens/Signup/StepHandle.tsx:114
+msgid "No longer than 253 characters"
+msgstr ""
+
#: src/view/com/notifications/Feed.tsx:109
msgid "No notifications yet!"
-msgstr "没有通知!"
+msgstr "还没有通知!"
-#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:97
-#: src/view/com/composer/text-input/web/Autocomplete.tsx:191
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:101
+#: src/view/com/composer/text-input/web/Autocomplete.tsx:195
msgid "No result"
msgstr "没有结果"
-#: src/view/screens/Feeds.tsx:524
+#: src/components/Lists.tsx:183
+msgid "No results found"
+msgstr "未找到结果"
+
+#: src/view/screens/Feeds.tsx:495
msgid "No results found for \"{query}\""
msgstr "未找到\"{query}\"的结果"
#: src/view/com/modals/ListAddRemoveUsers.tsx:127
-#: src/view/screens/Search/Search.tsx:280
-#: src/view/screens/Search/Search.tsx:308
+#: src/view/screens/Search/Search.tsx:283
+#: src/view/screens/Search/Search.tsx:311
msgid "No results found for {query}"
msgstr "未找到 {query} 的结果"
-#: src/view/com/modals/EmbedConsent.tsx:129
+#: src/components/dialogs/EmbedConsent.tsx:105
+#: src/components/dialogs/EmbedConsent.tsx:112
msgid "No thanks"
msgstr "不,谢谢"
@@ -2450,31 +2799,46 @@ msgstr "不,谢谢"
msgid "Nobody"
msgstr "没有人"
+#: src/components/LikedByList.tsx:79
+#: src/components/LikesDialog.tsx:99
+msgid "Nobody has liked this yet. Maybe you should be the first!"
+msgstr "目前还没有人喜欢,也许你应该成为第一个!"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:42
+msgid "Non-sexual Nudity"
+msgstr "非性暗示裸露"
+
#: src/view/com/modals/SelfLabel.tsx:135
msgid "Not Applicable."
msgstr "不适用。"
-#: src/Navigation.tsx:105
-#: src/view/screens/Profile.tsx:106
+#: src/Navigation.tsx:109
+#: src/view/screens/Profile.tsx:99
msgid "Not Found"
msgstr "未找到"
#: src/view/com/modals/VerifyEmail.tsx:246
#: src/view/com/modals/VerifyEmail.tsx:252
msgid "Not right now"
-msgstr "不是现在"
+msgstr "暂时不需要"
+
+#: src/view/com/profile/ProfileMenu.tsx:368
+#: src/view/com/util/forms/PostDropdownBtn.tsx:342
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:246
+msgid "Note about sharing"
+msgstr "分享注意事项"
-#: src/view/screens/Moderation.tsx:233
+#: src/screens/Moderation/index.tsx:540
msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites."
msgstr "注意:Bluesky 是一个开放的公共网络。此设置项仅限制你的内容在 Bluesky 应用和网站上的可见性,其他应用可能不尊从此设置项,仍可能会向未登录的用户显示你的动态。"
-#: src/Navigation.tsx:447
+#: src/Navigation.tsx:469
#: src/view/screens/Notifications.tsx:124
#: src/view/screens/Notifications.tsx:148
-#: src/view/shell/bottom-bar/BottomBar.tsx:205
-#: src/view/shell/desktop/LeftNav.tsx:361
-#: src/view/shell/Drawer.tsx:435
-#: src/view/shell/Drawer.tsx:436
+#: src/view/shell/bottom-bar/BottomBar.tsx:215
+#: src/view/shell/desktop/LeftNav.tsx:365
+#: src/view/shell/Drawer.tsx:438
+#: src/view/shell/Drawer.tsx:439
msgid "Notifications"
msgstr "通知"
@@ -2482,27 +2846,48 @@ msgstr "通知"
msgid "Nudity"
msgstr "裸露"
-#: src/view/com/util/ErrorBoundary.tsx:35
+#: src/lib/moderation/useReportOptions.ts:71
+msgid "Nudity or adult content not labeled as such"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:71
+#~ msgid "Nudity or pornography not labeled as such"
+#~ msgstr "未标记的裸露或色情内容"
+
+#: src/screens/Signup/index.tsx:142
+msgid "of"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:11
+msgid "Off"
+msgstr "显示"
+
+#: src/view/com/util/ErrorBoundary.tsx:49
msgid "Oh no!"
msgstr "糟糕!"
-#: src/screens/Onboarding/StepInterests/index.tsx:128
+#: src/screens/Onboarding/StepInterests/index.tsx:132
msgid "Oh no! Something went wrong."
msgstr "糟糕!发生了一些错误。"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:41
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:126
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:327
+msgid "OK"
+msgstr "好的"
+
+#: src/screens/Login/PasswordUpdatedForm.tsx:44
msgid "Okay"
msgstr "好的"
#: src/view/screens/PreferencesThreads.tsx:78
msgid "Oldest replies first"
-msgstr "最旧的回复优先"
+msgstr "优先显示最旧的回复"
-#: src/view/screens/Settings/index.tsx:234
+#: src/view/screens/Settings/index.tsx:244
msgid "Onboarding reset"
msgstr "重新开始引导流程"
-#: src/view/com/composer/Composer.tsx:375
+#: src/view/com/composer/Composer.tsx:392
msgid "One or more images is missing alt text."
msgstr "至少有一张图片缺失了替代文字。"
@@ -2510,148 +2895,197 @@ msgstr "至少有一张图片缺失了替代文字。"
msgid "Only {0} can reply."
msgstr "只有 {0} 可以回复。"
-#: src/view/screens/AppPasswords.tsx:65
-#: src/view/screens/Profile.tsx:106
+#: src/screens/Signup/StepHandle.tsx:97
+msgid "Only contains letters, numbers, and hyphens"
+msgstr ""
+
+#: src/components/Lists.tsx:75
+msgid "Oops, something went wrong!"
+msgstr "糟糕,发生了一些错误!"
+
+#: src/components/Lists.tsx:170
+#: src/view/screens/AppPasswords.tsx:67
+#: src/view/screens/Profile.tsx:99
msgid "Oops!"
msgstr "Oops!"
-#: src/screens/Onboarding/StepFinished.tsx:115
+#: src/screens/Onboarding/StepFinished.tsx:119
msgid "Open"
-msgstr "打开"
+msgstr "开启"
-#: src/view/com/composer/Composer.tsx:470
-#: src/view/com/composer/Composer.tsx:471
+#: src/view/com/composer/Composer.tsx:491
+#: src/view/com/composer/Composer.tsx:492
msgid "Open emoji picker"
-msgstr "打开 emoji 选择器"
+msgstr "开启表情符号选择器"
+
+#: src/view/screens/ProfileFeed.tsx:300
+msgid "Open feed options menu"
+msgstr "开启信息流选项菜单"
-#: src/view/screens/Settings/index.tsx:712
+#: src/view/screens/Settings/index.tsx:734
msgid "Open links with in-app browser"
msgstr "在内置浏览器中打开链接"
-#: src/view/com/pager/FeedsTabBarMobile.tsx:87
+#: src/screens/Moderation/index.tsx:227
+msgid "Open muted words and tags settings"
+msgstr "开启隐藏词和标签设置"
+
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:50
msgid "Open navigation"
msgstr "打开导航"
-#: src/view/screens/Settings/index.tsx:804
+#: src/view/com/util/forms/PostDropdownBtn.tsx:183
+msgid "Open post options menu"
+msgstr "开启帖子选项菜单"
+
+#: src/view/screens/Settings/index.tsx:828
+#: src/view/screens/Settings/index.tsx:838
msgid "Open storybook page"
-msgstr "打开故事书界面"
+msgstr "开启 Storybook 界面"
+
+#: src/view/screens/Settings/index.tsx:816
+msgid "Open system log"
+msgstr "开启系统日志"
#: src/view/com/util/forms/DropdownButton.tsx:154
msgid "Opens {numItems} options"
-msgstr "打开 {numItems} 个选项"
+msgstr "开启 {numItems} 个选项"
#: src/view/screens/Log.tsx:54
msgid "Opens additional details for a debug entry"
-msgstr "打开调试记录的附加详细信息"
+msgstr "开启调试记录的额外详细信息"
-#: src/view/com/notifications/FeedItem.tsx:348
+#: src/view/com/notifications/FeedItem.tsx:353
msgid "Opens an expanded list of users in this notification"
-msgstr "打开此通知中的扩展用户列表"
+msgstr "展开此通知中的扩展用户列表"
-#: src/view/com/composer/photos/OpenCameraBtn.tsx:61
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:78
msgid "Opens camera on device"
-msgstr "打开设备相机"
+msgstr "开启设备相机"
#: src/view/com/composer/Prompt.tsx:25
msgid "Opens composer"
-msgstr "打开编辑器"
+msgstr "开启编辑器"
-#: src/view/screens/Settings/index.tsx:595
+#: src/view/screens/Settings/index.tsx:615
msgid "Opens configurable language settings"
-msgstr "打开可配置的语言设置"
+msgstr "开启可配置的语言设置"
#: src/view/com/composer/photos/SelectPhotoBtn.tsx:44
msgid "Opens device photo gallery"
-msgstr "打开设备相册"
-
-#: src/view/com/profile/ProfileHeader.tsx:419
-msgid "Opens editor for profile display name, avatar, background image, and description"
-msgstr "打开个人资料(如名称、头像、背景图片、描述等)编辑器"
+msgstr "开启设备相册"
-#: src/view/screens/Settings/index.tsx:649
+#: src/view/screens/Settings/index.tsx:669
msgid "Opens external embeds settings"
-msgstr "打开外部嵌入设置"
-
-#: src/view/com/profile/ProfileHeader.tsx:574
-msgid "Opens followers list"
-msgstr "打开关注者列表"
+msgstr "开启外部嵌入设置"
-#: src/view/com/profile/ProfileHeader.tsx:593
-msgid "Opens following list"
-msgstr "打开正在关注列表"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:57
+#: src/view/com/auth/SplashScreen.tsx:68
+#: src/view/com/auth/SplashScreen.web.tsx:97
+msgid "Opens flow to create a new Bluesky account"
+msgstr "开启流程以创建一个新的 Bluesky 账户"
-#: src/view/screens/Settings.tsx:412
-#~ msgid "Opens invite code list"
-#~ msgstr "打开邀请码列表"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:75
+#: src/view/com/auth/SplashScreen.tsx:83
+#: src/view/com/auth/SplashScreen.web.tsx:112
+msgid "Opens flow to sign into your existing Bluesky account"
+msgstr "开启流程以登录到你现有的 Bluesky 账户"
-#: src/view/com/modals/InviteCodes.tsx:172
+#: src/view/com/modals/InviteCodes.tsx:173
msgid "Opens list of invite codes"
-msgstr "打开邀请码列表"
+msgstr "开启邀请码列表"
-#: src/view/screens/Settings/index.tsx:774
-msgid "Opens modal for account deletion confirmation. Requires email code."
-msgstr "打开用户删除确认界面,需要电子邮箱接收验证码。"
+#: src/view/screens/Settings/index.tsx:798
+msgid "Opens modal for account deletion confirmation. Requires email code"
+msgstr "开启用户删除确认界面,需要电子邮箱接收验证码。"
-#: src/view/com/modals/ChangeHandle.tsx:281
+#: src/view/screens/Settings/index.tsx:756
+msgid "Opens modal for changing your Bluesky password"
+msgstr "开启密码修改界面"
+
+#: src/view/screens/Settings/index.tsx:718
+msgid "Opens modal for choosing a new Bluesky handle"
+msgstr "开启创建新的用户识别符界面"
+
+#: src/view/screens/Settings/index.tsx:779
+msgid "Opens modal for downloading your Bluesky account data (repository)"
+msgstr "开启你的 Bluesky 用户资料(存储库)下载页面"
+
+#: src/view/screens/Settings/index.tsx:968
+msgid "Opens modal for email verification"
+msgstr "开启电子邮箱确认界面"
+
+#: src/view/com/modals/ChangeHandle.tsx:282
msgid "Opens modal for using custom domain"
-msgstr "打开使用自定义域名的模式"
+msgstr "开启使用自定义域名的模式"
-#: src/view/screens/Settings/index.tsx:620
+#: src/view/screens/Settings/index.tsx:640
msgid "Opens moderation settings"
-msgstr "打开限制设置"
+msgstr "开启限制设置"
-#: src/view/com/auth/login/LoginForm.tsx:239
+#: src/screens/Login/LoginForm.tsx:202
msgid "Opens password reset form"
-msgstr "打开密码重置申请"
+msgstr "开启密码重置申请"
-#: src/view/screens/Feeds.tsx:357
+#: src/view/com/home/HomeHeaderLayout.web.tsx:63
+#: src/view/screens/Feeds.tsx:356
msgid "Opens screen to edit Saved Feeds"
-msgstr "打开用于编辑已保存信息流的界面"
+msgstr "开启用于编辑已保存信息流的界面"
-#: src/view/screens/Settings/index.tsx:576
+#: src/view/screens/Settings/index.tsx:597
msgid "Opens screen with all saved feeds"
-msgstr "打开包含所有已保存信息流的界面"
+msgstr "开启包含所有已保存信息流的界面"
+
+#: src/view/screens/Settings/index.tsx:696
+msgid "Opens the app password settings"
+msgstr "开启应用专用密码设置界面"
-#: src/view/screens/Settings/index.tsx:676
-msgid "Opens the app password settings page"
-msgstr "打开 App 专用密码设置页"
+#: src/view/screens/Settings/index.tsx:554
+msgid "Opens the Following feed preferences"
+msgstr "开启关注信息流首选项"
-#: src/view/screens/Settings/index.tsx:535
-msgid "Opens the home feed preferences"
-msgstr "打开主页信息流首选项"
+#: src/view/com/modals/LinkWarning.tsx:93
+msgid "Opens the linked website"
+msgstr "开启链接的网页"
-#: src/view/screens/Settings/index.tsx:805
+#: src/view/screens/Settings/index.tsx:829
+#: src/view/screens/Settings/index.tsx:839
msgid "Opens the storybook page"
-msgstr "打开故事书界面"
+msgstr "开启 Storybook 界面"
-#: src/view/screens/Settings/index.tsx:793
+#: src/view/screens/Settings/index.tsx:817
msgid "Opens the system log page"
-msgstr "打开系统日志界面"
+msgstr "开启系统日志界面"
-#: src/view/screens/Settings/index.tsx:556
+#: src/view/screens/Settings/index.tsx:575
msgid "Opens the threads preferences"
-msgstr "打开讨论串首选项"
+msgstr "开启讨论串首选项"
#: src/view/com/util/forms/DropdownButton.tsx:280
msgid "Option {0} of {numItems}"
msgstr "第 {0} 个选项,共 {numItems} 个"
+#: src/components/ReportDialog/SubmitView.tsx:162
+msgid "Optionally provide additional information below:"
+msgstr "可选在下方提供额外信息:"
+
#: src/view/com/modals/Threadgate.tsx:89
msgid "Or combine these options:"
msgstr "或者选择组合这些选项:"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:138
+#: src/lib/moderation/useReportOptions.ts:25
+msgid "Other"
+msgstr "其他"
+
+#: src/components/AccountList.tsx:73
msgid "Other account"
msgstr "其他账户"
-#: src/view/com/modals/ServerInput.tsx:88
-#~ msgid "Other service"
-#~ msgstr "其他服务"
-
#: src/view/com/composer/select-language/SelectLangBtn.tsx:91
msgid "Other..."
msgstr "其他..."
+#: src/components/Lists.tsx:184
#: src/view/screens/NotFound.tsx:45
msgid "Page not found"
msgstr "无法找到此页面"
@@ -2660,29 +3094,32 @@ msgstr "无法找到此页面"
msgid "Page Not Found"
msgstr "无法找到此页面"
-#: src/view/com/auth/create/Step1.tsx:210
-#: src/view/com/auth/create/Step1.tsx:220
-#: src/view/com/auth/login/LoginForm.tsx:226
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:161
-#: src/view/com/modals/DeleteAccount.tsx:202
+#: src/screens/Login/LoginForm.tsx:178
+#: src/screens/Signup/StepInfo/index.tsx:101
+#: src/view/com/modals/DeleteAccount.tsx:194
+#: src/view/com/modals/DeleteAccount.tsx:201
msgid "Password"
msgstr "密码"
-#: src/view/com/auth/login/Login.tsx:157
+#: src/view/com/modals/ChangePassword.tsx:142
+msgid "Password Changed"
+msgstr "密码已修改"
+
+#: src/screens/Login/index.tsx:157
msgid "Password updated"
msgstr "密码已更新"
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:28
+#: src/screens/Login/PasswordUpdatedForm.tsx:30
msgid "Password updated!"
msgstr "密码已更新!"
-#: src/Navigation.tsx:160
+#: src/Navigation.tsx:164
msgid "People followed by @{0}"
-msgstr "被这些人所关注 @{0}"
+msgstr "@{0} 关注的人"
-#: src/Navigation.tsx:153
+#: src/Navigation.tsx:157
msgid "People following @{0}"
-msgstr "正在关注 @{0}"
+msgstr "关注 @{0} 的人"
#: src/view/com/lightbox/Lightbox.tsx:66
msgid "Permission to access camera roll is required."
@@ -2696,88 +3133,83 @@ msgstr "相机的访问权限已被拒绝,请在系统设置中启用。"
msgid "Pets"
msgstr "宠物"
-#: src/view/com/auth/create/Step2.tsx:183
-msgid "Phone number"
-msgstr "手机号码"
-
#: src/view/com/modals/SelfLabel.tsx:121
msgid "Pictures meant for adults."
msgstr "适合成年人的图像。"
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:292
+#: src/view/screens/ProfileList.tsx:563
msgid "Pin to home"
msgstr "固定到主页"
+#: src/view/screens/ProfileFeed.tsx:295
+msgid "Pin to Home"
+msgstr "固定到主页"
+
#: src/view/screens/SavedFeeds.tsx:88
msgid "Pinned Feeds"
msgstr "固定信息流列表"
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:111
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:123
msgid "Play {0}"
msgstr "播放 {0}"
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:54
-#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:55
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:57
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:58
msgid "Play Video"
msgstr "播放视频"
-#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:110
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:122
msgid "Plays the GIF"
msgstr "播放 GIF"
-#: src/view/com/auth/create/state.ts:177
+#: src/screens/Signup/state.ts:241
msgid "Please choose your handle."
msgstr "请设置你的用户识别符。"
-#: src/view/com/auth/create/state.ts:160
+#: src/screens/Signup/state.ts:234
msgid "Please choose your password."
msgstr "请设置你的密码。"
+#: src/screens/Signup/state.ts:251
+msgid "Please complete the verification captcha."
+msgstr "请完成 Captcha 验证"
+
#: src/view/com/modals/ChangeEmail.tsx:67
msgid "Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed."
-msgstr "更改前请先确认你的电子邮箱。这是添加电子邮箱更新工具的临时要求,此限制将很快被移除。"
+msgstr "更改前请先确认你的电子邮箱。这是新增电子邮箱更新工具的临时要求,此限制将很快被移除。"
-#: src/view/com/modals/AddAppPasswords.tsx:90
+#: src/view/com/modals/AddAppPasswords.tsx:91
msgid "Please enter a name for your app password. All spaces is not allowed."
-msgstr "请输入 App 专用密码的名称,不允许使用空格。"
+msgstr "请输入应用专用密码的名称,不允许使用空格。"
-#: src/view/com/auth/create/Step2.tsx:206
-msgid "Please enter a phone number that can receive SMS text messages."
-msgstr "请输入可以接收短信的手机号码。"
-
-#: src/view/com/modals/AddAppPasswords.tsx:145
+#: src/view/com/modals/AddAppPasswords.tsx:146
msgid "Please enter a unique name for this App Password or use our randomly generated one."
-msgstr "请输入此 App 专用密码的唯一名称,或使用我们提供的随机生成名称。"
-
-#: src/view/com/auth/create/state.ts:170
-msgid "Please enter the code you received by SMS."
-msgstr "请输入你收到的短信验证码。"
+msgstr "请输入此应用专用密码的唯一名称,或使用我们提供的随机生成名称。"
-#: src/view/com/auth/create/Step2.tsx:282
-msgid "Please enter the verification code sent to {phoneNumberFormatted}."
-msgstr "请输入发送到 {phoneNumberFormatted} 的验证码。"
+#: src/components/dialogs/MutedWords.tsx:67
+msgid "Please enter a valid word, tag, or phrase to mute"
+msgstr "请输入一个有效的词、话题标签或短语"
-#: src/view/com/auth/create/state.ts:146
+#: src/screens/Signup/state.ts:220
msgid "Please enter your email."
msgstr "请输入你的电子邮箱。"
-#: src/view/com/modals/DeleteAccount.tsx:191
+#: src/view/com/modals/DeleteAccount.tsx:190
msgid "Please enter your password as well:"
msgstr "请输入你的密码:"
-#: src/view/com/modals/AppealLabel.tsx:72
-#: src/view/com/modals/AppealLabel.tsx:75
-msgid "Please tell us why you think this content warning was incorrectly applied!"
-msgstr "请告诉我们你认为此内容警告被错误设置的原因!"
+#: src/components/moderation/LabelsOnMeDialog.tsx:221
+msgid "Please explain why you think this label was incorrectly applied by {0}"
+msgstr "请解释为什么你认为此标记是由 {0} 错误应用的"
#: src/view/com/modals/VerifyEmail.tsx:101
msgid "Please Verify Your Email"
msgstr "请验证你的电子邮箱"
-#: src/view/com/composer/Composer.tsx:215
+#: src/view/com/composer/Composer.tsx:222
msgid "Please wait for your link card to finish loading"
-msgstr "请等待你的链接卡片加载完成"
+msgstr "请等待你的链接卡片加载完毕"
#: src/screens/Onboarding/index.tsx:37
msgid "Politics"
@@ -2787,35 +3219,49 @@ msgstr "政治"
msgid "Porn"
msgstr "色情内容"
-#: src/view/com/composer/Composer.tsx:350
-#: src/view/com/composer/Composer.tsx:358
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#~ msgid "Pornography"
+#~ msgstr "色情"
+
+#: src/view/com/composer/Composer.tsx:367
+#: src/view/com/composer/Composer.tsx:375
msgctxt "action"
msgid "Post"
msgstr "发布"
-#: src/view/com/post-thread/PostThread.tsx:246
+#: src/view/com/post-thread/PostThread.tsx:292
msgctxt "description"
msgid "Post"
msgstr "发布"
-#: src/view/com/post-thread/PostThreadItem.tsx:174
+#: src/view/com/post-thread/PostThreadItem.tsx:175
msgid "Post by {0}"
-msgstr "发布者 {0}"
+msgstr "{0} 的帖子"
-#: src/Navigation.tsx:172
-#: src/Navigation.tsx:179
-#: src/Navigation.tsx:186
+#: src/Navigation.tsx:176
+#: src/Navigation.tsx:183
+#: src/Navigation.tsx:190
msgid "Post by @{0}"
-msgstr "发布者 @{0}"
+msgstr "@{0} 的帖子"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:84
+#: src/view/com/util/forms/PostDropdownBtn.tsx:105
msgid "Post deleted"
msgstr "已删除帖子"
-#: src/view/com/post-thread/PostThread.tsx:398
+#: src/view/com/post-thread/PostThread.tsx:157
msgid "Post hidden"
msgstr "已隐藏帖子"
+#: src/components/moderation/ModerationDetailsDialog.tsx:97
+#: src/lib/moderation/useModerationCauseDescription.ts:99
+msgid "Post Hidden by Muted Word"
+msgstr "帖子被隐藏词所隐藏"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:100
+#: src/lib/moderation/useModerationCauseDescription.ts:108
+msgid "Post Hidden by You"
+msgstr "帖子由你隐藏"
+
#: src/view/com/composer/select-language/SelectLangBtn.tsx:87
msgid "Post language"
msgstr "帖子语言"
@@ -2824,23 +3270,42 @@ msgstr "帖子语言"
msgid "Post Languages"
msgstr "帖子语言"
-#: src/view/com/post-thread/PostThread.tsx:450
+#: src/view/com/post-thread/PostThread.tsx:152
+#: src/view/com/post-thread/PostThread.tsx:164
msgid "Post not found"
msgstr "无法找到帖子"
-#: src/view/screens/Profile.tsx:180
+#: src/components/TagMenu/index.tsx:253
+msgid "posts"
+msgstr "帖子"
+
+#: src/view/screens/Profile.tsx:190
msgid "Posts"
msgstr "帖子"
+#: src/components/dialogs/MutedWords.tsx:89
+msgid "Posts can be muted based on their text, their tags, or both."
+msgstr "帖子可以根据其文本、话题标签或两者来隐藏。"
+
#: src/view/com/posts/FeedErrorMessage.tsx:64
msgid "Posts hidden"
-msgstr "已隐藏帖子"
+msgstr "帖子已隐藏"
-#: src/view/com/modals/LinkWarning.tsx:46
+#: src/view/com/modals/LinkWarning.tsx:60
msgid "Potentially Misleading Link"
msgstr "潜在误导性链接"
-#: src/view/com/lightbox/Lightbox.web.tsx:135
+#: src/components/forms/HostingProvider.tsx:45
+msgid "Press to change hosting provider"
+msgstr ""
+
+#: src/components/Error.tsx:74
+#: src/components/Lists.tsx:80
+#: src/screens/Signup/index.tsx:186
+msgid "Press to retry"
+msgstr "点按重试"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:150
msgid "Previous image"
msgstr "上一张图片"
@@ -2850,41 +3315,47 @@ msgstr "首选语言"
#: src/view/screens/PreferencesThreads.tsx:97
msgid "Prioritize Your Follows"
-msgstr "关注者优先"
+msgstr "优先显示关注者"
-#: src/view/screens/Settings/index.tsx:632
-#: src/view/shell/desktop/RightNav.tsx:80
+#: src/view/screens/Settings/index.tsx:652
+#: src/view/shell/desktop/RightNav.tsx:72
msgid "Privacy"
msgstr "隐私"
-#: src/Navigation.tsx:217
+#: src/Navigation.tsx:231
+#: src/screens/Signup/StepInfo/Policies.tsx:56
#: src/view/screens/PrivacyPolicy.tsx:29
-#: src/view/screens/Settings/index.tsx:891
-#: src/view/shell/Drawer.tsx:262
+#: src/view/screens/Settings/index.tsx:923
+#: src/view/shell/Drawer.tsx:265
msgid "Privacy Policy"
msgstr "隐私政策"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:198
+#: src/screens/Login/ForgotPasswordForm.tsx:156
msgid "Processing..."
msgstr "处理中..."
-#: src/view/shell/bottom-bar/BottomBar.tsx:247
-#: src/view/shell/desktop/LeftNav.tsx:415
+#: src/view/screens/DebugMod.tsx:888
+#: src/view/screens/Profile.tsx:342
+msgid "profile"
+msgstr "个人资料"
+
+#: src/view/shell/bottom-bar/BottomBar.tsx:260
+#: src/view/shell/desktop/LeftNav.tsx:419
#: src/view/shell/Drawer.tsx:70
-#: src/view/shell/Drawer.tsx:546
-#: src/view/shell/Drawer.tsx:547
+#: src/view/shell/Drawer.tsx:549
+#: src/view/shell/Drawer.tsx:550
msgid "Profile"
-msgstr "资料"
+msgstr "个人资料"
-#: src/view/com/modals/EditProfile.tsx:128
+#: src/view/com/modals/EditProfile.tsx:129
msgid "Profile updated"
-msgstr "资料已更新"
+msgstr "个人资料已更新"
-#: src/view/screens/Settings/index.tsx:949
+#: src/view/screens/Settings/index.tsx:981
msgid "Protect your account by verifying your email."
msgstr "通过验证电子邮箱来保护你的账户。"
-#: src/screens/Onboarding/StepFinished.tsx:101
+#: src/screens/Onboarding/StepFinished.tsx:105
msgid "Public"
msgstr "公开内容"
@@ -2896,15 +3367,15 @@ msgstr "公开且可共享的批量隐藏或屏蔽列表。"
msgid "Public, shareable lists which can drive feeds."
msgstr "公开且可共享的列表,可作为信息流使用。"
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish post"
msgstr "发布帖子"
-#: src/view/com/composer/Composer.tsx:335
+#: src/view/com/composer/Composer.tsx:352
msgid "Publish reply"
msgstr "发布回复"
-#: src/view/com/modals/Repost.tsx:65
+#: src/view/com/modals/Repost.tsx:66
msgctxt "action"
msgid "Quote post"
msgstr "引用帖子"
@@ -2913,19 +3384,23 @@ msgstr "引用帖子"
msgid "Quote post"
msgstr "引用帖子"
-#: src/view/com/modals/Repost.tsx:70
+#: src/view/com/modals/Repost.tsx:71
msgctxt "action"
msgid "Quote Post"
msgstr "引用帖子"
#: src/view/screens/PreferencesThreads.tsx:86
msgid "Random (aka \"Poster's Roulette\")"
-msgstr "以随机顺序显示 (又名试试手气)"
+msgstr "随机显示 (手气不错)"
-#: src/view/com/modals/EditImage.tsx:236
+#: src/view/com/modals/EditImage.tsx:237
msgid "Ratios"
msgstr "比率"
+#: src/view/screens/Search/Search.tsx:777
+msgid "Recent Searches"
+msgstr "最近的搜索"
+
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116
msgid "Recommended Feeds"
msgstr "推荐信息流"
@@ -2934,35 +3409,46 @@ msgstr "推荐信息流"
msgid "Recommended Users"
msgstr "推荐的用户"
-#: src/view/com/modals/ListAddRemoveUsers.tsx:264
+#: src/components/dialogs/MutedWords.tsx:286
+#: src/view/com/feeds/FeedSourceCard.tsx:283
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
#: src/view/com/modals/SelfLabel.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:219
-#: src/view/com/util/UserAvatar.tsx:285
-#: src/view/com/util/UserBanner.tsx:91
+#: src/view/com/posts/FeedErrorMessage.tsx:204
msgid "Remove"
-msgstr "删除"
-
-#: src/view/com/feeds/FeedSourceCard.tsx:106
-msgid "Remove {0} from my feeds?"
-msgstr "将 {0} 从自定义信息流中移除?"
+msgstr "移除"
#: src/view/com/util/AccountDropdownBtn.tsx:22
msgid "Remove account"
-msgstr "删除账号"
+msgstr "删除账户"
-#: src/view/com/posts/FeedErrorMessage.tsx:131
-#: src/view/com/posts/FeedErrorMessage.tsx:166
+#: src/view/com/util/UserAvatar.tsx:358
+msgid "Remove Avatar"
+msgstr "删除头像"
+
+#: src/view/com/util/UserBanner.tsx:148
+msgid "Remove Banner"
+msgstr "删除横幅图片"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:160
msgid "Remove feed"
msgstr "删除信息流"
-#: src/view/com/feeds/FeedSourceCard.tsx:105
-#: src/view/com/feeds/FeedSourceCard.tsx:167
-#: src/view/com/feeds/FeedSourceCard.tsx:172
-#: src/view/com/feeds/FeedSourceCard.tsx:243
-#: src/view/screens/ProfileFeed.tsx:272
+#: src/view/com/posts/FeedErrorMessage.tsx:201
+msgid "Remove feed?"
+msgstr "删除信息流?"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:173
+#: src/view/com/feeds/FeedSourceCard.tsx:233
+#: src/view/screens/ProfileFeed.tsx:335
+#: src/view/screens/ProfileFeed.tsx:341
msgid "Remove from my feeds"
msgstr "从自定义信息流中删除"
+#: src/view/com/feeds/FeedSourceCard.tsx:278
+msgid "Remove from my feeds?"
+msgstr "从自定义信息流中删除?"
+
#: src/view/com/composer/photos/Gallery.tsx:167
msgid "Remove image"
msgstr "删除图片"
@@ -2971,16 +3457,16 @@ msgstr "删除图片"
msgid "Remove image preview"
msgstr "删除图片预览"
-#: src/view/com/modals/Repost.tsx:47
+#: src/components/dialogs/MutedWords.tsx:329
+msgid "Remove mute word from your list"
+msgstr "从你的隐藏词列表中删除"
+
+#: src/view/com/modals/Repost.tsx:48
msgid "Remove repost"
msgstr "删除转发"
-#: src/view/com/feeds/FeedSourceCard.tsx:173
-msgid "Remove this feed from my feeds?"
-msgstr "将这个信息流从自定义信息流列表中删除?"
-
-#: src/view/com/posts/FeedErrorMessage.tsx:132
-msgid "Remove this feed from your saved feeds?"
+#: src/view/com/posts/FeedErrorMessage.tsx:202
+msgid "Remove this feed from your saved feeds"
msgstr "将这个信息流从保存的信息流列表中删除?"
#: src/view/com/modals/ListAddRemoveUsers.tsx:199
@@ -2988,16 +3474,19 @@ msgstr "将这个信息流从保存的信息流列表中删除?"
msgid "Removed from list"
msgstr "从列表中删除"
-#: src/view/com/feeds/FeedSourceCard.tsx:111
-#: src/view/com/feeds/FeedSourceCard.tsx:178
+#: src/view/com/feeds/FeedSourceCard.tsx:121
msgid "Removed from my feeds"
msgstr "从自定义信息流中删除"
+#: src/view/screens/ProfileFeed.tsx:209
+msgid "Removed from your feeds"
+msgstr "从你的自定义信息流中删除"
+
#: src/view/com/composer/ExternalEmbed.tsx:71
msgid "Removes default thumbnail from {0}"
msgstr "从 {0} 中删除默认缩略图"
-#: src/view/screens/Profile.tsx:181
+#: src/view/screens/Profile.tsx:191
msgid "Replies"
msgstr "回复"
@@ -3005,45 +3494,67 @@ msgstr "回复"
msgid "Replies to this thread are disabled"
msgstr "对此讨论串的回复已被禁用"
-#: src/view/com/composer/Composer.tsx:348
+#: src/view/com/composer/Composer.tsx:365
msgctxt "action"
msgid "Reply"
msgstr "回复"
-#: src/view/screens/PreferencesHomeFeed.tsx:144
+#: src/view/screens/PreferencesFollowingFeed.tsx:144
msgid "Reply Filters"
msgstr "回复过滤器"
#: src/view/com/post/Post.tsx:166
-#: src/view/com/posts/FeedItem.tsx:287
+#: src/view/com/posts/FeedItem.tsx:280
msgctxt "description"
msgid "Reply to <0/>"
msgstr "回复 <0/>"
-#: src/view/com/modals/report/Modal.tsx:166
-msgid "Report {collectionName}"
-msgstr "举报 {collectionName}"
-
-#: src/view/com/profile/ProfileHeader.tsx:360
+#: src/view/com/profile/ProfileMenu.tsx:319
+#: src/view/com/profile/ProfileMenu.tsx:322
msgid "Report Account"
msgstr "举报账户"
-#: src/view/screens/ProfileFeed.tsx:292
+#: src/components/ReportDialog/index.tsx:49
+msgid "Report dialog"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:352
+#: src/view/screens/ProfileFeed.tsx:354
msgid "Report feed"
msgstr "举报信息流"
-#: src/view/screens/ProfileList.tsx:458
+#: src/view/screens/ProfileList.tsx:429
msgid "Report List"
msgstr "举报列表"
-#: src/view/com/modals/report/SendReportButton.tsx:37
-#: src/view/com/util/forms/PostDropdownBtn.tsx:210
+#: src/view/com/util/forms/PostDropdownBtn.tsx:292
+#: src/view/com/util/forms/PostDropdownBtn.tsx:294
msgid "Report post"
msgstr "举报帖子"
-#: src/view/com/modals/Repost.tsx:43
-#: src/view/com/modals/Repost.tsx:48
-#: src/view/com/modals/Repost.tsx:53
+#: src/components/ReportDialog/SelectReportOptionView.tsx:42
+msgid "Report this content"
+msgstr "举报此内容"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:55
+msgid "Report this feed"
+msgstr "举报此信息流"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:52
+msgid "Report this list"
+msgstr "举报此列表"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:49
+msgid "Report this post"
+msgstr "举报此帖子"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:46
+msgid "Report this user"
+msgstr "举报此用户"
+
+#: src/view/com/modals/Repost.tsx:44
+#: src/view/com/modals/Repost.tsx:49
+#: src/view/com/modals/Repost.tsx:54
#: src/view/com/util/post-ctrls/RepostButton.tsx:61
msgctxt "action"
msgid "Repost"
@@ -3062,15 +3573,15 @@ msgstr "转发或引用帖子"
msgid "Reposted By"
msgstr "转发"
-#: src/view/com/posts/FeedItem.tsx:207
+#: src/view/com/posts/FeedItem.tsx:197
msgid "Reposted by {0}"
msgstr "由 {0} 转发"
-#: src/view/com/posts/FeedItem.tsx:224
+#: src/view/com/posts/FeedItem.tsx:214
msgid "Reposted by <0/>"
msgstr "由 <0/> 转发"
-#: src/view/com/notifications/FeedItem.tsx:162
+#: src/view/com/notifications/FeedItem.tsx:166
msgid "reposted your post"
msgstr "转发你的帖子"
@@ -3083,61 +3594,50 @@ msgstr "转发这条帖子"
msgid "Request Change"
msgstr "请求变更"
-#: src/view/com/auth/create/Step2.tsx:219
-msgid "Request code"
-msgstr "请求码"
-
-#: src/view/com/modals/ChangePassword.tsx:239
#: src/view/com/modals/ChangePassword.tsx:241
+#: src/view/com/modals/ChangePassword.tsx:243
msgid "Request Code"
msgstr "确认码"
-#: src/view/screens/Settings/index.tsx:456
+#: src/view/screens/Settings/index.tsx:475
msgid "Require alt text before posting"
-msgstr "要求发布前提供替代文本"
+msgstr "发布时检查媒体是否存在替代文本"
-#: src/view/com/auth/create/Step1.tsx:149
+#: src/screens/Signup/StepInfo/index.tsx:69
msgid "Required for this provider"
-msgstr "应提供商要求"
+msgstr "服务提供者要求"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:124
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:136
+#: src/view/com/modals/ChangePassword.tsx:185
msgid "Reset code"
-msgstr "重置码"
+msgstr "确认码"
-#: src/view/com/modals/ChangePassword.tsx:190
+#: src/view/com/modals/ChangePassword.tsx:192
msgid "Reset Code"
-msgstr "重置代码"
-
-#: src/view/screens/Settings/index.tsx:824
-msgid "Reset onboarding"
-msgstr "重置引导流程"
+msgstr "确认码"
-#: src/view/screens/Settings/index.tsx:827
+#: src/view/screens/Settings/index.tsx:858
+#: src/view/screens/Settings/index.tsx:861
msgid "Reset onboarding state"
msgstr "重置引导流程状态"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:104
+#: src/screens/Login/ForgotPasswordForm.tsx:86
msgid "Reset password"
msgstr "重置密码"
-#: src/view/screens/Settings/index.tsx:814
-msgid "Reset preferences"
-msgstr "重置首选项"
-
-#: src/view/screens/Settings/index.tsx:817
+#: src/view/screens/Settings/index.tsx:848
+#: src/view/screens/Settings/index.tsx:851
msgid "Reset preferences state"
msgstr "重置首选项状态"
-#: src/view/screens/Settings/index.tsx:825
+#: src/view/screens/Settings/index.tsx:859
msgid "Resets the onboarding state"
msgstr "重置引导流程状态"
-#: src/view/screens/Settings/index.tsx:815
+#: src/view/screens/Settings/index.tsx:849
msgid "Resets the preferences state"
msgstr "重置首选项状态"
-#: src/view/com/auth/login/LoginForm.tsx:269
+#: src/screens/Login/LoginForm.tsx:235
msgid "Retries login"
msgstr "重试登录"
@@ -3146,105 +3646,134 @@ msgstr "重试登录"
msgid "Retries the last action, which errored out"
msgstr "重试上次出错的操作"
-#: src/screens/Onboarding/StepInterests/index.tsx:221
-#: src/screens/Onboarding/StepInterests/index.tsx:224
-#: src/view/com/auth/create/CreateAccount.tsx:170
-#: src/view/com/auth/create/CreateAccount.tsx:175
-#: src/view/com/auth/create/Step2.tsx:255
-#: src/view/com/auth/login/LoginForm.tsx:268
-#: src/view/com/auth/login/LoginForm.tsx:271
+#: src/components/Error.tsx:79
+#: src/components/Lists.tsx:91
+#: src/screens/Login/LoginForm.tsx:234
+#: src/screens/Login/LoginForm.tsx:241
+#: src/screens/Onboarding/StepInterests/index.tsx:225
+#: src/screens/Onboarding/StepInterests/index.tsx:228
+#: src/screens/Signup/index.tsx:193
#: src/view/com/util/error/ErrorMessage.tsx:55
#: src/view/com/util/error/ErrorScreen.tsx:72
msgid "Retry"
msgstr "重试"
-#: src/view/com/auth/create/Step2.tsx:247
-msgid "Retry."
-msgstr "重试。"
-
-#: src/view/screens/ProfileList.tsx:898
+#: src/components/Error.tsx:86
+#: src/view/screens/ProfileList.tsx:917
msgid "Return to previous page"
msgstr "回到上一页"
-#: src/view/shell/desktop/RightNav.tsx:55
-msgid "SANDBOX. Posts and accounts are not permanent."
-msgstr "沙盒模式。帖子和账户不会永久保存。"
+#: src/view/screens/NotFound.tsx:59
+msgid "Returns to home page"
+msgstr "回到主页"
-#: src/view/com/lightbox/Lightbox.tsx:132
-#: src/view/com/modals/CreateOrEditList.tsx:345
-msgctxt "action"
+#: src/view/screens/NotFound.tsx:58
+#: src/view/screens/ProfileFeed.tsx:113
+msgid "Returns to previous page"
+msgstr "回到上一页"
+
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/view/com/modals/ChangeHandle.tsx:174
+#: src/view/com/modals/CreateOrEditList.tsx:338
+#: src/view/com/modals/EditProfile.tsx:225
msgid "Save"
msgstr "保存"
-#: src/view/com/modals/BirthDateSettings.tsx:94
-#: src/view/com/modals/BirthDateSettings.tsx:97
-#: src/view/com/modals/ChangeHandle.tsx:173
-#: src/view/com/modals/CreateOrEditList.tsx:337
-#: src/view/com/modals/EditProfile.tsx:224
-#: src/view/screens/ProfileFeed.tsx:345
+#: src/view/com/lightbox/Lightbox.tsx:132
+#: src/view/com/modals/CreateOrEditList.tsx:346
+msgctxt "action"
msgid "Save"
msgstr "保存"
-#: src/view/com/modals/AltImage.tsx:130
+#: src/view/com/modals/AltImage.tsx:131
msgid "Save alt text"
msgstr "保存替代文字"
-#: src/view/com/modals/EditProfile.tsx:232
+#: src/components/dialogs/BirthDateSettings.tsx:119
+msgid "Save birthday"
+msgstr "保存生日"
+
+#: src/view/com/modals/EditProfile.tsx:233
msgid "Save Changes"
msgstr "保存更改"
-#: src/view/com/modals/ChangeHandle.tsx:170
+#: src/view/com/modals/ChangeHandle.tsx:171
msgid "Save handle change"
-msgstr "保存新的用户识别符"
+msgstr "保存用户识别符更改"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:144
+#: src/view/com/modals/crop-image/CropImage.web.tsx:145
msgid "Save image crop"
msgstr "保存图片裁切"
+#: src/view/screens/ProfileFeed.tsx:336
+#: src/view/screens/ProfileFeed.tsx:342
+msgid "Save to my feeds"
+msgstr "保存到自定义信息流"
+
#: src/view/screens/SavedFeeds.tsx:122
msgid "Saved Feeds"
msgstr "已保存信息流"
-#: src/view/com/modals/EditProfile.tsx:225
+#: src/view/com/lightbox/Lightbox.tsx:81
+msgid "Saved to your camera roll."
+msgstr "已保存到相机胶卷"
+
+#: src/view/screens/ProfileFeed.tsx:213
+msgid "Saved to your feeds"
+msgstr "已保存到你的自定义信息流"
+
+#: src/view/com/modals/EditProfile.tsx:226
msgid "Saves any changes to your profile"
msgstr "保存个人资料中所做的变更"
-#: src/view/com/modals/ChangeHandle.tsx:171
+#: src/view/com/modals/ChangeHandle.tsx:172
msgid "Saves handle change to {handle}"
msgstr "保存用户识别符更改至 {handle}"
+#: src/view/com/modals/crop-image/CropImage.web.tsx:146
+msgid "Saves image crop settings"
+msgstr "保存图片裁剪设置"
+
#: src/screens/Onboarding/index.tsx:36
msgid "Science"
msgstr "科学"
-#: src/view/screens/ProfileList.tsx:854
+#: src/view/screens/ProfileList.tsx:873
msgid "Scroll to top"
msgstr "滚动到顶部"
-#: src/Navigation.tsx:437
-#: src/view/com/auth/LoggedOut.tsx:122
+#: src/Navigation.tsx:459
+#: src/view/com/auth/LoggedOut.tsx:123
#: src/view/com/modals/ListAddRemoveUsers.tsx:75
#: src/view/com/util/forms/SearchInput.tsx:67
#: src/view/com/util/forms/SearchInput.tsx:79
-#: src/view/screens/Search/Search.tsx:418
-#: src/view/screens/Search/Search.tsx:645
-#: src/view/screens/Search/Search.tsx:663
-#: src/view/shell/bottom-bar/BottomBar.tsx:159
-#: src/view/shell/desktop/LeftNav.tsx:324
-#: src/view/shell/desktop/Search.tsx:214
-#: src/view/shell/desktop/Search.tsx:223
-#: src/view/shell/Drawer.tsx:362
-#: src/view/shell/Drawer.tsx:363
+#: src/view/screens/Search/Search.tsx:421
+#: src/view/screens/Search/Search.tsx:670
+#: src/view/screens/Search/Search.tsx:688
+#: src/view/shell/bottom-bar/BottomBar.tsx:169
+#: src/view/shell/desktop/LeftNav.tsx:328
+#: src/view/shell/desktop/Search.tsx:215
+#: src/view/shell/desktop/Search.tsx:224
+#: src/view/shell/Drawer.tsx:365
+#: src/view/shell/Drawer.tsx:366
msgid "Search"
msgstr "搜索"
-#: src/view/screens/Search/Search.tsx:712
-#: src/view/shell/desktop/Search.tsx:255
+#: src/view/screens/Search/Search.tsx:737
+#: src/view/shell/desktop/Search.tsx:256
msgid "Search for \"{query}\""
msgstr "搜索 \"{query}\""
-#: src/view/com/auth/LoggedOut.tsx:104
+#: src/components/TagMenu/index.tsx:145
+msgid "Search for all posts by @{authorHandle} with tag {displayTag}"
+msgstr "搜索 @{authorHandle} 带有 {displayTag} 的所有帖子"
+
+#: src/components/TagMenu/index.tsx:94
+msgid "Search for all posts with tag {displayTag}"
+msgstr "搜索所有带有 {displayTag} 的帖子"
+
#: src/view/com/auth/LoggedOut.tsx:105
+#: src/view/com/auth/LoggedOut.tsx:106
#: src/view/com/modals/ListAddRemoveUsers.tsx:70
msgid "Search for users"
msgstr "搜索用户"
@@ -3253,11 +3782,27 @@ msgstr "搜索用户"
msgid "Security Step Required"
msgstr "所需的安全步骤"
+#: src/components/TagMenu/index.web.tsx:66
+msgid "See {truncatedTag} posts"
+msgstr "查看 {truncatedTag} 的帖子"
+
+#: src/components/TagMenu/index.web.tsx:83
+msgid "See {truncatedTag} posts by user"
+msgstr "按用户查看 {truncatedTag} 的帖子"
+
+#: src/components/TagMenu/index.tsx:128
+msgid "See <0>{displayTag}0> posts"
+msgstr "查看 <0>{displayTag}0> 的帖子"
+
+#: src/components/TagMenu/index.tsx:187
+msgid "See <0>{displayTag}0> posts by this user"
+msgstr "查看该用户 <0>{displayTag}0> 的帖子"
+
#: src/view/screens/SavedFeeds.tsx:163
msgid "See this guide"
msgstr "查看指南"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:39
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:40
msgid "See what's next"
msgstr "查看下一步"
@@ -3265,36 +3810,48 @@ msgstr "查看下一步"
msgid "Select {item}"
msgstr "选择 {item}"
-#: src/view/com/modals/ServerInput.tsx:75
-#~ msgid "Select Bluesky Social"
-#~ msgstr "选择 Bluesky Social"
+#: src/screens/Login/ChooseAccountForm.tsx:61
+msgid "Select account"
+msgstr ""
-#: src/view/com/auth/login/Login.tsx:117
+#: src/screens/Login/index.tsx:120
msgid "Select from an existing account"
-msgstr "选择已存在的账户"
+msgstr "从现有账户中选择"
+
+#: src/view/screens/LanguageSettings.tsx:299
+msgid "Select languages"
+msgstr "选择语言"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:30
+msgid "Select moderator"
+msgstr "选择限制者"
#: src/view/com/util/Selector.tsx:107
msgid "Select option {i} of {numItems}"
-msgstr "从 {i} 项中选择 {numItems} 项"
+msgstr "选择 {numItems} 项中的第 {i} 项"
-#: src/view/com/auth/create/Step1.tsx:99
-#: src/view/com/auth/login/LoginForm.tsx:150
-msgid "Select service"
-msgstr "选择服务"
+#: src/view/com/auth/create/Step1.tsx:96
+#: src/view/com/auth/login/LoginForm.tsx:153
+#~ msgid "Select service"
+#~ msgstr "选择服务"
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:52
msgid "Select some accounts below to follow"
msgstr "选择以下一些账户进行关注"
+#: src/components/ReportDialog/SubmitView.tsx:135
+msgid "Select the moderation service(s) to report to"
+msgstr "你要将该条举报提交给哪位限制服务提供者?"
+
#: src/view/com/auth/server-input/index.tsx:82
msgid "Select the service that hosts your data."
-msgstr ""
+msgstr "选择托管你数据的服务器。"
-#: src/screens/Onboarding/StepTopicalFeeds.tsx:90
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:100
msgid "Select topical feeds to follow from the list below"
msgstr "从下面的列表中选择要关注的专题信息流"
-#: src/screens/Onboarding/StepModeration/index.tsx:75
+#: src/screens/Onboarding/StepModeration/index.tsx:63
msgid "Select what you want to see (or not see), and we’ll handle the rest."
msgstr "选择你想看到(或不想看到)的内容,剩下的由我们来处理。"
@@ -3303,26 +3860,26 @@ msgid "Select which languages you want your subscribed feeds to include. If none
msgstr "选择你希望订阅信息流中所包含的语言。如果未选择任何语言,将默认显示所有语言。"
#: src/view/screens/LanguageSettings.tsx:98
-msgid "Select your app language for the default text to display in the app"
-msgstr "选择应用中显示默认文本的语言"
+msgid "Select your app language for the default text to display in the app."
+msgstr "选择你的应用语言,以显示应用中的默认文本。"
-#: src/screens/Onboarding/StepInterests/index.tsx:196
+#: src/screens/Signup/StepInfo/index.tsx:133
+msgid "Select your date of birth"
+msgstr ""
+
+#: src/screens/Onboarding/StepInterests/index.tsx:200
msgid "Select your interests from the options below"
msgstr "下面选择你感兴趣的选项"
-#: src/view/com/auth/create/Step2.tsx:155
-msgid "Select your phone's country"
-msgstr "选择你的电话区号"
-
#: src/view/screens/LanguageSettings.tsx:190
msgid "Select your preferred language for translations in your feed."
msgstr "选择你在订阅信息流中希望进行翻译的目标首选语言。"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:116
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:117
msgid "Select your primary algorithmic feeds"
msgstr "选择你的信息流主要算法"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:142
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:133
msgid "Select your secondary algorithmic feeds"
msgstr "选择你的信息流次要算法"
@@ -3331,79 +3888,58 @@ msgstr "选择你的信息流次要算法"
msgid "Send Confirmation Email"
msgstr "发送确认电子邮件"
-#: src/view/com/modals/DeleteAccount.tsx:131
+#: src/view/com/modals/DeleteAccount.tsx:130
msgid "Send email"
msgstr "发送电子邮件"
-#: src/view/com/modals/DeleteAccount.tsx:144
+#: src/view/com/modals/DeleteAccount.tsx:143
msgctxt "action"
msgid "Send Email"
msgstr "发送电子邮件"
-#: src/view/shell/Drawer.tsx:295
-#: src/view/shell/Drawer.tsx:316
+#: src/view/shell/Drawer.tsx:298
+#: src/view/shell/Drawer.tsx:319
msgid "Send feedback"
msgstr "提交反馈"
-#: src/view/com/modals/report/SendReportButton.tsx:45
-msgid "Send Report"
+#: src/components/ReportDialog/SubmitView.tsx:214
+#: src/components/ReportDialog/SubmitView.tsx:218
+msgid "Send report"
msgstr "提交举报"
-#: src/view/com/modals/DeleteAccount.tsx:133
+#: src/components/ReportDialog/SelectLabelerView.tsx:44
+msgid "Send report to {0}"
+msgstr "给 {0} 提交举报"
+
+#: src/view/com/modals/DeleteAccount.tsx:132
msgid "Sends email with confirmation code for account deletion"
-msgstr "发送包含账户删除确认码的电子邮件"
+msgstr "发送包含账户删除验证码的电子邮件"
-#: src/view/com/auth/server-input/index.tsx:110
+#: src/view/com/auth/server-input/index.tsx:114
msgid "Server address"
-msgstr ""
-
-#: src/view/com/modals/ContentFilteringSettings.tsx:311
-msgid "Set {value} for {labelGroup} content moderation policy"
-msgstr "为 {labelGroup} 内容审核政策设置 {value}"
-
-#: src/view/com/modals/ContentFilteringSettings.tsx:160
-#: src/view/com/modals/ContentFilteringSettings.tsx:179
-msgctxt "action"
-msgid "Set Age"
-msgstr "设置年龄"
+msgstr "服务器地址"
-#: src/view/screens/Settings/index.tsx:488
-msgid "Set color theme to dark"
-msgstr "设置主题为深色模式"
-
-#: src/view/screens/Settings/index.tsx:481
-msgid "Set color theme to light"
-msgstr "设置主题为亮色模式"
-
-#: src/view/screens/Settings/index.tsx:475
-msgid "Set color theme to system setting"
-msgstr "设置主题跟随系统设置"
-
-#: src/view/screens/Settings/index.tsx:514
-msgid "Set dark theme to the dark theme"
-msgstr "设置深色模式至深黑"
+#: src/screens/Moderation/index.tsx:304
+msgid "Set birthdate"
+msgstr "设置生日"
-#: src/view/screens/Settings/index.tsx:507
-msgid "Set dark theme to the dim theme"
-msgstr "设置深色模式至暗淡"
-
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:104
+#: src/screens/Login/SetNewPasswordForm.tsx:102
msgid "Set new password"
msgstr "设置新密码"
-#: src/view/com/auth/create/Step1.tsx:221
-msgid "Set password"
-msgstr "设置密码"
+#: src/view/com/auth/create/Step1.tsx:202
+#~ msgid "Set password"
+#~ msgstr "设置密码"
-#: src/view/screens/PreferencesHomeFeed.tsx:225
+#: src/view/screens/PreferencesFollowingFeed.tsx:225
msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible."
msgstr "停用此设置项以隐藏来自订阅信息流的所有引用帖子,转发仍将可见。"
-#: src/view/screens/PreferencesHomeFeed.tsx:122
+#: src/view/screens/PreferencesFollowingFeed.tsx:122
msgid "Set this setting to \"No\" to hide all replies from your feed."
msgstr "停用此设置项以隐藏来自订阅信息流的所有回复。"
-#: src/view/screens/PreferencesHomeFeed.tsx:191
+#: src/view/screens/PreferencesFollowingFeed.tsx:191
msgid "Set this setting to \"No\" to hide all reposts from your feed."
msgstr "停用此设置项以隐藏来自订阅信息流的所有转发。"
@@ -3411,36 +3947,68 @@ msgstr "停用此设置项以隐藏来自订阅信息流的所有转发。"
msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature."
msgstr "启用此设置项以在分层视图中显示回复。这是一个实验性功能。"
-#: src/view/screens/PreferencesHomeFeed.tsx:261
-msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
+#: src/view/screens/PreferencesFollowingFeed.tsx:261
+msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your Following feed. This is an experimental feature."
msgstr "启用此设置项以在关注信息流中显示已保存信息流的样例。这是一个实验性功能。"
-#: src/screens/Onboarding/Layout.tsx:50
+#: src/screens/Onboarding/Layout.tsx:48
msgid "Set up your account"
msgstr "设置你的账户"
-#: src/view/com/modals/ChangeHandle.tsx:266
+#: src/view/com/modals/ChangeHandle.tsx:267
msgid "Sets Bluesky username"
msgstr "设置 Bluesky 用户名"
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:157
+#: src/view/screens/Settings/index.tsx:507
+msgid "Sets color theme to dark"
+msgstr "设置主题为深色模式"
+
+#: src/view/screens/Settings/index.tsx:500
+msgid "Sets color theme to light"
+msgstr "设置主题为亮色模式"
+
+#: src/view/screens/Settings/index.tsx:494
+msgid "Sets color theme to system setting"
+msgstr "设置主题跟随系统设置"
+
+#: src/view/screens/Settings/index.tsx:533
+msgid "Sets dark theme to the dark theme"
+msgstr "设置深色模式至深黑"
+
+#: src/view/screens/Settings/index.tsx:526
+msgid "Sets dark theme to the dim theme"
+msgstr "设置深色模式至暗淡"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:113
msgid "Sets email for password reset"
msgstr "设置用于重置密码的电子邮箱"
#: src/view/com/auth/login/ForgotPasswordForm.tsx:122
-msgid "Sets hosting provider for password reset"
-msgstr "设置用于密码重置的托管提供商信息"
-
-#: src/view/com/auth/create/Step1.tsx:100
-#: src/view/com/auth/login/LoginForm.tsx:151
-msgid "Sets server for the Bluesky client"
-msgstr "设置 Bluesky 客户端的服务器"
-
-#: src/Navigation.tsx:135
-#: src/view/screens/Settings/index.tsx:294
-#: src/view/shell/desktop/LeftNav.tsx:433
-#: src/view/shell/Drawer.tsx:567
-#: src/view/shell/Drawer.tsx:568
+#~ msgid "Sets hosting provider for password reset"
+#~ msgstr "设置用于密码重置的托管提供商信息"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:124
+msgid "Sets image aspect ratio to square"
+msgstr "将图片纵横比设置为正方形"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:114
+msgid "Sets image aspect ratio to tall"
+msgstr "将图片纵横比设置为高"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:104
+msgid "Sets image aspect ratio to wide"
+msgstr "将图片纵横比设置为宽"
+
+#: src/view/com/auth/create/Step1.tsx:97
+#: src/view/com/auth/login/LoginForm.tsx:154
+#~ msgid "Sets server for the Bluesky client"
+#~ msgstr "设置 Bluesky 客户端的服务器"
+
+#: src/Navigation.tsx:139
+#: src/view/screens/Settings/index.tsx:313
+#: src/view/shell/desktop/LeftNav.tsx:437
+#: src/view/shell/Drawer.tsx:570
+#: src/view/shell/Drawer.tsx:571
msgid "Settings"
msgstr "设置"
@@ -3448,72 +4016,105 @@ msgstr "设置"
msgid "Sexual activity or erotic nudity."
msgstr "性行为或性暗示裸露。"
+#: src/lib/moderation/useGlobalLabelStrings.ts:38
+msgid "Sexually Suggestive"
+msgstr "性暗示"
+
#: src/view/com/lightbox/Lightbox.tsx:141
msgctxt "action"
msgid "Share"
msgstr "分享"
-#: src/view/com/profile/ProfileHeader.tsx:294
-#: src/view/com/util/forms/PostDropdownBtn.tsx:153
-#: src/view/screens/ProfileList.tsx:417
+#: src/view/com/profile/ProfileMenu.tsx:215
+#: src/view/com/profile/ProfileMenu.tsx:224
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:235
+#: src/view/screens/ProfileList.tsx:388
msgid "Share"
msgstr "分享"
-#: src/view/screens/ProfileFeed.tsx:304
+#: src/view/com/profile/ProfileMenu.tsx:373
+#: src/view/com/util/forms/PostDropdownBtn.tsx:347
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:251
+msgid "Share anyway"
+msgstr "仍然分享"
+
+#: src/view/screens/ProfileFeed.tsx:362
+#: src/view/screens/ProfileFeed.tsx:364
msgid "Share feed"
msgstr "分享信息流"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:43
-#: src/view/com/modals/ContentFilteringSettings.tsx:266
-#: src/view/com/util/moderation/ContentHider.tsx:107
-#: src/view/com/util/moderation/PostHider.tsx:108
-#: src/view/screens/Settings/index.tsx:344
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
+msgid "Share Link"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:92
+msgid "Shares the linked website"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:136
+#: src/components/moderation/PostHider.tsx:107
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:54
+#: src/view/screens/Settings/index.tsx:363
msgid "Show"
msgstr "显示"
-#: src/view/screens/PreferencesHomeFeed.tsx:68
+#: src/view/screens/PreferencesFollowingFeed.tsx:68
msgid "Show all replies"
msgstr "显示所有回复"
-#: src/view/com/util/moderation/ScreenHider.tsx:132
+#: src/components/moderation/ScreenHider.tsx:169
+#: src/components/moderation/ScreenHider.tsx:172
msgid "Show anyway"
msgstr "仍然显示"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:27
+#: src/lib/moderation/useLabelBehaviorDescription.ts:63
+msgid "Show badge"
+msgstr "显示徽章"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:61
+msgid "Show badge and filter from feeds"
+msgstr "显示徽章并从信息流中过滤"
+
#: src/view/com/modals/EmbedConsent.tsx:87
-msgid "Show embeds from {0}"
-msgstr "显示来自 {0} 的嵌入内容"
+#~ msgid "Show embeds from {0}"
+#~ msgstr "显示来自 {0} 的嵌入内容"
-#: src/view/com/profile/ProfileHeader.tsx:458
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:200
msgid "Show follows similar to {0}"
msgstr "显示类似于 {0} 的关注者"
-#: src/view/com/post-thread/PostThreadItem.tsx:539
-#: src/view/com/post/Post.tsx:197
-#: src/view/com/posts/FeedItem.tsx:363
+#: src/view/com/post-thread/PostThreadItem.tsx:507
+#: src/view/com/post/Post.tsx:201
+#: src/view/com/posts/FeedItem.tsx:355
msgid "Show More"
msgstr "显示更多"
-#: src/view/screens/PreferencesHomeFeed.tsx:258
+#: src/view/screens/PreferencesFollowingFeed.tsx:258
msgid "Show Posts from My Feeds"
msgstr "在自定义信息流中显示帖子"
-#: src/view/screens/PreferencesHomeFeed.tsx:222
+#: src/view/screens/PreferencesFollowingFeed.tsx:222
msgid "Show Quote Posts"
msgstr "显示引用帖子"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:118
+#: src/screens/Onboarding/StepFollowingFeed.tsx:119
msgid "Show quote-posts in Following feed"
msgstr "在关注信息流中显示引用"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:134
+#: src/screens/Onboarding/StepFollowingFeed.tsx:135
msgid "Show quotes in Following"
msgstr "在关注中显示引用"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:94
+#: src/screens/Onboarding/StepFollowingFeed.tsx:95
msgid "Show re-posts in Following feed"
msgstr "在关注信息流中显示转发"
-#: src/view/screens/PreferencesHomeFeed.tsx:119
+#: src/view/screens/PreferencesFollowingFeed.tsx:119
msgid "Show Replies"
msgstr "显示回复"
@@ -3521,87 +4122,94 @@ msgstr "显示回复"
msgid "Show replies by people you follow before all other replies."
msgstr "在所有其他回复之前显示你关注的人的回复。"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:86
+#: src/screens/Onboarding/StepFollowingFeed.tsx:87
msgid "Show replies in Following"
msgstr "在关注中显示回复"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:70
+#: src/screens/Onboarding/StepFollowingFeed.tsx:71
msgid "Show replies in Following feed"
msgstr "在关注信息流中显示回复"
-#: src/view/screens/PreferencesHomeFeed.tsx:70
+#: src/view/screens/PreferencesFollowingFeed.tsx:70
msgid "Show replies with at least {value} {0}"
-msgstr "显示至少包含 {value} {0} 的回复"
+msgstr "显示至少包含 {value} 个 {0} 的回复"
-#: src/view/screens/PreferencesHomeFeed.tsx:188
+#: src/view/screens/PreferencesFollowingFeed.tsx:188
msgid "Show Reposts"
msgstr "显示转发"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:110
+#: src/screens/Onboarding/StepFollowingFeed.tsx:111
msgid "Show reposts in Following"
msgstr "在关注中显示转发"
-#: src/view/com/util/moderation/ContentHider.tsx:67
-#: src/view/com/util/moderation/PostHider.tsx:61
+#: src/components/moderation/ContentHider.tsx:68
+#: src/components/moderation/PostHider.tsx:64
msgid "Show the content"
msgstr "显示内容"
-#: src/view/com/notifications/FeedItem.tsx:346
+#: src/view/com/notifications/FeedItem.tsx:351
msgid "Show users"
msgstr "显示用户"
-#: src/view/com/profile/ProfileHeader.tsx:461
-msgid "Shows a list of users similar to this user."
-msgstr "显示与该用户相似的用户列表。"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:58
+msgid "Show warning"
+msgstr "显示警告"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:56
+msgid "Show warning and filter from feeds"
+msgstr "显示警告并从信息流中过滤"
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:124
-#: src/view/com/profile/ProfileHeader.tsx:505
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:130
msgid "Shows posts from {0} in your feed"
msgstr "在你的信息流中显示来自 {0} 的帖子"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:70
-#: src/view/com/auth/login/Login.tsx:98
-#: src/view/com/auth/SplashScreen.tsx:54
-#: src/view/shell/bottom-bar/BottomBar.tsx:285
-#: src/view/shell/bottom-bar/BottomBar.tsx:286
-#: src/view/shell/bottom-bar/BottomBar.tsx:288
+#: src/screens/Login/index.tsx:100
+#: src/screens/Login/index.tsx:119
+#: src/screens/Login/LoginForm.tsx:131
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:73
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:83
+#: src/view/com/auth/SplashScreen.tsx:81
+#: src/view/com/auth/SplashScreen.tsx:90
+#: src/view/com/auth/SplashScreen.web.tsx:110
+#: src/view/com/auth/SplashScreen.web.tsx:119
+#: src/view/shell/bottom-bar/BottomBar.tsx:300
+#: src/view/shell/bottom-bar/BottomBar.tsx:301
+#: src/view/shell/bottom-bar/BottomBar.tsx:303
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:178
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:179
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:181
#: src/view/shell/NavSignupCard.tsx:58
#: src/view/shell/NavSignupCard.tsx:59
+#: src/view/shell/NavSignupCard.tsx:61
msgid "Sign in"
msgstr "登录"
-#: src/view/com/auth/HomeLoggedOutCTA.tsx:78
-#: src/view/com/auth/SplashScreen.tsx:57
-#: src/view/com/auth/SplashScreen.web.tsx:87
-msgid "Sign In"
-msgstr "登录"
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:82
+#: src/view/com/auth/SplashScreen.tsx:86
+#: src/view/com/auth/SplashScreen.web.tsx:91
+#~ msgid "Sign In"
+#~ msgstr "登录"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:44
+#: src/components/AccountList.tsx:109
msgid "Sign in as {0}"
msgstr "以 {0} 登录"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:118
-#: src/view/com/auth/login/Login.tsx:116
+#: src/screens/Login/ChooseAccountForm.tsx:64
msgid "Sign in as..."
msgstr "登录为..."
-#: src/view/com/auth/login/LoginForm.tsx:137
-msgid "Sign into"
-msgstr "登录到"
+#: src/view/com/auth/login/LoginForm.tsx:140
+#~ msgid "Sign into"
+#~ msgstr "登录到"
-#: src/view/com/modals/SwitchAccount.tsx:64
-#: src/view/com/modals/SwitchAccount.tsx:69
-#: src/view/screens/Settings/index.tsx:100
-#: src/view/screens/Settings/index.tsx:103
+#: src/view/screens/Settings/index.tsx:107
+#: src/view/screens/Settings/index.tsx:110
msgid "Sign out"
msgstr "登出"
-#: src/view/shell/bottom-bar/BottomBar.tsx:275
-#: src/view/shell/bottom-bar/BottomBar.tsx:276
-#: src/view/shell/bottom-bar/BottomBar.tsx:278
+#: src/view/shell/bottom-bar/BottomBar.tsx:290
+#: src/view/shell/bottom-bar/BottomBar.tsx:291
+#: src/view/shell/bottom-bar/BottomBar.tsx:293
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:168
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:169
#: src/view/shell/bottom-bar/BottomBarWeb.tsx:171
@@ -3615,51 +4223,46 @@ msgstr "注册"
msgid "Sign up or sign in to join the conversation"
msgstr "注册或登录以加入对话"
-#: src/view/com/util/moderation/ScreenHider.tsx:76
+#: src/components/moderation/ScreenHider.tsx:97
+#: src/lib/moderation/useGlobalLabelStrings.ts:28
msgid "Sign-in Required"
msgstr "需要登录"
-#: src/view/screens/Settings/index.tsx:355
+#: src/view/screens/Settings/index.tsx:374
msgid "Signed in as"
msgstr "登录身份"
-#: src/view/com/auth/login/ChooseAccountForm.tsx:103
+#: src/screens/Login/ChooseAccountForm.tsx:48
msgid "Signed in as @{0}"
msgstr "以 @{0} 身份登录"
-#: src/view/com/modals/SwitchAccount.tsx:66
-msgid "Signs {0} out of Bluesky"
-msgstr "从 {0} 登出 Bluesky"
+#: src/view/com/modals/SwitchAccount.tsx:70
+#~ msgid "Signs {0} out of Bluesky"
+#~ msgstr "从 {0} 登出 Bluesky"
-#: src/screens/Onboarding/StepInterests/index.tsx:235
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:195
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:33
+#: src/screens/Onboarding/StepInterests/index.tsx:239
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:203
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:35
msgid "Skip"
msgstr "跳过"
-#: src/screens/Onboarding/StepInterests/index.tsx:232
+#: src/screens/Onboarding/StepInterests/index.tsx:236
msgid "Skip this flow"
msgstr "跳过此流程"
-#: src/view/com/auth/create/Step2.tsx:82
-msgid "SMS verification"
-msgstr "短信验证"
-
#: src/screens/Onboarding/index.tsx:40
msgid "Software Dev"
msgstr "程序开发"
-#: src/view/com/modals/ProfilePreview.tsx:62
-#~ msgid "Something went wrong and we're not sure what."
-#~ msgstr "出了点问题,原因不明。"
-
-#: src/view/com/modals/Waitlist.tsx:51
-msgid "Something went wrong. Check your email and try again."
-msgstr "出了点问题,请检查你的电子邮箱并重试。"
+#: src/components/ReportDialog/index.tsx:59
+#: src/screens/Moderation/index.tsx:114
+#: src/screens/Profile/Sections/Labels.tsx:76
+msgid "Something went wrong, please try again."
+msgstr "出了点问题,请重试。"
-#: src/App.native.tsx:61
+#: src/App.native.tsx:66
msgid "Sorry! Your session expired. Please log in again."
-msgstr "很抱歉,你的会话已过期,请重新登录。"
+msgstr "很抱歉,你的登录会话已过期,请重新登录。"
#: src/view/screens/PreferencesThreads.tsx:69
msgid "Sort Replies"
@@ -3669,57 +4272,82 @@ msgstr "回复排序"
msgid "Sort replies to the same post by:"
msgstr "对同一帖子的回复进行排序:"
+#: src/components/moderation/LabelsOnMeDialog.tsx:146
+msgid "Source:"
+msgstr "来源:"
+
+#: src/lib/moderation/useReportOptions.ts:65
+msgid "Spam"
+msgstr "垃圾内容"
+
+#: src/lib/moderation/useReportOptions.ts:53
+msgid "Spam; excessive mentions or replies"
+msgstr "垃圾内容;过多的提及或回复"
+
#: src/screens/Onboarding/index.tsx:30
msgid "Sports"
msgstr "运动"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:122
+#: src/view/com/modals/crop-image/CropImage.web.tsx:123
msgid "Square"
msgstr "方块"
-#: src/view/com/modals/ServerInput.tsx:62
-#~ msgid "Staging"
-#~ msgstr "暂存"
-
-#: src/view/screens/Settings/index.tsx:871
+#: src/view/screens/Settings/index.tsx:903
msgid "Status page"
msgstr "状态页"
+#: src/screens/Signup/index.tsx:142
+msgid "Step"
+msgstr ""
+
#: src/view/com/auth/create/StepHeader.tsx:22
-msgid "Step {0} of {numSteps}"
-msgstr "第 {0} 步,共 {numSteps} 步"
+#~ msgid "Step {0} of {numSteps}"
+#~ msgstr "第 {0} 步,共 {numSteps} 步"
-#: src/view/screens/Settings/index.tsx:274
+#: src/view/screens/Settings/index.tsx:292
msgid "Storage cleared, you need to restart the app now."
-msgstr "已清除存储,请立即重启 App。"
+msgstr "已清除存储,请立即重启应用。"
-#: src/Navigation.tsx:202
-#: src/view/screens/Settings/index.tsx:807
+#: src/Navigation.tsx:211
+#: src/view/screens/Settings/index.tsx:831
msgid "Storybook"
-msgstr "故事书"
+msgstr "Storybook"
-#: src/view/com/modals/AppealLabel.tsx:101
+#: src/components/moderation/LabelsOnMeDialog.tsx:255
+#: src/components/moderation/LabelsOnMeDialog.tsx:256
msgid "Submit"
msgstr "提交"
-#: src/view/screens/ProfileList.tsx:607
+#: src/view/screens/ProfileList.tsx:590
msgid "Subscribe"
msgstr "订阅"
-#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:173
+#: src/screens/Profile/Sections/Labels.tsx:180
+msgid "Subscribe to @{0} to use these labels:"
+msgstr "订阅 @{0} 以使用这些标记:"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:221
+msgid "Subscribe to Labeler"
+msgstr "订阅标记者"
+
+#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:172
#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:307
msgid "Subscribe to the {0} feed"
msgstr "订阅 {0} 信息流"
-#: src/view/screens/ProfileList.tsx:603
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:184
+msgid "Subscribe to this labeler"
+msgstr "订阅这个标记者"
+
+#: src/view/screens/ProfileList.tsx:586
msgid "Subscribe to this list"
msgstr "订阅这个列表"
-#: src/view/screens/Search/Search.tsx:373
+#: src/view/screens/Search/Search.tsx:376
msgid "Suggested Follows"
msgstr "推荐的关注者"
-#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:64
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:65
msgid "Suggested for you"
msgstr "为你推荐"
@@ -3727,39 +4355,42 @@ msgstr "为你推荐"
msgid "Suggestive"
msgstr "建议"
-#: src/Navigation.tsx:212
+#: src/Navigation.tsx:226
#: src/view/screens/Support.tsx:30
#: src/view/screens/Support.tsx:33
msgid "Support"
msgstr "支持"
-#: src/view/com/modals/ProfilePreview.tsx:110
-#~ msgid "Swipe up to see more"
-#~ msgstr "向上滑动查看更多"
-
-#: src/view/com/modals/SwitchAccount.tsx:117
+#: src/components/dialogs/SwitchAccount.tsx:46
+#: src/components/dialogs/SwitchAccount.tsx:49
msgid "Switch Account"
msgstr "切换账户"
-#: src/view/com/modals/SwitchAccount.tsx:97
-#: src/view/screens/Settings/index.tsx:130
+#: src/view/screens/Settings/index.tsx:139
msgid "Switch to {0}"
msgstr "切换到 {0}"
-#: src/view/com/modals/SwitchAccount.tsx:98
-#: src/view/screens/Settings/index.tsx:131
+#: src/view/screens/Settings/index.tsx:140
msgid "Switches the account you are logged in to"
msgstr "切换你登录的账户"
-#: src/view/screens/Settings/index.tsx:472
+#: src/view/screens/Settings/index.tsx:491
msgid "System"
msgstr "系统"
-#: src/view/screens/Settings/index.tsx:795
+#: src/view/screens/Settings/index.tsx:819
msgid "System log"
msgstr "系统日志"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:112
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "tag"
+msgstr "话题标签"
+
+#: src/components/TagMenu/index.tsx:78
+msgid "Tag menu: {displayTag}"
+msgstr "话题标签菜单:{displayTag}"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:113
msgid "Tall"
msgstr "高"
@@ -3771,26 +4402,53 @@ msgstr "点击查看完整内容"
msgid "Tech"
msgstr "科技"
-#: src/view/shell/desktop/RightNav.tsx:89
+#: src/view/shell/desktop/RightNav.tsx:81
msgid "Terms"
msgstr "条款"
-#: src/Navigation.tsx:222
-#: src/view/screens/Settings/index.tsx:885
+#: src/Navigation.tsx:236
+#: src/screens/Signup/StepInfo/Policies.tsx:49
+#: src/view/screens/Settings/index.tsx:917
#: src/view/screens/TermsOfService.tsx:29
-#: src/view/shell/Drawer.tsx:256
+#: src/view/shell/Drawer.tsx:259
msgid "Terms of Service"
msgstr "服务条款"
-#: src/view/com/modals/AppealLabel.tsx:70
-#: src/view/com/modals/report/InputIssueDetails.tsx:51
+#: src/lib/moderation/useReportOptions.ts:58
+#: src/lib/moderation/useReportOptions.ts:79
+#: src/lib/moderation/useReportOptions.ts:87
+msgid "Terms used violate community standards"
+msgstr "用词违反了社群准则"
+
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "text"
+msgstr "文本"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:219
msgid "Text input field"
-msgstr "文本输入字段"
+msgstr "文本输入框"
+
+#: src/components/ReportDialog/SubmitView.tsx:78
+msgid "Thank you. Your report has been sent."
+msgstr "谢谢,你的举报已提交。"
+
+#: src/view/com/modals/ChangeHandle.tsx:465
+msgid "That contains the following:"
+msgstr "其中包含以下内容:"
-#: src/view/com/profile/ProfileHeader.tsx:262
+#: src/screens/Signup/index.tsx:84
+msgid "That handle is already taken."
+msgstr "该用户识别符已被占用"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:283
+#: src/view/com/profile/ProfileMenu.tsx:349
msgid "The account will be able to interact with you after unblocking."
msgstr "解除屏蔽后,该账户将能够与你互动。"
+#: src/components/moderation/ModerationDetailsDialog.tsx:127
+msgid "the author"
+msgstr "作者"
+
#: src/view/screens/CommunityGuidelines.tsx:36
msgid "The Community Guidelines have been moved to <0/>"
msgstr "社群准则已迁移至 <0/>"
@@ -3799,13 +4457,22 @@ msgstr "社群准则已迁移至 <0/>"
msgid "The Copyright Policy has been moved to <0/>"
msgstr "版权许可已迁移至 <0/>"
-#: src/screens/Onboarding/Layout.tsx:60
+#: src/components/moderation/LabelsOnMeDialog.tsx:48
+msgid "The following labels were applied to your account."
+msgstr "以下标记已应用到你的账户。"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:49
+msgid "The following labels were applied to your content."
+msgstr "以下标记已应用到你的内容。"
+
+#: src/screens/Onboarding/Layout.tsx:58
msgid "The following steps will help customize your Bluesky experience."
msgstr "以下步骤将帮助定制你的 Bluesky 体验。"
-#: src/view/com/post-thread/PostThread.tsx:453
+#: src/view/com/post-thread/PostThread.tsx:153
+#: src/view/com/post-thread/PostThread.tsx:165
msgid "The post may have been deleted."
-msgstr "此帖子似乎已被删除。"
+msgstr "此帖子可能已被删除。"
#: src/view/screens/PrivacyPolicy.tsx:33
msgid "The Privacy Policy has been moved to <0/>"
@@ -3813,30 +4480,31 @@ msgstr "隐私政策已迁移至 <0/>"
#: src/view/screens/Support.tsx:36
msgid "The support form has been moved. If you need help, please <0/> or visit {HELP_DESK_URL} to get in touch with us."
-msgstr "支持表单已移动位置。如果你需要帮助,请点击<0/>或访问{HELP_DESK_URL}与我们联系。"
+msgstr "支持表单已被移除。如果你需要帮助,请点击<0/>或访问{HELP_DESK_URL}与我们联系。"
#: src/view/screens/TermsOfService.tsx:33
msgid "The Terms of Service have been moved to"
msgstr "服务条款已迁移至"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:150
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:141
msgid "There are many feeds to try:"
msgstr "这里有些信息流你可以尝试:"
-#: src/view/screens/ProfileFeed.tsx:549
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:112
+#: src/view/screens/ProfileFeed.tsx:544
msgid "There was an an issue contacting the server, please check your internet connection and try again."
msgstr "连接至服务器时出现问题,请检查你的互联网连接并重试。"
-#: src/view/com/posts/FeedErrorMessage.tsx:139
+#: src/view/com/posts/FeedErrorMessage.tsx:138
msgid "There was an an issue removing this feed. Please check your internet connection and try again."
msgstr "删除信息流时出现问题,请检查你的互联网连接并重试。"
-#: src/view/screens/ProfileFeed.tsx:209
+#: src/view/screens/ProfileFeed.tsx:218
msgid "There was an an issue updating your feeds, please check your internet connection and try again."
msgstr "更新信息流时出现问题,请检查你的互联网连接并重试。"
-#: src/view/screens/ProfileFeed.tsx:236
-#: src/view/screens/ProfileList.tsx:266
+#: src/view/screens/ProfileFeed.tsx:245
+#: src/view/screens/ProfileList.tsx:275
#: src/view/screens/SavedFeeds.tsx:209
#: src/view/screens/SavedFeeds.tsx:231
#: src/view/screens/SavedFeeds.tsx:252
@@ -3845,9 +4513,8 @@ msgstr "连接服务器时出现问题"
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:57
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:66
-#: src/view/com/feeds/FeedSourceCard.tsx:113
-#: src/view/com/feeds/FeedSourceCard.tsx:127
-#: src/view/com/feeds/FeedSourceCard.tsx:181
+#: src/view/com/feeds/FeedSourceCard.tsx:110
+#: src/view/com/feeds/FeedSourceCard.tsx:123
msgid "There was an issue contacting your server"
msgstr "连接服务器时出现问题"
@@ -3855,7 +4522,7 @@ msgstr "连接服务器时出现问题"
msgid "There was an issue fetching notifications. Tap here to try again."
msgstr "刷新通知时出现问题,点击重试。"
-#: src/view/com/posts/Feed.tsx:263
+#: src/view/com/posts/Feed.tsx:287
msgid "There was an issue fetching posts. Tap here to try again."
msgstr "刷新帖子时出现问题,点击重试。"
@@ -3868,34 +4535,40 @@ msgstr "刷新列表时出现问题,点击重试。"
msgid "There was an issue fetching your lists. Tap here to try again."
msgstr "刷新列表时出现问题,点击重试。"
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:63
-#: src/view/com/modals/ContentFilteringSettings.tsx:126
+#: src/components/ReportDialog/SubmitView.tsx:83
+msgid "There was an issue sending your report. Please check your internet connection."
+msgstr "提交举报时出现问题,请检查你的网络连接。"
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:65
msgid "There was an issue syncing your preferences with the server"
msgstr "与服务器同步首选项时出现问题"
-#: src/view/screens/AppPasswords.tsx:66
+#: src/view/screens/AppPasswords.tsx:68
msgid "There was an issue with fetching your app passwords"
-msgstr "获取 App 专用密码时出现问题"
-
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:93
-#: src/view/com/post-thread/PostThreadFollowBtn.tsx:105
-#: src/view/com/profile/ProfileHeader.tsx:156
-#: src/view/com/profile/ProfileHeader.tsx:177
-#: src/view/com/profile/ProfileHeader.tsx:216
-#: src/view/com/profile/ProfileHeader.tsx:229
-#: src/view/com/profile/ProfileHeader.tsx:249
-#: src/view/com/profile/ProfileHeader.tsx:271
+msgstr "获取应用专用密码时出现问题"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:105
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:127
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:99
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:111
+#: src/view/com/profile/ProfileMenu.tsx:106
+#: src/view/com/profile/ProfileMenu.tsx:117
+#: src/view/com/profile/ProfileMenu.tsx:132
+#: src/view/com/profile/ProfileMenu.tsx:143
+#: src/view/com/profile/ProfileMenu.tsx:157
+#: src/view/com/profile/ProfileMenu.tsx:170
msgid "There was an issue! {0}"
msgstr "出现问题了!{0}"
-#: src/view/screens/ProfileList.tsx:287
-#: src/view/screens/ProfileList.tsx:306
-#: src/view/screens/ProfileList.tsx:328
-#: src/view/screens/ProfileList.tsx:347
+#: src/view/screens/ProfileList.tsx:288
+#: src/view/screens/ProfileList.tsx:302
+#: src/view/screens/ProfileList.tsx:316
+#: src/view/screens/ProfileList.tsx:330
msgid "There was an issue. Please check your internet connection and try again."
msgstr "出现问题了,请检查你的互联网连接并重试。"
-#: src/view/com/util/ErrorBoundary.tsx:36
+#: src/view/com/util/ErrorBoundary.tsx:51
msgid "There was an unexpected issue in the application. Please let us know if this happened to you!"
msgstr "应用发生意外错误,请联系我们进行错误反馈!"
@@ -3903,27 +4576,36 @@ msgstr "应用发生意外错误,请联系我们进行错误反馈!"
msgid "There's been a rush of new users to Bluesky! We'll activate your account as soon as we can."
msgstr "Bluesky 迎来了大量新用户!我们将尽快激活你的账户。"
-#: src/view/com/auth/create/Step2.tsx:55
-msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
-msgstr "电话号码有误,请选择电话区号并输入完整的电话号码!"
-
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:138
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:146
msgid "These are popular accounts you might like:"
-msgstr "这里是一些受欢迎的账号,你可能会喜欢:"
+msgstr "这里是一些受欢迎的账户,你可能会喜欢:"
-#: src/view/com/util/moderation/ScreenHider.tsx:88
+#: src/components/moderation/ScreenHider.tsx:116
msgid "This {screenDescription} has been flagged:"
-msgstr "这个 {screenDescription} 已被标记:"
+msgstr "{screenDescription} 已被标记:"
-#: src/view/com/util/moderation/ScreenHider.tsx:83
+#: src/components/moderation/ScreenHider.tsx:111
msgid "This account has requested that users sign in to view their profile."
-msgstr "此账号要求用户登录后才能查看其个人资料。"
+msgstr "此账户要求用户登录后才能查看其个人资料。"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:204
+msgid "This appeal will be sent to <0>{0}0>."
+msgstr "此申诉将发送至 <0>{0}0>。"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:19
+msgid "This content has been hidden by the moderators."
+msgstr "此内容已被限制者隐藏。"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:24
+msgid "This content has received a general warning from moderators."
+msgstr "此内容已受到限制者设置的一般警告。"
-#: src/view/com/modals/EmbedConsent.tsx:68
+#: src/components/dialogs/EmbedConsent.tsx:64
msgid "This content is hosted by {0}. Do you want to enable external media?"
msgstr "此内容由 {0} 托管。是否要启用外部媒体?"
-#: src/view/com/modals/ModerationDetails.tsx:67
+#: src/components/moderation/ModerationDetailsDialog.tsx:77
+#: src/lib/moderation/useModerationCauseDescription.ts:77
msgid "This content is not available because one of the users involved has blocked the other."
msgstr "由于其中一个用户屏蔽了另一个用户,此内容不可用。"
@@ -3932,16 +4614,16 @@ msgid "This content is not viewable without a Bluesky account."
msgstr "没有 Bluesky 账户,无法查看此内容。"
#: src/view/screens/Settings/ExportCarDialog.tsx:75
-msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
-msgstr ""
+msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost0>."
+msgstr "该功能正在测试,你可以在<0>这篇博客文章0>中获得关于导出数据的更多信息。"
#: src/view/com/posts/FeedErrorMessage.tsx:114
msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later."
msgstr "该信息流当前使用人数较多,服务暂时不可用。请稍后再试。"
-#: src/view/screens/Profile.tsx:420
-#: src/view/screens/ProfileFeed.tsx:475
-#: src/view/screens/ProfileList.tsx:660
+#: src/screens/Profile/Sections/Feed.tsx:50
+#: src/view/screens/ProfileFeed.tsx:477
+#: src/view/screens/ProfileList.tsx:675
msgid "This feed is empty!"
msgstr "该信息流为空!"
@@ -3949,78 +4631,137 @@ msgstr "该信息流为空!"
msgid "This feed is empty! You may need to follow more users or tune your language settings."
msgstr "该信息流为空!你或许需要先关注更多的人或检查你的语言设置。"
-#: src/view/com/modals/BirthDateSettings.tsx:61
+#: src/components/dialogs/BirthDateSettings.tsx:41
msgid "This information is not shared with other users."
-msgstr "此信息不与其他用户共享。"
+msgstr "此信息不会分享给其他用户。"
#: src/view/com/modals/VerifyEmail.tsx:119
msgid "This is important in case you ever need to change your email or reset your password."
msgstr "这很重要,以防你将来需要更改电子邮箱或重置密码。"
-#: src/view/com/modals/LinkWarning.tsx:58
+#: src/components/moderation/ModerationDetailsDialog.tsx:124
+msgid "This label was applied by {0}."
+msgstr "此标记由 {0} 应用。"
+
+#: src/screens/Profile/Sections/Labels.tsx:167
+msgid "This labeler hasn't declared what labels it publishes, and may not be active."
+msgstr "此标记者尚未声明他发布的标记,并且可能处于非活跃状态。"
+
+#: src/view/com/modals/LinkWarning.tsx:72
msgid "This link is taking you to the following website:"
msgstr "此链接将带你到以下网站:"
-#: src/view/screens/ProfileList.tsx:834
+#: src/view/screens/ProfileList.tsx:853
msgid "This list is empty!"
msgstr "此列表为空!"
-#: src/view/com/modals/AddAppPasswords.tsx:106
+#: src/screens/Profile/ErrorState.tsx:40
+msgid "This moderation service is unavailable. See below for more details. If this issue persists, contact us."
+msgstr "此限制提供服务不可用,请查看下方获取更多详情。如果问题持续存在,请联系我们。"
+
+#: src/view/com/modals/AddAppPasswords.tsx:107
msgid "This name is already in use"
msgstr "该名称已被使用"
-#: src/view/com/post-thread/PostThreadItem.tsx:122
+#: src/view/com/post-thread/PostThreadItem.tsx:125
msgid "This post has been deleted."
-msgstr "此帖已被删除。"
+msgstr "此帖子已被删除。"
-#: src/view/com/modals/ModerationDetails.tsx:62
+#: src/view/com/util/forms/PostDropdownBtn.tsx:344
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:248
+msgid "This post is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr "此帖子只对已登录用户可见,未登录的用户将无法看到。"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:326
+msgid "This post will be hidden from feeds."
+msgstr "此帖子将从信息流中隐藏。"
+
+#: src/view/com/profile/ProfileMenu.tsx:370
+msgid "This profile is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr "此个人资料只对已登录用户可见,未登录的用户将无法看到。"
+
+#: src/screens/Signup/StepInfo/Policies.tsx:37
+msgid "This service has not provided terms of service or a privacy policy."
+msgstr "此服务没有提供服务条款或隐私政策。"
+
+#: src/view/com/modals/ChangeHandle.tsx:445
+msgid "This should create a domain record at:"
+msgstr "应该在以下位置创建一个域名记录:"
+
+#: src/view/com/profile/ProfileFollowers.tsx:87
+msgid "This user doesn't have any followers."
+msgstr "此用户目前没有任何关注者。"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:72
+#: src/lib/moderation/useModerationCauseDescription.ts:68
msgid "This user has blocked you. You cannot view their content."
msgstr "此用户已将你屏蔽,你将无法看到他所发布的内容。"
-#: src/view/com/modals/ModerationDetails.tsx:42
-msgid "This user is included in the <0/> list which you have blocked."
-msgstr "此用户包含在你已屏蔽的 <0/> 列表中。"
+#: src/lib/moderation/useGlobalLabelStrings.ts:30
+msgid "This user has requested that their content only be shown to signed-in users."
+msgstr "此用户要求其发布内容仅对已登录用户可见。"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:55
+msgid "This user is included in the <0>{0}0> list which you have blocked."
+msgstr "此用户包含在你已屏蔽的 <0>{0}0> 列表中。"
-#: src/view/com/modals/ModerationDetails.tsx:74
-msgid "This user is included in the <0/> list which you have muted."
-msgstr "此用户包含在你已隐藏的 <0/> 列表中。"
+#: src/components/moderation/ModerationDetailsDialog.tsx:84
+msgid "This user is included in the <0>{0}0> list which you have muted."
+msgstr "此用户包含在你已隐藏的 <0>{0}0> 列表中。"
-#: src/view/com/modals/ModerationDetails.tsx:74
-#~ msgid "This user is included the <0/> list which you have muted."
-#~ msgstr "此用户包含在你已隐藏的 <0/> 列表中。"
+#: src/view/com/profile/ProfileFollows.tsx:87
+msgid "This user isn't following anyone."
+msgstr "此账户目前没有关注任何人。"
#: src/view/com/modals/SelfLabel.tsx:137
msgid "This warning is only available for posts with media attached."
msgstr "此警告仅适用于附带媒体的帖子。"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:192
-msgid "This will hide this post from your feeds."
-msgstr "这将在你的信息流中隐藏此帖子。"
+#: src/components/dialogs/MutedWords.tsx:283
+msgid "This will delete {0} from your muted words. You can always add it back later."
+msgstr "这将从你的隐藏词中删除 {0}。你随时可以重新添加。"
+
+#: src/view/screens/Settings/index.tsx:574
+msgid "Thread preferences"
+msgstr "讨论串首选项"
#: src/view/screens/PreferencesThreads.tsx:53
-#: src/view/screens/Settings/index.tsx:565
+#: src/view/screens/Settings/index.tsx:584
msgid "Thread Preferences"
msgstr "讨论串首选项"
#: src/view/screens/PreferencesThreads.tsx:119
msgid "Threaded Mode"
-msgstr "分层模式"
+msgstr "讨论串模式"
-#: src/Navigation.tsx:252
+#: src/Navigation.tsx:269
msgid "Threads Preferences"
msgstr "讨论串首选项"
+#: src/components/ReportDialog/SelectLabelerView.tsx:33
+msgid "To whom would you like to send this report?"
+msgstr "你想将举报提交给谁?"
+
+#: src/components/dialogs/MutedWords.tsx:112
+msgid "Toggle between muted word options."
+msgstr "在隐藏词选项之间切换。"
+
#: src/view/com/util/forms/DropdownButton.tsx:246
msgid "Toggle dropdown"
-msgstr "切换下拉菜单"
+msgstr "切换下拉式菜单"
+
+#: src/screens/Moderation/index.tsx:332
+msgid "Toggle to enable or disable adult content"
+msgstr "切换以启用或禁用成人内容"
-#: src/view/com/modals/EditImage.tsx:271
+#: src/view/com/modals/EditImage.tsx:272
msgid "Transformations"
msgstr "转换"
-#: src/view/com/post-thread/PostThreadItem.tsx:686
-#: src/view/com/post-thread/PostThreadItem.tsx:688
-#: src/view/com/util/forms/PostDropdownBtn.tsx:125
+#: src/view/com/post-thread/PostThreadItem.tsx:644
+#: src/view/com/post-thread/PostThreadItem.tsx:646
+#: src/view/com/util/forms/PostDropdownBtn.tsx:212
+#: src/view/com/util/forms/PostDropdownBtn.tsx:214
msgid "Translate"
msgstr "翻译"
@@ -4029,108 +4770,183 @@ msgctxt "action"
msgid "Try again"
msgstr "重试"
-#: src/view/screens/ProfileList.tsx:505
+#: src/view/com/modals/ChangeHandle.tsx:428
+msgid "Type:"
+msgstr "类型:"
+
+#: src/view/screens/ProfileList.tsx:478
msgid "Un-block list"
msgstr "取消屏蔽列表"
-#: src/view/screens/ProfileList.tsx:490
+#: src/view/screens/ProfileList.tsx:461
msgid "Un-mute list"
msgstr "取消隐藏列表"
-#: src/view/com/auth/create/CreateAccount.tsx:66
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:87
-#: src/view/com/auth/login/Login.tsx:76
-#: src/view/com/auth/login/LoginForm.tsx:118
+#: src/screens/Login/ForgotPasswordForm.tsx:74
+#: src/screens/Login/index.tsx:78
+#: src/screens/Login/LoginForm.tsx:119
+#: src/screens/Login/SetNewPasswordForm.tsx:77
+#: src/screens/Signup/index.tsx:63
#: src/view/com/modals/ChangePassword.tsx:70
msgid "Unable to contact your service. Please check your Internet connection."
msgstr "无法连接到服务,请检查互联网连接。"
-#: src/view/com/profile/ProfileHeader.tsx:432
-#: src/view/screens/ProfileList.tsx:589
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:181
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+#: src/view/screens/ProfileList.tsx:572
msgid "Unblock"
msgstr "取消屏蔽"
-#: src/view/com/profile/ProfileHeader.tsx:435
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:186
msgctxt "action"
msgid "Unblock"
msgstr "取消屏蔽"
-#: src/view/com/profile/ProfileHeader.tsx:260
-#: src/view/com/profile/ProfileHeader.tsx:344
+#: src/view/com/profile/ProfileMenu.tsx:299
+#: src/view/com/profile/ProfileMenu.tsx:305
msgid "Unblock Account"
-msgstr "取消屏蔽"
+msgstr "取消屏蔽账户"
-#: src/view/com/modals/Repost.tsx:42
-#: src/view/com/modals/Repost.tsx:55
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:281
+#: src/view/com/profile/ProfileMenu.tsx:343
+msgid "Unblock Account?"
+msgstr "取消屏蔽账户?"
+
+#: src/view/com/modals/Repost.tsx:43
+#: src/view/com/modals/Repost.tsx:56
#: src/view/com/util/post-ctrls/RepostButton.tsx:60
#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
msgid "Undo repost"
-msgstr "撤销转发"
+msgstr "取消转发"
-#: src/view/com/profile/FollowButton.tsx:55
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
+msgid "Unfollow"
+msgstr "取消关注"
+
+#: src/view/com/profile/FollowButton.tsx:60
msgctxt "action"
msgid "Unfollow"
-msgstr "取关"
+msgstr "取消关注"
-#: src/view/com/profile/ProfileHeader.tsx:484
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:220
msgid "Unfollow {0}"
-msgstr "取关 {0}"
+msgstr "取消关注 {0}"
+
+#: src/view/com/profile/ProfileMenu.tsx:241
+#: src/view/com/profile/ProfileMenu.tsx:251
+msgid "Unfollow Account"
+msgstr "取消关注账户"
-#: src/view/com/auth/create/state.ts:300
-msgid "Unfortunately, you do not meet the requirements to create an account."
-msgstr "很遗憾,你不符合创建账户的要求。"
+#: src/view/com/auth/create/state.ts:262
+#~ msgid "Unfortunately, you do not meet the requirements to create an account."
+#~ msgstr "很遗憾,你不符合创建账户的要求。"
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:182
-#: src/view/com/util/post-ctrls/PostCtrls.tsx:216
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
msgid "Unlike"
msgstr "取消喜欢"
-#: src/view/screens/ProfileList.tsx:596
+#: src/view/screens/ProfileFeed.tsx:573
+msgid "Unlike this feed"
+msgstr "取消喜欢这个信息流"
+
+#: src/components/TagMenu/index.tsx:249
+#: src/view/screens/ProfileList.tsx:579
msgid "Unmute"
msgstr "取消隐藏"
-#: src/view/com/profile/ProfileHeader.tsx:325
+#: src/components/TagMenu/index.web.tsx:104
+msgid "Unmute {truncatedTag}"
+msgstr "取消隐藏 {truncatedTag}"
+
+#: src/view/com/profile/ProfileMenu.tsx:278
+#: src/view/com/profile/ProfileMenu.tsx:284
msgid "Unmute Account"
msgstr "取消隐藏账户"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:171
+#: src/components/TagMenu/index.tsx:208
+msgid "Unmute all {displayTag} posts"
+msgstr "取消隐藏所有 {displayTag} 帖子"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:256
msgid "Unmute thread"
msgstr "取消隐藏讨论串"
-#: src/view/screens/ProfileFeed.tsx:353
-#: src/view/screens/ProfileList.tsx:580
+#: src/view/screens/ProfileFeed.tsx:295
+#: src/view/screens/ProfileList.tsx:563
msgid "Unpin"
msgstr "取消固定"
-#: src/view/screens/ProfileList.tsx:473
+#: src/view/screens/ProfileFeed.tsx:292
+msgid "Unpin from home"
+msgstr "从主页取消固定"
+
+#: src/view/screens/ProfileList.tsx:444
msgid "Unpin moderation list"
msgstr "取消固定限制列表"
-#: src/view/screens/ProfileFeed.tsx:345
-msgid "Unsave"
-msgstr "取消保存"
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:219
+msgid "Unsubscribe"
+msgstr "取消订阅"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:183
+msgid "Unsubscribe from this labeler"
+msgstr "取消订阅此标记者"
+
+#: src/lib/moderation/useReportOptions.ts:70
+msgid "Unwanted Sexual Content"
+msgstr "不受欢迎的性内容"
#: src/view/com/modals/UserAddRemoveLists.tsx:70
msgid "Update {displayName} in Lists"
msgstr "更新列表中的 {displayName}"
-#: src/lib/hooks/useOTAUpdate.ts:15
-msgid "Update Available"
-msgstr "更新可用"
+#: src/view/com/modals/ChangeHandle.tsx:508
+msgid "Update to {handle}"
+msgstr "更新至 {handle}"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:204
+#: src/screens/Login/SetNewPasswordForm.tsx:186
msgid "Updating..."
msgstr "更新中..."
-#: src/view/com/modals/ChangeHandle.tsx:455
+#: src/view/com/modals/ChangeHandle.tsx:454
msgid "Upload a text file to:"
msgstr "将文本文件上传至:"
-#: src/view/screens/AppPasswords.tsx:195
+#: src/view/com/util/UserAvatar.tsx:326
+#: src/view/com/util/UserAvatar.tsx:329
+#: src/view/com/util/UserBanner.tsx:116
+#: src/view/com/util/UserBanner.tsx:119
+msgid "Upload from Camera"
+msgstr "从相机上传"
+
+#: src/view/com/util/UserAvatar.tsx:343
+#: src/view/com/util/UserBanner.tsx:133
+msgid "Upload from Files"
+msgstr "从文件上传"
+
+#: src/view/com/util/UserAvatar.tsx:337
+#: src/view/com/util/UserAvatar.tsx:341
+#: src/view/com/util/UserBanner.tsx:127
+#: src/view/com/util/UserBanner.tsx:131
+msgid "Upload from Library"
+msgstr "从媒体库上传"
+
+#: src/view/com/modals/ChangeHandle.tsx:408
+msgid "Use a file on your server"
+msgstr "使用你服务器上的文件"
+
+#: src/view/screens/AppPasswords.tsx:197
msgid "Use app passwords to login to other Bluesky clients without giving full access to your account or password."
-msgstr "使用应用程序密码登录到其他 Bluesky 客户端,而无需对其授予你账户或密码的完全访问权限。"
+msgstr "使用应用专用密码登录到其他 Bluesky 客户端,而无需对其授予你账户或密码的完全访问权限。"
-#: src/view/com/modals/ChangeHandle.tsx:515
+#: src/view/com/modals/ChangeHandle.tsx:517
+msgid "Use bsky.social as hosting provider"
+msgstr "使用 bsky.social 作为域名提供商"
+
+#: src/view/com/modals/ChangeHandle.tsx:516
msgid "Use default provider"
msgstr "使用默认提供商"
@@ -4144,54 +4960,63 @@ msgstr "使用内置浏览器"
msgid "Use my default browser"
msgstr "使用系统默认浏览器"
-#: src/view/com/modals/AddAppPasswords.tsx:155
+#: src/view/com/modals/ChangeHandle.tsx:400
+msgid "Use the DNS panel"
+msgstr "使用 DNS 面板"
+
+#: src/view/com/modals/AddAppPasswords.tsx:156
msgid "Use this to sign into the other app along with your handle."
msgstr "使用这个和你的用户识别符一起登录其他应用。"
-#: src/view/com/modals/ServerInput.tsx:105
-#~ msgid "Use your domain as your Bluesky client service provider"
-#~ msgstr "使用你的域名作为 Bluesky 客户端的服务提供方"
-
-#: src/view/com/modals/InviteCodes.tsx:200
+#: src/view/com/modals/InviteCodes.tsx:201
msgid "Used by:"
msgstr "使用者:"
-#: src/view/com/modals/ModerationDetails.tsx:54
+#: src/components/moderation/ModerationDetailsDialog.tsx:64
+#: src/lib/moderation/useModerationCauseDescription.ts:56
msgid "User Blocked"
msgstr "用户被屏蔽"
-#: src/view/com/modals/ModerationDetails.tsx:40
+#: src/lib/moderation/useModerationCauseDescription.ts:48
+msgid "User Blocked by \"{0}\""
+msgstr "用户被 \"{0}\" 屏蔽"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:53
msgid "User Blocked by List"
msgstr "用户被列表屏蔽"
-#: src/view/com/modals/ModerationDetails.tsx:60
+#: src/lib/moderation/useModerationCauseDescription.ts:66
+msgid "User Blocking You"
+msgstr "用户屏蔽了你"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:70
msgid "User Blocks You"
msgstr "用户屏蔽了你"
-#: src/view/com/auth/create/Step3.tsx:41
-msgid "User handle"
-msgstr "用户识别符"
+#: src/view/com/auth/create/Step2.tsx:79
+#~ msgid "User handle"
+#~ msgstr "用户识别符"
-#: src/view/com/lists/ListCard.tsx:84
+#: src/view/com/lists/ListCard.tsx:85
#: src/view/com/modals/UserAddRemoveLists.tsx:198
msgid "User list by {0}"
msgstr "{0} 的用户列表"
-#: src/view/screens/ProfileList.tsx:762
+#: src/view/screens/ProfileList.tsx:777
msgid "User list by <0/>"
msgstr "<0/> 的用户列表"
-#: src/view/com/lists/ListCard.tsx:82
+#: src/view/com/lists/ListCard.tsx:83
#: src/view/com/modals/UserAddRemoveLists.tsx:196
-#: src/view/screens/ProfileList.tsx:760
+#: src/view/screens/ProfileList.tsx:775
msgid "User list by you"
msgstr "你的用户列表"
-#: src/view/com/modals/CreateOrEditList.tsx:196
+#: src/view/com/modals/CreateOrEditList.tsx:197
msgid "User list created"
msgstr "用户列表已创建"
-#: src/view/com/modals/CreateOrEditList.tsx:182
+#: src/view/com/modals/CreateOrEditList.tsx:183
msgid "User list updated"
msgstr "用户列表已更新"
@@ -4199,12 +5024,11 @@ msgstr "用户列表已更新"
msgid "User Lists"
msgstr "用户列表"
-#: src/view/com/auth/login/LoginForm.tsx:177
-#: src/view/com/auth/login/LoginForm.tsx:195
+#: src/screens/Login/LoginForm.tsx:151
msgid "Username or email address"
msgstr "用户名或电子邮箱"
-#: src/view/screens/ProfileList.tsx:796
+#: src/view/screens/ProfileList.tsx:811
msgid "Users"
msgstr "用户"
@@ -4216,19 +5040,27 @@ msgstr "关注 <0/> 的用户"
msgid "Users in \"{0}\""
msgstr "\"{0}\"中的用户"
-#: src/view/com/auth/create/Step2.tsx:243
-msgid "Verification code"
-msgstr "验证码"
+#: src/components/LikesDialog.tsx:85
+msgid "Users that have liked this content or profile"
+msgstr "已喜欢此内容或个人资料的账户"
+
+#: src/view/com/modals/ChangeHandle.tsx:436
+msgid "Value:"
+msgstr "值:"
-#: src/view/screens/Settings/index.tsx:910
+#: src/view/com/modals/ChangeHandle.tsx:509
+msgid "Verify {0}"
+msgstr "验证 {0}"
+
+#: src/view/screens/Settings/index.tsx:942
msgid "Verify email"
msgstr "验证邮箱"
-#: src/view/screens/Settings/index.tsx:935
+#: src/view/screens/Settings/index.tsx:967
msgid "Verify my email"
msgstr "验证我的邮箱"
-#: src/view/screens/Settings/index.tsx:944
+#: src/view/screens/Settings/index.tsx:976
msgid "Verify My Email"
msgstr "验证我的邮箱"
@@ -4241,11 +5073,15 @@ msgstr "验证新的邮箱"
msgid "Verify Your Email"
msgstr "验证你的邮箱"
+#: src/view/screens/Settings/index.tsx:893
+msgid "Version {0}"
+msgstr ""
+
#: src/screens/Onboarding/index.tsx:42
msgid "Video Games"
-msgstr "视频游戏"
+msgstr "电子游戏"
-#: src/view/com/profile/ProfileHeader.tsx:661
+#: src/screens/Profile/Header/Shell.tsx:107
msgid "View {0}'s avatar"
msgstr "查看{0}的头像"
@@ -4253,36 +5089,71 @@ msgstr "查看{0}的头像"
msgid "View debug entry"
msgstr "查看调试入口"
-#: src/view/com/posts/FeedSlice.tsx:103
+#: src/components/ReportDialog/SelectReportOptionView.tsx:131
+msgid "View details"
+msgstr "查看详情"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:126
+msgid "View details for reporting a copyright violation"
+msgstr "查看举报版权侵权的详情"
+
+#: src/view/com/posts/FeedSlice.tsx:99
msgid "View full thread"
msgstr "查看整个讨论串"
-#: src/view/com/posts/FeedErrorMessage.tsx:172
+#: src/components/moderation/LabelsOnMe.tsx:51
+msgid "View information about these labels"
+msgstr "查看此标记的详情"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:166
msgid "View profile"
-msgstr "查看资料"
+msgstr "查看个人资料"
#: src/view/com/profile/ProfileSubpageHeader.tsx:128
msgid "View the avatar"
msgstr "查看头像"
-#: src/view/com/modals/LinkWarning.tsx:75
+#: src/components/LabelingServiceCard/index.tsx:140
+msgid "View the labeling service provided by @{0}"
+msgstr "查看 @{0} 提供的标记服务。"
+
+#: src/view/screens/ProfileFeed.tsx:585
+msgid "View users who like this feed"
+msgstr "查看此信息流被谁喜欢"
+
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
msgid "Visit Site"
msgstr "访问网站"
-#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:42
-#: src/view/com/modals/ContentFilteringSettings.tsx:259
+#: src/components/moderation/LabelPreference.tsx:135
+#: src/lib/moderation/useLabelBehaviorDescription.ts:17
+#: src/lib/moderation/useLabelBehaviorDescription.ts:22
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:53
msgid "Warn"
msgstr "警告"
+#: src/lib/moderation/useLabelBehaviorDescription.ts:48
+msgid "Warn content"
+msgstr "警告内容"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:46
+msgid "Warn content and filter from feeds"
+msgstr "警告内容并从信息流中过滤"
+
#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:134
-msgid "We also think you'll like \"For You\" by Skygaze:"
-msgstr "我们认为还你会喜欢 Skygaze 所维护的 \"For You\":"
+#~ msgid "We also think you'll like \"For You\" by Skygaze:"
+#~ msgstr "我们认为还你会喜欢 Skygaze 所维护的 \"For You\":"
+
+#: src/screens/Hashtag.tsx:133
+msgid "We couldn't find any results for that hashtag."
+msgstr "找不到任何与该话题标签相关的结果。"
#: src/screens/Deactivated.tsx:133
msgid "We estimate {estimatedTime} until your account is ready."
msgstr "我们估计还需要 {estimatedTime} 才能完成你的账户准备。"
-#: src/screens/Onboarding/StepFinished.tsx:93
+#: src/screens/Onboarding/StepFinished.tsx:97
msgid "We hope you have a wonderful time. Remember, Bluesky is:"
msgstr "我们希望你在此度过愉快的时光。请记住,Bluesky 是:"
@@ -4290,11 +5161,23 @@ msgstr "我们希望你在此度过愉快的时光。请记住,Bluesky 是:"
msgid "We ran out of posts from your follows. Here's the latest from <0/>."
msgstr "我们已经看完了你关注的帖子。这是来自 <0/> 的最新消息。"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:124
+#: src/components/dialogs/MutedWords.tsx:203
+msgid "We recommend avoiding common words that appear in many posts, since it can result in no posts being shown."
+msgstr "不建议你使用会出现在许多帖子中的常见词汇,这可能导致你的时间线上没有帖子可显示。"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:125
msgid "We recommend our \"Discover\" feed:"
msgstr "我们推荐我们的 \"Discover\" 信息流:"
-#: src/screens/Onboarding/StepInterests/index.tsx:133
+#: src/components/dialogs/BirthDateSettings.tsx:52
+msgid "We were unable to load your birth date preferences. Please try again."
+msgstr "我们无法加载你的生日首选项,请重试。"
+
+#: src/screens/Moderation/index.tsx:385
+msgid "We were unable to load your configured labelers at this time."
+msgstr "我们暂时无法记载你已配置的标记者。"
+
+#: src/screens/Onboarding/StepInterests/index.tsx:137
msgid "We weren't able to connect. Please try again to continue setting up your account. If it continues to fail, you can skip this flow."
msgstr "我们无法连接到互联网,请重试以继续设置你的账户。如果仍继续失败,你可以选择跳过此流程。"
@@ -4302,44 +5185,46 @@ msgstr "我们无法连接到互联网,请重试以继续设置你的账户。
msgid "We will let you know when your account is ready."
msgstr "我们会在你的账户准备好时通知你。"
-#: src/view/com/modals/AppealLabel.tsx:48
-msgid "We'll look into your appeal promptly."
-msgstr "我们将迅速审查你的申诉。"
-
-#: src/screens/Onboarding/StepInterests/index.tsx:138
+#: src/screens/Onboarding/StepInterests/index.tsx:142
msgid "We'll use this to help customize your experience."
msgstr "我们将使用这些信息来帮助定制你的体验。"
-#: src/view/com/auth/create/CreateAccount.tsx:123
+#: src/screens/Signup/index.tsx:130
msgid "We're so excited to have you join us!"
msgstr "我们非常高兴你加入我们!"
-#: src/view/screens/ProfileList.tsx:85
+#: src/view/screens/ProfileList.tsx:89
msgid "We're sorry, but we were unable to resolve this list. If this persists, please contact the list creator, @{handleOrDid}."
msgstr "很抱歉,我们无法解析此列表。如果问题持续发生,请联系列表创建者,@{handleOrDid}。"
-#: src/view/screens/Search/Search.tsx:253
+#: src/components/dialogs/MutedWords.tsx:229
+msgid "We're sorry, but we weren't able to load your muted words at this time. Please try again."
+msgstr "很抱歉,我们无法加载你的隐藏词列表。请重试。"
+
+#: src/view/screens/Search/Search.tsx:256
msgid "We're sorry, but your search could not be completed. Please try again in a few minutes."
msgstr "很抱歉,无法完成你的搜索。请稍后再试。"
+#: src/components/Lists.tsx:188
#: src/view/screens/NotFound.tsx:48
msgid "We're sorry! We can't find the page you were looking for."
msgstr "很抱歉!我们找不到你正在寻找的页面。"
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:46
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:321
+msgid "We're sorry! You can only subscribe to ten labelers, and you've reached your limit of ten."
+msgstr "很抱歉!你目前只能订阅 10 个标记者,你已达到 10 个的限制。"
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:48
msgid "Welcome to <0>Bluesky0>"
msgstr "欢迎来到 <0>Bluesky0>"
-#: src/screens/Onboarding/StepInterests/index.tsx:130
+#: src/screens/Onboarding/StepInterests/index.tsx:134
msgid "What are your interests?"
msgstr "你感兴趣的是什么?"
-#: src/view/com/modals/report/Modal.tsx:169
-msgid "What is the issue with this {collectionName}?"
-msgstr "这个 {collectionName} 有什么问题?"
-
-#: src/view/com/auth/SplashScreen.tsx:34
-#: src/view/com/composer/Composer.tsx:279
+#: src/view/com/auth/SplashScreen.tsx:58
+#: src/view/com/auth/SplashScreen.web.tsx:84
+#: src/view/com/composer/Composer.tsx:296
msgid "What's up?"
msgstr "发生了什么新鲜事?"
@@ -4356,16 +5241,36 @@ msgstr "你想在算法信息流中看到哪些语言?"
msgid "Who can reply"
msgstr "谁可以回复"
-#: src/view/com/modals/crop-image/CropImage.web.tsx:102
+#: src/components/ReportDialog/SelectReportOptionView.tsx:43
+msgid "Why should this content be reviewed?"
+msgstr "为什么应该审核此内容?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:56
+msgid "Why should this feed be reviewed?"
+msgstr "为什么应该审核此信息流?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:53
+msgid "Why should this list be reviewed?"
+msgstr "为什么应该审核此列表?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:50
+msgid "Why should this post be reviewed?"
+msgstr "为什么应该审核此帖子?"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:47
+msgid "Why should this user be reviewed?"
+msgstr "为什么应该审核此用户?"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:103
msgid "Wide"
msgstr "宽"
-#: src/view/com/composer/Composer.tsx:415
+#: src/view/com/composer/Composer.tsx:436
msgid "Write post"
msgstr "撰写帖子"
-#: src/view/com/composer/Composer.tsx:278
-#: src/view/com/composer/Prompt.tsx:33
+#: src/view/com/composer/Composer.tsx:295
+#: src/view/com/composer/Prompt.tsx:37
msgid "Write your reply"
msgstr "撰写你的回复"
@@ -4373,15 +5278,11 @@ msgstr "撰写你的回复"
msgid "Writers"
msgstr "作家"
-#: src/view/com/auth/create/Step2.tsx:263
-msgid "XXXXXX"
-msgstr "XXXXXX"
-
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:77
-#: src/view/screens/PreferencesHomeFeed.tsx:129
-#: src/view/screens/PreferencesHomeFeed.tsx:201
-#: src/view/screens/PreferencesHomeFeed.tsx:236
-#: src/view/screens/PreferencesHomeFeed.tsx:271
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:201
+#: src/view/screens/PreferencesFollowingFeed.tsx:236
+#: src/view/screens/PreferencesFollowingFeed.tsx:271
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "Yes"
@@ -4391,21 +5292,29 @@ msgstr "启用"
msgid "You are in line."
msgstr "轮到你了。"
+#: src/view/com/profile/ProfileFollows.tsx:86
+msgid "You are not following anyone."
+msgstr "你没有关注任何账户。"
+
#: src/view/com/posts/FollowingEmptyState.tsx:67
#: src/view/com/posts/FollowingEndOfFeed.tsx:68
msgid "You can also discover new Custom Feeds to follow."
msgstr "你也可以探索新的自定义信息流来关注。"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:142
+#: src/screens/Onboarding/StepFollowingFeed.tsx:143
msgid "You can change these settings later."
msgstr "你可以稍后在设置中更改。"
-#: src/view/com/auth/login/Login.tsx:158
-#: src/view/com/auth/login/PasswordUpdatedForm.tsx:31
+#: src/screens/Login/index.tsx:158
+#: src/screens/Login/PasswordUpdatedForm.tsx:33
msgid "You can now sign in with your new password."
msgstr "你现在可以使用新密码登录。"
-#: src/view/com/modals/InviteCodes.tsx:66
+#: src/view/com/profile/ProfileFollowers.tsx:86
+msgid "You do not have any followers."
+msgstr "你目前还没有任何关注者。"
+
+#: src/view/com/modals/InviteCodes.tsx:67
msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer."
msgstr "你目前还没有邀请码!当你持续使用 Bluesky 一段时间后,我们将提供一些新的邀请码给你。"
@@ -4413,7 +5322,7 @@ msgstr "你目前还没有邀请码!当你持续使用 Bluesky 一段时间后
msgid "You don't have any pinned feeds."
msgstr "你目前还没有任何固定的信息流。"
-#: src/view/screens/Feeds.tsx:451
+#: src/view/screens/Feeds.tsx:452
msgid "You don't have any saved feeds!"
msgstr "你目前还没有任何保存的信息流!"
@@ -4421,24 +5330,39 @@ msgstr "你目前还没有任何保存的信息流!"
msgid "You don't have any saved feeds."
msgstr "你目前还没有任何保存的信息流。"
-#: src/view/com/post-thread/PostThread.tsx:401
+#: src/view/com/post-thread/PostThread.tsx:159
msgid "You have blocked the author or you have been blocked by the author."
-msgstr "你已屏蔽该作者,或你已被该作者屏蔽。"
+msgstr "你已屏蔽该帖子作者,或你已被该作者屏蔽。"
-#: src/view/com/modals/ModerationDetails.tsx:56
+#: src/components/moderation/ModerationDetailsDialog.tsx:66
+#: src/lib/moderation/useModerationCauseDescription.ts:50
+#: src/lib/moderation/useModerationCauseDescription.ts:58
msgid "You have blocked this user. You cannot view their content."
msgstr "你已屏蔽了此用户,你将无法查看他们发布的内容。"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:57
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:92
+#: src/screens/Login/SetNewPasswordForm.tsx:54
+#: src/screens/Login/SetNewPasswordForm.tsx:91
#: src/view/com/modals/ChangePassword.tsx:87
#: src/view/com/modals/ChangePassword.tsx:121
msgid "You have entered an invalid code. It should look like XXXXX-XXXXX."
-msgstr "你输入的邀请码无效。它应该长得像这样 XXXXX-XXXXX。"
+msgstr "你输入的确认码无效。它应该长得像这样 XXXXX-XXXXX。"
+
+#: src/lib/moderation/useModerationCauseDescription.ts:109
+msgid "You have hidden this post"
+msgstr "你已隐藏此帖子"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:101
+msgid "You have hidden this post."
+msgstr "你已隐藏此帖子。"
-#: src/view/com/modals/ModerationDetails.tsx:87
-msgid "You have muted this user."
-msgstr "你已隐藏这个用户。"
+#: src/components/moderation/ModerationDetailsDialog.tsx:94
+#: src/lib/moderation/useModerationCauseDescription.ts:92
+msgid "You have muted this account."
+msgstr "你已隐藏此账户。"
+
+#: src/lib/moderation/useModerationCauseDescription.ts:86
+msgid "You have muted this user"
+msgstr "你已隐藏此用户"
#: src/view/com/feeds/ProfileFeedgens.tsx:136
msgid "You have no feeds."
@@ -4450,38 +5374,50 @@ msgid "You have no lists."
msgstr "你没有列表。"
#: src/view/screens/ModerationBlockedAccounts.tsx:132
-msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
-msgstr "你还没有屏蔽任何账号。要屏蔽账号,请转到其个人资料并在其账号上的菜单中选择 \"屏蔽账号\"。"
+msgid "You have not blocked any accounts yet. To block an account, go to their profile and select \"Block account\" from the menu on their account."
+msgstr "你还没有屏蔽任何账户。要屏蔽账户,请转到其个人资料并在其账户上的菜单中选择 \"屏蔽账户\"。"
-#: src/view/screens/AppPasswords.tsx:87
+#: src/view/screens/AppPasswords.tsx:89
msgid "You have not created any app passwords yet. You can create one by pressing the button below."
-msgstr "你尚未创建任何 App 专用密码,可以通过点击下面的按钮来创建一个。"
+msgstr "你尚未创建任何应用专用密码,可以通过点击下面的按钮来创建一个。"
#: src/view/screens/ModerationMutedAccounts.tsx:131
-msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
-msgstr "你还没有隐藏任何账号。要隐藏账号,请转到其个人资料并在其账号上的菜单中选择 \"隐藏账号\"。"
+msgid "You have not muted any accounts yet. To mute an account, go to their profile and select \"Mute account\" from the menu on their account."
+msgstr "你还没有隐藏任何账户。要隐藏账户,请转到其个人资料并在其账户上的菜单中选择 \"隐藏账户\"。"
+
+#: src/components/dialogs/MutedWords.tsx:249
+msgid "You haven't muted any words or tags yet"
+msgstr "你还没有隐藏任何词或话题标签"
-#: src/view/com/modals/ContentFilteringSettings.tsx:175
-msgid "You must be 18 or older to enable adult content."
-msgstr "你必须年满18岁及以上才能启用成人内容。"
+#: src/components/moderation/LabelsOnMeDialog.tsx:68
+msgid "You may appeal these labels if you feel they were placed in error."
+msgstr "如果你认为这些标记是错误的,你可以申诉这些标记。"
-#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:103
+#: src/screens/Signup/StepInfo/Policies.tsx:79
+msgid "You must be 13 years of age or older to sign up."
+msgstr ""
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:110
msgid "You must be 18 years or older to enable adult content"
msgstr "你必须年满18岁及以上才能启用成人内容"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:98
+#: src/components/ReportDialog/SubmitView.tsx:205
+msgid "You must select at least one labeler for a report"
+msgstr "你必须选择至少一个标记者进行举报"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:144
msgid "You will no longer receive notifications for this thread"
msgstr "你将不再收到这条讨论串的通知"
-#: src/view/com/util/forms/PostDropdownBtn.tsx:101
+#: src/view/com/util/forms/PostDropdownBtn.tsx:147
msgid "You will now receive notifications for this thread"
msgstr "你将收到这条讨论串的通知"
-#: src/view/com/auth/login/SetNewPasswordForm.tsx:107
+#: src/screens/Login/SetNewPasswordForm.tsx:104
msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password."
-msgstr "你将收到一封带有重置代码的电子邮件。请在此输入该重置代码,然后输入你的新密码。"
+msgstr "你将收到一封带有确认码的电子邮件。请在此输入该确认码,然后输入你的新密码。"
-#: src/screens/Onboarding/StepModeration/index.tsx:72
+#: src/screens/Onboarding/StepModeration/index.tsx:60
msgid "You're in control"
msgstr "你尽在掌控"
@@ -4491,27 +5427,32 @@ msgstr "你尽在掌控"
msgid "You're in line"
msgstr "轮到你了"
-#: src/screens/Onboarding/StepFinished.tsx:90
+#: src/screens/Onboarding/StepFinished.tsx:94
msgid "You're ready to go!"
msgstr "你已设置完成!"
+#: src/components/moderation/ModerationDetailsDialog.tsx:98
+#: src/lib/moderation/useModerationCauseDescription.ts:101
+msgid "You've chosen to hide a word or tag within this post."
+msgstr "你选择隐藏了此帖子中的一个词或标签。"
+
#: src/view/com/posts/FollowingEndOfFeed.tsx:48
msgid "You've reached the end of your feed! Find some more accounts to follow."
-msgstr "你已经浏览完你的订阅信息流啦!寻找一些更多的账号关注吧。"
+msgstr "你已经浏览完你的订阅信息流啦!寻找一些更多的账户关注吧。"
-#: src/view/com/auth/create/Step1.tsx:74
+#: src/screens/Signup/index.tsx:150
msgid "Your account"
msgstr "你的账户"
-#: src/view/com/modals/DeleteAccount.tsx:67
+#: src/view/com/modals/DeleteAccount.tsx:68
msgid "Your account has been deleted"
msgstr "你的账户已删除"
#: src/view/screens/Settings/ExportCarDialog.tsx:47
msgid "Your account repository, containing all public data records, can be downloaded as a \"CAR\" file. This file does not include media embeds, such as images, or your private data, which must be fetched separately."
-msgstr ""
+msgstr "你的帐户数据库包含所有公共数据记录,它们将被导出为“CAR”文件。此文件不包括帖子中的媒体,例如图像或你的隐私数据,这些数据需要另外获取。"
-#: src/view/com/auth/create/Step1.tsx:234
+#: src/screens/Signup/StepInfo/index.tsx:121
msgid "Your birth date"
msgstr "你的生日"
@@ -4519,20 +5460,16 @@ msgstr "你的生日"
msgid "Your choice will be saved, but can be changed later in settings."
msgstr "你的选择将被保存,但可以稍后在设置中更改。"
-#: src/screens/Onboarding/StepFollowingFeed.tsx:61
+#: src/screens/Onboarding/StepFollowingFeed.tsx:62
msgid "Your default feed is \"Following\""
msgstr "你的默认信息流为\"关注\""
-#: src/view/com/auth/create/state.ts:153
-#: src/view/com/auth/login/ForgotPasswordForm.tsx:70
+#: src/screens/Login/ForgotPasswordForm.tsx:57
+#: src/screens/Signup/state.ts:227
#: src/view/com/modals/ChangePassword.tsx:54
msgid "Your email appears to be invalid."
msgstr "你的电子邮箱似乎无效。"
-#: src/view/com/modals/Waitlist.tsx:109
-msgid "Your email has been saved! We'll be in touch soon."
-msgstr "你的电子邮箱已保存!我们将很快联系你。"
-
#: src/view/com/modals/ChangeEmail.tsx:125
msgid "Your email has been updated but not verified. As a next step, please verify your new email."
msgstr "你的电子邮箱已更新但尚未验证。作为下一步,请验证你的新电子邮件。"
@@ -4543,45 +5480,42 @@ msgstr "你的电子邮箱尚未验证。这是一个重要的安全步骤,我
#: src/view/com/posts/FollowingEmptyState.tsx:47
msgid "Your following feed is empty! Follow more users to see what's happening."
-msgstr "你的关注信息流为空!关注更多用户去看看他们发了什么什么。"
+msgstr "你的关注信息流为空!关注更多用户去看看他们发了什么。"
-#: src/view/com/auth/create/Step3.tsx:45
+#: src/screens/Signup/StepHandle.tsx:72
msgid "Your full handle will be"
msgstr "你的完整用户识别符将修改为"
-#: src/view/com/modals/ChangeHandle.tsx:270
+#: src/view/com/modals/ChangeHandle.tsx:271
msgid "Your full handle will be <0>@{0}0>"
msgstr "你的完整用户识别符将修改为 <0>@{0}0>"
-#: src/view/screens/Settings.tsx:430
-#: src/view/shell/desktop/RightNav.tsx:137
-#: src/view/shell/Drawer.tsx:660
-#~ msgid "Your invite codes are hidden when logged in using an App Password"
-#~ msgstr "在使用 App 专用密码登录时,你的邀请码将被隐藏"
+#: src/components/dialogs/MutedWords.tsx:220
+msgid "Your muted words"
+msgstr "你的隐藏词"
-#: src/view/com/modals/ChangePassword.tsx:155
+#: src/view/com/modals/ChangePassword.tsx:157
msgid "Your password has been changed successfully!"
-msgstr "你的密码已更改成功!"
+msgstr "你的密码已成功更改!"
-#: src/view/com/composer/Composer.tsx:267
+#: src/view/com/composer/Composer.tsx:284
msgid "Your post has been published"
-msgstr "你的帖子已发送"
+msgstr "你的帖子已发布"
-#: src/screens/Onboarding/StepFinished.tsx:105
+#: src/screens/Onboarding/StepFinished.tsx:109
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:59
-#: src/view/com/auth/onboarding/WelcomeMobile.tsx:59
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:61
msgid "Your posts, likes, and blocks are public. Mutes are private."
-msgstr "你的帖子、点赞和屏蔽是公开可见的,而隐藏不可见。"
+msgstr "你的帖子、喜欢和屏蔽是公开可见的,而隐藏不可见。"
-#: src/view/com/modals/SwitchAccount.tsx:84
-#: src/view/screens/Settings/index.tsx:118
+#: src/view/screens/Settings/index.tsx:125
msgid "Your profile"
msgstr "你的个人资料"
-#: src/view/com/composer/Composer.tsx:266
+#: src/view/com/composer/Composer.tsx:283
msgid "Your reply has been published"
-msgstr "你的回复已发送"
+msgstr "你的回复已发布"
-#: src/view/com/auth/create/Step3.tsx:28
+#: src/screens/Signup/index.tsx:152
msgid "Your user handle"
msgstr "你的用户识别符"
diff --git a/src/locale/locales/zh-TW/messages.po b/src/locale/locales/zh-TW/messages.po
new file mode 100644
index 0000000000..484428079f
--- /dev/null
+++ b/src/locale/locales/zh-TW/messages.po
@@ -0,0 +1,6076 @@
+msgid ""
+msgstr ""
+"POT-Creation-Date: 2024-03-20 15:50+0800\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: @lingui/cli\n"
+"Language: zh_TW\n"
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: Frudrax Cheng \n"
+"Language-Team: Frudrax Cheng, Kuwa Lee, noeFly, snowleo208, Kisaragi Hiu, Yi-Jyun Pan, toto6038, cirx1e\n"
+"Plural-Forms: \n"
+
+#: src/view/com/modals/VerifyEmail.tsx:142
+msgid "(no email)"
+msgstr "(沒有郵件)"
+
+#: src/view/shell/desktop/RightNav.tsx:168
+#~ msgid "{0, plural, one {# invite code available} other {# invite codes available}}"
+#~ msgstr "{0} 個可用的邀請碼"
+
+#: src/screens/Profile/Header/Metrics.tsx:44
+msgid "{following} following"
+msgstr "{following} 個跟隨中"
+
+#: src/view/shell/desktop/RightNav.tsx:151
+#~ msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}"
+#~ msgstr "可用的邀請碼:{invitesAvailable} 個"
+
+#: src/view/screens/Settings.tsx:435
+#: src/view/shell/Drawer.tsx:664
+#~ msgid "{invitesAvailable} invite code available"
+#~ msgstr "{invitesAvailable} 個可用的邀請碼"
+
+#: src/view/screens/Settings.tsx:437
+#: src/view/shell/Drawer.tsx:666
+#~ msgid "{invitesAvailable} invite codes available"
+#~ msgstr "{invitesAvailable} 個可用的邀請碼"
+
+#: src/view/shell/Drawer.tsx:443
+msgid "{numUnreadNotifications} unread"
+msgstr "{numUnreadNotifications} 個未讀"
+
+#: src/view/com/threadgate/WhoCanReply.tsx:158
+msgid "<0/> members"
+msgstr "<0/> 個成員"
+
+#: src/view/shell/Drawer.tsx:97
+msgid "<0>{0}0> following"
+msgstr ""
+
+#: src/screens/Profile/Header/Metrics.tsx:45
+msgid "<0>{following} 0><1>following1>"
+msgstr "<0>{following} 0><1>個跟隨中1>"
+
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:30
+msgid "<0>Choose your0><1>Recommended1><2>Feeds2>"
+msgstr "<0>選擇你的0><1>推薦1><2>訊息流2>"
+
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:37
+msgid "<0>Follow some0><1>Recommended1><2>Users2>"
+msgstr "<0>跟隨一些0><1>推薦的1><2>使用者2>"
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:21
+msgid "<0>Welcome to0><1>Bluesky1>"
+msgstr "<0>歡迎來到0><1>Bluesky1>"
+
+#: src/screens/Profile/Header/Handle.tsx:42
+msgid "⚠Invalid Handle"
+msgstr "⚠無效的帳號代碼"
+
+#: src/view/com/util/moderation/LabelInfo.tsx:45
+#~ msgid "A content warning has been applied to this {0}."
+#~ msgstr "內容警告已套用到這個{0}。"
+
+#: src/lib/hooks/useOTAUpdate.ts:16
+#~ msgid "A new version of the app is available. Please update to continue using the app."
+#~ msgstr "新版本應用程式已發佈,請更新以繼續使用。"
+
+#: src/view/com/util/ViewHeader.tsx:89
+#: src/view/screens/Search/Search.tsx:649
+msgid "Access navigation links and settings"
+msgstr "存取導覽連結和設定"
+
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:52
+msgid "Access profile and other navigation links"
+msgstr "存取個人資料和其他導覽連結"
+
+#: src/view/com/modals/EditImage.tsx:300
+#: src/view/screens/Settings/index.tsx:470
+msgid "Accessibility"
+msgstr "協助工具"
+
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "account"
+msgstr "帳號"
+
+#: src/screens/Login/LoginForm.tsx:144
+#: src/view/screens/Settings/index.tsx:327
+#: src/view/screens/Settings/index.tsx:743
+msgid "Account"
+msgstr "帳號"
+
+#: src/view/com/profile/ProfileMenu.tsx:139
+msgid "Account blocked"
+msgstr "已封鎖帳號"
+
+#: src/view/com/profile/ProfileMenu.tsx:153
+msgid "Account followed"
+msgstr "已跟隨帳號"
+
+#: src/view/com/profile/ProfileMenu.tsx:113
+msgid "Account muted"
+msgstr "已靜音帳號"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:93
+#: src/lib/moderation/useModerationCauseDescription.ts:91
+msgid "Account Muted"
+msgstr "已靜音帳號"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:82
+msgid "Account Muted by List"
+msgstr "帳號已被列表靜音"
+
+#: src/view/com/util/AccountDropdownBtn.tsx:41
+msgid "Account options"
+msgstr "帳號選項"
+
+#: src/view/com/util/AccountDropdownBtn.tsx:25
+msgid "Account removed from quick access"
+msgstr "已從快速存取中移除帳號"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:137
+#: src/view/com/profile/ProfileMenu.tsx:128
+msgid "Account unblocked"
+msgstr "已取消封鎖帳號"
+
+#: src/view/com/profile/ProfileMenu.tsx:166
+msgid "Account unfollowed"
+msgstr "已取消跟隨帳號"
+
+#: src/view/com/profile/ProfileMenu.tsx:102
+msgid "Account unmuted"
+msgstr "已取消靜音帳號"
+
+#: src/components/dialogs/MutedWords.tsx:164
+#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:150
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
+#: src/view/com/modals/UserAddRemoveLists.tsx:219
+#: src/view/screens/ProfileList.tsx:827
+msgid "Add"
+msgstr "新增"
+
+#: src/view/com/modals/SelfLabel.tsx:56
+msgid "Add a content warning"
+msgstr "新增內容警告"
+
+#: src/view/screens/ProfileList.tsx:817
+msgid "Add a user to this list"
+msgstr "將使用者新增至此列表"
+
+#: src/components/dialogs/SwitchAccount.tsx:55
+#: src/view/screens/Settings/index.tsx:402
+#: src/view/screens/Settings/index.tsx:411
+msgid "Add account"
+msgstr "新增帳號"
+
+#: src/view/com/composer/photos/Gallery.tsx:119
+#: src/view/com/composer/photos/Gallery.tsx:180
+#: src/view/com/modals/AltImage.tsx:117
+msgid "Add alt text"
+msgstr "新增替代文字"
+
+#: src/view/screens/AppPasswords.tsx:104
+#: src/view/screens/AppPasswords.tsx:145
+#: src/view/screens/AppPasswords.tsx:158
+msgid "Add App Password"
+msgstr "新增應用程式專用密碼"
+
+#: src/view/com/modals/report/InputIssueDetails.tsx:41
+#: src/view/com/modals/report/Modal.tsx:191
+#~ msgid "Add details"
+#~ msgstr "新增細節"
+
+#: src/view/com/modals/report/Modal.tsx:194
+#~ msgid "Add details to report"
+#~ msgstr "補充回報詳細內容"
+
+#: src/view/com/composer/Composer.tsx:467
+msgid "Add link card"
+msgstr "新增連結卡片"
+
+#: src/view/com/composer/Composer.tsx:472
+msgid "Add link card:"
+msgstr "新增連結卡片:"
+
+#: src/components/dialogs/MutedWords.tsx:157
+msgid "Add mute word for configured settings"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:86
+msgid "Add muted words and tags"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:416
+msgid "Add the following DNS record to your domain:"
+msgstr "將以下 DNS 記錄新增到你的網域:"
+
+#: src/view/com/profile/ProfileMenu.tsx:263
+#: src/view/com/profile/ProfileMenu.tsx:266
+msgid "Add to Lists"
+msgstr "新增至列表"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:234
+msgid "Add to my feeds"
+msgstr "新增至自訂訊息流"
+
+#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:139
+msgid "Added"
+msgstr "已新增"
+
+#: src/view/com/modals/ListAddRemoveUsers.tsx:191
+#: src/view/com/modals/UserAddRemoveLists.tsx:144
+msgid "Added to list"
+msgstr "新增至列表"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:108
+msgid "Added to my feeds"
+msgstr "新增至自訂訊息流"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:173
+msgid "Adjust the number of likes a reply must have to be shown in your feed."
+msgstr "調整回覆要在你的訊息流顯示所需的最低喜歡數。"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:117
+#: src/view/com/modals/SelfLabel.tsx:75
+msgid "Adult Content"
+msgstr "成人內容"
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:141
+#~ msgid "Adult content can only be enabled via the Web at <0/>."
+#~ msgstr "成人內容只能在網頁上<0/>啟用。"
+
+#: src/components/moderation/LabelPreference.tsx:242
+msgid "Adult content is disabled."
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:375
+#: src/view/screens/Settings/index.tsx:684
+msgid "Advanced"
+msgstr "詳細設定"
+
+#: src/view/screens/Feeds.tsx:666
+msgid "All the feeds you've saved, right in one place."
+msgstr "你已儲存的所有訊息流都集中在一處。"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:178
+#: src/view/com/modals/ChangePassword.tsx:170
+msgid "Already have a code?"
+msgstr "已經有重設碼了?"
+
+#: src/screens/Login/ChooseAccountForm.tsx:39
+msgid "Already signed in as @{0}"
+msgstr "已以@{0}身份登入"
+
+#: src/view/com/composer/photos/Gallery.tsx:130
+msgid "ALT"
+msgstr "ALT"
+
+#: src/view/com/modals/EditImage.tsx:316
+msgid "Alt text"
+msgstr "替代文字"
+
+#: src/view/com/composer/photos/Gallery.tsx:209
+msgid "Alt text describes images for blind and low-vision users, and helps give context to everyone."
+msgstr "替代文字為盲人和視覺受損的使用者描述圖片,並幫助所有人提供上下文。"
+
+#: src/view/com/modals/VerifyEmail.tsx:124
+msgid "An email has been sent to {0}. It includes a confirmation code which you can enter below."
+msgstr "一封電子郵件已發送至 {0}。請查閱郵件並在下方輸入驗證碼。"
+
+#: src/view/com/modals/ChangeEmail.tsx:119
+msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below."
+msgstr "一封電子郵件已發送至先前填寫的電子郵件地址 {0}。請查閱郵件並在下方輸入驗證碼。"
+
+#: src/lib/moderation/useReportOptions.ts:26
+msgid "An issue not included in these options"
+msgstr ""
+
+#: src/view/com/profile/FollowButton.tsx:35
+#: src/view/com/profile/FollowButton.tsx:45
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:188
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:198
+msgid "An issue occurred, please try again."
+msgstr "出現問題,請重試。"
+
+#: src/view/com/notifications/FeedItem.tsx:240
+#: src/view/com/threadgate/WhoCanReply.tsx:178
+msgid "and"
+msgstr "和"
+
+#: src/screens/Onboarding/index.tsx:32
+msgid "Animals"
+msgstr "動物"
+
+#: src/lib/moderation/useReportOptions.ts:31
+msgid "Anti-Social Behavior"
+msgstr ""
+
+#: src/view/screens/LanguageSettings.tsx:95
+msgid "App Language"
+msgstr "應用程式語言"
+
+#: src/view/screens/AppPasswords.tsx:223
+msgid "App password deleted"
+msgstr "應用程式專用密碼已刪除"
+
+#: src/view/com/modals/AddAppPasswords.tsx:135
+msgid "App Password names can only contain letters, numbers, spaces, dashes, and underscores."
+msgstr "應用程式專用密碼只能包含字母、數字、空格、破折號及底線。"
+
+#: src/view/com/modals/AddAppPasswords.tsx:100
+msgid "App Password names must be at least 4 characters long."
+msgstr "應用程式專用密碼名稱必須至少為 4 個字元。"
+
+#: src/view/screens/Settings/index.tsx:695
+msgid "App password settings"
+msgstr "應用程式專用密碼設定"
+
+#: src/view/screens/Settings.tsx:650
+#~ msgid "App passwords"
+#~ msgstr "應用程式專用密碼"
+
+#: src/Navigation.tsx:251
+#: src/view/screens/AppPasswords.tsx:189
+#: src/view/screens/Settings/index.tsx:704
+msgid "App Passwords"
+msgstr "應用程式專用密碼"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:133
+#: src/components/moderation/LabelsOnMeDialog.tsx:136
+msgid "Appeal"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:201
+msgid "Appeal \"{0}\" label"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:337
+#: src/view/com/util/forms/PostDropdownBtn.tsx:346
+#~ msgid "Appeal content warning"
+#~ msgstr "申訴內容警告"
+
+#: src/view/com/modals/AppealLabel.tsx:65
+#~ msgid "Appeal Content Warning"
+#~ msgstr "申訴內容警告"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:192
+msgid "Appeal submitted."
+msgstr ""
+
+#: src/view/com/util/moderation/LabelInfo.tsx:52
+#~ msgid "Appeal this decision"
+#~ msgstr "對此決定提出申訴"
+
+#: src/view/com/util/moderation/LabelInfo.tsx:56
+#~ msgid "Appeal this decision."
+#~ msgstr "對此決定提出申訴。"
+
+#: src/view/screens/Settings/index.tsx:485
+msgid "Appearance"
+msgstr "外觀"
+
+#: src/view/screens/AppPasswords.tsx:265
+msgid "Are you sure you want to delete the app password \"{name}\"?"
+msgstr "你確定要刪除這個應用程式專用密碼「{name}」嗎?"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:280
+msgid "Are you sure you want to remove {0} from your feeds?"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:509
+msgid "Are you sure you'd like to discard this draft?"
+msgstr "你確定要捨棄此草稿嗎?"
+
+#: src/components/dialogs/MutedWords.tsx:281
+msgid "Are you sure?"
+msgstr "你確定嗎?"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:322
+#~ msgid "Are you sure? This cannot be undone."
+#~ msgstr "你確定嗎?此操作無法撤銷。"
+
+#: src/view/com/composer/select-language/SuggestedLanguage.tsx:60
+msgid "Are you writing in <0>{0}0>?"
+msgstr "你正在使用 <0>{0}0> 書寫嗎?"
+
+#: src/screens/Onboarding/index.tsx:26
+msgid "Art"
+msgstr "藝術"
+
+#: src/view/com/modals/SelfLabel.tsx:123
+msgid "Artistic or non-erotic nudity."
+msgstr "藝術作品或非情色的裸露。"
+
+#: src/screens/Signup/StepHandle.tsx:118
+msgid "At least 3 characters"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:246
+#: src/components/moderation/LabelsOnMeDialog.tsx:247
+#: src/screens/Login/ChooseAccountForm.tsx:73
+#: src/screens/Login/ChooseAccountForm.tsx:78
+#: src/screens/Login/ForgotPasswordForm.tsx:129
+#: src/screens/Login/ForgotPasswordForm.tsx:135
+#: src/screens/Login/LoginForm.tsx:221
+#: src/screens/Login/LoginForm.tsx:227
+#: src/screens/Login/SetNewPasswordForm.tsx:160
+#: src/screens/Login/SetNewPasswordForm.tsx:166
+#: src/screens/Profile/Header/Shell.tsx:96
+#: src/screens/Signup/index.tsx:179
+#: src/view/com/util/ViewHeader.tsx:87
+msgid "Back"
+msgstr "返回"
+
+#: src/view/com/post-thread/PostThread.tsx:480
+#~ msgctxt "action"
+#~ msgid "Back"
+#~ msgstr "返回"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:144
+msgid "Based on your interest in {interestsText}"
+msgstr "因為你對 {interestsText} 感興趣"
+
+#: src/view/screens/Settings/index.tsx:542
+msgid "Basics"
+msgstr "基礎資訊"
+
+#: src/components/dialogs/BirthDateSettings.tsx:107
+msgid "Birthday"
+msgstr "生日"
+
+#: src/view/screens/Settings/index.tsx:359
+msgid "Birthday:"
+msgstr "生日:"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+msgid "Block"
+msgstr "封鎖"
+
+#: src/view/com/profile/ProfileMenu.tsx:300
+#: src/view/com/profile/ProfileMenu.tsx:307
+msgid "Block Account"
+msgstr "封鎖帳號"
+
+#: src/view/com/profile/ProfileMenu.tsx:344
+msgid "Block Account?"
+msgstr "封鎖帳號?"
+
+#: src/view/screens/ProfileList.tsx:530
+msgid "Block accounts"
+msgstr "封鎖帳號"
+
+#: src/view/screens/ProfileList.tsx:478
+#: src/view/screens/ProfileList.tsx:634
+msgid "Block list"
+msgstr "封鎖列表"
+
+#: src/view/screens/ProfileList.tsx:629
+msgid "Block these accounts?"
+msgstr "封鎖這些帳號?"
+
+#: src/view/screens/ProfileList.tsx:320
+#~ msgid "Block this List"
+#~ msgstr "封鎖此列表"
+
+#: src/view/com/lists/ListCard.tsx:110
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:55
+msgid "Blocked"
+msgstr "已封鎖"
+
+#: src/screens/Moderation/index.tsx:267
+msgid "Blocked accounts"
+msgstr "已封鎖帳號"
+
+#: src/Navigation.tsx:134
+#: src/view/screens/ModerationBlockedAccounts.tsx:107
+msgid "Blocked Accounts"
+msgstr "已封鎖帳號"
+
+#: src/view/com/profile/ProfileMenu.tsx:356
+msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
+msgstr "被封鎖的帳號無法在你的貼文中回覆、提及你,或以其他方式與你互動。"
+
+#: src/view/screens/ModerationBlockedAccounts.tsx:115
+msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours."
+msgstr "被封鎖的帳號無法在你的貼文中回覆、提及你,或以其他方式與你互動。你將不會看到他們所發佈的內容,同樣他們也無法查看你的內容。"
+
+#: src/view/com/post-thread/PostThread.tsx:313
+msgid "Blocked post."
+msgstr "已封鎖貼文。"
+
+#: src/screens/Profile/Sections/Labels.tsx:152
+msgid "Blocking does not prevent this labeler from placing labels on your account."
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:631
+msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you."
+msgstr "封鎖是公開的。被封鎖的帳號無法在你的貼文中回覆、提及你,或以其他方式與你互動。"
+
+#: src/view/com/profile/ProfileMenu.tsx:353
+msgid "Blocking will not prevent labels from being applied on your account, but it will stop this account from replying in your threads or interacting with you."
+msgstr ""
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:98
+#: src/view/com/auth/SplashScreen.web.tsx:169
+msgid "Blog"
+msgstr "部落格"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:32
+#: src/view/com/auth/server-input/index.tsx:89
+#: src/view/com/auth/server-input/index.tsx:91
+msgid "Bluesky"
+msgstr "Bluesky"
+
+#: src/view/com/auth/server-input/index.tsx:154
+msgid "Bluesky is an open network where you can choose your hosting provider. Custom hosting is now available in beta for developers."
+msgstr "Bluesky 是一個開放的網路,你可以自行挑選託管服務提供商。現在,開發者也可以參與自訂託管服務的測試版本。"
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:80
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:82
+msgid "Bluesky is flexible."
+msgstr "Bluesky 非常靈活。"
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:69
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:71
+msgid "Bluesky is open."
+msgstr "Bluesky 保持開放。"
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:56
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:58
+msgid "Bluesky is public."
+msgstr "Bluesky 為公眾而生。"
+
+#: src/view/com/modals/Waitlist.tsx:70
+#~ msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon."
+#~ msgstr "Bluesky 使用邀請制來打造更健康的社群環境。如果你不認識擁有邀請碼的人,你可以先填寫並加入候補清單,我們會儘快審核並發送邀請碼。"
+
+#: src/screens/Moderation/index.tsx:533
+msgid "Bluesky will not show your profile and posts to logged-out users. Other apps may not honor this request. This does not make your account private."
+msgstr "Bluesky 不會向未登入的使用者顯示你的個人資料和貼文。但其他應用可能不會遵照此請求,這無法確保你的帳號隱私。"
+
+#: src/view/com/modals/ServerInput.tsx:78
+#~ msgid "Bluesky.Social"
+#~ msgstr "Bluesky.Social"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:53
+msgid "Blur images"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:51
+msgid "Blur images and filter from feeds"
+msgstr ""
+
+#: src/screens/Onboarding/index.tsx:33
+msgid "Books"
+msgstr "書籍"
+
+#: src/view/screens/Settings/index.tsx:893
+#~ msgid "Build version {0} {1}"
+#~ msgstr "建構版本號 {0} {1}"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:92
+#: src/view/com/auth/SplashScreen.web.tsx:166
+msgid "Business"
+msgstr "商務"
+
+#: src/view/com/modals/ServerInput.tsx:115
+#~ msgid "Button disabled. Input custom domain to proceed."
+#~ msgstr "按鈕已停用。請輸入自訂網域以繼續。"
+
+#: src/view/com/profile/ProfileSubpageHeader.tsx:157
+msgid "by —"
+msgstr "來自 —"
+
+#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:100
+msgid "by {0}"
+msgstr "來自 {0}"
+
+#: src/components/LabelingServiceCard/index.tsx:57
+msgid "By {0}"
+msgstr "來自 {0}"
+
+#: src/view/com/profile/ProfileSubpageHeader.tsx:161
+msgid "by <0/>"
+msgstr "來自 <0/>"
+
+#: src/screens/Signup/StepInfo/Policies.tsx:74
+msgid "By creating an account you agree to the {els}."
+msgstr ""
+
+#: src/view/com/profile/ProfileSubpageHeader.tsx:159
+msgid "by you"
+msgstr "來自你"
+
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:77
+msgid "Camera"
+msgstr "相機"
+
+#: src/view/com/modals/AddAppPasswords.tsx:217
+msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long."
+msgstr "只能包含字母、數字、空格、破折號及底線。長度必須至少 4 個字元,但不超過 32 個字元。"
+
+#: src/components/Menu/index.tsx:213
+#: src/components/Prompt.tsx:113
+#: src/components/Prompt.tsx:115
+#: src/components/TagMenu/index.tsx:268
+#: src/view/com/composer/Composer.tsx:317
+#: src/view/com/composer/Composer.tsx:322
+#: src/view/com/modals/ChangeEmail.tsx:218
+#: src/view/com/modals/ChangeEmail.tsx:220
+#: src/view/com/modals/ChangeHandle.tsx:154
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
+#: src/view/com/modals/CreateOrEditList.tsx:356
+#: src/view/com/modals/crop-image/CropImage.web.tsx:138
+#: src/view/com/modals/EditImage.tsx:324
+#: src/view/com/modals/EditProfile.tsx:250
+#: src/view/com/modals/InAppBrowserConsent.tsx:78
+#: src/view/com/modals/InAppBrowserConsent.tsx:80
+#: src/view/com/modals/LinkWarning.tsx:105
+#: src/view/com/modals/LinkWarning.tsx:107
+#: src/view/com/modals/Repost.tsx:88
+#: src/view/com/modals/VerifyEmail.tsx:247
+#: src/view/com/modals/VerifyEmail.tsx:253
+#: src/view/screens/Search/Search.tsx:718
+#: src/view/shell/desktop/Search.tsx:239
+msgid "Cancel"
+msgstr "取消"
+
+#: src/view/com/modals/CreateOrEditList.tsx:361
+#: src/view/com/modals/DeleteAccount.tsx:155
+#: src/view/com/modals/DeleteAccount.tsx:233
+msgctxt "action"
+msgid "Cancel"
+msgstr "取消"
+
+#: src/view/com/modals/DeleteAccount.tsx:151
+#: src/view/com/modals/DeleteAccount.tsx:229
+msgid "Cancel account deletion"
+msgstr "取消刪除帳號"
+
+#: src/view/com/modals/ChangeHandle.tsx:150
+msgid "Cancel change handle"
+msgstr "取消修改帳號代碼"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:135
+msgid "Cancel image crop"
+msgstr "取消裁剪圖片"
+
+#: src/view/com/modals/EditProfile.tsx:245
+msgid "Cancel profile editing"
+msgstr "取消編輯個人資料"
+
+#: src/view/com/modals/Repost.tsx:79
+msgid "Cancel quote post"
+msgstr "取消引用貼文"
+
+#: src/view/com/modals/ListAddRemoveUsers.tsx:87
+#: src/view/shell/desktop/Search.tsx:235
+msgid "Cancel search"
+msgstr "取消搜尋"
+
+#: src/view/com/modals/Waitlist.tsx:136
+#~ msgid "Cancel waitlist signup"
+#~ msgstr "取消候補清單註冊"
+
+#: src/view/com/modals/LinkWarning.tsx:106
+msgid "Cancels opening the linked website"
+msgstr ""
+
+#: src/view/com/modals/VerifyEmail.tsx:152
+msgid "Change"
+msgstr "變更"
+
+#: src/view/screens/Settings/index.tsx:353
+msgctxt "action"
+msgid "Change"
+msgstr "變更"
+
+#: src/view/screens/Settings/index.tsx:716
+msgid "Change handle"
+msgstr "變更帳號代碼"
+
+#: src/view/com/modals/ChangeHandle.tsx:162
+#: src/view/screens/Settings/index.tsx:727
+msgid "Change Handle"
+msgstr "變更帳號代碼"
+
+#: src/view/com/modals/VerifyEmail.tsx:147
+msgid "Change my email"
+msgstr "變更我的電子郵件地址"
+
+#: src/view/screens/Settings/index.tsx:754
+msgid "Change password"
+msgstr "變更密碼"
+
+#: src/view/com/modals/ChangePassword.tsx:141
+#: src/view/screens/Settings/index.tsx:765
+msgid "Change Password"
+msgstr "變更密碼"
+
+#: src/view/com/composer/select-language/SuggestedLanguage.tsx:73
+msgid "Change post language to {0}"
+msgstr "變更貼文的發佈語言至 {0}"
+
+#: src/view/screens/Settings/index.tsx:733
+#~ msgid "Change your Bluesky password"
+#~ msgstr "變更你的 Bluesky 密碼"
+
+#: src/view/com/modals/ChangeEmail.tsx:109
+msgid "Change Your Email"
+msgstr "變更你的電子郵件地址"
+
+#: src/screens/Deactivated.tsx:72
+#: src/screens/Deactivated.tsx:76
+msgid "Check my status"
+msgstr "檢查我的狀態"
+
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:121
+msgid "Check out some recommended feeds. Tap + to add them to your list of pinned feeds."
+msgstr "來看看一些推薦的訊息流吧。點擊 + 將它們新增到你的釘選訊息流清單中。"
+
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:185
+msgid "Check out some recommended users. Follow them to see similar users."
+msgstr "來看看一些推薦的使用者吧。跟隨人來查看類似的使用者。"
+
+#: src/view/com/modals/DeleteAccount.tsx:168
+msgid "Check your inbox for an email with the confirmation code to enter below:"
+msgstr "查看寄送至你電子郵件地址的確認郵件,然後在下方輸入收到的驗證碼:"
+
+#: src/view/com/modals/Threadgate.tsx:72
+msgid "Choose \"Everybody\" or \"Nobody\""
+msgstr "選擇「所有人」或「沒有人」"
+
+#: src/view/screens/Settings/index.tsx:697
+#~ msgid "Choose a new Bluesky username or create"
+#~ msgstr "選擇一個新的 Bluesky 使用者名稱或重新建立"
+
+#: src/view/com/auth/server-input/index.tsx:79
+msgid "Choose Service"
+msgstr "選擇服務"
+
+#: src/screens/Onboarding/StepFinished.tsx:139
+msgid "Choose the algorithms that power your custom feeds."
+msgstr "選擇你的自訂訊息流所使用的演算法。"
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:83
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:85
+msgid "Choose the algorithms that power your experience with custom feeds."
+msgstr "選擇你的自訂訊息流體驗所使用的演算法。"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:104
+msgid "Choose your main feeds"
+msgstr "選擇你的主要訊息流"
+
+#: src/screens/Signup/StepInfo/index.tsx:112
+msgid "Choose your password"
+msgstr "選擇你的密碼"
+
+#: src/view/screens/Settings/index.tsx:868
+msgid "Clear all legacy storage data"
+msgstr "清除所有舊儲存資料"
+
+#: src/view/screens/Settings/index.tsx:871
+msgid "Clear all legacy storage data (restart after this)"
+msgstr "清除所有舊儲存資料(並重啟)"
+
+#: src/view/screens/Settings/index.tsx:880
+msgid "Clear all storage data"
+msgstr "清除所有資料"
+
+#: src/view/screens/Settings/index.tsx:883
+msgid "Clear all storage data (restart after this)"
+msgstr "清除所有資料(並重啟)"
+
+#: src/view/com/util/forms/SearchInput.tsx:88
+#: src/view/screens/Search/Search.tsx:699
+msgid "Clear search query"
+msgstr "清除搜尋記錄"
+
+#: src/view/screens/Settings/index.tsx:869
+msgid "Clears all legacy storage data"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:881
+msgid "Clears all storage data"
+msgstr ""
+
+#: src/view/screens/Support.tsx:40
+msgid "click here"
+msgstr "點擊這裡"
+
+#: src/components/TagMenu/index.web.tsx:138
+msgid "Click here to open tag menu for {tag}"
+msgstr ""
+
+#: src/components/RichText.tsx:192
+msgid "Click here to open tag menu for #{tag}"
+msgstr ""
+
+#: src/screens/Onboarding/index.tsx:35
+msgid "Climate"
+msgstr "氣象"
+
+#: src/view/com/modals/ChangePassword.tsx:267
+#: src/view/com/modals/ChangePassword.tsx:270
+msgid "Close"
+msgstr "關閉"
+
+#: src/components/Dialog/index.web.tsx:106
+#: src/components/Dialog/index.web.tsx:218
+msgid "Close active dialog"
+msgstr "關閉打開的對話框"
+
+#: src/screens/Login/PasswordUpdatedForm.tsx:38
+msgid "Close alert"
+msgstr "關閉警告"
+
+#: src/view/com/util/BottomSheetCustomBackdrop.tsx:36
+msgid "Close bottom drawer"
+msgstr "關閉底部抽屜"
+
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:36
+msgid "Close image"
+msgstr "關閉圖片"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:129
+msgid "Close image viewer"
+msgstr "關閉圖片檢視器"
+
+#: src/view/shell/index.web.tsx:55
+msgid "Close navigation footer"
+msgstr "關閉導覽頁腳"
+
+#: src/components/Menu/index.tsx:207
+#: src/components/TagMenu/index.tsx:262
+msgid "Close this dialog"
+msgstr ""
+
+#: src/view/shell/index.web.tsx:56
+msgid "Closes bottom navigation bar"
+msgstr "關閉底部導覽列"
+
+#: src/screens/Login/PasswordUpdatedForm.tsx:39
+msgid "Closes password update alert"
+msgstr "關閉密碼更新警告"
+
+#: src/view/com/composer/Composer.tsx:319
+msgid "Closes post composer and discards post draft"
+msgstr "關閉貼文編輯頁並捨棄草稿"
+
+#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:37
+msgid "Closes viewer for header image"
+msgstr "關閉標題圖片檢視器"
+
+#: src/view/com/notifications/FeedItem.tsx:321
+msgid "Collapses list of users for a given notification"
+msgstr "折疊指定通知的使用者清單"
+
+#: src/screens/Onboarding/index.tsx:41
+msgid "Comedy"
+msgstr "喜劇"
+
+#: src/screens/Onboarding/index.tsx:27
+msgid "Comics"
+msgstr "漫畫"
+
+#: src/Navigation.tsx:241
+#: src/view/screens/CommunityGuidelines.tsx:32
+msgid "Community Guidelines"
+msgstr "社群準則"
+
+#: src/screens/Onboarding/StepFinished.tsx:152
+msgid "Complete onboarding and start using your account"
+msgstr "完成初始設定並開始使用你的帳號"
+
+#: src/screens/Signup/index.tsx:154
+msgid "Complete the challenge"
+msgstr "完成驗證"
+
+#: src/view/com/composer/Composer.tsx:438
+msgid "Compose posts up to {MAX_GRAPHEME_LENGTH} characters in length"
+msgstr "撰寫貼文的長度最多為 {MAX_GRAPHEME_LENGTH} 個字元"
+
+#: src/view/com/composer/Prompt.tsx:24
+msgid "Compose reply"
+msgstr "撰寫回覆"
+
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:81
+msgid "Configure content filtering setting for category: {0}"
+msgstr "調整類別的內容過濾設定:{0}"
+
+#: src/components/moderation/LabelPreference.tsx:81
+msgid "Configure content filtering setting for category: {name}"
+msgstr ""
+
+#: src/components/moderation/LabelPreference.tsx:244
+msgid "Configured in <0>moderation settings0>."
+msgstr ""
+
+#: src/components/Prompt.tsx:153
+#: src/components/Prompt.tsx:156
+#: src/view/com/modals/SelfLabel.tsx:154
+#: src/view/com/modals/VerifyEmail.tsx:231
+#: src/view/com/modals/VerifyEmail.tsx:233
+#: src/view/screens/PreferencesFollowingFeed.tsx:308
+#: src/view/screens/PreferencesThreads.tsx:159
+msgid "Confirm"
+msgstr "確認"
+
+#: src/view/com/modals/Confirm.tsx:75
+#: src/view/com/modals/Confirm.tsx:78
+#~ msgctxt "action"
+#~ msgid "Confirm"
+#~ msgstr "確認"
+
+#: src/view/com/modals/ChangeEmail.tsx:193
+#: src/view/com/modals/ChangeEmail.tsx:195
+msgid "Confirm Change"
+msgstr "確認更改"
+
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:35
+msgid "Confirm content language settings"
+msgstr "確認內容語言設定"
+
+#: src/view/com/modals/DeleteAccount.tsx:219
+msgid "Confirm delete account"
+msgstr "確認刪除帳號"
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:156
+#~ msgid "Confirm your age to enable adult content."
+#~ msgstr "確認你的年齡以顯示成人內容。"
+
+#: src/screens/Moderation/index.tsx:301
+msgid "Confirm your age:"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:292
+msgid "Confirm your birthdate"
+msgstr ""
+
+#: src/view/com/modals/ChangeEmail.tsx:157
+#: src/view/com/modals/DeleteAccount.tsx:175
+#: src/view/com/modals/DeleteAccount.tsx:181
+#: src/view/com/modals/VerifyEmail.tsx:165
+msgid "Confirmation code"
+msgstr "驗證碼"
+
+#: src/view/com/modals/Waitlist.tsx:120
+#~ msgid "Confirms signing up {email} to the waitlist"
+#~ msgstr "確認將 {email} 註冊到候補列表"
+
+#: src/screens/Login/LoginForm.tsx:248
+msgid "Connecting..."
+msgstr "連線中…"
+
+#: src/screens/Signup/index.tsx:219
+msgid "Contact support"
+msgstr "聯絡支援"
+
+#: src/components/moderation/LabelsOnMe.tsx:42
+msgid "content"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:18
+msgid "Content Blocked"
+msgstr ""
+
+#: src/view/screens/Moderation.tsx:83
+#~ msgid "Content filtering"
+#~ msgstr "內容過濾"
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:44
+#~ msgid "Content Filtering"
+#~ msgstr "內容過濾"
+
+#: src/screens/Moderation/index.tsx:285
+msgid "Content filters"
+msgstr "內容過濾"
+
+#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74
+#: src/view/screens/LanguageSettings.tsx:278
+msgid "Content Languages"
+msgstr "內容語言"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:75
+#: src/lib/moderation/useModerationCauseDescription.ts:75
+msgid "Content Not Available"
+msgstr "內容不可用"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:46
+#: src/components/moderation/ScreenHider.tsx:99
+#: src/lib/moderation/useGlobalLabelStrings.ts:22
+#: src/lib/moderation/useModerationCauseDescription.ts:38
+msgid "Content Warning"
+msgstr "內容警告"
+
+#: src/view/com/composer/labels/LabelsBtn.tsx:31
+msgid "Content warnings"
+msgstr "內容警告"
+
+#: src/components/Menu/index.web.tsx:84
+msgid "Context menu backdrop, click to close the menu."
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:161
+#: src/screens/Onboarding/StepFollowingFeed.tsx:154
+#: src/screens/Onboarding/StepInterests/index.tsx:252
+#: src/screens/Onboarding/StepModeration/index.tsx:103
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:118
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:96
+msgid "Continue"
+msgstr "繼續"
+
+#: src/components/AccountList.tsx:108
+msgid "Continue as {0} (currently signed in)"
+msgstr ""
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:151
+#: src/screens/Onboarding/StepInterests/index.tsx:249
+#: src/screens/Onboarding/StepModeration/index.tsx:100
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:115
+#: src/screens/Signup/index.tsx:198
+msgid "Continue to next step"
+msgstr "繼續下一步"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:158
+msgid "Continue to the next step"
+msgstr "繼續下一步"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:199
+msgid "Continue to the next step without following any accounts"
+msgstr "繼續下一步,不跟隨任何帳號"
+
+#: src/screens/Onboarding/index.tsx:44
+msgid "Cooking"
+msgstr "烹飪"
+
+#: src/view/com/modals/AddAppPasswords.tsx:196
+#: src/view/com/modals/InviteCodes.tsx:183
+msgid "Copied"
+msgstr "已複製"
+
+#: src/view/screens/Settings/index.tsx:251
+msgid "Copied build version to clipboard"
+msgstr "已複製建構版本號至剪貼簿"
+
+#: src/view/com/modals/AddAppPasswords.tsx:77
+#: src/view/com/modals/ChangeHandle.tsx:326
+#: src/view/com/modals/InviteCodes.tsx:153
+#: src/view/com/util/forms/PostDropdownBtn.tsx:158
+msgid "Copied to clipboard"
+msgstr "已複製至剪貼簿"
+
+#: src/view/com/modals/AddAppPasswords.tsx:190
+msgid "Copies app password"
+msgstr "複製應用程式專用密碼"
+
+#: src/view/com/modals/AddAppPasswords.tsx:189
+msgid "Copy"
+msgstr "複製"
+
+#: src/view/com/modals/ChangeHandle.tsx:480
+msgid "Copy {0}"
+msgstr "複製 {0}"
+
+#: src/view/screens/ProfileList.tsx:388
+msgid "Copy link to list"
+msgstr "複製列表連結"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
+msgid "Copy link to post"
+msgstr "複製貼文連結"
+
+#: src/view/com/profile/ProfileHeader.tsx:295
+#~ msgid "Copy link to profile"
+#~ msgstr "複製個人資料連結"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:220
+#: src/view/com/util/forms/PostDropdownBtn.tsx:222
+msgid "Copy post text"
+msgstr "複製貼文文字"
+
+#: src/Navigation.tsx:246
+#: src/view/screens/CopyrightPolicy.tsx:29
+msgid "Copyright Policy"
+msgstr "著作權政策"
+
+#: src/view/screens/ProfileFeed.tsx:103
+msgid "Could not load feed"
+msgstr "無法載入訊息流"
+
+#: src/view/screens/ProfileList.tsx:907
+msgid "Could not load list"
+msgstr "無法載入列表"
+
+#: src/view/com/auth/create/Step2.tsx:91
+#~ msgid "Country"
+#~ msgstr "國家"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:65
+#: src/view/com/auth/SplashScreen.tsx:75
+#: src/view/com/auth/SplashScreen.web.tsx:104
+msgid "Create a new account"
+msgstr "建立新帳號"
+
+#: src/view/screens/Settings/index.tsx:403
+msgid "Create a new Bluesky account"
+msgstr "建立新的 Bluesky 帳號"
+
+#: src/screens/Signup/index.tsx:129
+msgid "Create Account"
+msgstr "建立帳號"
+
+#: src/view/com/modals/AddAppPasswords.tsx:227
+msgid "Create App Password"
+msgstr "建立應用程式專用密碼"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:55
+#: src/view/com/auth/SplashScreen.tsx:66
+#: src/view/com/auth/SplashScreen.web.tsx:95
+msgid "Create new account"
+msgstr "建立新帳號"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:93
+msgid "Create report for {0}"
+msgstr ""
+
+#: src/view/screens/AppPasswords.tsx:246
+msgid "Created {0}"
+msgstr "{0} 已建立"
+
+#: src/view/screens/ProfileFeed.tsx:616
+#~ msgid "Created by <0/>"
+#~ msgstr "由 <0/> 建立"
+
+#: src/view/screens/ProfileFeed.tsx:614
+#~ msgid "Created by you"
+#~ msgstr "由你建立"
+
+#: src/view/com/composer/Composer.tsx:469
+msgid "Creates a card with a thumbnail. The card links to {url}"
+msgstr "建立帶有縮圖的卡片。該卡片連結到 {url}"
+
+#: src/screens/Onboarding/index.tsx:29
+msgid "Culture"
+msgstr "文化"
+
+#: src/view/com/auth/server-input/index.tsx:97
+#: src/view/com/auth/server-input/index.tsx:99
+msgid "Custom"
+msgstr "自訂"
+
+#: src/view/com/modals/ChangeHandle.tsx:388
+msgid "Custom domain"
+msgstr "自訂網域"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:107
+#: src/view/screens/Feeds.tsx:692
+msgid "Custom feeds built by the community bring you new experiences and help you find the content you love."
+msgstr "由社群打造的自訂訊息流帶來新鮮體驗,協助你找到所愛內容。"
+
+#: src/view/screens/PreferencesExternalEmbeds.tsx:55
+msgid "Customize media from external sites."
+msgstr "自訂外部網站的媒體。"
+
+#: src/view/screens/Settings.tsx:687
+#~ msgid "Danger Zone"
+#~ msgstr "危險區域"
+
+#: src/view/screens/Settings/index.tsx:504
+#: src/view/screens/Settings/index.tsx:530
+msgid "Dark"
+msgstr "深黑"
+
+#: src/view/screens/Debug.tsx:63
+msgid "Dark mode"
+msgstr "深色模式"
+
+#: src/view/screens/Settings/index.tsx:517
+msgid "Dark Theme"
+msgstr "深色主題"
+
+#: src/screens/Signup/StepInfo/index.tsx:132
+msgid "Date of birth"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:841
+msgid "Debug Moderation"
+msgstr ""
+
+#: src/view/screens/Debug.tsx:83
+msgid "Debug panel"
+msgstr "除錯面板"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:319
+#: src/view/screens/AppPasswords.tsx:268
+#: src/view/screens/ProfileList.tsx:613
+msgid "Delete"
+msgstr "刪除"
+
+#: src/view/screens/Settings/index.tsx:796
+msgid "Delete account"
+msgstr "刪除帳號"
+
+#: src/view/com/modals/DeleteAccount.tsx:86
+msgid "Delete Account"
+msgstr "刪除帳號"
+
+#: src/view/screens/AppPasswords.tsx:239
+msgid "Delete app password"
+msgstr "刪除應用程式專用密碼"
+
+#: src/view/screens/AppPasswords.tsx:263
+msgid "Delete app password?"
+msgstr "刪除應用程式專用密碼?"
+
+#: src/view/screens/ProfileList.tsx:415
+msgid "Delete List"
+msgstr "刪除列表"
+
+#: src/view/com/modals/DeleteAccount.tsx:222
+msgid "Delete my account"
+msgstr "刪除我的帳號"
+
+#: src/view/screens/Settings.tsx:706
+#~ msgid "Delete my account…"
+#~ msgstr "刪除我的帳號…"
+
+#: src/view/screens/Settings/index.tsx:808
+msgid "Delete My Account…"
+msgstr "刪除我的帳號…"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:302
+#: src/view/com/util/forms/PostDropdownBtn.tsx:304
+msgid "Delete post"
+msgstr "刪除貼文"
+
+#: src/view/screens/ProfileList.tsx:608
+msgid "Delete this list?"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:314
+msgid "Delete this post?"
+msgstr "刪除這條貼文?"
+
+#: src/view/com/util/post-embeds/QuoteEmbed.tsx:64
+msgid "Deleted"
+msgstr "已刪除"
+
+#: src/view/com/post-thread/PostThread.tsx:305
+msgid "Deleted post."
+msgstr "已刪除貼文。"
+
+#: src/view/com/modals/CreateOrEditList.tsx:301
+#: src/view/com/modals/CreateOrEditList.tsx:322
+#: src/view/com/modals/EditProfile.tsx:199
+#: src/view/com/modals/EditProfile.tsx:211
+msgid "Description"
+msgstr "描述"
+
+#: src/view/screens/Settings.tsx:760
+#~ msgid "Developer Tools"
+#~ msgstr "開發者工具"
+
+#: src/view/com/composer/Composer.tsx:218
+msgid "Did you want to say anything?"
+msgstr "有什麼想說的嗎?"
+
+#: src/view/screens/Settings/index.tsx:523
+msgid "Dim"
+msgstr "暗淡"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:32
+#: src/lib/moderation/useLabelBehaviorDescription.ts:42
+#: src/lib/moderation/useLabelBehaviorDescription.ts:68
+#: src/screens/Moderation/index.tsx:341
+msgid "Disabled"
+msgstr ""
+
+#: src/view/com/composer/Composer.tsx:511
+msgid "Discard"
+msgstr "捨棄"
+
+#: src/view/com/composer/Composer.tsx:145
+#~ msgid "Discard draft"
+#~ msgstr "捨棄草稿"
+
+#: src/view/com/composer/Composer.tsx:508
+msgid "Discard draft?"
+msgstr "捨棄草稿?"
+
+#: src/screens/Moderation/index.tsx:518
+#: src/screens/Moderation/index.tsx:522
+msgid "Discourage apps from showing my account to logged-out users"
+msgstr "鼓勵應用程式不要向未登入使用者顯示我的帳號"
+
+#: src/view/com/posts/FollowingEmptyState.tsx:74
+#: src/view/com/posts/FollowingEndOfFeed.tsx:75
+msgid "Discover new custom feeds"
+msgstr "探索新的自訂訊息流"
+
+#: src/view/screens/Feeds.tsx:473
+#~ msgid "Discover new feeds"
+#~ msgstr "探索新的訊息流"
+
+#: src/view/screens/Feeds.tsx:689
+msgid "Discover New Feeds"
+msgstr "探索新的訊息流"
+
+#: src/view/com/modals/EditProfile.tsx:193
+msgid "Display name"
+msgstr "顯示名稱"
+
+#: src/view/com/modals/EditProfile.tsx:181
+msgid "Display Name"
+msgstr "顯示名稱"
+
+#: src/view/com/modals/ChangeHandle.tsx:397
+msgid "DNS Panel"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:39
+msgid "Does not include nudity."
+msgstr ""
+
+#: src/screens/Signup/StepHandle.tsx:104
+msgid "Doesn't begin or end with a hyphen"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "Domain Value"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:488
+msgid "Domain verified!"
+msgstr "網域已驗證!"
+
+#: src/view/com/auth/create/Step1.tsx:170
+#~ msgid "Don't have an invite code?"
+#~ msgstr "沒有邀請碼?"
+
+#: src/components/dialogs/BirthDateSettings.tsx:119
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/components/forms/DateField/index.tsx:74
+#: src/components/forms/DateField/index.tsx:80
+#: src/view/com/auth/server-input/index.tsx:169
+#: src/view/com/auth/server-input/index.tsx:170
+#: src/view/com/modals/AddAppPasswords.tsx:227
+#: src/view/com/modals/AltImage.tsx:140
+#: src/view/com/modals/crop-image/CropImage.web.tsx:153
+#: src/view/com/modals/InviteCodes.tsx:81
+#: src/view/com/modals/InviteCodes.tsx:124
+#: src/view/com/modals/ListAddRemoveUsers.tsx:142
+#: src/view/screens/PreferencesFollowingFeed.tsx:311
+#: src/view/screens/Settings/ExportCarDialog.tsx:94
+#: src/view/screens/Settings/ExportCarDialog.tsx:96
+msgid "Done"
+msgstr "完成"
+
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86
+#: src/view/com/modals/EditImage.tsx:334
+#: src/view/com/modals/ListAddRemoveUsers.tsx:144
+#: src/view/com/modals/SelfLabel.tsx:157
+#: src/view/com/modals/Threadgate.tsx:129
+#: src/view/com/modals/Threadgate.tsx:132
+#: src/view/com/modals/UserAddRemoveLists.tsx:95
+#: src/view/com/modals/UserAddRemoveLists.tsx:98
+#: src/view/screens/PreferencesThreads.tsx:162
+msgctxt "action"
+msgid "Done"
+msgstr "完成"
+
+#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:43
+msgid "Done{extraText}"
+msgstr "完成{extraText}"
+
+#: src/view/com/auth/login/ChooseAccountForm.tsx:46
+#~ msgid "Double tap to sign in"
+#~ msgstr "雙擊以登入"
+
+#: src/view/screens/Settings/index.tsx:755
+#~ msgid "Download Bluesky account data (repository)"
+#~ msgstr "下載 Bluesky 帳號資料(存放庫)"
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:59
+#: src/view/screens/Settings/ExportCarDialog.tsx:63
+msgid "Download CAR file"
+msgstr "下載 CAR 檔案"
+
+#: src/view/com/composer/text-input/TextInput.web.tsx:249
+msgid "Drop to add images"
+msgstr "拖放即可新增圖片"
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:120
+msgid "Due to Apple policies, adult content can only be enabled on the web after completing sign up."
+msgstr "受 Apple 政策限制,成人內容只能在完成註冊後在網頁端啟用顯示。"
+
+#: src/view/com/modals/ChangeHandle.tsx:258
+msgid "e.g. alice"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:186
+msgid "e.g. Alice Roberts"
+msgstr "例如:張藍天"
+
+#: src/view/com/modals/ChangeHandle.tsx:380
+msgid "e.g. alice.com"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:204
+msgid "e.g. Artist, dog-lover, and avid reader."
+msgstr "例如:藝術家、愛狗人士和狂熱讀者。"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:43
+msgid "E.g. artistic nudes."
+msgstr ""
+
+#: src/view/com/modals/CreateOrEditList.tsx:284
+msgid "e.g. Great Posters"
+msgstr "例如:優秀的發文者"
+
+#: src/view/com/modals/CreateOrEditList.tsx:285
+msgid "e.g. Spammers"
+msgstr "例如:垃圾內容製造者"
+
+#: src/view/com/modals/CreateOrEditList.tsx:313
+msgid "e.g. The posters who never miss."
+msgstr "例如:絕對不容錯過的發文者。"
+
+#: src/view/com/modals/CreateOrEditList.tsx:314
+msgid "e.g. Users that repeatedly reply with ads."
+msgstr "例如:張貼廣告回覆的使用者。"
+
+#: src/view/com/modals/InviteCodes.tsx:97
+msgid "Each code works once. You'll receive more invite codes periodically."
+msgstr "每個邀請碼僅能使用一次。你將定期收到更多的邀請碼。"
+
+#: src/view/com/lists/ListMembers.tsx:149
+msgctxt "action"
+msgid "Edit"
+msgstr "編輯"
+
+#: src/view/com/util/UserAvatar.tsx:299
+#: src/view/com/util/UserBanner.tsx:85
+msgid "Edit avatar"
+msgstr ""
+
+#: src/view/com/composer/photos/Gallery.tsx:144
+#: src/view/com/modals/EditImage.tsx:208
+msgid "Edit image"
+msgstr "編輯圖片"
+
+#: src/view/screens/ProfileList.tsx:403
+msgid "Edit list details"
+msgstr "編輯列表詳情"
+
+#: src/view/com/modals/CreateOrEditList.tsx:251
+msgid "Edit Moderation List"
+msgstr "編輯管理列表"
+
+#: src/Navigation.tsx:256
+#: src/view/screens/Feeds.tsx:434
+#: src/view/screens/SavedFeeds.tsx:84
+msgid "Edit My Feeds"
+msgstr "編輯自訂訊息流"
+
+#: src/view/com/modals/EditProfile.tsx:153
+msgid "Edit my profile"
+msgstr "編輯我的個人資料"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:171
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:168
+msgid "Edit profile"
+msgstr "編輯個人資料"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:174
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:171
+msgid "Edit Profile"
+msgstr "編輯個人資料"
+
+#: src/view/com/home/HomeHeaderLayout.web.tsx:62
+#: src/view/screens/Feeds.tsx:355
+msgid "Edit Saved Feeds"
+msgstr "編輯已儲存的訊息流"
+
+#: src/view/com/modals/CreateOrEditList.tsx:246
+msgid "Edit User List"
+msgstr "編輯使用者列表"
+
+#: src/view/com/modals/EditProfile.tsx:194
+msgid "Edit your display name"
+msgstr "編輯你的顯示名稱"
+
+#: src/view/com/modals/EditProfile.tsx:212
+msgid "Edit your profile description"
+msgstr "編輯你的帳號描述"
+
+#: src/screens/Onboarding/index.tsx:34
+msgid "Education"
+msgstr "教育"
+
+#: src/screens/Signup/StepInfo/index.tsx:80
+#: src/view/com/modals/ChangeEmail.tsx:141
+msgid "Email"
+msgstr "電子郵件"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:99
+msgid "Email address"
+msgstr "電子郵件地址"
+
+#: src/view/com/modals/ChangeEmail.tsx:56
+#: src/view/com/modals/ChangeEmail.tsx:88
+msgid "Email updated"
+msgstr "電子郵件已更新"
+
+#: src/view/com/modals/ChangeEmail.tsx:111
+msgid "Email Updated"
+msgstr "電子郵件已更新"
+
+#: src/view/com/modals/VerifyEmail.tsx:78
+msgid "Email verified"
+msgstr "電子郵件已驗證"
+
+#: src/view/screens/Settings/index.tsx:331
+msgid "Email:"
+msgstr "電子郵件:"
+
+#: src/components/dialogs/EmbedConsent.tsx:101
+msgid "Enable {0} only"
+msgstr "僅啟用 {0}"
+
+#: src/screens/Moderation/index.tsx:329
+msgid "Enable adult content"
+msgstr "顯示成人內容"
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:94
+msgid "Enable Adult Content"
+msgstr "顯示成人內容"
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:78
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:79
+msgid "Enable adult content in your feeds"
+msgstr "允許在你的訊息流中出現成人內容"
+
+#: src/components/dialogs/EmbedConsent.tsx:82
+#: src/components/dialogs/EmbedConsent.tsx:89
+msgid "Enable external media"
+msgstr ""
+
+#: src/view/com/modals/EmbedConsent.tsx:97
+#~ msgid "Enable External Media"
+#~ msgstr "啟用外部媒體"
+
+#: src/view/screens/PreferencesExternalEmbeds.tsx:75
+msgid "Enable media players for"
+msgstr "啟用媒體播放器"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:147
+msgid "Enable this setting to only see replies between people you follow."
+msgstr "啟用此設定來只顯示你跟隨的人之間的回覆。"
+
+#: src/components/dialogs/EmbedConsent.tsx:94
+msgid "Enable this source only"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:339
+msgid "Enabled"
+msgstr "啟用"
+
+#: src/screens/Profile/Sections/Feed.tsx:84
+msgid "End of feed"
+msgstr "訊息流的結尾"
+
+#: src/view/com/modals/AddAppPasswords.tsx:167
+msgid "Enter a name for this App Password"
+msgstr "輸入此應用程式專用密碼的名稱"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:139
+msgid "Enter a password"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:99
+#: src/components/dialogs/MutedWords.tsx:100
+msgid "Enter a word or tag"
+msgstr ""
+
+#: src/view/com/modals/VerifyEmail.tsx:105
+msgid "Enter Confirmation Code"
+msgstr "輸入驗證碼"
+
+#: src/view/com/modals/ChangePassword.tsx:153
+msgid "Enter the code you received to change your password."
+msgstr "輸入你收到的驗證碼以更改密碼。"
+
+#: src/view/com/modals/ChangeHandle.tsx:370
+msgid "Enter the domain you want to use"
+msgstr "輸入你想使用的網域"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:119
+msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password."
+msgstr "輸入你用於建立帳號的電子郵件。我們將向你發送重設碼,以便你設定新密碼。"
+
+#: src/components/dialogs/BirthDateSettings.tsx:108
+msgid "Enter your birth date"
+msgstr "輸入你的出生日期"
+
+#: src/view/com/modals/Waitlist.tsx:78
+#~ msgid "Enter your email"
+#~ msgstr "輸入你的電子郵件地址"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:105
+#: src/screens/Signup/StepInfo/index.tsx:91
+msgid "Enter your email address"
+msgstr "輸入你的電子郵件地址"
+
+#: src/view/com/modals/ChangeEmail.tsx:41
+msgid "Enter your new email above"
+msgstr "請在上方輸入你的新電子郵件地址"
+
+#: src/view/com/modals/ChangeEmail.tsx:117
+msgid "Enter your new email address below."
+msgstr "請在下方輸入你的新電子郵件地址。"
+
+#: src/view/com/auth/create/Step2.tsx:188
+#~ msgid "Enter your phone number"
+#~ msgstr "輸入你的手機號碼"
+
+#: src/screens/Login/index.tsx:101
+msgid "Enter your username and password"
+msgstr "輸入你的使用者名稱和密碼"
+
+#: src/screens/Signup/StepCaptcha/index.tsx:49
+msgid "Error receiving captcha response."
+msgstr "Captcha 給出了錯誤的回應。"
+
+#: src/view/screens/Search/Search.tsx:111
+msgid "Error:"
+msgstr "錯誤:"
+
+#: src/view/com/modals/Threadgate.tsx:76
+msgid "Everybody"
+msgstr "所有人"
+
+#: src/lib/moderation/useReportOptions.ts:66
+msgid "Excessive mentions or replies"
+msgstr ""
+
+#: src/view/com/modals/DeleteAccount.tsx:230
+msgid "Exits account deletion process"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:151
+msgid "Exits handle change process"
+msgstr "離開修改帳號代碼流程"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:136
+msgid "Exits image cropping process"
+msgstr ""
+
+#: src/view/com/lightbox/Lightbox.web.tsx:130
+msgid "Exits image view"
+msgstr "離開圖片檢視器"
+
+#: src/view/com/modals/ListAddRemoveUsers.tsx:88
+#: src/view/shell/desktop/Search.tsx:236
+msgid "Exits inputting search query"
+msgstr "離開搜尋字詞輸入"
+
+#: src/view/com/modals/Waitlist.tsx:138
+#~ msgid "Exits signing up for waitlist with {email}"
+#~ msgstr "將 {email} 從候補列表中移除"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:183
+msgid "Expand alt text"
+msgstr "展開替代文字"
+
+#: src/view/com/composer/ComposerReplyTo.tsx:81
+#: src/view/com/composer/ComposerReplyTo.tsx:84
+msgid "Expand or collapse the full post you are replying to"
+msgstr "展開或摺疊你要回覆的完整貼文"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:47
+msgid "Explicit or potentially disturbing media."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:35
+msgid "Explicit sexual images."
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:777
+msgid "Export my data"
+msgstr "匯出我的資料"
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:44
+#: src/view/screens/Settings/index.tsx:788
+msgid "Export My Data"
+msgstr "匯出我的資料"
+
+#: src/components/dialogs/EmbedConsent.tsx:55
+#: src/components/dialogs/EmbedConsent.tsx:59
+msgid "External Media"
+msgstr "外部媒體"
+
+#: src/components/dialogs/EmbedConsent.tsx:71
+#: src/view/screens/PreferencesExternalEmbeds.tsx:66
+msgid "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."
+msgstr "外部媒體可能允許網站收集有關你和你裝置的信息。在你按下「播放」按鈕之前,將不會發送或請求任何外部信息。"
+
+#: src/Navigation.tsx:275
+#: src/view/screens/PreferencesExternalEmbeds.tsx:52
+#: src/view/screens/Settings/index.tsx:677
+msgid "External Media Preferences"
+msgstr "外部媒體偏好設定"
+
+#: src/view/screens/Settings/index.tsx:668
+msgid "External media settings"
+msgstr "外部媒體設定"
+
+#: src/view/com/modals/AddAppPasswords.tsx:116
+#: src/view/com/modals/AddAppPasswords.tsx:120
+msgid "Failed to create app password."
+msgstr "建立應用程式專用密碼失敗。"
+
+#: src/view/com/modals/CreateOrEditList.tsx:207
+msgid "Failed to create the list. Check your internet connection and try again."
+msgstr "無法建立列表。請檢查你的網路連線並重試。"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:125
+msgid "Failed to delete post, please try again"
+msgstr "無法刪除貼文,請重試"
+
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:109
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:141
+msgid "Failed to load recommended feeds"
+msgstr "無法載入推薦訊息流"
+
+#: src/view/com/lightbox/Lightbox.tsx:83
+msgid "Failed to save image: {0}"
+msgstr ""
+
+#: src/Navigation.tsx:196
+msgid "Feed"
+msgstr "訊息流"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:218
+msgid "Feed by {0}"
+msgstr "{0} 建立的訊息流"
+
+#: src/view/screens/Feeds.tsx:605
+msgid "Feed offline"
+msgstr "訊息流已離線"
+
+#: src/view/com/feeds/FeedPage.tsx:143
+#~ msgid "Feed Preferences"
+#~ msgstr "訊息流偏好設定"
+
+#: src/view/shell/desktop/RightNav.tsx:61
+#: src/view/shell/Drawer.tsx:314
+msgid "Feedback"
+msgstr "意見回饋"
+
+#: src/Navigation.tsx:464
+#: src/view/screens/Feeds.tsx:419
+#: src/view/screens/Feeds.tsx:524
+#: src/view/screens/Profile.tsx:194
+#: src/view/shell/bottom-bar/BottomBar.tsx:191
+#: src/view/shell/desktop/LeftNav.tsx:346
+#: src/view/shell/Drawer.tsx:479
+#: src/view/shell/Drawer.tsx:480
+msgid "Feeds"
+msgstr "訊息流"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
+#~ msgid "Feeds are created by users and organizations. They offer you varied experiences and suggest content you may like using algorithms."
+#~ msgstr "訊息流由使用者和組織建立,結合演算法為你推薦可能喜歡的內容,可為你帶來不一樣的體驗。"
+
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:57
+msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting."
+msgstr "訊息流由使用者建立並管理。選擇一些你覺得有趣的訊息流。"
+
+#: src/view/screens/SavedFeeds.tsx:156
+msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information."
+msgstr "訊息流是使用者用一點程式技能建立的自訂演算法。更多資訊請見 <0/>。"
+
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:80
+msgid "Feeds can be topical as well!"
+msgstr "訊息流也可以圍繞某些話題!"
+
+#: src/view/com/modals/ChangeHandle.tsx:481
+msgid "File Contents"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:66
+msgid "Filter from feeds"
+msgstr ""
+
+#: src/screens/Onboarding/StepFinished.tsx:155
+msgid "Finalizing"
+msgstr "最終確定"
+
+#: src/view/com/posts/CustomFeedEmptyState.tsx:47
+#: src/view/com/posts/FollowingEmptyState.tsx:57
+#: src/view/com/posts/FollowingEndOfFeed.tsx:58
+msgid "Find accounts to follow"
+msgstr "尋找一些要跟隨的帳號"
+
+#: src/view/screens/Search/Search.tsx:442
+msgid "Find users on Bluesky"
+msgstr "在 Bluesky 上尋找使用者"
+
+#: src/view/screens/Search/Search.tsx:440
+msgid "Find users with the search tool on the right"
+msgstr "使用右側的搜尋工具尋找使用者"
+
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:155
+msgid "Finding similar accounts..."
+msgstr "正在尋找相似的帳號…"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:111
+msgid "Fine-tune the content you see on your Following feed."
+msgstr ""
+
+#: src/view/screens/PreferencesHomeFeed.tsx:111
+#~ msgid "Fine-tune the content you see on your home screen."
+#~ msgstr "調整你在首頁上所看到的內容。"
+
+#: src/view/screens/PreferencesThreads.tsx:60
+msgid "Fine-tune the discussion threads."
+msgstr "調整討論主題。"
+
+#: src/screens/Onboarding/index.tsx:38
+msgid "Fitness"
+msgstr "健康"
+
+#: src/screens/Onboarding/StepFinished.tsx:135
+msgid "Flexible"
+msgstr "靈活"
+
+#: src/view/com/modals/EditImage.tsx:116
+msgid "Flip horizontal"
+msgstr "水平翻轉"
+
+#: src/view/com/modals/EditImage.tsx:121
+#: src/view/com/modals/EditImage.tsx:288
+msgid "Flip vertically"
+msgstr "垂直翻轉"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:189
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:236
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:146
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
+msgid "Follow"
+msgstr "跟隨"
+
+#: src/view/com/profile/FollowButton.tsx:69
+msgctxt "action"
+msgid "Follow"
+msgstr "跟隨"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:58
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:221
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:128
+msgid "Follow {0}"
+msgstr "跟隨 {0}"
+
+#: src/view/com/profile/ProfileMenu.tsx:242
+#: src/view/com/profile/ProfileMenu.tsx:253
+msgid "Follow Account"
+msgstr "跟隨帳號"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:187
+msgid "Follow All"
+msgstr "跟隨所有"
+
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:144
+msgid "Follow Back"
+msgstr ""
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:182
+msgid "Follow selected accounts and continue to the next step"
+msgstr "跟隨選擇的使用者並繼續下一步"
+
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:64
+msgid "Follow some users to get started. We can recommend you more users based on who you find interesting."
+msgstr "跟隨一些使用者以開始,我們可以根據你感興趣的使用者向你推薦更多相似使用者。"
+
+#: src/view/com/profile/ProfileCard.tsx:216
+msgid "Followed by {0}"
+msgstr "由 {0} 跟隨"
+
+#: src/view/com/modals/Threadgate.tsx:98
+msgid "Followed users"
+msgstr "已跟隨的使用者"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:154
+msgid "Followed users only"
+msgstr "僅限已跟隨的使用者"
+
+#: src/view/com/notifications/FeedItem.tsx:170
+msgid "followed you"
+msgstr "已跟隨"
+
+#: src/view/com/profile/ProfileFollowers.tsx:104
+#: src/view/screens/ProfileFollowers.tsx:25
+msgid "Followers"
+msgstr "跟隨者"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:234
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:149
+#: src/view/com/profile/ProfileFollows.tsx:104
+#: src/view/screens/ProfileFollows.tsx:25
+msgid "Following"
+msgstr "跟隨中"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:93
+msgid "Following {0}"
+msgstr "跟隨中:{0}"
+
+#: src/view/screens/Settings/index.tsx:553
+msgid "Following feed preferences"
+msgstr ""
+
+#: src/Navigation.tsx:262
+#: src/view/com/home/HomeHeaderLayout.web.tsx:50
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:84
+#: src/view/screens/PreferencesFollowingFeed.tsx:104
+#: src/view/screens/Settings/index.tsx:562
+msgid "Following Feed Preferences"
+msgstr ""
+
+#: src/screens/Profile/Header/Handle.tsx:24
+msgid "Follows you"
+msgstr "跟隨你"
+
+#: src/view/com/profile/ProfileCard.tsx:141
+msgid "Follows You"
+msgstr "跟隨你"
+
+#: src/screens/Onboarding/index.tsx:43
+msgid "Food"
+msgstr "食物"
+
+#: src/view/com/modals/DeleteAccount.tsx:110
+msgid "For security reasons, we'll need to send a confirmation code to your email address."
+msgstr "為了保護你的帳號安全,我們需要將驗證碼發送到你的電子郵件地址。"
+
+#: src/view/com/modals/AddAppPasswords.tsx:210
+msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one."
+msgstr "為了保護你的帳號安全,你將無法再次查看此內容。如果你丟失了此密碼,你將需要產生一個新密碼。"
+
+#: src/view/com/auth/login/LoginForm.tsx:244
+#~ msgid "Forgot"
+#~ msgstr "忘記"
+
+#: src/view/com/auth/login/LoginForm.tsx:241
+#~ msgid "Forgot password"
+#~ msgstr "忘記密碼"
+
+#: src/screens/Login/index.tsx:129
+#: src/screens/Login/index.tsx:144
+msgid "Forgot Password"
+msgstr "忘記密碼"
+
+#: src/screens/Login/LoginForm.tsx:201
+msgid "Forgot password?"
+msgstr ""
+
+#: src/screens/Login/LoginForm.tsx:212
+msgid "Forgot?"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:52
+msgid "Frequently Posts Unwanted Content"
+msgstr ""
+
+#: src/screens/Hashtag.tsx:109
+#: src/screens/Hashtag.tsx:149
+msgid "From @{sanitizedAuthor}"
+msgstr ""
+
+#: src/view/com/posts/FeedItem.tsx:179
+msgctxt "from-feed"
+msgid "From <0/>"
+msgstr "來自 <0/>"
+
+#: src/view/com/composer/photos/SelectPhotoBtn.tsx:43
+msgid "Gallery"
+msgstr "相簿"
+
+#: src/view/com/modals/VerifyEmail.tsx:189
+#: src/view/com/modals/VerifyEmail.tsx:191
+msgid "Get Started"
+msgstr "開始"
+
+#: src/lib/moderation/useReportOptions.ts:37
+msgid "Glaring violations of law or terms of service"
+msgstr ""
+
+#: src/components/moderation/ScreenHider.tsx:151
+#: src/components/moderation/ScreenHider.tsx:160
+#: src/view/com/auth/LoggedOut.tsx:82
+#: src/view/com/auth/LoggedOut.tsx:83
+#: src/view/screens/NotFound.tsx:55
+#: src/view/screens/ProfileFeed.tsx:112
+#: src/view/screens/ProfileList.tsx:916
+#: src/view/shell/desktop/LeftNav.tsx:108
+msgid "Go back"
+msgstr "返回"
+
+#: src/components/Error.tsx:91
+#: src/screens/Profile/ErrorState.tsx:62
+#: src/screens/Profile/ErrorState.tsx:66
+#: src/view/screens/NotFound.tsx:54
+#: src/view/screens/ProfileFeed.tsx:117
+#: src/view/screens/ProfileList.tsx:921
+msgid "Go Back"
+msgstr "返回"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:73
+#: src/components/ReportDialog/SubmitView.tsx:104
+#: src/screens/Onboarding/Layout.tsx:102
+#: src/screens/Onboarding/Layout.tsx:191
+#: src/screens/Signup/index.tsx:173
+msgid "Go back to previous step"
+msgstr "返回上一步"
+
+#: src/view/screens/NotFound.tsx:55
+msgid "Go home"
+msgstr ""
+
+#: src/view/screens/NotFound.tsx:54
+msgid "Go Home"
+msgstr ""
+
+#: src/view/screens/Search/Search.tsx:749
+#: src/view/shell/desktop/Search.tsx:263
+msgid "Go to @{queryMaybeHandle}"
+msgstr "前往 @{queryMaybeHandle}"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:172
+#: src/view/com/modals/ChangePassword.tsx:167
+msgid "Go to next"
+msgstr "前往下一步"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:46
+msgid "Graphic Media"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:266
+msgid "Handle"
+msgstr "帳號代碼"
+
+#: src/lib/moderation/useReportOptions.ts:32
+msgid "Harassment, trolling, or intolerance"
+msgstr ""
+
+#: src/Navigation.tsx:282
+msgid "Hashtag"
+msgstr ""
+
+#: src/components/RichText.tsx:188
+#~ msgid "Hashtag: {tag}"
+#~ msgstr ""
+
+#: src/components/RichText.tsx:191
+msgid "Hashtag: #{tag}"
+msgstr ""
+
+#: src/screens/Signup/index.tsx:217
+msgid "Having trouble?"
+msgstr "遇到問題?"
+
+#: src/view/shell/desktop/RightNav.tsx:90
+#: src/view/shell/Drawer.tsx:324
+msgid "Help"
+msgstr "幫助"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:140
+msgid "Here are some accounts for you to follow"
+msgstr "這裡有一些你可以跟隨的帳號"
+
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:89
+msgid "Here are some popular topical feeds. You can choose to follow as many as you like."
+msgstr "這裡有一些熱門的話題訊息流。跟隨的訊息流數量沒有限制。"
+
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:84
+msgid "Here are some topical feeds based on your interests: {interestsText}. You can choose to follow as many as you like."
+msgstr "這裡有一些根據您的興趣({interestsText})所推薦的熱門的話題訊息流。跟隨的訊息流數量沒有限制。"
+
+#: src/view/com/modals/AddAppPasswords.tsx:154
+msgid "Here is your app password."
+msgstr "這是你的應用程式專用密碼。"
+
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:134
+#: src/components/moderation/PostHider.tsx:107
+#: src/lib/moderation/useLabelBehaviorDescription.ts:15
+#: src/lib/moderation/useLabelBehaviorDescription.ts:20
+#: src/lib/moderation/useLabelBehaviorDescription.ts:25
+#: src/lib/moderation/useLabelBehaviorDescription.ts:30
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:52
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:76
+#: src/view/com/util/forms/PostDropdownBtn.tsx:328
+msgid "Hide"
+msgstr "隱藏"
+
+#: src/view/com/notifications/FeedItem.tsx:329
+msgctxt "action"
+msgid "Hide"
+msgstr "隱藏"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:276
+#: src/view/com/util/forms/PostDropdownBtn.tsx:278
+msgid "Hide post"
+msgstr "隱藏貼文"
+
+#: src/components/moderation/ContentHider.tsx:67
+#: src/components/moderation/PostHider.tsx:64
+msgid "Hide the content"
+msgstr "隱藏內容"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:325
+msgid "Hide this post?"
+msgstr "隱藏這則貼文?"
+
+#: src/view/com/notifications/FeedItem.tsx:319
+msgid "Hide user list"
+msgstr "隱藏使用者列表"
+
+#: src/view/com/profile/ProfileHeader.tsx:487
+#~ msgid "Hides posts from {0} in your feed"
+#~ msgstr "在你的訂閱中隱藏來自 {0} 的貼文"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:111
+msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue."
+msgstr "唔,與訊息流伺服器連線時發生了某種問題。請告訴該訊息流的擁有者這個問題。"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:99
+msgid "Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue."
+msgstr "唔,訊息流伺服器似乎設置錯誤。請告訴該訊息流的擁有者這個問題。"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:105
+msgid "Hmm, the feed server appears to be offline. Please let the feed owner know about this issue."
+msgstr "唔,訊息流伺服器似乎已離線。請告訴該訊息流的擁有者這個問題。"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:102
+msgid "Hmm, the feed server gave a bad response. Please let the feed owner know about this issue."
+msgstr "唔,訊息流伺服器給出了錯誤的回應。請告訴該訊息流的擁有者這個問題。"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:96
+msgid "Hmm, we're having trouble finding this feed. It may have been deleted."
+msgstr "唔,我們無法找到這個訊息流,它可能已被刪除。"
+
+#: src/screens/Moderation/index.tsx:59
+msgid "Hmmmm, it seems we're having trouble loading this data. See below for more details. If this issue persists, please contact us."
+msgstr ""
+
+#: src/screens/Profile/ErrorState.tsx:31
+msgid "Hmmmm, we couldn't load that moderation service."
+msgstr ""
+
+#: src/Navigation.tsx:454
+#: src/view/shell/bottom-bar/BottomBar.tsx:147
+#: src/view/shell/desktop/LeftNav.tsx:310
+#: src/view/shell/Drawer.tsx:401
+#: src/view/shell/Drawer.tsx:402
+msgid "Home"
+msgstr "首頁"
+
+#: src/Navigation.tsx:247
+#: src/view/com/pager/FeedsTabBarMobile.tsx:123
+#: src/view/screens/PreferencesHomeFeed.tsx:104
+#: src/view/screens/Settings/index.tsx:543
+#~ msgid "Home Feed Preferences"
+#~ msgstr "首頁訊息流偏好"
+
+#: src/view/com/modals/ChangeHandle.tsx:420
+msgid "Host:"
+msgstr ""
+
+#: src/screens/Login/ForgotPasswordForm.tsx:89
+#: src/screens/Login/LoginForm.tsx:134
+#: src/screens/Signup/StepInfo/index.tsx:40
+#: src/view/com/modals/ChangeHandle.tsx:281
+msgid "Hosting provider"
+msgstr "托管服務提供商"
+
+#: src/view/com/modals/InAppBrowserConsent.tsx:44
+msgid "How should we open this link?"
+msgstr "我們該如何開啟此連結?"
+
+#: src/view/com/modals/VerifyEmail.tsx:214
+msgid "I have a code"
+msgstr "我有驗證碼"
+
+#: src/view/com/modals/VerifyEmail.tsx:216
+msgid "I have a confirmation code"
+msgstr "我有驗證碼"
+
+#: src/view/com/modals/ChangeHandle.tsx:284
+msgid "I have my own domain"
+msgstr "我擁有自己的網域"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:185
+msgid "If alt text is long, toggles alt text expanded state"
+msgstr "替代文字過長時,切換替代文字的展開狀態"
+
+#: src/view/com/modals/SelfLabel.tsx:127
+msgid "If none are selected, suitable for all ages."
+msgstr "若不勾選,則預設為全年齡向。"
+
+#: src/screens/Signup/StepInfo/Policies.tsx:83
+msgid "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."
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:610
+msgid "If you delete this list, you won't be able to recover it."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:316
+msgid "If you remove this post, you won't be able to recover it."
+msgstr ""
+
+#: src/view/com/modals/ChangePassword.tsx:148
+msgid "If you want to change your password, we will send you a code to verify that this is your account."
+msgstr "如果你想更改密碼,我們將向你發送一個驗證碼以確認這是你的帳號。"
+
+#: src/lib/moderation/useReportOptions.ts:36
+msgid "Illegal and Urgent"
+msgstr ""
+
+#: src/view/com/util/images/Gallery.tsx:38
+msgid "Image"
+msgstr "圖片"
+
+#: src/view/com/modals/AltImage.tsx:121
+msgid "Image alt text"
+msgstr "圖片替代文字"
+
+#: src/view/com/util/UserAvatar.tsx:311
+#: src/view/com/util/UserBanner.tsx:118
+#~ msgid "Image options"
+#~ msgstr "圖片選項"
+
+#: src/lib/moderation/useReportOptions.ts:47
+msgid "Impersonation or false claims about identity or affiliation"
+msgstr ""
+
+#: src/screens/Login/SetNewPasswordForm.tsx:127
+msgid "Input code sent to your email for password reset"
+msgstr "輸入發送到你電子郵件地址的重設碼以重設密碼"
+
+#: src/view/com/modals/DeleteAccount.tsx:183
+msgid "Input confirmation code for account deletion"
+msgstr "輸入刪除帳號的驗證碼"
+
+#: src/view/com/auth/create/Step1.tsx:177
+#~ msgid "Input email for Bluesky account"
+#~ msgstr "輸入 Bluesky 帳號的電子郵件地址"
+
+#: src/view/com/auth/create/Step1.tsx:151
+#~ msgid "Input invite code to proceed"
+#~ msgstr "輸入邀請碼以繼續"
+
+#: src/view/com/modals/AddAppPasswords.tsx:181
+msgid "Input name for app password"
+msgstr "輸入應用程式專用密碼名稱"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:151
+msgid "Input new password"
+msgstr "輸入新密碼"
+
+#: src/view/com/modals/DeleteAccount.tsx:202
+msgid "Input password for account deletion"
+msgstr "輸入密碼以刪除帳號"
+
+#: src/view/com/auth/create/Step2.tsx:196
+#~ msgid "Input phone number for SMS verification"
+#~ msgstr "輸入手機號碼進行簡訊驗證"
+
+#: src/screens/Login/LoginForm.tsx:195
+msgid "Input the password tied to {identifier}"
+msgstr "輸入與 {identifier} 關聯的密碼"
+
+#: src/screens/Login/LoginForm.tsx:168
+msgid "Input the username or email address you used at signup"
+msgstr "輸入註冊時使用的使用者名稱或電子郵件地址"
+
+#: src/view/com/auth/create/Step2.tsx:271
+#~ msgid "Input the verification code we have texted to you"
+#~ msgstr "輸入我們發送到你手機的驗證碼"
+
+#: src/view/com/modals/Waitlist.tsx:90
+#~ msgid "Input your email to get on the Bluesky waitlist"
+#~ msgstr "輸入你的電子郵件地址以加入 Bluesky 候補列表"
+
+#: src/screens/Login/LoginForm.tsx:194
+msgid "Input your password"
+msgstr "輸入你的密碼"
+
+#: src/view/com/modals/ChangeHandle.tsx:389
+msgid "Input your preferred hosting provider"
+msgstr ""
+
+#: src/screens/Signup/StepHandle.tsx:62
+msgid "Input your user handle"
+msgstr "輸入你的帳號代碼"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:221
+msgid "Invalid or unsupported post record"
+msgstr "無效或不支援的貼文紀錄"
+
+#: src/screens/Login/LoginForm.tsx:114
+msgid "Invalid username or password"
+msgstr "使用者名稱或密碼無效"
+
+#: src/view/screens/Settings.tsx:411
+#~ msgid "Invite"
+#~ msgstr "邀請"
+
+#: src/view/com/modals/InviteCodes.tsx:94
+msgid "Invite a Friend"
+msgstr "邀請朋友"
+
+#: src/screens/Signup/StepInfo/index.tsx:58
+msgid "Invite code"
+msgstr "邀請碼"
+
+#: src/screens/Signup/state.ts:278
+msgid "Invite code not accepted. Check that you input it correctly and try again."
+msgstr "邀請碼無效。請檢查你輸入的內容是否正確,然後重試。"
+
+#: src/view/com/modals/InviteCodes.tsx:171
+msgid "Invite codes: {0} available"
+msgstr "邀請碼:{0} 個可用"
+
+#: src/view/shell/Drawer.tsx:645
+#~ msgid "Invite codes: {invitesAvailable} available"
+#~ msgstr "邀請碼:{invitesAvailable} 個可用"
+
+#: src/view/com/modals/InviteCodes.tsx:170
+msgid "Invite codes: 1 available"
+msgstr "邀請碼:1 個可用"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:65
+msgid "It shows posts from the people you follow as they happen."
+msgstr "它會即時顯示你所跟隨的人發佈的貼文。"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:104
+#: src/view/com/auth/SplashScreen.web.tsx:172
+msgid "Jobs"
+msgstr "工作"
+
+#: src/view/com/modals/Waitlist.tsx:67
+#~ msgid "Join the waitlist"
+#~ msgstr "加入候補列表"
+
+#: src/view/com/auth/create/Step1.tsx:174
+#: src/view/com/auth/create/Step1.tsx:178
+#~ msgid "Join the waitlist."
+#~ msgstr "加入候補列表。"
+
+#: src/view/com/modals/Waitlist.tsx:128
+#~ msgid "Join Waitlist"
+#~ msgstr "加入候補列表"
+
+#: src/screens/Onboarding/index.tsx:24
+msgid "Journalism"
+msgstr "新聞學"
+
+#: src/components/moderation/LabelsOnMe.tsx:59
+msgid "label has been placed on this {labelTarget}"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:144
+msgid "Labeled by {0}."
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:142
+msgid "Labeled by the author."
+msgstr ""
+
+#: src/view/screens/Profile.tsx:188
+msgid "Labels"
+msgstr ""
+
+#: src/screens/Profile/Sections/Labels.tsx:142
+msgid "Labels are annotations on users and content. They can be used to hide, warn, and categorize the network."
+msgstr ""
+
+#: src/components/moderation/LabelsOnMe.tsx:61
+msgid "labels have been placed on this {labelTarget}"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:62
+msgid "Labels on your account"
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:64
+msgid "Labels on your content"
+msgstr ""
+
+#: src/view/com/composer/select-language/SelectLangBtn.tsx:104
+msgid "Language selection"
+msgstr "語言選擇"
+
+#: src/view/screens/Settings/index.tsx:614
+msgid "Language settings"
+msgstr "語言設定"
+
+#: src/Navigation.tsx:144
+#: src/view/screens/LanguageSettings.tsx:89
+msgid "Language Settings"
+msgstr "語言設定"
+
+#: src/view/screens/Settings/index.tsx:623
+msgid "Languages"
+msgstr "語言"
+
+#: src/view/com/auth/create/StepHeader.tsx:20
+#~ msgid "Last step!"
+#~ msgstr "最後一步!"
+
+#: src/view/com/util/moderation/ContentHider.tsx:103
+#~ msgid "Learn more"
+#~ msgstr "瞭解詳情"
+
+#: src/components/moderation/ScreenHider.tsx:136
+msgid "Learn More"
+msgstr "瞭解詳情"
+
+#: src/components/moderation/ContentHider.tsx:65
+#: src/components/moderation/ContentHider.tsx:128
+msgid "Learn more about the moderation applied to this content."
+msgstr ""
+
+#: src/components/moderation/PostHider.tsx:85
+#: src/components/moderation/ScreenHider.tsx:125
+msgid "Learn more about this warning"
+msgstr "瞭解有關此警告的更多資訊"
+
+#: src/screens/Moderation/index.tsx:549
+msgid "Learn more about what is public on Bluesky."
+msgstr "瞭解有關 Bluesky 上公開內容的更多資訊。"
+
+#: src/components/moderation/ContentHider.tsx:152
+msgid "Learn more."
+msgstr "瞭解詳情"
+
+#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82
+msgid "Leave them all unchecked to see any language."
+msgstr "全部留空以查看所有語言。"
+
+#: src/view/com/modals/LinkWarning.tsx:65
+msgid "Leaving Bluesky"
+msgstr "離開 Bluesky"
+
+#: src/screens/Deactivated.tsx:128
+msgid "left to go."
+msgstr "尚未完成。"
+
+#: src/view/screens/Settings/index.tsx:296
+msgid "Legacy storage cleared, you need to restart the app now."
+msgstr "舊儲存資料已清除,你需要立即重新啟動應用程式。"
+
+#: src/screens/Login/index.tsx:130
+#: src/screens/Login/index.tsx:145
+msgid "Let's get your password reset!"
+msgstr "讓我們來重設你的密碼吧!"
+
+#: src/screens/Onboarding/StepFinished.tsx:155
+msgid "Let's go!"
+msgstr "讓我們開始吧!"
+
+#: src/view/com/util/UserAvatar.tsx:248
+#: src/view/com/util/UserBanner.tsx:62
+#~ msgid "Library"
+#~ msgstr "圖片庫"
+
+#: src/view/screens/Settings/index.tsx:498
+msgid "Light"
+msgstr "亮色"
+
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
+msgid "Like"
+msgstr "喜歡"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:258
+#: src/view/screens/ProfileFeed.tsx:573
+msgid "Like this feed"
+msgstr "喜歡這個訊息流"
+
+#: src/components/LikesDialog.tsx:87
+#: src/Navigation.tsx:201
+#: src/Navigation.tsx:206
+msgid "Liked by"
+msgstr "喜歡"
+
+#: src/screens/Profile/ProfileLabelerLikedBy.tsx:29
+#: src/view/screens/PostLikedBy.tsx:27
+#: src/view/screens/ProfileFeedLikedBy.tsx:27
+msgid "Liked By"
+msgstr "喜歡"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:268
+msgid "Liked by {0} {1}"
+msgstr "{0} 個 {1} 喜歡"
+
+#: src/components/LabelingServiceCard/index.tsx:72
+msgid "Liked by {count} {0}"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:278
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:292
+#: src/view/screens/ProfileFeed.tsx:588
+msgid "Liked by {likeCount} {0}"
+msgstr "{likeCount} 個 {0} 喜歡"
+
+#: src/view/com/notifications/FeedItem.tsx:174
+msgid "liked your custom feed"
+msgstr "喜歡你的自訂訊息流"
+
+#: src/view/com/notifications/FeedItem.tsx:159
+msgid "liked your post"
+msgstr "喜歡你的貼文"
+
+#: src/view/screens/Profile.tsx:193
+msgid "Likes"
+msgstr "喜歡"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:182
+msgid "Likes on this post"
+msgstr "這條貼文的喜歡數"
+
+#: src/Navigation.tsx:170
+msgid "List"
+msgstr "列表"
+
+#: src/view/com/modals/CreateOrEditList.tsx:262
+msgid "List Avatar"
+msgstr "列表頭像"
+
+#: src/view/screens/ProfileList.tsx:311
+msgid "List blocked"
+msgstr "列表已封鎖"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:220
+msgid "List by {0}"
+msgstr "列表由 {0} 建立"
+
+#: src/view/screens/ProfileList.tsx:355
+msgid "List deleted"
+msgstr "列表已刪除"
+
+#: src/view/screens/ProfileList.tsx:283
+msgid "List muted"
+msgstr "列表已靜音"
+
+#: src/view/com/modals/CreateOrEditList.tsx:276
+msgid "List Name"
+msgstr "列表名稱"
+
+#: src/view/screens/ProfileList.tsx:325
+msgid "List unblocked"
+msgstr "解除封鎖列表"
+
+#: src/view/screens/ProfileList.tsx:297
+msgid "List unmuted"
+msgstr "解除靜音列表"
+
+#: src/Navigation.tsx:114
+#: src/view/screens/Profile.tsx:189
+#: src/view/screens/Profile.tsx:195
+#: src/view/shell/desktop/LeftNav.tsx:383
+#: src/view/shell/Drawer.tsx:495
+#: src/view/shell/Drawer.tsx:496
+msgid "Lists"
+msgstr "列表"
+
+#: src/view/com/post-thread/PostThread.tsx:333
+#: src/view/com/post-thread/PostThread.tsx:341
+#~ msgid "Load more posts"
+#~ msgstr "載入更多貼文"
+
+#: src/view/screens/Notifications.tsx:159
+msgid "Load new notifications"
+msgstr "載入新的通知"
+
+#: src/screens/Profile/Sections/Feed.tsx:70
+#: src/view/com/feeds/FeedPage.tsx:138
+#: src/view/screens/ProfileFeed.tsx:496
+#: src/view/screens/ProfileList.tsx:695
+msgid "Load new posts"
+msgstr "載入新的貼文"
+
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:99
+msgid "Loading..."
+msgstr "載入中…"
+
+#: src/view/com/modals/ServerInput.tsx:50
+#~ msgid "Local dev server"
+#~ msgstr "本地開發伺服器"
+
+#: src/Navigation.tsx:221
+msgid "Log"
+msgstr "日誌"
+
+#: src/screens/Deactivated.tsx:149
+#: src/screens/Deactivated.tsx:152
+#: src/screens/Deactivated.tsx:178
+#: src/screens/Deactivated.tsx:181
+msgid "Log out"
+msgstr "登出"
+
+#: src/screens/Moderation/index.tsx:442
+msgid "Logged-out visibility"
+msgstr "登出可見性"
+
+#: src/components/AccountList.tsx:54
+msgid "Login to account that is not listed"
+msgstr "登入未列出的帳號"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:116
+msgid "Looks like XXXXX-XXXXX"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:79
+msgid "Make sure this is where you intend to go!"
+msgstr "請確認這是你想要去的的地方!"
+
+#: src/components/dialogs/MutedWords.tsx:82
+msgid "Manage your muted words and tags"
+msgstr ""
+
+#: src/view/com/auth/create/Step2.tsx:118
+#~ msgid "May not be longer than 253 characters"
+#~ msgstr ""
+
+#: src/view/com/auth/create/Step2.tsx:109
+#~ msgid "May only contain letters and numbers"
+#~ msgstr ""
+
+#: src/view/screens/Profile.tsx:192
+msgid "Media"
+msgstr "媒體"
+
+#: src/view/com/threadgate/WhoCanReply.tsx:139
+msgid "mentioned users"
+msgstr "提及的使用者"
+
+#: src/view/com/modals/Threadgate.tsx:93
+msgid "Mentioned users"
+msgstr "提及的使用者"
+
+#: src/view/com/util/ViewHeader.tsx:87
+#: src/view/screens/Search/Search.tsx:648
+msgid "Menu"
+msgstr "選單"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:192
+msgid "Message from server: {0}"
+msgstr "來自伺服器的訊息:{0}"
+
+#: src/lib/moderation/useReportOptions.ts:45
+msgid "Misleading Account"
+msgstr ""
+
+#: src/Navigation.tsx:119
+#: src/screens/Moderation/index.tsx:104
+#: src/view/screens/Settings/index.tsx:645
+#: src/view/shell/desktop/LeftNav.tsx:401
+#: src/view/shell/Drawer.tsx:514
+#: src/view/shell/Drawer.tsx:515
+msgid "Moderation"
+msgstr "限制"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:112
+msgid "Moderation details"
+msgstr ""
+
+#: src/view/com/lists/ListCard.tsx:93
+#: src/view/com/modals/UserAddRemoveLists.tsx:206
+msgid "Moderation list by {0}"
+msgstr "{0} 建立的限制列表"
+
+#: src/view/screens/ProfileList.tsx:789
+msgid "Moderation list by <0/>"
+msgstr "0> 建立的限制列表"
+
+#: src/view/com/lists/ListCard.tsx:91
+#: src/view/com/modals/UserAddRemoveLists.tsx:204
+#: src/view/screens/ProfileList.tsx:787
+msgid "Moderation list by you"
+msgstr "你建立的限制列表"
+
+#: src/view/com/modals/CreateOrEditList.tsx:198
+msgid "Moderation list created"
+msgstr "已建立限制列表"
+
+#: src/view/com/modals/CreateOrEditList.tsx:184
+msgid "Moderation list updated"
+msgstr "限制列表已更新"
+
+#: src/screens/Moderation/index.tsx:243
+msgid "Moderation lists"
+msgstr "限制列表"
+
+#: src/Navigation.tsx:124
+#: src/view/screens/ModerationModlists.tsx:58
+msgid "Moderation Lists"
+msgstr "限制列表"
+
+#: src/view/screens/Settings/index.tsx:639
+msgid "Moderation settings"
+msgstr "限制設定"
+
+#: src/Navigation.tsx:216
+msgid "Moderation states"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:215
+msgid "Moderation tools"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:48
+#: src/lib/moderation/useModerationCauseDescription.ts:40
+msgid "Moderator has chosen to set a general warning on the content."
+msgstr "限制選擇對內容設定一般警告。"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:541
+msgid "More"
+msgstr ""
+
+#: src/view/shell/desktop/Feeds.tsx:65
+msgid "More feeds"
+msgstr "更多訊息流"
+
+#: src/view/screens/ProfileList.tsx:599
+msgid "More options"
+msgstr "更多選項"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:315
+#~ msgid "More post options"
+#~ msgstr "更多貼文選項"
+
+#: src/view/screens/PreferencesThreads.tsx:82
+msgid "Most-liked replies first"
+msgstr "最多按喜歡數優先"
+
+#: src/view/com/auth/create/Step2.tsx:122
+#~ msgid "Must be at least 3 characters"
+#~ msgstr ""
+
+#: src/components/TagMenu/index.tsx:249
+msgid "Mute"
+msgstr ""
+
+#: src/components/TagMenu/index.web.tsx:105
+msgid "Mute {truncatedTag}"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:279
+#: src/view/com/profile/ProfileMenu.tsx:286
+msgid "Mute Account"
+msgstr "靜音帳號"
+
+#: src/view/screens/ProfileList.tsx:518
+msgid "Mute accounts"
+msgstr "靜音帳號"
+
+#: src/components/TagMenu/index.tsx:209
+msgid "Mute all {displayTag} posts"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:211
+#~ msgid "Mute all {tag} posts"
+#~ msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:148
+msgid "Mute in tags only"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:133
+msgid "Mute in text & tags"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:461
+#: src/view/screens/ProfileList.tsx:624
+msgid "Mute list"
+msgstr "靜音列表"
+
+#: src/view/screens/ProfileList.tsx:619
+msgid "Mute these accounts?"
+msgstr "靜音這些帳號?"
+
+#: src/view/screens/ProfileList.tsx:279
+#~ msgid "Mute this List"
+#~ msgstr "靜音這個列表"
+
+#: src/components/dialogs/MutedWords.tsx:126
+msgid "Mute this word in post text and tags"
+msgstr "在帖子文本和话题标签中隐藏该词"
+
+#: src/components/dialogs/MutedWords.tsx:141
+msgid "Mute this word in tags only"
+msgstr "仅在话题标签中隐藏该词"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:257
+msgid "Mute thread"
+msgstr "靜音對話串"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:267
+#: src/view/com/util/forms/PostDropdownBtn.tsx:269
+msgid "Mute words & tags"
+msgstr ""
+
+#: src/view/com/lists/ListCard.tsx:102
+msgid "Muted"
+msgstr "已靜音"
+
+#: src/screens/Moderation/index.tsx:255
+msgid "Muted accounts"
+msgstr "已靜音帳號"
+
+#: src/Navigation.tsx:129
+#: src/view/screens/ModerationMutedAccounts.tsx:107
+msgid "Muted Accounts"
+msgstr "已靜音帳號"
+
+#: src/view/screens/ModerationMutedAccounts.tsx:115
+msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private."
+msgstr "已靜音的帳號將不會在你的通知或時間線中顯示,被靜音的帳號將不會收到通知。"
+
+#: src/lib/moderation/useModerationCauseDescription.ts:85
+msgid "Muted by \"{0}\""
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:231
+msgid "Muted words & tags"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:621
+msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them."
+msgstr "封鎖是私人的。被封鎖的帳號可以與你互動,但你將無法看到他們的貼文或收到來自他們的通知。"
+
+#: src/components/dialogs/BirthDateSettings.tsx:35
+#: src/components/dialogs/BirthDateSettings.tsx:38
+msgid "My Birthday"
+msgstr "我的生日"
+
+#: src/view/screens/Feeds.tsx:663
+msgid "My Feeds"
+msgstr "自定訊息流"
+
+#: src/view/shell/desktop/LeftNav.tsx:65
+msgid "My Profile"
+msgstr "我的個人資料"
+
+#: src/view/screens/Settings/index.tsx:596
+msgid "My saved feeds"
+msgstr "我儲存的訊息流"
+
+#: src/view/screens/Settings/index.tsx:602
+msgid "My Saved Feeds"
+msgstr "我儲存的訊息流"
+
+#: src/view/com/auth/server-input/index.tsx:118
+#~ msgid "my-server.com"
+#~ msgstr "my-server.com"
+
+#: src/view/com/modals/AddAppPasswords.tsx:180
+#: src/view/com/modals/CreateOrEditList.tsx:291
+msgid "Name"
+msgstr "名稱"
+
+#: src/view/com/modals/CreateOrEditList.tsx:146
+msgid "Name is required"
+msgstr "名稱是必填項"
+
+#: src/lib/moderation/useReportOptions.ts:57
+#: src/lib/moderation/useReportOptions.ts:78
+#: src/lib/moderation/useReportOptions.ts:86
+msgid "Name or Description Violates Community Standards"
+msgstr ""
+
+#: src/screens/Onboarding/index.tsx:25
+msgid "Nature"
+msgstr "自然"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:173
+#: src/screens/Login/LoginForm.tsx:254
+#: src/view/com/modals/ChangePassword.tsx:168
+msgid "Navigates to the next screen"
+msgstr "切換到下一畫面"
+
+#: src/view/shell/Drawer.tsx:71
+msgid "Navigates to your profile"
+msgstr "切換到你的個人檔案"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:122
+msgid "Need to report a copyright violation?"
+msgstr ""
+
+#: src/view/com/modals/EmbedConsent.tsx:107
+#: src/view/com/modals/EmbedConsent.tsx:123
+#~ msgid "Never load embeds from {0}"
+#~ msgstr "永不載入來自 {0} 的嵌入內容"
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:72
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:74
+msgid "Never lose access to your followers and data."
+msgstr "永遠不會失去對你的跟隨者和資料的存取權。"
+
+#: src/screens/Onboarding/StepFinished.tsx:123
+msgid "Never lose access to your followers or data."
+msgstr "永遠不會失去對你的跟隨者或資料的存取權。"
+
+#: src/components/dialogs/MutedWords.tsx:293
+#~ msgid "Nevermind"
+#~ msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:519
+msgid "Nevermind, create a handle for me"
+msgstr ""
+
+#: src/view/screens/Lists.tsx:76
+msgctxt "action"
+msgid "New"
+msgstr "新增"
+
+#: src/view/screens/ModerationModlists.tsx:78
+msgid "New"
+msgstr "新增"
+
+#: src/view/com/modals/CreateOrEditList.tsx:253
+msgid "New Moderation List"
+msgstr "新的限制列表"
+
+#: src/view/com/modals/ChangePassword.tsx:212
+msgid "New password"
+msgstr "新密碼"
+
+#: src/view/com/modals/ChangePassword.tsx:217
+msgid "New Password"
+msgstr "新密碼"
+
+#: src/view/com/feeds/FeedPage.tsx:149
+msgctxt "action"
+msgid "New post"
+msgstr "新貼文"
+
+#: src/view/screens/Feeds.tsx:555
+#: src/view/screens/Notifications.tsx:168
+#: src/view/screens/Profile.tsx:452
+#: src/view/screens/ProfileFeed.tsx:434
+#: src/view/screens/ProfileList.tsx:199
+#: src/view/screens/ProfileList.tsx:227
+#: src/view/shell/desktop/LeftNav.tsx:252
+msgid "New post"
+msgstr "新貼文"
+
+#: src/view/shell/desktop/LeftNav.tsx:262
+msgctxt "action"
+msgid "New Post"
+msgstr "新貼文"
+
+#: src/view/com/modals/CreateOrEditList.tsx:248
+msgid "New User List"
+msgstr "新的使用者列表"
+
+#: src/view/screens/PreferencesThreads.tsx:79
+msgid "Newest replies first"
+msgstr "最新回覆優先"
+
+#: src/screens/Onboarding/index.tsx:23
+msgid "News"
+msgstr "新聞"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:143
+#: src/screens/Login/ForgotPasswordForm.tsx:150
+#: src/screens/Login/LoginForm.tsx:253
+#: src/screens/Login/LoginForm.tsx:260
+#: src/screens/Login/SetNewPasswordForm.tsx:174
+#: src/screens/Login/SetNewPasswordForm.tsx:180
+#: src/screens/Signup/index.tsx:205
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79
+#: src/view/com/modals/ChangePassword.tsx:253
+#: src/view/com/modals/ChangePassword.tsx:255
+msgid "Next"
+msgstr "下一個"
+
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:103
+msgctxt "action"
+msgid "Next"
+msgstr "下一個"
+
+#: src/view/com/lightbox/Lightbox.web.tsx:169
+msgid "Next image"
+msgstr "下一張圖片"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:200
+#: src/view/screens/PreferencesFollowingFeed.tsx:235
+#: src/view/screens/PreferencesFollowingFeed.tsx:272
+#: src/view/screens/PreferencesThreads.tsx:106
+#: src/view/screens/PreferencesThreads.tsx:129
+msgid "No"
+msgstr "關"
+
+#: src/view/screens/ProfileFeed.tsx:562
+#: src/view/screens/ProfileList.tsx:769
+msgid "No description"
+msgstr "沒有描述"
+
+#: src/view/com/modals/ChangeHandle.tsx:405
+msgid "No DNS Panel"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:118
+msgid "No longer following {0}"
+msgstr "不再跟隨 {0}"
+
+#: src/screens/Signup/StepHandle.tsx:114
+msgid "No longer than 253 characters"
+msgstr ""
+
+#: src/view/com/notifications/Feed.tsx:109
+msgid "No notifications yet!"
+msgstr "還沒有通知!"
+
+#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:101
+#: src/view/com/composer/text-input/web/Autocomplete.tsx:195
+msgid "No result"
+msgstr "沒有結果"
+
+#: src/components/Lists.tsx:183
+msgid "No results found"
+msgstr "未找到結果"
+
+#: src/view/screens/Feeds.tsx:495
+msgid "No results found for \"{query}\""
+msgstr "未找到「{query}」的結果"
+
+#: src/view/com/modals/ListAddRemoveUsers.tsx:127
+#: src/view/screens/Search/Search.tsx:283
+#: src/view/screens/Search/Search.tsx:311
+msgid "No results found for {query}"
+msgstr "未找到 {query} 的結果"
+
+#: src/components/dialogs/EmbedConsent.tsx:105
+#: src/components/dialogs/EmbedConsent.tsx:112
+msgid "No thanks"
+msgstr "不,謝謝"
+
+#: src/view/com/modals/Threadgate.tsx:82
+msgid "Nobody"
+msgstr "沒有人"
+
+#: src/components/LikedByList.tsx:79
+#: src/components/LikesDialog.tsx:99
+msgid "Nobody has liked this yet. Maybe you should be the first!"
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:42
+msgid "Non-sexual Nudity"
+msgstr ""
+
+#: src/view/com/modals/SelfLabel.tsx:135
+msgid "Not Applicable."
+msgstr "不適用。"
+
+#: src/Navigation.tsx:109
+#: src/view/screens/Profile.tsx:99
+msgid "Not Found"
+msgstr "未找到"
+
+#: src/view/com/modals/VerifyEmail.tsx:246
+#: src/view/com/modals/VerifyEmail.tsx:252
+msgid "Not right now"
+msgstr "暫時不需要"
+
+#: src/view/com/profile/ProfileMenu.tsx:368
+#: src/view/com/util/forms/PostDropdownBtn.tsx:342
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:246
+msgid "Note about sharing"
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:540
+msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites."
+msgstr "注意:Bluesky 是一個開放且公開的網路。此設定僅限制你在 Bluesky 應用程式和網站上的內容可見性,其他應用程式可能不尊重此設定。你的內容仍可能由其他應用程式和網站顯示給未登入的使用者。"
+
+#: src/Navigation.tsx:469
+#: src/view/screens/Notifications.tsx:124
+#: src/view/screens/Notifications.tsx:148
+#: src/view/shell/bottom-bar/BottomBar.tsx:215
+#: src/view/shell/desktop/LeftNav.tsx:365
+#: src/view/shell/Drawer.tsx:438
+#: src/view/shell/Drawer.tsx:439
+msgid "Notifications"
+msgstr "通知"
+
+#: src/view/com/modals/SelfLabel.tsx:103
+msgid "Nudity"
+msgstr "裸露"
+
+#: src/lib/moderation/useReportOptions.ts:71
+msgid "Nudity or adult content not labeled as such"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:71
+#~ msgid "Nudity or pornography not labeled as such"
+#~ msgstr ""
+
+#: src/screens/Signup/index.tsx:142
+msgid "of"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:11
+msgid "Off"
+msgstr ""
+
+#: src/view/com/util/ErrorBoundary.tsx:49
+msgid "Oh no!"
+msgstr "糟糕!"
+
+#: src/screens/Onboarding/StepInterests/index.tsx:132
+msgid "Oh no! Something went wrong."
+msgstr "糟糕!發生了一些錯誤。"
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:126
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:327
+msgid "OK"
+msgstr ""
+
+#: src/screens/Login/PasswordUpdatedForm.tsx:44
+msgid "Okay"
+msgstr "好的"
+
+#: src/view/screens/PreferencesThreads.tsx:78
+msgid "Oldest replies first"
+msgstr "最舊的回覆優先"
+
+#: src/view/screens/Settings/index.tsx:244
+msgid "Onboarding reset"
+msgstr "重新開始引導流程"
+
+#: src/view/com/composer/Composer.tsx:392
+msgid "One or more images is missing alt text."
+msgstr "至少有一張圖片缺失了替代文字。"
+
+#: src/view/com/threadgate/WhoCanReply.tsx:100
+msgid "Only {0} can reply."
+msgstr "只有 {0} 可以回覆。"
+
+#: src/screens/Signup/StepHandle.tsx:97
+msgid "Only contains letters, numbers, and hyphens"
+msgstr ""
+
+#: src/components/Lists.tsx:75
+msgid "Oops, something went wrong!"
+msgstr ""
+
+#: src/components/Lists.tsx:170
+#: src/view/screens/AppPasswords.tsx:67
+#: src/view/screens/Profile.tsx:99
+msgid "Oops!"
+msgstr "糟糕!"
+
+#: src/screens/Onboarding/StepFinished.tsx:119
+msgid "Open"
+msgstr "開啟"
+
+#: src/view/screens/Moderation.tsx:75
+#~ msgid "Open content filtering settings"
+#~ msgstr ""
+
+#: src/view/com/composer/Composer.tsx:491
+#: src/view/com/composer/Composer.tsx:492
+msgid "Open emoji picker"
+msgstr "開啟表情符號選擇器"
+
+#: src/view/screens/ProfileFeed.tsx:300
+msgid "Open feed options menu"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:734
+msgid "Open links with in-app browser"
+msgstr "在內建瀏覽器中開啟連結"
+
+#: src/screens/Moderation/index.tsx:227
+msgid "Open muted words and tags settings"
+msgstr ""
+
+#: src/view/screens/Moderation.tsx:92
+#~ msgid "Open muted words settings"
+#~ msgstr "打开隐藏词设置"
+
+#: src/view/com/home/HomeHeaderLayoutMobile.tsx:50
+msgid "Open navigation"
+msgstr "開啟導覽"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:183
+msgid "Open post options menu"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:828
+#: src/view/screens/Settings/index.tsx:838
+msgid "Open storybook page"
+msgstr "開啟故事書頁面"
+
+#: src/view/screens/Settings/index.tsx:816
+msgid "Open system log"
+msgstr ""
+
+#: src/view/com/util/forms/DropdownButton.tsx:154
+msgid "Opens {numItems} options"
+msgstr "開啟 {numItems} 個選項"
+
+#: src/view/screens/Log.tsx:54
+msgid "Opens additional details for a debug entry"
+msgstr "開啟除錯項目的額外詳細資訊"
+
+#: src/view/com/notifications/FeedItem.tsx:353
+msgid "Opens an expanded list of users in this notification"
+msgstr "展開此通知的使用者列表"
+
+#: src/view/com/composer/photos/OpenCameraBtn.tsx:78
+msgid "Opens camera on device"
+msgstr "開啟裝置相機"
+
+#: src/view/com/composer/Prompt.tsx:25
+msgid "Opens composer"
+msgstr "開啟編輯器"
+
+#: src/view/screens/Settings/index.tsx:615
+msgid "Opens configurable language settings"
+msgstr "開啟可以更改的語言設定"
+
+#: src/view/com/composer/photos/SelectPhotoBtn.tsx:44
+msgid "Opens device photo gallery"
+msgstr "開啟裝置相簿"
+
+#: src/view/com/profile/ProfileHeader.tsx:420
+#~ msgid "Opens editor for profile display name, avatar, background image, and description"
+#~ msgstr "開啟個人資料(如名稱、頭貼、背景圖片、描述等)編輯器"
+
+#: src/view/screens/Settings/index.tsx:669
+msgid "Opens external embeds settings"
+msgstr "開啟外部嵌入設定"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:57
+#: src/view/com/auth/SplashScreen.tsx:68
+#: src/view/com/auth/SplashScreen.web.tsx:97
+msgid "Opens flow to create a new Bluesky account"
+msgstr ""
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:75
+#: src/view/com/auth/SplashScreen.tsx:83
+#: src/view/com/auth/SplashScreen.web.tsx:112
+msgid "Opens flow to sign into your existing Bluesky account"
+msgstr ""
+
+#: src/view/com/profile/ProfileHeader.tsx:575
+#~ msgid "Opens followers list"
+#~ msgstr "開啟跟隨者列表"
+
+#: src/view/com/profile/ProfileHeader.tsx:594
+#~ msgid "Opens following list"
+#~ msgstr "開啟正在跟隨列表"
+
+#: src/view/screens/Settings.tsx:412
+#~ msgid "Opens invite code list"
+#~ msgstr "開啟邀請碼列表"
+
+#: src/view/com/modals/InviteCodes.tsx:173
+msgid "Opens list of invite codes"
+msgstr "開啟邀請碼列表"
+
+#: src/view/screens/Settings/index.tsx:798
+msgid "Opens modal for account deletion confirmation. Requires email code"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:774
+#~ msgid "Opens modal for account deletion confirmation. Requires email code."
+#~ msgstr "開啟用於帳號刪除確認的彈窗。需要電子郵件驗證碼。"
+
+#: src/view/screens/Settings/index.tsx:756
+msgid "Opens modal for changing your Bluesky password"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:718
+msgid "Opens modal for choosing a new Bluesky handle"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:779
+msgid "Opens modal for downloading your Bluesky account data (repository)"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:968
+msgid "Opens modal for email verification"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:282
+msgid "Opens modal for using custom domain"
+msgstr "開啟使用自訂網域的彈窗"
+
+#: src/view/screens/Settings/index.tsx:640
+msgid "Opens moderation settings"
+msgstr "開啟限制設定"
+
+#: src/screens/Login/LoginForm.tsx:202
+msgid "Opens password reset form"
+msgstr "開啟密碼重設表單"
+
+#: src/view/com/home/HomeHeaderLayout.web.tsx:63
+#: src/view/screens/Feeds.tsx:356
+msgid "Opens screen to edit Saved Feeds"
+msgstr "開啟編輯已儲存訊息流的畫面"
+
+#: src/view/screens/Settings/index.tsx:597
+msgid "Opens screen with all saved feeds"
+msgstr "開啟包含所有已儲存訊息流的畫面"
+
+#: src/view/screens/Settings/index.tsx:696
+msgid "Opens the app password settings"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:676
+#~ msgid "Opens the app password settings page"
+#~ msgstr "開啟應用程式專用密碼設定頁面"
+
+#: src/view/screens/Settings/index.tsx:554
+msgid "Opens the Following feed preferences"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:535
+#~ msgid "Opens the home feed preferences"
+#~ msgstr "開啟首頁訊息流設定偏好"
+
+#: src/view/com/modals/LinkWarning.tsx:93
+msgid "Opens the linked website"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:829
+#: src/view/screens/Settings/index.tsx:839
+msgid "Opens the storybook page"
+msgstr "開啟故事書頁面"
+
+#: src/view/screens/Settings/index.tsx:817
+msgid "Opens the system log page"
+msgstr "開啟系統日誌頁面"
+
+#: src/view/screens/Settings/index.tsx:575
+msgid "Opens the threads preferences"
+msgstr "開啟對話串設定偏好"
+
+#: src/view/com/util/forms/DropdownButton.tsx:280
+msgid "Option {0} of {numItems}"
+msgstr "{0} 選項,共 {numItems} 個"
+
+#: src/components/ReportDialog/SubmitView.tsx:162
+msgid "Optionally provide additional information below:"
+msgstr ""
+
+#: src/view/com/modals/Threadgate.tsx:89
+msgid "Or combine these options:"
+msgstr "或者選擇組合這些選項:"
+
+#: src/lib/moderation/useReportOptions.ts:25
+msgid "Other"
+msgstr ""
+
+#: src/components/AccountList.tsx:73
+msgid "Other account"
+msgstr "其他帳號"
+
+#: src/view/com/modals/ServerInput.tsx:88
+#~ msgid "Other service"
+#~ msgstr "其他服務"
+
+#: src/view/com/composer/select-language/SelectLangBtn.tsx:91
+msgid "Other..."
+msgstr "其他…"
+
+#: src/components/Lists.tsx:184
+#: src/view/screens/NotFound.tsx:45
+msgid "Page not found"
+msgstr "頁面不存在"
+
+#: src/view/screens/NotFound.tsx:42
+msgid "Page Not Found"
+msgstr "頁面不存在"
+
+#: src/screens/Login/LoginForm.tsx:178
+#: src/screens/Signup/StepInfo/index.tsx:101
+#: src/view/com/modals/DeleteAccount.tsx:194
+#: src/view/com/modals/DeleteAccount.tsx:201
+msgid "Password"
+msgstr "密碼"
+
+#: src/view/com/modals/ChangePassword.tsx:142
+msgid "Password Changed"
+msgstr ""
+
+#: src/screens/Login/index.tsx:157
+msgid "Password updated"
+msgstr "密碼已更新"
+
+#: src/screens/Login/PasswordUpdatedForm.tsx:30
+msgid "Password updated!"
+msgstr "密碼已更新!"
+
+#: src/Navigation.tsx:164
+msgid "People followed by @{0}"
+msgstr "被 @{0} 跟隨的人"
+
+#: src/Navigation.tsx:157
+msgid "People following @{0}"
+msgstr "跟隨 @{0} 的人"
+
+#: src/view/com/lightbox/Lightbox.tsx:66
+msgid "Permission to access camera roll is required."
+msgstr "需要相機的存取權限。"
+
+#: src/view/com/lightbox/Lightbox.tsx:72
+msgid "Permission to access camera roll was denied. Please enable it in your system settings."
+msgstr "相機的存取權限已被拒絕,請在系統設定中啟用。"
+
+#: src/screens/Onboarding/index.tsx:31
+msgid "Pets"
+msgstr "寵物"
+
+#: src/view/com/auth/create/Step2.tsx:183
+#~ msgid "Phone number"
+#~ msgstr "手機號碼"
+
+#: src/view/com/modals/SelfLabel.tsx:121
+msgid "Pictures meant for adults."
+msgstr "適合成年人的圖像。"
+
+#: src/view/screens/ProfileFeed.tsx:292
+#: src/view/screens/ProfileList.tsx:563
+msgid "Pin to home"
+msgstr "固定到首頁"
+
+#: src/view/screens/ProfileFeed.tsx:295
+msgid "Pin to Home"
+msgstr ""
+
+#: src/view/screens/SavedFeeds.tsx:88
+msgid "Pinned Feeds"
+msgstr "固定訊息流列表"
+
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:123
+msgid "Play {0}"
+msgstr "播放 {0}"
+
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:57
+#: src/view/com/util/post-embeds/ExternalPlayerEmbed.tsx:58
+msgid "Play Video"
+msgstr "播放影片"
+
+#: src/view/com/util/post-embeds/ExternalGifEmbed.tsx:122
+msgid "Plays the GIF"
+msgstr "播放 GIF"
+
+#: src/screens/Signup/state.ts:241
+msgid "Please choose your handle."
+msgstr "請選擇你的帳號代碼。"
+
+#: src/screens/Signup/state.ts:234
+msgid "Please choose your password."
+msgstr "請選擇你的密碼。"
+
+#: src/screens/Signup/state.ts:251
+msgid "Please complete the verification captcha."
+msgstr "請完成 Captcha 驗證。"
+
+#: src/view/com/modals/ChangeEmail.tsx:67
+msgid "Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed."
+msgstr "更改前請先確認你的電子郵件地址。這是電子郵件更新工具的臨時要求,此限制將很快被移除。"
+
+#: src/view/com/modals/AddAppPasswords.tsx:91
+msgid "Please enter a name for your app password. All spaces is not allowed."
+msgstr "請輸入應用程式專用密碼的名稱。所有空格均不允許使用。"
+
+#: src/view/com/auth/create/Step2.tsx:206
+#~ msgid "Please enter a phone number that can receive SMS text messages."
+#~ msgstr "請輸入可以接收簡訊的手機號碼。"
+
+#: src/view/com/modals/AddAppPasswords.tsx:146
+msgid "Please enter a unique name for this App Password or use our randomly generated one."
+msgstr "請輸入此應用程式專用密碼的唯一名稱,或使用我們提供的隨機生成名稱。"
+
+#: src/components/dialogs/MutedWords.tsx:67
+msgid "Please enter a valid word, tag, or phrase to mute"
+msgstr ""
+
+#: src/view/com/auth/create/state.ts:170
+#~ msgid "Please enter the code you received by SMS."
+#~ msgstr "請輸入你收到的簡訊驗證碼。"
+
+#: src/view/com/auth/create/Step2.tsx:282
+#~ msgid "Please enter the verification code sent to {phoneNumberFormatted}."
+#~ msgstr "請輸入發送到 {phoneNumberFormatted} 的驗證碼。"
+
+#: src/screens/Signup/state.ts:220
+msgid "Please enter your email."
+msgstr "請輸入你的電子郵件。"
+
+#: src/view/com/modals/DeleteAccount.tsx:190
+msgid "Please enter your password as well:"
+msgstr "請輸入你的密碼:"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:221
+msgid "Please explain why you think this label was incorrectly applied by {0}"
+msgstr ""
+
+#: src/view/com/modals/AppealLabel.tsx:72
+#: src/view/com/modals/AppealLabel.tsx:75
+#~ msgid "Please tell us why you think this content warning was incorrectly applied!"
+#~ msgstr "請告訴我們你認為這個內容警告標示有誤的原因!"
+
+#: src/view/com/modals/VerifyEmail.tsx:101
+msgid "Please Verify Your Email"
+msgstr "請驗證你的電子郵件地址"
+
+#: src/view/com/composer/Composer.tsx:222
+msgid "Please wait for your link card to finish loading"
+msgstr "請等待你的連結卡載入完畢"
+
+#: src/screens/Onboarding/index.tsx:37
+msgid "Politics"
+msgstr "政治"
+
+#: src/view/com/modals/SelfLabel.tsx:111
+msgid "Porn"
+msgstr "情色內容"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:34
+#~ msgid "Pornography"
+#~ msgstr ""
+
+#: src/view/com/composer/Composer.tsx:367
+#: src/view/com/composer/Composer.tsx:375
+msgctxt "action"
+msgid "Post"
+msgstr "發佈"
+
+#: src/view/com/post-thread/PostThread.tsx:292
+msgctxt "description"
+msgid "Post"
+msgstr "發佈"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:175
+msgid "Post by {0}"
+msgstr "{0} 的貼文"
+
+#: src/Navigation.tsx:176
+#: src/Navigation.tsx:183
+#: src/Navigation.tsx:190
+msgid "Post by @{0}"
+msgstr "@{0} 的貼文"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:105
+msgid "Post deleted"
+msgstr "貼文已刪除"
+
+#: src/view/com/post-thread/PostThread.tsx:157
+msgid "Post hidden"
+msgstr "貼文已隱藏"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:97
+#: src/lib/moderation/useModerationCauseDescription.ts:99
+msgid "Post Hidden by Muted Word"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:100
+#: src/lib/moderation/useModerationCauseDescription.ts:108
+msgid "Post Hidden by You"
+msgstr ""
+
+#: src/view/com/composer/select-language/SelectLangBtn.tsx:87
+msgid "Post language"
+msgstr "貼文語言"
+
+#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:75
+msgid "Post Languages"
+msgstr "貼文語言"
+
+#: src/view/com/post-thread/PostThread.tsx:152
+#: src/view/com/post-thread/PostThread.tsx:164
+msgid "Post not found"
+msgstr "找不到貼文"
+
+#: src/components/TagMenu/index.tsx:253
+msgid "posts"
+msgstr "貼文"
+
+#: src/view/screens/Profile.tsx:190
+msgid "Posts"
+msgstr "貼文"
+
+#: src/components/dialogs/MutedWords.tsx:89
+msgid "Posts can be muted based on their text, their tags, or both."
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:64
+msgid "Posts hidden"
+msgstr "貼文已隱藏"
+
+#: src/view/com/modals/LinkWarning.tsx:60
+msgid "Potentially Misleading Link"
+msgstr "潛在誤導性連結"
+
+#: src/components/forms/HostingProvider.tsx:45
+msgid "Press to change hosting provider"
+msgstr ""
+
+#: src/components/Error.tsx:74
+#: src/components/Lists.tsx:80
+#: src/screens/Signup/index.tsx:186
+msgid "Press to retry"
+msgstr ""
+
+#: src/view/com/lightbox/Lightbox.web.tsx:150
+msgid "Previous image"
+msgstr "上一張圖片"
+
+#: src/view/screens/LanguageSettings.tsx:187
+msgid "Primary Language"
+msgstr "主要語言"
+
+#: src/view/screens/PreferencesThreads.tsx:97
+msgid "Prioritize Your Follows"
+msgstr "優先顯示跟隨者"
+
+#: src/view/screens/Settings/index.tsx:652
+#: src/view/shell/desktop/RightNav.tsx:72
+msgid "Privacy"
+msgstr "隱私"
+
+#: src/Navigation.tsx:231
+#: src/screens/Signup/StepInfo/Policies.tsx:56
+#: src/view/screens/PrivacyPolicy.tsx:29
+#: src/view/screens/Settings/index.tsx:923
+#: src/view/shell/Drawer.tsx:265
+msgid "Privacy Policy"
+msgstr "隱私政策"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:156
+msgid "Processing..."
+msgstr "處理中…"
+
+#: src/view/screens/DebugMod.tsx:888
+#: src/view/screens/Profile.tsx:342
+msgid "profile"
+msgstr "個人檔案"
+
+#: src/view/shell/bottom-bar/BottomBar.tsx:260
+#: src/view/shell/desktop/LeftNav.tsx:419
+#: src/view/shell/Drawer.tsx:70
+#: src/view/shell/Drawer.tsx:549
+#: src/view/shell/Drawer.tsx:550
+msgid "Profile"
+msgstr "個人檔案"
+
+#: src/view/com/modals/EditProfile.tsx:129
+msgid "Profile updated"
+msgstr "個人檔案已更新"
+
+#: src/view/screens/Settings/index.tsx:981
+msgid "Protect your account by verifying your email."
+msgstr "通過驗證電子郵件地址來保護你的帳號。"
+
+#: src/screens/Onboarding/StepFinished.tsx:105
+msgid "Public"
+msgstr "公開內容"
+
+#: src/view/screens/ModerationModlists.tsx:61
+msgid "Public, shareable lists of users to mute or block in bulk."
+msgstr "公開且可共享的批量靜音或封鎖列表。"
+
+#: src/view/screens/Lists.tsx:61
+msgid "Public, shareable lists which can drive feeds."
+msgstr "公開且可共享的列表,可作為訊息流使用。"
+
+#: src/view/com/composer/Composer.tsx:352
+msgid "Publish post"
+msgstr "發佈貼文"
+
+#: src/view/com/composer/Composer.tsx:352
+msgid "Publish reply"
+msgstr "發佈回覆"
+
+#: src/view/com/modals/Repost.tsx:66
+msgctxt "action"
+msgid "Quote post"
+msgstr "引用貼文"
+
+#: src/view/com/util/post-ctrls/RepostButton.web.tsx:58
+msgid "Quote post"
+msgstr "引用貼文"
+
+#: src/view/com/modals/Repost.tsx:71
+msgctxt "action"
+msgid "Quote Post"
+msgstr "引用貼文"
+
+#: src/view/screens/PreferencesThreads.tsx:86
+msgid "Random (aka \"Poster's Roulette\")"
+msgstr "隨機顯示 (又名試試手氣)"
+
+#: src/view/com/modals/EditImage.tsx:237
+msgid "Ratios"
+msgstr "比率"
+
+#: src/view/screens/Search/Search.tsx:777
+msgid "Recent Searches"
+msgstr ""
+
+#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116
+msgid "Recommended Feeds"
+msgstr "推薦訊息流"
+
+#: src/view/com/auth/onboarding/RecommendedFollows.tsx:180
+msgid "Recommended Users"
+msgstr "推薦的使用者"
+
+#: src/components/dialogs/MutedWords.tsx:286
+#: src/view/com/feeds/FeedSourceCard.tsx:283
+#: src/view/com/modals/ListAddRemoveUsers.tsx:268
+#: src/view/com/modals/SelfLabel.tsx:83
+#: src/view/com/modals/UserAddRemoveLists.tsx:219
+#: src/view/com/posts/FeedErrorMessage.tsx:204
+msgid "Remove"
+msgstr "移除"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:108
+#~ msgid "Remove {0} from my feeds?"
+#~ msgstr "將 {0} 從我的訊息流移除?"
+
+#: src/view/com/util/AccountDropdownBtn.tsx:22
+msgid "Remove account"
+msgstr "刪除帳號"
+
+#: src/view/com/util/UserAvatar.tsx:358
+msgid "Remove Avatar"
+msgstr ""
+
+#: src/view/com/util/UserBanner.tsx:148
+msgid "Remove Banner"
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:160
+msgid "Remove feed"
+msgstr "刪除訊息流"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:201
+msgid "Remove feed?"
+msgstr ""
+
+#: src/view/com/feeds/FeedSourceCard.tsx:173
+#: src/view/com/feeds/FeedSourceCard.tsx:233
+#: src/view/screens/ProfileFeed.tsx:335
+#: src/view/screens/ProfileFeed.tsx:341
+msgid "Remove from my feeds"
+msgstr "從我的訊息流中刪除"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:278
+msgid "Remove from my feeds?"
+msgstr ""
+
+#: src/view/com/composer/photos/Gallery.tsx:167
+msgid "Remove image"
+msgstr "刪除圖片"
+
+#: src/view/com/composer/ExternalEmbed.tsx:70
+msgid "Remove image preview"
+msgstr "刪除圖片預覽"
+
+#: src/components/dialogs/MutedWords.tsx:329
+msgid "Remove mute word from your list"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:48
+msgid "Remove repost"
+msgstr "刪除轉發"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:175
+#~ msgid "Remove this feed from my feeds?"
+#~ msgstr "將這個訊息流從我的訊息流列表中刪除?"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:202
+msgid "Remove this feed from your saved feeds"
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:132
+#~ msgid "Remove this feed from your saved feeds?"
+#~ msgstr "將這個訊息流從儲存的訊息流列表中刪除?"
+
+#: src/view/com/modals/ListAddRemoveUsers.tsx:199
+#: src/view/com/modals/UserAddRemoveLists.tsx:152
+msgid "Removed from list"
+msgstr "從列表中刪除"
+
+#: src/view/com/feeds/FeedSourceCard.tsx:121
+msgid "Removed from my feeds"
+msgstr "從我的訊息流中刪除"
+
+#: src/view/screens/ProfileFeed.tsx:209
+msgid "Removed from your feeds"
+msgstr ""
+
+#: src/view/com/composer/ExternalEmbed.tsx:71
+msgid "Removes default thumbnail from {0}"
+msgstr "從 {0} 中刪除預設縮略圖"
+
+#: src/view/screens/Profile.tsx:191
+msgid "Replies"
+msgstr "回覆"
+
+#: src/view/com/threadgate/WhoCanReply.tsx:98
+msgid "Replies to this thread are disabled"
+msgstr "對此對話串的回覆已被停用"
+
+#: src/view/com/composer/Composer.tsx:365
+msgctxt "action"
+msgid "Reply"
+msgstr "回覆"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:144
+msgid "Reply Filters"
+msgstr "回覆過濾器"
+
+#: src/view/com/post/Post.tsx:166
+#: src/view/com/posts/FeedItem.tsx:280
+msgctxt "description"
+msgid "Reply to <0/>"
+msgstr "回覆 <0/>"
+
+#: src/view/com/modals/report/Modal.tsx:166
+#~ msgid "Report {collectionName}"
+#~ msgstr "檢舉 {collectionName}"
+
+#: src/view/com/profile/ProfileMenu.tsx:319
+#: src/view/com/profile/ProfileMenu.tsx:322
+msgid "Report Account"
+msgstr "檢舉帳號"
+
+#: src/components/ReportDialog/index.tsx:49
+msgid "Report dialog"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:352
+#: src/view/screens/ProfileFeed.tsx:354
+msgid "Report feed"
+msgstr "檢舉訊息流"
+
+#: src/view/screens/ProfileList.tsx:429
+msgid "Report List"
+msgstr "檢舉列表"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:292
+#: src/view/com/util/forms/PostDropdownBtn.tsx:294
+msgid "Report post"
+msgstr "檢舉貼文"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:42
+msgid "Report this content"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:55
+msgid "Report this feed"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:52
+msgid "Report this list"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:49
+msgid "Report this post"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:46
+msgid "Report this user"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:44
+#: src/view/com/modals/Repost.tsx:49
+#: src/view/com/modals/Repost.tsx:54
+#: src/view/com/util/post-ctrls/RepostButton.tsx:61
+msgctxt "action"
+msgid "Repost"
+msgstr "轉發"
+
+#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
+msgid "Repost"
+msgstr "轉發"
+
+#: src/view/com/util/post-ctrls/RepostButton.web.tsx:94
+#: src/view/com/util/post-ctrls/RepostButton.web.tsx:105
+msgid "Repost or quote post"
+msgstr "轉發或引用貼文"
+
+#: src/view/screens/PostRepostedBy.tsx:27
+msgid "Reposted By"
+msgstr "轉發"
+
+#: src/view/com/posts/FeedItem.tsx:197
+msgid "Reposted by {0}"
+msgstr "由 {0} 轉發"
+
+#: src/view/com/posts/FeedItem.tsx:214
+msgid "Reposted by <0/>"
+msgstr "由 <0/> 轉發"
+
+#: src/view/com/notifications/FeedItem.tsx:166
+msgid "reposted your post"
+msgstr "轉發你的貼文"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:187
+msgid "Reposts of this post"
+msgstr "轉發這條貼文"
+
+#: src/view/com/modals/ChangeEmail.tsx:181
+#: src/view/com/modals/ChangeEmail.tsx:183
+msgid "Request Change"
+msgstr "請求變更"
+
+#: src/view/com/auth/create/Step2.tsx:219
+#~ msgid "Request code"
+#~ msgstr "請求碼"
+
+#: src/view/com/modals/ChangePassword.tsx:241
+#: src/view/com/modals/ChangePassword.tsx:243
+msgid "Request Code"
+msgstr "請求代碼"
+
+#: src/view/screens/Settings/index.tsx:475
+msgid "Require alt text before posting"
+msgstr "要求發佈前提供替代文字"
+
+#: src/screens/Signup/StepInfo/index.tsx:69
+msgid "Required for this provider"
+msgstr "提供商要求必填"
+
+#: src/view/com/modals/ChangePassword.tsx:185
+msgid "Reset code"
+msgstr "重設碼"
+
+#: src/view/com/modals/ChangePassword.tsx:192
+msgid "Reset Code"
+msgstr "重設碼"
+
+#: src/view/screens/Settings/index.tsx:824
+#~ msgid "Reset onboarding"
+#~ msgstr "重設初始設定進行狀態"
+
+#: src/view/screens/Settings/index.tsx:858
+#: src/view/screens/Settings/index.tsx:861
+msgid "Reset onboarding state"
+msgstr "重設初始設定進行狀態"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:86
+msgid "Reset password"
+msgstr "重設密碼"
+
+#: src/view/screens/Settings/index.tsx:814
+#~ msgid "Reset preferences"
+#~ msgstr "重設偏好設定"
+
+#: src/view/screens/Settings/index.tsx:848
+#: src/view/screens/Settings/index.tsx:851
+msgid "Reset preferences state"
+msgstr "重設偏好設定狀態"
+
+#: src/view/screens/Settings/index.tsx:859
+msgid "Resets the onboarding state"
+msgstr "重設初始設定狀態"
+
+#: src/view/screens/Settings/index.tsx:849
+msgid "Resets the preferences state"
+msgstr "重設偏好設定狀態"
+
+#: src/screens/Login/LoginForm.tsx:235
+msgid "Retries login"
+msgstr "重試登入"
+
+#: src/view/com/util/error/ErrorMessage.tsx:57
+#: src/view/com/util/error/ErrorScreen.tsx:74
+msgid "Retries the last action, which errored out"
+msgstr "重試上次出錯的操作"
+
+#: src/components/Error.tsx:79
+#: src/components/Lists.tsx:91
+#: src/screens/Login/LoginForm.tsx:234
+#: src/screens/Login/LoginForm.tsx:241
+#: src/screens/Onboarding/StepInterests/index.tsx:225
+#: src/screens/Onboarding/StepInterests/index.tsx:228
+#: src/screens/Signup/index.tsx:193
+#: src/view/com/util/error/ErrorMessage.tsx:55
+#: src/view/com/util/error/ErrorScreen.tsx:72
+msgid "Retry"
+msgstr "重試"
+
+#: src/view/com/auth/create/Step2.tsx:247
+#~ msgid "Retry."
+#~ msgstr "重試。"
+
+#: src/components/Error.tsx:86
+#: src/view/screens/ProfileList.tsx:917
+msgid "Return to previous page"
+msgstr "返回上一頁"
+
+#: src/view/screens/NotFound.tsx:59
+msgid "Returns to home page"
+msgstr ""
+
+#: src/view/screens/NotFound.tsx:58
+#: src/view/screens/ProfileFeed.tsx:113
+msgid "Returns to previous page"
+msgstr ""
+
+#: src/view/shell/desktop/RightNav.tsx:55
+#~ msgid "SANDBOX. Posts and accounts are not permanent."
+#~ msgstr "沙盒模式。貼文和帳號不會永久儲存。"
+
+#: src/components/dialogs/BirthDateSettings.tsx:125
+#: src/view/com/modals/ChangeHandle.tsx:174
+#: src/view/com/modals/CreateOrEditList.tsx:338
+#: src/view/com/modals/EditProfile.tsx:225
+msgid "Save"
+msgstr "儲存"
+
+#: src/view/com/lightbox/Lightbox.tsx:132
+#: src/view/com/modals/CreateOrEditList.tsx:346
+msgctxt "action"
+msgid "Save"
+msgstr "儲存"
+
+#: src/view/com/modals/AltImage.tsx:131
+msgid "Save alt text"
+msgstr "儲存替代文字"
+
+#: src/components/dialogs/BirthDateSettings.tsx:119
+msgid "Save birthday"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:233
+msgid "Save Changes"
+msgstr "儲存更改"
+
+#: src/view/com/modals/ChangeHandle.tsx:171
+msgid "Save handle change"
+msgstr "儲存帳號代碼更改"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:145
+msgid "Save image crop"
+msgstr "儲存圖片裁剪"
+
+#: src/view/screens/ProfileFeed.tsx:336
+#: src/view/screens/ProfileFeed.tsx:342
+msgid "Save to my feeds"
+msgstr ""
+
+#: src/view/screens/SavedFeeds.tsx:122
+msgid "Saved Feeds"
+msgstr "已儲存訊息流"
+
+#: src/view/com/lightbox/Lightbox.tsx:81
+msgid "Saved to your camera roll."
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:213
+msgid "Saved to your feeds"
+msgstr ""
+
+#: src/view/com/modals/EditProfile.tsx:226
+msgid "Saves any changes to your profile"
+msgstr "儲存個人資料中所做的變更"
+
+#: src/view/com/modals/ChangeHandle.tsx:172
+msgid "Saves handle change to {handle}"
+msgstr "儲存帳號代碼更改至 {handle}"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:146
+msgid "Saves image crop settings"
+msgstr ""
+
+#: src/screens/Onboarding/index.tsx:36
+msgid "Science"
+msgstr "科學"
+
+#: src/view/screens/ProfileList.tsx:873
+msgid "Scroll to top"
+msgstr "滾動到頂部"
+
+#: src/Navigation.tsx:459
+#: src/view/com/auth/LoggedOut.tsx:123
+#: src/view/com/modals/ListAddRemoveUsers.tsx:75
+#: src/view/com/util/forms/SearchInput.tsx:67
+#: src/view/com/util/forms/SearchInput.tsx:79
+#: src/view/screens/Search/Search.tsx:421
+#: src/view/screens/Search/Search.tsx:670
+#: src/view/screens/Search/Search.tsx:688
+#: src/view/shell/bottom-bar/BottomBar.tsx:169
+#: src/view/shell/desktop/LeftNav.tsx:328
+#: src/view/shell/desktop/Search.tsx:215
+#: src/view/shell/desktop/Search.tsx:224
+#: src/view/shell/Drawer.tsx:365
+#: src/view/shell/Drawer.tsx:366
+msgid "Search"
+msgstr "搜尋"
+
+#: src/view/screens/Search/Search.tsx:737
+#: src/view/shell/desktop/Search.tsx:256
+msgid "Search for \"{query}\""
+msgstr "搜尋「{query}」"
+
+#: src/components/TagMenu/index.tsx:145
+msgid "Search for all posts by @{authorHandle} with tag {displayTag}"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:145
+#~ msgid "Search for all posts by @{authorHandle} with tag {tag}"
+#~ msgstr ""
+
+#: src/components/TagMenu/index.tsx:94
+msgid "Search for all posts with tag {displayTag}"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:90
+#~ msgid "Search for all posts with tag {tag}"
+#~ msgstr ""
+
+#: src/view/com/auth/LoggedOut.tsx:105
+#: src/view/com/auth/LoggedOut.tsx:106
+#: src/view/com/modals/ListAddRemoveUsers.tsx:70
+msgid "Search for users"
+msgstr "搜尋使用者"
+
+#: src/view/com/modals/ChangeEmail.tsx:110
+msgid "Security Step Required"
+msgstr "所需的安全步驟"
+
+#: src/components/TagMenu/index.web.tsx:66
+msgid "See {truncatedTag} posts"
+msgstr ""
+
+#: src/components/TagMenu/index.web.tsx:83
+msgid "See {truncatedTag} posts by user"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:128
+msgid "See <0>{displayTag}0> posts"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:187
+msgid "See <0>{displayTag}0> posts by this user"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:128
+#~ msgid "See <0>{tag}0> posts"
+#~ msgstr ""
+
+#: src/components/TagMenu/index.tsx:189
+#~ msgid "See <0>{tag}0> posts by this user"
+#~ msgstr ""
+
+#: src/view/screens/SavedFeeds.tsx:163
+msgid "See this guide"
+msgstr "查看指南"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:40
+msgid "See what's next"
+msgstr "查看下一步"
+
+#: src/view/com/util/Selector.tsx:106
+msgid "Select {item}"
+msgstr "選擇 {item}"
+
+#: src/screens/Login/ChooseAccountForm.tsx:61
+msgid "Select account"
+msgstr ""
+
+#: src/view/com/modals/ServerInput.tsx:75
+#~ msgid "Select Bluesky Social"
+#~ msgstr "選擇 Bluesky Social"
+
+#: src/screens/Login/index.tsx:120
+msgid "Select from an existing account"
+msgstr "從現有帳號中選擇"
+
+#: src/view/screens/LanguageSettings.tsx:299
+msgid "Select languages"
+msgstr ""
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:30
+msgid "Select moderator"
+msgstr ""
+
+#: src/view/com/util/Selector.tsx:107
+msgid "Select option {i} of {numItems}"
+msgstr "選擇 {numItems} 個項目中的第 {i} 項"
+
+#: src/view/com/auth/create/Step1.tsx:96
+#: src/view/com/auth/login/LoginForm.tsx:153
+#~ msgid "Select service"
+#~ msgstr "選擇服務"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:52
+msgid "Select some accounts below to follow"
+msgstr "在下面選擇一些要跟隨的帳號"
+
+#: src/components/ReportDialog/SubmitView.tsx:135
+msgid "Select the moderation service(s) to report to"
+msgstr ""
+
+#: src/view/com/auth/server-input/index.tsx:82
+msgid "Select the service that hosts your data."
+msgstr "選擇用來託管你的資料的服務商。"
+
+#: src/screens/Onboarding/StepTopicalFeeds.tsx:100
+msgid "Select topical feeds to follow from the list below"
+msgstr "從下面的列表中選擇要跟隨的主題訊息流"
+
+#: src/screens/Onboarding/StepModeration/index.tsx:63
+msgid "Select what you want to see (or not see), and we’ll handle the rest."
+msgstr "選擇你想看到(或不想看到)的內容,剩下的由我們來處理。"
+
+#: src/view/screens/LanguageSettings.tsx:281
+msgid "Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown."
+msgstr "選擇你希望訂閱訊息流中所包含的語言。未選擇任何語言時會預設顯示所有語言。"
+
+#: src/view/screens/LanguageSettings.tsx:98
+#~ msgid "Select your app language for the default text to display in the app"
+#~ msgstr "選擇應用程式中顯示預設文字的語言"
+
+#: src/view/screens/LanguageSettings.tsx:98
+msgid "Select your app language for the default text to display in the app."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/index.tsx:133
+msgid "Select your date of birth"
+msgstr ""
+
+#: src/screens/Onboarding/StepInterests/index.tsx:200
+msgid "Select your interests from the options below"
+msgstr "下面選擇你感興趣的選項"
+
+#: src/view/com/auth/create/Step2.tsx:155
+#~ msgid "Select your phone's country"
+#~ msgstr "選擇你的電話區號"
+
+#: src/view/screens/LanguageSettings.tsx:190
+msgid "Select your preferred language for translations in your feed."
+msgstr "選擇你在訂閱訊息流中希望進行翻譯的目標語言偏好。"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:117
+msgid "Select your primary algorithmic feeds"
+msgstr "選擇你的訊息流主要算法"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:133
+msgid "Select your secondary algorithmic feeds"
+msgstr "選擇你的訊息流次要算法"
+
+#: src/view/com/modals/VerifyEmail.tsx:202
+#: src/view/com/modals/VerifyEmail.tsx:204
+msgid "Send Confirmation Email"
+msgstr "發送確認電子郵件"
+
+#: src/view/com/modals/DeleteAccount.tsx:130
+msgid "Send email"
+msgstr "發送電子郵件"
+
+#: src/view/com/modals/DeleteAccount.tsx:143
+msgctxt "action"
+msgid "Send Email"
+msgstr "發送電子郵件"
+
+#: src/view/shell/Drawer.tsx:298
+#: src/view/shell/Drawer.tsx:319
+msgid "Send feedback"
+msgstr "提交意見"
+
+#: src/components/ReportDialog/SubmitView.tsx:214
+#: src/components/ReportDialog/SubmitView.tsx:218
+msgid "Send report"
+msgstr "提交舉報"
+
+#: src/view/com/modals/report/SendReportButton.tsx:45
+#~ msgid "Send Report"
+#~ msgstr "提交舉報"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:44
+msgid "Send report to {0}"
+msgstr ""
+
+#: src/view/com/modals/DeleteAccount.tsx:132
+msgid "Sends email with confirmation code for account deletion"
+msgstr "發送包含帳號刪除確認碼的電子郵件"
+
+#: src/view/com/auth/server-input/index.tsx:114
+msgid "Server address"
+msgstr "伺服器地址"
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:311
+#~ msgid "Set {value} for {labelGroup} content moderation policy"
+#~ msgstr "將 {labelGroup} 內容審核政策設為 {value}"
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:160
+#: src/view/com/modals/ContentFilteringSettings.tsx:179
+#~ msgctxt "action"
+#~ msgid "Set Age"
+#~ msgstr "設定年齡"
+
+#: src/screens/Moderation/index.tsx:304
+msgid "Set birthdate"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:488
+#~ msgid "Set color theme to dark"
+#~ msgstr "設定主題為深色模式"
+
+#: src/view/screens/Settings/index.tsx:481
+#~ msgid "Set color theme to light"
+#~ msgstr "設定主題為亮色模式"
+
+#: src/view/screens/Settings/index.tsx:475
+#~ msgid "Set color theme to system setting"
+#~ msgstr "設定主題跟隨系統設定"
+
+#: src/view/screens/Settings/index.tsx:514
+#~ msgid "Set dark theme to the dark theme"
+#~ msgstr "設定深色模式至深黑"
+
+#: src/view/screens/Settings/index.tsx:507
+#~ msgid "Set dark theme to the dim theme"
+#~ msgstr "設定深色模式至暗淡"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:102
+msgid "Set new password"
+msgstr "設定新密碼"
+
+#: src/view/com/auth/create/Step1.tsx:202
+#~ msgid "Set password"
+#~ msgstr "設定密碼"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:225
+msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible."
+msgstr "將此設定項設為「關」會隱藏來自訂閱訊息流的所有引用貼文。轉發仍將可見。"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:122
+msgid "Set this setting to \"No\" to hide all replies from your feed."
+msgstr "將此設定項設為「關」以隱藏來自訂閱訊息流的所有回覆。"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:191
+msgid "Set this setting to \"No\" to hide all reposts from your feed."
+msgstr "將此設定項設為「關」以隱藏來自訂閱訊息流的所有轉發。"
+
+#: src/view/screens/PreferencesThreads.tsx:122
+msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature."
+msgstr "將此設定項設為「開」以在分層視圖中顯示回覆。這是一個實驗性功能。"
+
+#: src/view/screens/PreferencesHomeFeed.tsx:261
+#~ msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature."
+#~ msgstr "將此設定項設為「開」以在跟隨訊息流中顯示已儲存訊息流的樣本。這是一個實驗性功能。"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:261
+msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your Following feed. This is an experimental feature."
+msgstr ""
+
+#: src/screens/Onboarding/Layout.tsx:48
+msgid "Set up your account"
+msgstr "設定你的帳號"
+
+#: src/view/com/modals/ChangeHandle.tsx:267
+msgid "Sets Bluesky username"
+msgstr "設定 Bluesky 使用者名稱"
+
+#: src/view/screens/Settings/index.tsx:507
+msgid "Sets color theme to dark"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:500
+msgid "Sets color theme to light"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:494
+msgid "Sets color theme to system setting"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:533
+msgid "Sets dark theme to the dark theme"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:526
+msgid "Sets dark theme to the dim theme"
+msgstr ""
+
+#: src/screens/Login/ForgotPasswordForm.tsx:113
+msgid "Sets email for password reset"
+msgstr "設定用於重設密碼的電子郵件"
+
+#: src/view/com/auth/login/ForgotPasswordForm.tsx:122
+#~ msgid "Sets hosting provider for password reset"
+#~ msgstr "設定用於密碼重設的主機提供商資訊"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:124
+msgid "Sets image aspect ratio to square"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:114
+msgid "Sets image aspect ratio to tall"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:104
+msgid "Sets image aspect ratio to wide"
+msgstr ""
+
+#: src/view/com/auth/create/Step1.tsx:97
+#: src/view/com/auth/login/LoginForm.tsx:154
+#~ msgid "Sets server for the Bluesky client"
+#~ msgstr "設定 Bluesky 用戶端的伺服器"
+
+#: src/Navigation.tsx:139
+#: src/view/screens/Settings/index.tsx:313
+#: src/view/shell/desktop/LeftNav.tsx:437
+#: src/view/shell/Drawer.tsx:570
+#: src/view/shell/Drawer.tsx:571
+msgid "Settings"
+msgstr "設定"
+
+#: src/view/com/modals/SelfLabel.tsx:125
+msgid "Sexual activity or erotic nudity."
+msgstr "性行為或性暗示裸露。"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:38
+msgid "Sexually Suggestive"
+msgstr ""
+
+#: src/view/com/lightbox/Lightbox.tsx:141
+msgctxt "action"
+msgid "Share"
+msgstr "分享"
+
+#: src/view/com/profile/ProfileMenu.tsx:215
+#: src/view/com/profile/ProfileMenu.tsx:224
+#: src/view/com/util/forms/PostDropdownBtn.tsx:228
+#: src/view/com/util/forms/PostDropdownBtn.tsx:237
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:235
+#: src/view/screens/ProfileList.tsx:388
+msgid "Share"
+msgstr "分享"
+
+#: src/view/com/profile/ProfileMenu.tsx:373
+#: src/view/com/util/forms/PostDropdownBtn.tsx:347
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:251
+msgid "Share anyway"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:362
+#: src/view/screens/ProfileFeed.tsx:364
+msgid "Share feed"
+msgstr "分享訊息流"
+
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
+msgid "Share Link"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:92
+msgid "Shares the linked website"
+msgstr ""
+
+#: src/components/moderation/ContentHider.tsx:115
+#: src/components/moderation/LabelPreference.tsx:136
+#: src/components/moderation/PostHider.tsx:107
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:54
+#: src/view/screens/Settings/index.tsx:363
+msgid "Show"
+msgstr "顯示"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:68
+msgid "Show all replies"
+msgstr "顯示所有回覆"
+
+#: src/components/moderation/ScreenHider.tsx:169
+#: src/components/moderation/ScreenHider.tsx:172
+msgid "Show anyway"
+msgstr "仍然顯示"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:27
+#: src/lib/moderation/useLabelBehaviorDescription.ts:63
+msgid "Show badge"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:61
+msgid "Show badge and filter from feeds"
+msgstr ""
+
+#: src/view/com/modals/EmbedConsent.tsx:87
+#~ msgid "Show embeds from {0}"
+#~ msgstr "顯示來自 {0} 的嵌入內容"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:200
+msgid "Show follows similar to {0}"
+msgstr "顯示類似於 {0} 的跟隨者"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:507
+#: src/view/com/post/Post.tsx:201
+#: src/view/com/posts/FeedItem.tsx:355
+msgid "Show More"
+msgstr "顯示更多"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:258
+msgid "Show Posts from My Feeds"
+msgstr "在自訂訊息流中顯示貼文"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:222
+msgid "Show Quote Posts"
+msgstr "顯示引用貼文"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:119
+msgid "Show quote-posts in Following feed"
+msgstr "在跟隨訊息流中顯示引用"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:135
+msgid "Show quotes in Following"
+msgstr "在跟隨中顯示引用"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:95
+msgid "Show re-posts in Following feed"
+msgstr "在跟隨訊息流中顯示轉發"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:119
+msgid "Show Replies"
+msgstr "顯示回覆"
+
+#: src/view/screens/PreferencesThreads.tsx:100
+msgid "Show replies by people you follow before all other replies."
+msgstr "在所有其他回覆之前顯示你跟隨的人的回覆。"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:87
+msgid "Show replies in Following"
+msgstr "在跟隨中顯示回覆"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:71
+msgid "Show replies in Following feed"
+msgstr "在跟隨訊息流中顯示回覆"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:70
+msgid "Show replies with at least {value} {0}"
+msgstr "顯示至少包含 {value} 個{0}的回覆"
+
+#: src/view/screens/PreferencesFollowingFeed.tsx:188
+msgid "Show Reposts"
+msgstr "顯示轉發"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:111
+msgid "Show reposts in Following"
+msgstr "在跟隨中顯示轉發"
+
+#: src/components/moderation/ContentHider.tsx:68
+#: src/components/moderation/PostHider.tsx:64
+msgid "Show the content"
+msgstr "顯示內容"
+
+#: src/view/com/notifications/FeedItem.tsx:351
+msgid "Show users"
+msgstr "顯示使用者"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:58
+msgid "Show warning"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:56
+msgid "Show warning and filter from feeds"
+msgstr ""
+
+#: src/view/com/profile/ProfileHeader.tsx:462
+#~ msgid "Shows a list of users similar to this user."
+#~ msgstr "顯示與該使用者相似的使用者列表。"
+
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:130
+msgid "Shows posts from {0} in your feed"
+msgstr "在你的訊息流中顯示來自 {0} 的貼文"
+
+#: src/screens/Login/index.tsx:100
+#: src/screens/Login/index.tsx:119
+#: src/screens/Login/LoginForm.tsx:131
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:73
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:83
+#: src/view/com/auth/SplashScreen.tsx:81
+#: src/view/com/auth/SplashScreen.tsx:90
+#: src/view/com/auth/SplashScreen.web.tsx:110
+#: src/view/com/auth/SplashScreen.web.tsx:119
+#: src/view/shell/bottom-bar/BottomBar.tsx:300
+#: src/view/shell/bottom-bar/BottomBar.tsx:301
+#: src/view/shell/bottom-bar/BottomBar.tsx:303
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:178
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:179
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:181
+#: src/view/shell/NavSignupCard.tsx:58
+#: src/view/shell/NavSignupCard.tsx:59
+#: src/view/shell/NavSignupCard.tsx:61
+msgid "Sign in"
+msgstr "登入"
+
+#: src/view/com/auth/HomeLoggedOutCTA.tsx:82
+#: src/view/com/auth/SplashScreen.tsx:86
+#: src/view/com/auth/SplashScreen.web.tsx:91
+#~ msgid "Sign In"
+#~ msgstr "登入"
+
+#: src/components/AccountList.tsx:109
+msgid "Sign in as {0}"
+msgstr "以 {0} 登入"
+
+#: src/screens/Login/ChooseAccountForm.tsx:64
+msgid "Sign in as..."
+msgstr "登入為…"
+
+#: src/view/com/auth/login/LoginForm.tsx:140
+#~ msgid "Sign into"
+#~ msgstr "登入到"
+
+#: src/view/screens/Settings/index.tsx:107
+#: src/view/screens/Settings/index.tsx:110
+msgid "Sign out"
+msgstr "登出"
+
+#: src/view/shell/bottom-bar/BottomBar.tsx:290
+#: src/view/shell/bottom-bar/BottomBar.tsx:291
+#: src/view/shell/bottom-bar/BottomBar.tsx:293
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:168
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:169
+#: src/view/shell/bottom-bar/BottomBarWeb.tsx:171
+#: src/view/shell/NavSignupCard.tsx:49
+#: src/view/shell/NavSignupCard.tsx:50
+#: src/view/shell/NavSignupCard.tsx:52
+msgid "Sign up"
+msgstr "註冊"
+
+#: src/view/shell/NavSignupCard.tsx:42
+msgid "Sign up or sign in to join the conversation"
+msgstr "註冊或登入以參與對話"
+
+#: src/components/moderation/ScreenHider.tsx:97
+#: src/lib/moderation/useGlobalLabelStrings.ts:28
+msgid "Sign-in Required"
+msgstr "需要登入"
+
+#: src/view/screens/Settings/index.tsx:374
+msgid "Signed in as"
+msgstr "登入身分"
+
+#: src/screens/Login/ChooseAccountForm.tsx:48
+msgid "Signed in as @{0}"
+msgstr "以 @{0} 身分登入"
+
+#: src/view/com/modals/SwitchAccount.tsx:70
+#~ msgid "Signs {0} out of Bluesky"
+#~ msgstr "從 {0} 登出 Bluesky"
+
+#: src/screens/Onboarding/StepInterests/index.tsx:239
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:203
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:35
+msgid "Skip"
+msgstr "跳過"
+
+#: src/screens/Onboarding/StepInterests/index.tsx:236
+msgid "Skip this flow"
+msgstr "跳過此流程"
+
+#: src/view/com/auth/create/Step2.tsx:82
+#~ msgid "SMS verification"
+#~ msgstr "簡訊驗證"
+
+#: src/screens/Onboarding/index.tsx:40
+msgid "Software Dev"
+msgstr "軟體開發"
+
+#: src/view/com/modals/ProfilePreview.tsx:62
+#~ msgid "Something went wrong and we're not sure what."
+#~ msgstr "發生了一些問題,我們不確定是什麼原因。"
+
+#: src/components/ReportDialog/index.tsx:59
+#: src/screens/Moderation/index.tsx:114
+#: src/screens/Profile/Sections/Labels.tsx:76
+msgid "Something went wrong, please try again."
+msgstr ""
+
+#: src/components/Lists.tsx:203
+#~ msgid "Something went wrong!"
+#~ msgstr "發生了一些問題!"
+
+#: src/view/com/modals/Waitlist.tsx:51
+#~ msgid "Something went wrong. Check your email and try again."
+#~ msgstr "發生了一些問題。請檢查你的電子郵件,然後重試。"
+
+#: src/App.native.tsx:66
+msgid "Sorry! Your session expired. Please log in again."
+msgstr "抱歉!你的登入已過期。請重新登入。"
+
+#: src/view/screens/PreferencesThreads.tsx:69
+msgid "Sort Replies"
+msgstr "排序回覆"
+
+#: src/view/screens/PreferencesThreads.tsx:72
+msgid "Sort replies to the same post by:"
+msgstr "對同一貼文的回覆進行排序:"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:146
+msgid "Source:"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:65
+msgid "Spam"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:53
+msgid "Spam; excessive mentions or replies"
+msgstr ""
+
+#: src/screens/Onboarding/index.tsx:30
+msgid "Sports"
+msgstr "運動"
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:123
+msgid "Square"
+msgstr "方塊"
+
+#: src/view/com/modals/ServerInput.tsx:62
+#~ msgid "Staging"
+#~ msgstr "臨時"
+
+#: src/view/screens/Settings/index.tsx:903
+msgid "Status page"
+msgstr "狀態頁"
+
+#: src/screens/Signup/index.tsx:142
+msgid "Step"
+msgstr ""
+
+#: src/view/com/auth/create/StepHeader.tsx:22
+#~ msgid "Step {0} of {numSteps}"
+#~ msgstr "第 {0} 步,共 {numSteps} 步"
+
+#: src/view/screens/Settings/index.tsx:292
+msgid "Storage cleared, you need to restart the app now."
+msgstr "已清除儲存資料,你需要立即重啟應用程式。"
+
+#: src/Navigation.tsx:211
+#: src/view/screens/Settings/index.tsx:831
+msgid "Storybook"
+msgstr "故事書"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:255
+#: src/components/moderation/LabelsOnMeDialog.tsx:256
+msgid "Submit"
+msgstr "提交"
+
+#: src/view/screens/ProfileList.tsx:590
+msgid "Subscribe"
+msgstr "訂閱"
+
+#: src/screens/Profile/Sections/Labels.tsx:180
+msgid "Subscribe to @{0} to use these labels:"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:221
+msgid "Subscribe to Labeler"
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:172
+#: src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx:307
+msgid "Subscribe to the {0} feed"
+msgstr "訂閱 {0} 訊息流"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:184
+msgid "Subscribe to this labeler"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:586
+msgid "Subscribe to this list"
+msgstr "訂閱這個列表"
+
+#: src/view/screens/Search/Search.tsx:376
+msgid "Suggested Follows"
+msgstr "推薦的跟隨者"
+
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:65
+msgid "Suggested for you"
+msgstr "為你推薦"
+
+#: src/view/com/modals/SelfLabel.tsx:95
+msgid "Suggestive"
+msgstr "建議"
+
+#: src/Navigation.tsx:226
+#: src/view/screens/Support.tsx:30
+#: src/view/screens/Support.tsx:33
+msgid "Support"
+msgstr "支援"
+
+#: src/view/com/modals/ProfilePreview.tsx:110
+#~ msgid "Swipe up to see more"
+#~ msgstr "向上滑動查看更多"
+
+#: src/components/dialogs/SwitchAccount.tsx:46
+#: src/components/dialogs/SwitchAccount.tsx:49
+msgid "Switch Account"
+msgstr "切換帳號"
+
+#: src/view/screens/Settings/index.tsx:139
+msgid "Switch to {0}"
+msgstr "切換到 {0}"
+
+#: src/view/screens/Settings/index.tsx:140
+msgid "Switches the account you are logged in to"
+msgstr "切換你登入的帳號"
+
+#: src/view/screens/Settings/index.tsx:491
+msgid "System"
+msgstr "系統"
+
+#: src/view/screens/Settings/index.tsx:819
+msgid "System log"
+msgstr "系統日誌"
+
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "tag"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:78
+msgid "Tag menu: {displayTag}"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:74
+#~ msgid "Tag menu: {tag}"
+#~ msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:113
+msgid "Tall"
+msgstr "高"
+
+#: src/view/com/util/images/AutoSizedImage.tsx:70
+msgid "Tap to view fully"
+msgstr "點擊查看完整內容"
+
+#: src/screens/Onboarding/index.tsx:39
+msgid "Tech"
+msgstr "科技"
+
+#: src/view/shell/desktop/RightNav.tsx:81
+msgid "Terms"
+msgstr "條款"
+
+#: src/Navigation.tsx:236
+#: src/screens/Signup/StepInfo/Policies.tsx:49
+#: src/view/screens/Settings/index.tsx:917
+#: src/view/screens/TermsOfService.tsx:29
+#: src/view/shell/Drawer.tsx:259
+msgid "Terms of Service"
+msgstr "服務條款"
+
+#: src/lib/moderation/useReportOptions.ts:58
+#: src/lib/moderation/useReportOptions.ts:79
+#: src/lib/moderation/useReportOptions.ts:87
+msgid "Terms used violate community standards"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:323
+msgid "text"
+msgstr "文字"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:219
+msgid "Text input field"
+msgstr "文字輸入框"
+
+#: src/components/ReportDialog/SubmitView.tsx:78
+msgid "Thank you. Your report has been sent."
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:465
+msgid "That contains the following:"
+msgstr ""
+
+#: src/screens/Signup/index.tsx:84
+msgid "That handle is already taken."
+msgstr "這個帳號代碼已被使用。"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:283
+#: src/view/com/profile/ProfileMenu.tsx:349
+msgid "The account will be able to interact with you after unblocking."
+msgstr "解除封鎖後,該帳號將能夠與你互動。"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:127
+msgid "the author"
+msgstr ""
+
+#: src/view/screens/CommunityGuidelines.tsx:36
+msgid "The Community Guidelines have been moved to <0/>"
+msgstr "社群準則已移動到 <0/>"
+
+#: src/view/screens/CopyrightPolicy.tsx:33
+msgid "The Copyright Policy has been moved to <0/>"
+msgstr "版權政策已移動到 <0/>"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:48
+msgid "The following labels were applied to your account."
+msgstr ""
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:49
+msgid "The following labels were applied to your content."
+msgstr ""
+
+#: src/screens/Onboarding/Layout.tsx:58
+msgid "The following steps will help customize your Bluesky experience."
+msgstr "以下步驟將幫助自訂你的 Bluesky 體驗。"
+
+#: src/view/com/post-thread/PostThread.tsx:153
+#: src/view/com/post-thread/PostThread.tsx:165
+msgid "The post may have been deleted."
+msgstr "此貼文可能已被刪除。"
+
+#: src/view/screens/PrivacyPolicy.tsx:33
+msgid "The Privacy Policy has been moved to <0/>"
+msgstr "隱私政策已移動到 <0/>"
+
+#: src/view/screens/Support.tsx:36
+msgid "The support form has been moved. If you need help, please <0/> or visit {HELP_DESK_URL} to get in touch with us."
+msgstr "支援表單已移至別處。如果需協助,請點擊<0/>或前往 {HELP_DESK_URL} 與我們聯繫。"
+
+#: src/view/screens/TermsOfService.tsx:33
+msgid "The Terms of Service have been moved to"
+msgstr "服務條款已遷移到"
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:141
+msgid "There are many feeds to try:"
+msgstr "這裡有些訊息流你可以嘗試:"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:112
+#: src/view/screens/ProfileFeed.tsx:544
+msgid "There was an an issue contacting the server, please check your internet connection and try again."
+msgstr "連線至伺服器時出現問題,請檢查你的網路連線並重試。"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:138
+msgid "There was an an issue removing this feed. Please check your internet connection and try again."
+msgstr "刪除訊息流時出現問題,請檢查你的網路連線並重試。"
+
+#: src/view/screens/ProfileFeed.tsx:218
+msgid "There was an an issue updating your feeds, please check your internet connection and try again."
+msgstr "更新訊息流時出現問題,請檢查你的網路連線並重試。"
+
+#: src/view/screens/ProfileFeed.tsx:245
+#: src/view/screens/ProfileList.tsx:275
+#: src/view/screens/SavedFeeds.tsx:209
+#: src/view/screens/SavedFeeds.tsx:231
+#: src/view/screens/SavedFeeds.tsx:252
+msgid "There was an issue contacting the server"
+msgstr "連線伺服器時出現問題"
+
+#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:57
+#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:66
+#: src/view/com/feeds/FeedSourceCard.tsx:110
+#: src/view/com/feeds/FeedSourceCard.tsx:123
+msgid "There was an issue contacting your server"
+msgstr "連線伺服器時出現問題"
+
+#: src/view/com/notifications/Feed.tsx:117
+msgid "There was an issue fetching notifications. Tap here to try again."
+msgstr "取得通知時發生問題,點擊這裡重試。"
+
+#: src/view/com/posts/Feed.tsx:287
+msgid "There was an issue fetching posts. Tap here to try again."
+msgstr "取得貼文時發生問題,點擊這裡重試。"
+
+#: src/view/com/lists/ListMembers.tsx:172
+msgid "There was an issue fetching the list. Tap here to try again."
+msgstr "取得列表時發生問題,點擊這裡重試。"
+
+#: src/view/com/feeds/ProfileFeedgens.tsx:148
+#: src/view/com/lists/ProfileLists.tsx:155
+msgid "There was an issue fetching your lists. Tap here to try again."
+msgstr "取得列表時發生問題,點擊這裡重試。"
+
+#: src/components/ReportDialog/SubmitView.tsx:83
+msgid "There was an issue sending your report. Please check your internet connection."
+msgstr ""
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:65
+msgid "There was an issue syncing your preferences with the server"
+msgstr "與伺服器同步偏好設定時發生問題"
+
+#: src/view/screens/AppPasswords.tsx:68
+msgid "There was an issue with fetching your app passwords"
+msgstr "取得應用程式專用密碼時發生問題"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:105
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:127
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:141
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:99
+#: src/view/com/post-thread/PostThreadFollowBtn.tsx:111
+#: src/view/com/profile/ProfileMenu.tsx:106
+#: src/view/com/profile/ProfileMenu.tsx:117
+#: src/view/com/profile/ProfileMenu.tsx:132
+#: src/view/com/profile/ProfileMenu.tsx:143
+#: src/view/com/profile/ProfileMenu.tsx:157
+#: src/view/com/profile/ProfileMenu.tsx:170
+msgid "There was an issue! {0}"
+msgstr "發生問題了!{0}"
+
+#: src/view/screens/ProfileList.tsx:288
+#: src/view/screens/ProfileList.tsx:302
+#: src/view/screens/ProfileList.tsx:316
+#: src/view/screens/ProfileList.tsx:330
+msgid "There was an issue. Please check your internet connection and try again."
+msgstr "發生問題了。請檢查你的網路連線並重試。"
+
+#: src/view/com/util/ErrorBoundary.tsx:51
+msgid "There was an unexpected issue in the application. Please let us know if this happened to you!"
+msgstr "應用程式中發生了意外問題。請告訴我們是否發生在你身上!"
+
+#: src/screens/Deactivated.tsx:106
+msgid "There's been a rush of new users to Bluesky! We'll activate your account as soon as we can."
+msgstr "Bluesky 迎來了大量新使用者!我們將儘快啟用你的帳號。"
+
+#: src/view/com/auth/create/Step2.tsx:55
+#~ msgid "There's something wrong with this number. Please choose your country and enter your full phone number!"
+#~ msgstr "電話號碼有誤,請選擇區號並輸入完整的電話號碼!"
+
+#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:146
+msgid "These are popular accounts you might like:"
+msgstr "這裡是一些受歡迎的帳號,你可能會喜歡:"
+
+#: src/components/moderation/ScreenHider.tsx:116
+msgid "This {screenDescription} has been flagged:"
+msgstr "{screenDescription} 已被標記:"
+
+#: src/components/moderation/ScreenHider.tsx:111
+msgid "This account has requested that users sign in to view their profile."
+msgstr "此帳號要求使用者登入後才能查看其個人資料。"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:204
+msgid "This appeal will be sent to <0>{0}0>."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:19
+msgid "This content has been hidden by the moderators."
+msgstr ""
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:24
+msgid "This content has received a general warning from moderators."
+msgstr ""
+
+#: src/components/dialogs/EmbedConsent.tsx:64
+msgid "This content is hosted by {0}. Do you want to enable external media?"
+msgstr "此內容由 {0} 托管。是否要啟用外部媒體?"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:77
+#: src/lib/moderation/useModerationCauseDescription.ts:77
+msgid "This content is not available because one of the users involved has blocked the other."
+msgstr "由於其中一個使用者封鎖了另一個使用者,無法查看此內容。"
+
+#: src/view/com/posts/FeedErrorMessage.tsx:108
+msgid "This content is not viewable without a Bluesky account."
+msgstr "沒有 Bluesky 帳號,無法查看此內容。"
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:75
+#~ msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost.0>"
+#~ msgstr "此功能目前為測試版本。您可以在<0>這篇部落格文章0>中了解更多有關匯出存放庫的資訊"
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:75
+msgid "This feature is in beta. You can read more about repository exports in <0>this blogpost0>."
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:114
+msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later."
+msgstr "此訊息流由於目前使用人數眾多而暫時無法使用。請稍後再試。"
+
+#: src/screens/Profile/Sections/Feed.tsx:50
+#: src/view/screens/ProfileFeed.tsx:477
+#: src/view/screens/ProfileList.tsx:675
+msgid "This feed is empty!"
+msgstr "這個訊息流是空的!"
+
+#: src/view/com/posts/CustomFeedEmptyState.tsx:37
+msgid "This feed is empty! You may need to follow more users or tune your language settings."
+msgstr "這個訊息流是空的!你或許需要先跟隨更多的人或檢查你的語言設定。"
+
+#: src/components/dialogs/BirthDateSettings.tsx:41
+msgid "This information is not shared with other users."
+msgstr "此資訊不會分享給其他使用者。"
+
+#: src/view/com/modals/VerifyEmail.tsx:119
+msgid "This is important in case you ever need to change your email or reset your password."
+msgstr "這很重要,以防你將來需要更改電子郵件地址或重設密碼。"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:124
+msgid "This label was applied by {0}."
+msgstr ""
+
+#: src/screens/Profile/Sections/Labels.tsx:167
+msgid "This labeler hasn't declared what labels it publishes, and may not be active."
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:72
+msgid "This link is taking you to the following website:"
+msgstr "此連結將帶你到以下網站:"
+
+#: src/view/screens/ProfileList.tsx:853
+msgid "This list is empty!"
+msgstr "此列表為空!"
+
+#: src/screens/Profile/ErrorState.tsx:40
+msgid "This moderation service is unavailable. See below for more details. If this issue persists, contact us."
+msgstr ""
+
+#: src/view/com/modals/AddAppPasswords.tsx:107
+msgid "This name is already in use"
+msgstr "此名稱已被使用"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:125
+msgid "This post has been deleted."
+msgstr "此貼文已被刪除。"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:344
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:248
+msgid "This post is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:326
+msgid "This post will be hidden from feeds."
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:370
+msgid "This profile is only visible to logged-in users. It won't be visible to people who aren't logged in."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/Policies.tsx:37
+msgid "This service has not provided terms of service or a privacy policy."
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:445
+msgid "This should create a domain record at:"
+msgstr ""
+
+#: src/view/com/profile/ProfileFollowers.tsx:87
+msgid "This user doesn't have any followers."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:72
+#: src/lib/moderation/useModerationCauseDescription.ts:68
+msgid "This user has blocked you. You cannot view their content."
+msgstr "此使用者已封鎖你,你無法查看他們的內容。"
+
+#: src/lib/moderation/useGlobalLabelStrings.ts:30
+msgid "This user has requested that their content only be shown to signed-in users."
+msgstr ""
+
+#: src/view/com/modals/ModerationDetails.tsx:42
+#~ msgid "This user is included in the <0/> list which you have blocked."
+#~ msgstr "此使用者包含在你已封鎖的 <0/> 列表中。"
+
+#: src/view/com/modals/ModerationDetails.tsx:74
+#~ msgid "This user is included in the <0/> list which you have muted."
+#~ msgstr "此使用者包含在你已靜音的 <0/> 列表中。"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:55
+msgid "This user is included in the <0>{0}0> list which you have blocked."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:84
+msgid "This user is included in the <0>{0}0> list which you have muted."
+msgstr ""
+
+#: src/view/com/modals/ModerationDetails.tsx:74
+#~ msgid "This user is included the <0/> list which you have muted."
+#~ msgstr "此使用者包含在你已靜音的 <0/> 列表中。"
+
+#: src/view/com/profile/ProfileFollows.tsx:87
+msgid "This user isn't following anyone."
+msgstr ""
+
+#: src/view/com/modals/SelfLabel.tsx:137
+msgid "This warning is only available for posts with media attached."
+msgstr "此警告僅適用於附帶媒體的貼文。"
+
+#: src/components/dialogs/MutedWords.tsx:283
+msgid "This will delete {0} from your muted words. You can always add it back later."
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:282
+#~ msgid "This will hide this post from your feeds."
+#~ msgstr "這將在你的訊息流中隱藏此貼文。"
+
+#: src/view/screens/Settings/index.tsx:574
+msgid "Thread preferences"
+msgstr ""
+
+#: src/view/screens/PreferencesThreads.tsx:53
+#: src/view/screens/Settings/index.tsx:584
+msgid "Thread Preferences"
+msgstr "對話串偏好"
+
+#: src/view/screens/PreferencesThreads.tsx:119
+msgid "Threaded Mode"
+msgstr "對話串模式"
+
+#: src/Navigation.tsx:269
+msgid "Threads Preferences"
+msgstr "對話串偏好"
+
+#: src/components/ReportDialog/SelectLabelerView.tsx:33
+msgid "To whom would you like to send this report?"
+msgstr ""
+
+#: src/components/dialogs/MutedWords.tsx:112
+msgid "Toggle between muted word options."
+msgstr ""
+
+#: src/view/com/util/forms/DropdownButton.tsx:246
+msgid "Toggle dropdown"
+msgstr "切換下拉式選單"
+
+#: src/screens/Moderation/index.tsx:332
+msgid "Toggle to enable or disable adult content"
+msgstr ""
+
+#: src/view/com/modals/EditImage.tsx:272
+msgid "Transformations"
+msgstr "轉換"
+
+#: src/view/com/post-thread/PostThreadItem.tsx:644
+#: src/view/com/post-thread/PostThreadItem.tsx:646
+#: src/view/com/util/forms/PostDropdownBtn.tsx:212
+#: src/view/com/util/forms/PostDropdownBtn.tsx:214
+msgid "Translate"
+msgstr "翻譯"
+
+#: src/view/com/util/error/ErrorScreen.tsx:82
+msgctxt "action"
+msgid "Try again"
+msgstr "重試"
+
+#: src/view/com/modals/ChangeHandle.tsx:428
+msgid "Type:"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:478
+msgid "Un-block list"
+msgstr "取消封鎖列表"
+
+#: src/view/screens/ProfileList.tsx:461
+msgid "Un-mute list"
+msgstr "取消靜音列表"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:74
+#: src/screens/Login/index.tsx:78
+#: src/screens/Login/LoginForm.tsx:119
+#: src/screens/Login/SetNewPasswordForm.tsx:77
+#: src/screens/Signup/index.tsx:63
+#: src/view/com/modals/ChangePassword.tsx:70
+msgid "Unable to contact your service. Please check your Internet connection."
+msgstr "無法連線到服務,請檢查你的網路連線。"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:181
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:287
+#: src/view/com/profile/ProfileMenu.tsx:361
+#: src/view/screens/ProfileList.tsx:572
+msgid "Unblock"
+msgstr "取消封鎖"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:186
+msgctxt "action"
+msgid "Unblock"
+msgstr "取消封鎖"
+
+#: src/view/com/profile/ProfileMenu.tsx:299
+#: src/view/com/profile/ProfileMenu.tsx:305
+msgid "Unblock Account"
+msgstr "取消封鎖"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:281
+#: src/view/com/profile/ProfileMenu.tsx:343
+msgid "Unblock Account?"
+msgstr ""
+
+#: src/view/com/modals/Repost.tsx:43
+#: src/view/com/modals/Repost.tsx:56
+#: src/view/com/util/post-ctrls/RepostButton.tsx:60
+#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48
+msgid "Undo repost"
+msgstr "取消轉發"
+
+#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:141
+#: src/view/com/profile/ProfileHeaderSuggestedFollows.tsx:246
+msgid "Unfollow"
+msgstr ""
+
+#: src/view/com/profile/FollowButton.tsx:60
+msgctxt "action"
+msgid "Unfollow"
+msgstr "取消跟隨"
+
+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:220
+msgid "Unfollow {0}"
+msgstr "取消跟隨 {0}"
+
+#: src/view/com/profile/ProfileMenu.tsx:241
+#: src/view/com/profile/ProfileMenu.tsx:251
+msgid "Unfollow Account"
+msgstr ""
+
+#: src/view/com/auth/create/state.ts:262
+#~ msgid "Unfortunately, you do not meet the requirements to create an account."
+#~ msgstr "很遺憾,你不符合建立帳號的要求。"
+
+#: src/view/com/util/post-ctrls/PostCtrls.tsx:195
+msgid "Unlike"
+msgstr "取消喜歡"
+
+#: src/view/screens/ProfileFeed.tsx:573
+msgid "Unlike this feed"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:249
+#: src/view/screens/ProfileList.tsx:579
+msgid "Unmute"
+msgstr "取消靜音"
+
+#: src/components/TagMenu/index.web.tsx:104
+msgid "Unmute {truncatedTag}"
+msgstr ""
+
+#: src/view/com/profile/ProfileMenu.tsx:278
+#: src/view/com/profile/ProfileMenu.tsx:284
+msgid "Unmute Account"
+msgstr "取消靜音帳號"
+
+#: src/components/TagMenu/index.tsx:208
+msgid "Unmute all {displayTag} posts"
+msgstr ""
+
+#: src/components/TagMenu/index.tsx:210
+#~ msgid "Unmute all {tag} posts"
+#~ msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:251
+#: src/view/com/util/forms/PostDropdownBtn.tsx:256
+msgid "Unmute thread"
+msgstr "取消靜音對話串"
+
+#: src/view/screens/ProfileFeed.tsx:295
+#: src/view/screens/ProfileList.tsx:563
+msgid "Unpin"
+msgstr "取消固定"
+
+#: src/view/screens/ProfileFeed.tsx:292
+msgid "Unpin from home"
+msgstr ""
+
+#: src/view/screens/ProfileList.tsx:444
+msgid "Unpin moderation list"
+msgstr "取消固定限制列表"
+
+#: src/view/screens/ProfileFeed.tsx:346
+#~ msgid "Unsave"
+#~ msgstr "取消儲存"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:219
+msgid "Unsubscribe"
+msgstr ""
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:183
+msgid "Unsubscribe from this labeler"
+msgstr ""
+
+#: src/lib/moderation/useReportOptions.ts:70
+msgid "Unwanted Sexual Content"
+msgstr ""
+
+#: src/view/com/modals/UserAddRemoveLists.tsx:70
+msgid "Update {displayName} in Lists"
+msgstr "更新列表中的 {displayName}"
+
+#: src/lib/hooks/useOTAUpdate.ts:15
+#~ msgid "Update Available"
+#~ msgstr "更新可用"
+
+#: src/view/com/modals/ChangeHandle.tsx:508
+msgid "Update to {handle}"
+msgstr ""
+
+#: src/screens/Login/SetNewPasswordForm.tsx:186
+msgid "Updating..."
+msgstr "更新中…"
+
+#: src/view/com/modals/ChangeHandle.tsx:454
+msgid "Upload a text file to:"
+msgstr "上傳文字檔案至:"
+
+#: src/view/com/util/UserAvatar.tsx:326
+#: src/view/com/util/UserAvatar.tsx:329
+#: src/view/com/util/UserBanner.tsx:116
+#: src/view/com/util/UserBanner.tsx:119
+msgid "Upload from Camera"
+msgstr ""
+
+#: src/view/com/util/UserAvatar.tsx:343
+#: src/view/com/util/UserBanner.tsx:133
+msgid "Upload from Files"
+msgstr ""
+
+#: src/view/com/util/UserAvatar.tsx:337
+#: src/view/com/util/UserAvatar.tsx:341
+#: src/view/com/util/UserBanner.tsx:127
+#: src/view/com/util/UserBanner.tsx:131
+msgid "Upload from Library"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:408
+msgid "Use a file on your server"
+msgstr ""
+
+#: src/view/screens/AppPasswords.tsx:197
+msgid "Use app passwords to login to other Bluesky clients without giving full access to your account or password."
+msgstr "使用應用程式專用密碼登入到其他 Bluesky 用戶端,而無需提供你的帳號或密碼。"
+
+#: src/view/com/modals/ChangeHandle.tsx:517
+msgid "Use bsky.social as hosting provider"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:516
+msgid "Use default provider"
+msgstr "使用預設提供商"
+
+#: src/view/com/modals/InAppBrowserConsent.tsx:56
+#: src/view/com/modals/InAppBrowserConsent.tsx:58
+msgid "Use in-app browser"
+msgstr "使用內建瀏覽器"
+
+#: src/view/com/modals/InAppBrowserConsent.tsx:66
+#: src/view/com/modals/InAppBrowserConsent.tsx:68
+msgid "Use my default browser"
+msgstr "使用我的預設瀏覽器"
+
+#: src/view/com/modals/ChangeHandle.tsx:400
+msgid "Use the DNS panel"
+msgstr ""
+
+#: src/view/com/modals/AddAppPasswords.tsx:156
+msgid "Use this to sign into the other app along with your handle."
+msgstr "使用這個和你的帳號代碼一起登入其他應用程式。"
+
+#: src/view/com/modals/ServerInput.tsx:105
+#~ msgid "Use your domain as your Bluesky client service provider"
+#~ msgstr "將你的網域用作 Bluesky 用戶端服務提供商"
+
+#: src/view/com/modals/InviteCodes.tsx:201
+msgid "Used by:"
+msgstr "使用者:"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:64
+#: src/lib/moderation/useModerationCauseDescription.ts:56
+msgid "User Blocked"
+msgstr "使用者被封鎖"
+
+#: src/lib/moderation/useModerationCauseDescription.ts:48
+msgid "User Blocked by \"{0}\""
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:53
+msgid "User Blocked by List"
+msgstr "使用者被列表封鎖"
+
+#: src/lib/moderation/useModerationCauseDescription.ts:66
+msgid "User Blocking You"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:70
+msgid "User Blocks You"
+msgstr "使用者封鎖了你"
+
+#: src/view/com/auth/create/Step2.tsx:79
+#~ msgid "User handle"
+#~ msgstr "帳號代碼"
+
+#: src/view/com/lists/ListCard.tsx:85
+#: src/view/com/modals/UserAddRemoveLists.tsx:198
+msgid "User list by {0}"
+msgstr "{0} 的使用者列表"
+
+#: src/view/screens/ProfileList.tsx:777
+msgid "User list by <0/>"
+msgstr "<0/> 的使用者列表"
+
+#: src/view/com/lists/ListCard.tsx:83
+#: src/view/com/modals/UserAddRemoveLists.tsx:196
+#: src/view/screens/ProfileList.tsx:775
+msgid "User list by you"
+msgstr "你的使用者列表"
+
+#: src/view/com/modals/CreateOrEditList.tsx:197
+msgid "User list created"
+msgstr "使用者列表已建立"
+
+#: src/view/com/modals/CreateOrEditList.tsx:183
+msgid "User list updated"
+msgstr "使用者列表已更新"
+
+#: src/view/screens/Lists.tsx:58
+msgid "User Lists"
+msgstr "使用者列表"
+
+#: src/screens/Login/LoginForm.tsx:151
+msgid "Username or email address"
+msgstr "使用者名稱或電子郵件地址"
+
+#: src/view/screens/ProfileList.tsx:811
+msgid "Users"
+msgstr "使用者"
+
+#: src/view/com/threadgate/WhoCanReply.tsx:143
+msgid "users followed by <0/>"
+msgstr "跟隨 <0/> 的使用者"
+
+#: src/view/com/modals/Threadgate.tsx:106
+msgid "Users in \"{0}\""
+msgstr "「{0}」中的使用者"
+
+#: src/components/LikesDialog.tsx:85
+msgid "Users that have liked this content or profile"
+msgstr ""
+
+#: src/view/com/modals/ChangeHandle.tsx:436
+msgid "Value:"
+msgstr ""
+
+#: src/view/com/auth/create/Step2.tsx:243
+#~ msgid "Verification code"
+#~ msgstr "驗證碼"
+
+#: src/view/com/modals/ChangeHandle.tsx:509
+msgid "Verify {0}"
+msgstr ""
+
+#: src/view/screens/Settings/index.tsx:942
+msgid "Verify email"
+msgstr "驗證電子郵件"
+
+#: src/view/screens/Settings/index.tsx:967
+msgid "Verify my email"
+msgstr "驗證我的電子郵件"
+
+#: src/view/screens/Settings/index.tsx:976
+msgid "Verify My Email"
+msgstr "驗證我的電子郵件"
+
+#: src/view/com/modals/ChangeEmail.tsx:205
+#: src/view/com/modals/ChangeEmail.tsx:207
+msgid "Verify New Email"
+msgstr "驗證新的電子郵件"
+
+#: src/view/com/modals/VerifyEmail.tsx:103
+msgid "Verify Your Email"
+msgstr "驗證你的電子郵件"
+
+#: src/view/screens/Settings/index.tsx:893
+msgid "Version {0}"
+msgstr ""
+
+#: src/screens/Onboarding/index.tsx:42
+msgid "Video Games"
+msgstr "電子遊戲"
+
+#: src/screens/Profile/Header/Shell.tsx:107
+msgid "View {0}'s avatar"
+msgstr "查看{0}的頭貼"
+
+#: src/view/screens/Log.tsx:52
+msgid "View debug entry"
+msgstr "查看除錯項目"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:131
+msgid "View details"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:126
+msgid "View details for reporting a copyright violation"
+msgstr ""
+
+#: src/view/com/posts/FeedSlice.tsx:99
+msgid "View full thread"
+msgstr "查看整個對話串"
+
+#: src/components/moderation/LabelsOnMe.tsx:51
+msgid "View information about these labels"
+msgstr ""
+
+#: src/view/com/posts/FeedErrorMessage.tsx:166
+msgid "View profile"
+msgstr "查看資料"
+
+#: src/view/com/profile/ProfileSubpageHeader.tsx:128
+msgid "View the avatar"
+msgstr "查看頭像"
+
+#: src/components/LabelingServiceCard/index.tsx:140
+msgid "View the labeling service provided by @{0}"
+msgstr ""
+
+#: src/view/screens/ProfileFeed.tsx:585
+msgid "View users who like this feed"
+msgstr ""
+
+#: src/view/com/modals/LinkWarning.tsx:89
+#: src/view/com/modals/LinkWarning.tsx:95
+msgid "Visit Site"
+msgstr "造訪網站"
+
+#: src/components/moderation/LabelPreference.tsx:135
+#: src/lib/moderation/useLabelBehaviorDescription.ts:17
+#: src/lib/moderation/useLabelBehaviorDescription.ts:22
+#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:53
+msgid "Warn"
+msgstr "警告"
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:48
+msgid "Warn content"
+msgstr ""
+
+#: src/lib/moderation/useLabelBehaviorDescription.ts:46
+msgid "Warn content and filter from feeds"
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:134
+#~ msgid "We also think you'll like \"For You\" by Skygaze:"
+#~ msgstr "我們認為你還會喜歡 Skygaze 維護的「For You」:"
+
+#: src/screens/Hashtag.tsx:133
+msgid "We couldn't find any results for that hashtag."
+msgstr ""
+
+#: src/screens/Deactivated.tsx:133
+msgid "We estimate {estimatedTime} until your account is ready."
+msgstr "我們估計還需要 {estimatedTime} 才能準備好你的帳號。"
+
+#: src/screens/Onboarding/StepFinished.tsx:97
+msgid "We hope you have a wonderful time. Remember, Bluesky is:"
+msgstr "我們希望你在此度過愉快的時光。請記住,Bluesky 是:"
+
+#: src/view/com/posts/DiscoverFallbackHeader.tsx:29
+msgid "We ran out of posts from your follows. Here's the latest from <0/>."
+msgstr "你已看完了你跟隨的貼文。這是 <0/> 的最新貼文。"
+
+#: src/components/dialogs/MutedWords.tsx:203
+msgid "We recommend avoiding common words that appear in many posts, since it can result in no posts being shown."
+msgstr ""
+
+#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:125
+msgid "We recommend our \"Discover\" feed:"
+msgstr "我們推薦我們的「Discover」訊息流:"
+
+#: src/components/dialogs/BirthDateSettings.tsx:52
+msgid "We were unable to load your birth date preferences. Please try again."
+msgstr ""
+
+#: src/screens/Moderation/index.tsx:385
+msgid "We were unable to load your configured labelers at this time."
+msgstr ""
+
+#: src/screens/Onboarding/StepInterests/index.tsx:137
+msgid "We weren't able to connect. Please try again to continue setting up your account. If it continues to fail, you can skip this flow."
+msgstr "我們無法連線到網際網路,請重試以繼續設定你的帳號。如果仍繼續失敗,你可以選擇跳過此流程。"
+
+#: src/screens/Deactivated.tsx:137
+msgid "We will let you know when your account is ready."
+msgstr "我們會在你的帳號準備好時通知你。"
+
+#: src/view/com/modals/AppealLabel.tsx:48
+#~ msgid "We'll look into your appeal promptly."
+#~ msgstr "我們將迅速審查你的申訴。"
+
+#: src/screens/Onboarding/StepInterests/index.tsx:142
+msgid "We'll use this to help customize your experience."
+msgstr "我們將使用這些資訊來幫助定制你的體驗。"
+
+#: src/screens/Signup/index.tsx:130
+msgid "We're so excited to have you join us!"
+msgstr "我們非常高興你加入我們!"
+
+#: src/view/screens/ProfileList.tsx:89
+msgid "We're sorry, but we were unable to resolve this list. If this persists, please contact the list creator, @{handleOrDid}."
+msgstr "很抱歉,我們無法解析此列表。如果問題持續發生,請聯繫列表建立者 @{handleOrDid}。"
+
+#: src/components/dialogs/MutedWords.tsx:229
+msgid "We're sorry, but we weren't able to load your muted words at this time. Please try again."
+msgstr ""
+
+#: src/view/screens/Search/Search.tsx:256
+msgid "We're sorry, but your search could not be completed. Please try again in a few minutes."
+msgstr "很抱歉,無法完成你的搜尋請求。請稍後再試。"
+
+#: src/components/Lists.tsx:188
+#: src/view/screens/NotFound.tsx:48
+msgid "We're sorry! We can't find the page you were looking for."
+msgstr "很抱歉!我們找不到你正在尋找的頁面。"
+
+#: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:321
+msgid "We're sorry! You can only subscribe to ten labelers, and you've reached your limit of ten."
+msgstr ""
+
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:48
+msgid "Welcome to <0>Bluesky0>"
+msgstr "歡迎來到 <0>Bluesky0>"
+
+#: src/screens/Onboarding/StepInterests/index.tsx:134
+msgid "What are your interests?"
+msgstr "你感興趣的是什麼?"
+
+#: src/view/com/modals/report/Modal.tsx:169
+#~ msgid "What is the issue with this {collectionName}?"
+#~ msgstr "這個 {collectionName} 有什麼問題?"
+
+#: src/view/com/auth/SplashScreen.tsx:58
+#: src/view/com/auth/SplashScreen.web.tsx:84
+#: src/view/com/composer/Composer.tsx:296
+msgid "What's up?"
+msgstr "發生了什麼新鮮事?"
+
+#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:78
+msgid "Which languages are used in this post?"
+msgstr "這個貼文使用了哪些語言?"
+
+#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:77
+msgid "Which languages would you like to see in your algorithmic feeds?"
+msgstr "你想在演算法訊息流中看到哪些語言?"
+
+#: src/view/com/composer/threadgate/ThreadgateBtn.tsx:47
+#: src/view/com/modals/Threadgate.tsx:66
+msgid "Who can reply"
+msgstr "誰可以回覆"
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:43
+msgid "Why should this content be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:56
+msgid "Why should this feed be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:53
+msgid "Why should this list be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:50
+msgid "Why should this post be reviewed?"
+msgstr ""
+
+#: src/components/ReportDialog/SelectReportOptionView.tsx:47
+msgid "Why should this user be reviewed?"
+msgstr ""
+
+#: src/view/com/modals/crop-image/CropImage.web.tsx:103
+msgid "Wide"
+msgstr "寬"
+
+#: src/view/com/composer/Composer.tsx:436
+msgid "Write post"
+msgstr "撰寫貼文"
+
+#: src/view/com/composer/Composer.tsx:295
+#: src/view/com/composer/Prompt.tsx:37
+msgid "Write your reply"
+msgstr "撰寫你的回覆"
+
+#: src/screens/Onboarding/index.tsx:28
+msgid "Writers"
+msgstr "作家"
+
+#: src/view/com/auth/create/Step2.tsx:263
+#~ msgid "XXXXXX"
+#~ msgstr "XXXXXX"
+
+#: src/view/com/composer/select-language/SuggestedLanguage.tsx:77
+#: src/view/screens/PreferencesFollowingFeed.tsx:129
+#: src/view/screens/PreferencesFollowingFeed.tsx:201
+#: src/view/screens/PreferencesFollowingFeed.tsx:236
+#: src/view/screens/PreferencesFollowingFeed.tsx:271
+#: src/view/screens/PreferencesThreads.tsx:106
+#: src/view/screens/PreferencesThreads.tsx:129
+msgid "Yes"
+msgstr "開"
+
+#: src/screens/Deactivated.tsx:130
+msgid "You are in line."
+msgstr "輪到你了。"
+
+#: src/view/com/profile/ProfileFollows.tsx:86
+msgid "You are not following anyone."
+msgstr ""
+
+#: src/view/com/posts/FollowingEmptyState.tsx:67
+#: src/view/com/posts/FollowingEndOfFeed.tsx:68
+msgid "You can also discover new Custom Feeds to follow."
+msgstr "你也可以探索並跟隨新的自訂訊息流。"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:143
+msgid "You can change these settings later."
+msgstr "你可以稍後在設定中更改。"
+
+#: src/screens/Login/index.tsx:158
+#: src/screens/Login/PasswordUpdatedForm.tsx:33
+msgid "You can now sign in with your new password."
+msgstr "你現在可以使用新密碼登入。"
+
+#: src/view/com/profile/ProfileFollowers.tsx:86
+msgid "You do not have any followers."
+msgstr ""
+
+#: src/view/com/modals/InviteCodes.tsx:67
+msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer."
+msgstr "你目前還沒有邀請碼!當你持續使用 Bluesky 一段時間後,我們將提供一些新的邀請碼給你。"
+
+#: src/view/screens/SavedFeeds.tsx:102
+msgid "You don't have any pinned feeds."
+msgstr "你目前還沒有任何固定的訊息流。"
+
+#: src/view/screens/Feeds.tsx:452
+msgid "You don't have any saved feeds!"
+msgstr "你目前還沒有任何儲存的訊息流!"
+
+#: src/view/screens/SavedFeeds.tsx:135
+msgid "You don't have any saved feeds."
+msgstr "你目前還沒有任何儲存的訊息流。"
+
+#: src/view/com/post-thread/PostThread.tsx:159
+msgid "You have blocked the author or you have been blocked by the author."
+msgstr "你已封鎖該作者,或你已被該作者封鎖。"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:66
+#: src/lib/moderation/useModerationCauseDescription.ts:50
+#: src/lib/moderation/useModerationCauseDescription.ts:58
+msgid "You have blocked this user. You cannot view their content."
+msgstr "你已封鎖了此使用者,你將無法查看他們發佈的內容。"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:54
+#: src/screens/Login/SetNewPasswordForm.tsx:91
+#: src/view/com/modals/ChangePassword.tsx:87
+#: src/view/com/modals/ChangePassword.tsx:121
+msgid "You have entered an invalid code. It should look like XXXXX-XXXXX."
+msgstr "你輸入的邀請碼無效。它應該長得像這樣 XXXXX-XXXXX。"
+
+#: src/lib/moderation/useModerationCauseDescription.ts:109
+msgid "You have hidden this post"
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:101
+msgid "You have hidden this post."
+msgstr ""
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:94
+#: src/lib/moderation/useModerationCauseDescription.ts:92
+msgid "You have muted this account."
+msgstr ""
+
+#: src/lib/moderation/useModerationCauseDescription.ts:86
+msgid "You have muted this user"
+msgstr ""
+
+#: src/view/com/modals/ModerationDetails.tsx:87
+#~ msgid "You have muted this user."
+#~ msgstr "你已將這個使用者靜音。"
+
+#: src/view/com/feeds/ProfileFeedgens.tsx:136
+msgid "You have no feeds."
+msgstr "你沒有訂閱訊息流。"
+
+#: src/view/com/lists/MyLists.tsx:89
+#: src/view/com/lists/ProfileLists.tsx:140
+msgid "You have no lists."
+msgstr "你沒有列表。"
+
+#: src/view/screens/ModerationBlockedAccounts.tsx:132
+msgid "You have not blocked any accounts yet. To block an account, go to their profile and select \"Block account\" from the menu on their account."
+msgstr ""
+
+#: src/view/screens/ModerationBlockedAccounts.tsx:132
+#~ msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account."
+#~ msgstr "你還沒有封鎖任何帳號。要封鎖帳號,請轉到其個人資料並在其帳號上的選單中選擇「封鎖帳號」。"
+
+#: src/view/screens/AppPasswords.tsx:89
+msgid "You have not created any app passwords yet. You can create one by pressing the button below."
+msgstr "你還沒有建立任何應用程式專用密碼,如你想建立一個,按下面的按鈕。"
+
+#: src/view/screens/ModerationMutedAccounts.tsx:131
+msgid "You have not muted any accounts yet. To mute an account, go to their profile and select \"Mute account\" from the menu on their account."
+msgstr ""
+
+#: src/view/screens/ModerationMutedAccounts.tsx:131
+#~ msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account."
+#~ msgstr "你還沒有靜音任何帳號。要靜音帳號,請轉到其個人資料並在其帳號上的選單中選擇「靜音帳號」。"
+
+#: src/components/dialogs/MutedWords.tsx:249
+msgid "You haven't muted any words or tags yet"
+msgstr "你还没有隐藏任何词或话题标签"
+
+#: src/components/moderation/LabelsOnMeDialog.tsx:68
+msgid "You may appeal these labels if you feel they were placed in error."
+msgstr ""
+
+#: src/screens/Signup/StepInfo/Policies.tsx:79
+msgid "You must be 13 years of age or older to sign up."
+msgstr ""
+
+#: src/view/com/modals/ContentFilteringSettings.tsx:175
+#~ msgid "You must be 18 or older to enable adult content."
+#~ msgstr "你必須年滿 18 歲才能啟用成人內容。"
+
+#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:110
+msgid "You must be 18 years or older to enable adult content"
+msgstr "你必須年滿 18 歲才能啟用成人內容"
+
+#: src/components/ReportDialog/SubmitView.tsx:205
+msgid "You must select at least one labeler for a report"
+msgstr ""
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:144
+msgid "You will no longer receive notifications for this thread"
+msgstr "你將不再收到這條對話串的通知"
+
+#: src/view/com/util/forms/PostDropdownBtn.tsx:147
+msgid "You will now receive notifications for this thread"
+msgstr "你將收到這條對話串的通知"
+
+#: src/screens/Login/SetNewPasswordForm.tsx:104
+msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password."
+msgstr "你將收到一封包含重設碼的電子郵件。請在此輸入該重設代碼,然後輸入你的新密碼。"
+
+#: src/screens/Onboarding/StepModeration/index.tsx:60
+msgid "You're in control"
+msgstr "你盡在掌控"
+
+#: src/screens/Deactivated.tsx:87
+#: src/screens/Deactivated.tsx:88
+#: src/screens/Deactivated.tsx:103
+msgid "You're in line"
+msgstr "輪到你了"
+
+#: src/screens/Onboarding/StepFinished.tsx:94
+msgid "You're ready to go!"
+msgstr "你已設定完成!"
+
+#: src/components/moderation/ModerationDetailsDialog.tsx:98
+#: src/lib/moderation/useModerationCauseDescription.ts:101
+msgid "You've chosen to hide a word or tag within this post."
+msgstr ""
+
+#: src/view/com/posts/FollowingEndOfFeed.tsx:48
+msgid "You've reached the end of your feed! Find some more accounts to follow."
+msgstr "你已經瀏覽完你的訂閱訊息流啦!跟隨其他帳號吧。"
+
+#: src/screens/Signup/index.tsx:150
+msgid "Your account"
+msgstr "你的帳號"
+
+#: src/view/com/modals/DeleteAccount.tsx:68
+msgid "Your account has been deleted"
+msgstr "你的帳號已刪除"
+
+#: src/view/screens/Settings/ExportCarDialog.tsx:47
+msgid "Your account repository, containing all public data records, can be downloaded as a \"CAR\" file. This file does not include media embeds, such as images, or your private data, which must be fetched separately."
+msgstr "你可以將你的帳號存放庫下載為一個「CAR」檔案。該檔案包含了所有公開的資料紀錄,但不包括嵌入媒體,例如圖片或你的私人資料,目前這些資料必須另外擷取。"
+
+#: src/screens/Signup/StepInfo/index.tsx:121
+msgid "Your birth date"
+msgstr "你的生日"
+
+#: src/view/com/modals/InAppBrowserConsent.tsx:47
+msgid "Your choice will be saved, but can be changed later in settings."
+msgstr "你的選擇將被儲存,但可以稍後在設定中更改。"
+
+#: src/screens/Onboarding/StepFollowingFeed.tsx:62
+msgid "Your default feed is \"Following\""
+msgstr "你的預設訊息流為「跟隨」"
+
+#: src/screens/Login/ForgotPasswordForm.tsx:57
+#: src/screens/Signup/state.ts:227
+#: src/view/com/modals/ChangePassword.tsx:54
+msgid "Your email appears to be invalid."
+msgstr "你的電子郵件地址似乎無效。"
+
+#: src/view/com/modals/Waitlist.tsx:109
+#~ msgid "Your email has been saved! We'll be in touch soon."
+#~ msgstr "你的電子郵件地址已儲存!我們將很快聯繫你。"
+
+#: src/view/com/modals/ChangeEmail.tsx:125
+msgid "Your email has been updated but not verified. As a next step, please verify your new email."
+msgstr "你的電子郵件地址已更新但尚未驗證。作為下一步,請驗證你的新電子郵件地址。"
+
+#: src/view/com/modals/VerifyEmail.tsx:114
+msgid "Your email has not yet been verified. This is an important security step which we recommend."
+msgstr "你的電子郵件地址尚未驗證。這是一個我們建議的重要安全步驟。"
+
+#: src/view/com/posts/FollowingEmptyState.tsx:47
+msgid "Your following feed is empty! Follow more users to see what's happening."
+msgstr "你的跟隨訊息流是空的!跟隨更多使用者看看發生了什麼事情。"
+
+#: src/screens/Signup/StepHandle.tsx:72
+msgid "Your full handle will be"
+msgstr "你的完整帳號代碼將修改為"
+
+#: src/view/com/modals/ChangeHandle.tsx:271
+msgid "Your full handle will be <0>@{0}0>"
+msgstr "你的完整帳號代碼將修改為 <0>@{0}0>"
+
+#: src/view/screens/Settings.tsx:430
+#: src/view/shell/desktop/RightNav.tsx:137
+#: src/view/shell/Drawer.tsx:660
+#~ msgid "Your invite codes are hidden when logged in using an App Password"
+#~ msgstr "在使用應用程式專用密碼登入時,你的邀請碼將被隱藏"
+
+#: src/components/dialogs/MutedWords.tsx:220
+msgid "Your muted words"
+msgstr ""
+
+#: src/view/com/modals/ChangePassword.tsx:157
+msgid "Your password has been changed successfully!"
+msgstr "你的密碼已成功更改!"
+
+#: src/view/com/composer/Composer.tsx:284
+msgid "Your post has been published"
+msgstr "你的貼文已發佈"
+
+#: src/screens/Onboarding/StepFinished.tsx:109
+#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:59
+#: src/view/com/auth/onboarding/WelcomeMobile.tsx:61
+msgid "Your posts, likes, and blocks are public. Mutes are private."
+msgstr "你的貼文、按喜歡和封鎖是公開可見的,而靜音是私人的。"
+
+#: src/view/screens/Settings/index.tsx:125
+msgid "Your profile"
+msgstr "你的個人資料"
+
+#: src/view/com/composer/Composer.tsx:283
+msgid "Your reply has been published"
+msgstr "你的回覆已發佈"
+
+#: src/screens/Signup/index.tsx:152
+msgid "Your user handle"
+msgstr "你的帳號代碼"
diff --git a/src/platform/markBundleStartTime.web.ts b/src/platform/markBundleStartTime.web.ts
new file mode 100644
index 0000000000..cd64c9f1c3
--- /dev/null
+++ b/src/platform/markBundleStartTime.web.ts
@@ -0,0 +1,2 @@
+// @ts-ignore Web-only. On RN, this is set by Metro.
+window.__BUNDLE_START_TIME__ = performance.now()
diff --git a/src/platform/polyfills.web.ts b/src/platform/polyfills.web.ts
index 0b4a282835..462f65a260 100644
--- a/src/platform/polyfills.web.ts
+++ b/src/platform/polyfills.web.ts
@@ -6,3 +6,32 @@ findLast.shim()
// @ts-ignore whatever typescript wants to complain about here, I dont care about -prf
window.setImmediate = (cb: () => void) => setTimeout(cb, 0)
+
+if (process.env.NODE_ENV !== 'production') {
+ // In development, react-native-web's tries to validate that
+ // text is wrapped into . It doesn't catch all cases but is useful.
+ // Unfortunately, it only does that via console.error so it's easy to miss.
+ // This is a hack to get it showing as a redbox on the web so we catch it early.
+ const realConsoleError = console.error
+ const thrownErrors = new WeakSet()
+ console.error = function consoleErrorWrapper(msgOrError) {
+ if (
+ typeof msgOrError === 'string' &&
+ msgOrError.startsWith('Unexpected text node')
+ ) {
+ if (
+ msgOrError ===
+ 'Unexpected text node: . A text node cannot be a child of a .'
+ ) {
+ // This is due to a stray empty string.
+ // React already handles this fine, so RNW warning is a false positive. Ignore.
+ return
+ }
+ const err = new Error(msgOrError)
+ thrownErrors.add(err)
+ throw err
+ } else if (!thrownErrors.has(msgOrError)) {
+ return realConsoleError.apply(this, arguments as any)
+ }
+ }
+}
diff --git a/src/routes.ts b/src/routes.ts
index e58fddd429..f6f3729475 100644
--- a/src/routes.ts
+++ b/src/routes.ts
@@ -12,7 +12,7 @@ export const router = new Router({
ModerationModlists: '/moderation/modlists',
ModerationMutedAccounts: '/moderation/muted-accounts',
ModerationBlockedAccounts: '/moderation/blocked-accounts',
- Profile: '/profile/:name',
+ Profile: ['/profile/:name', '/profile/:name/rss'],
ProfileFollowers: '/profile/:name/followers',
ProfileFollows: '/profile/:name/follows',
ProfileList: '/profile/:name/lists/:rkey',
@@ -21,10 +21,12 @@ export const router = new Router({
PostRepostedBy: '/profile/:name/post/:rkey/reposted-by',
ProfileFeed: '/profile/:name/feed/:rkey',
ProfileFeedLikedBy: '/profile/:name/feed/:rkey/liked-by',
+ ProfileLabelerLikedBy: '/profile/:name/labeler/liked-by',
Debug: '/sys/debug',
+ DebugMod: '/sys/debug-mod',
Log: '/sys/log',
AppPasswords: '/settings/app-passwords',
- PreferencesHomeFeed: '/settings/home-feed',
+ PreferencesFollowingFeed: '/settings/following-feed',
PreferencesThreads: '/settings/threads',
PreferencesExternalEmbeds: '/settings/external-embeds',
SavedFeeds: '/settings/saved-feeds',
@@ -33,4 +35,5 @@ export const router = new Router({
TermsOfService: '/support/tos',
CommunityGuidelines: '/support/community-guidelines',
CopyrightPolicy: '/support/copyright',
+ Hashtag: '/hashtag/:tag',
})
diff --git a/src/screens/Deactivated.tsx b/src/screens/Deactivated.tsx
index f4c2014750..4e6ced0332 100644
--- a/src/screens/Deactivated.tsx
+++ b/src/screens/Deactivated.tsx
@@ -1,20 +1,20 @@
import React from 'react'
import {View} from 'react-native'
import {useSafeAreaInsets} from 'react-native-safe-area-context'
-import {useLingui} from '@lingui/react'
import {msg, Trans} from '@lingui/macro'
-import {useOnboardingDispatch} from '#/state/shell'
-import {getAgent, isSessionDeactivated, useSessionApi} from '#/state/session'
-import {logger} from '#/logger'
-import {pluralize} from '#/lib/strings/helpers'
+import {useLingui} from '@lingui/react'
-import {atoms as a, useTheme, useBreakpoints} from '#/alf'
-import {Button, ButtonIcon, ButtonText} from '#/components/Button'
-import {Text, P} from '#/components/Typography'
+import {pluralize} from '#/lib/strings/helpers'
+import {logger} from '#/logger'
import {isWeb} from '#/platform/detection'
+import {getAgent, isSessionDeactivated, useSessionApi} from '#/state/session'
+import {useOnboardingDispatch} from '#/state/shell'
import {ScrollView} from '#/view/com/util/Views'
-import {Loader} from '#/components/Loader'
import {Logo} from '#/view/icons/Logo'
+import {atoms as a, useBreakpoints, useTheme} from '#/alf'
+import {Button, ButtonIcon, ButtonText} from '#/components/Button'
+import {Loader} from '#/components/Loader'
+import {P, Text} from '#/components/Typography'
const COL_WIDTH = 400
@@ -147,7 +147,7 @@ export function Deactivated() {
variant="ghost"
size="large"
label={_(msg`Log out`)}
- onPress={logout}>
+ onPress={() => logout('Deactivated')}>
Log out
@@ -176,7 +176,7 @@ export function Deactivated() {
variant="ghost"
size="large"
label={_(msg`Log out`)}
- onPress={logout}>
+ onPress={() => logout('Deactivated')}>
Log out
diff --git a/src/screens/Hashtag.tsx b/src/screens/Hashtag.tsx
new file mode 100644
index 0000000000..5388593f14
--- /dev/null
+++ b/src/screens/Hashtag.tsx
@@ -0,0 +1,165 @@
+import React from 'react'
+import {ListRenderItemInfo, Pressable} from 'react-native'
+import {PostView} from '@atproto/api/dist/client/types/app/bsky/feed/defs'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {useFocusEffect} from '@react-navigation/native'
+import {NativeStackScreenProps} from '@react-navigation/native-stack'
+
+import {HITSLOP_10} from 'lib/constants'
+import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
+import {CommonNavigatorParams} from 'lib/routes/types'
+import {shareUrl} from 'lib/sharing'
+import {cleanError} from 'lib/strings/errors'
+import {sanitizeHandle} from 'lib/strings/handles'
+import {enforceLen} from 'lib/strings/helpers'
+import {isNative} from 'platform/detection'
+import {useSearchPostsQuery} from 'state/queries/search-posts'
+import {useSetMinimalShellMode} from 'state/shell'
+import {Post} from 'view/com/post/Post'
+import {List} from 'view/com/util/List'
+import {ViewHeader} from 'view/com/util/ViewHeader'
+import {ArrowOutOfBox_Stroke2_Corner0_Rounded} from '#/components/icons/ArrowOutOfBox'
+import {
+ ListFooter,
+ ListHeaderDesktop,
+ ListMaybePlaceholder,
+} from '#/components/Lists'
+
+const renderItem = ({item}: ListRenderItemInfo) => {
+ return
+}
+
+const keyExtractor = (item: PostView, index: number) => {
+ return `${item.uri}-${index}`
+}
+
+export default function HashtagScreen({
+ route,
+}: NativeStackScreenProps) {
+ const {tag, author} = route.params
+ const setMinimalShellMode = useSetMinimalShellMode()
+ const {_} = useLingui()
+ const initialNumToRender = useInitialNumToRender()
+ const [isPTR, setIsPTR] = React.useState(false)
+
+ const fullTag = React.useMemo(() => {
+ return `#${decodeURIComponent(tag)}`
+ }, [tag])
+
+ const queryParam = React.useMemo(() => {
+ if (!author) return fullTag
+ return `${fullTag} from:${sanitizeHandle(author)}`
+ }, [fullTag, author])
+
+ const headerTitle = React.useMemo(() => {
+ return enforceLen(fullTag.toLowerCase(), 24, true, 'middle')
+ }, [fullTag])
+
+ const sanitizedAuthor = React.useMemo(() => {
+ if (!author) return
+ return sanitizeHandle(author)
+ }, [author])
+
+ const {
+ data,
+ isFetchingNextPage,
+ isLoading,
+ isError,
+ error,
+ refetch,
+ fetchNextPage,
+ hasNextPage,
+ } = useSearchPostsQuery({query: queryParam})
+
+ const posts = React.useMemo(() => {
+ return data?.pages.flatMap(page => page.posts) || []
+ }, [data])
+
+ useFocusEffect(
+ React.useCallback(() => {
+ setMinimalShellMode(false)
+ }, [setMinimalShellMode]),
+ )
+
+ const onShare = React.useCallback(() => {
+ const url = new URL('https://bsky.app')
+ url.pathname = `/hashtag/${decodeURIComponent(tag)}`
+ if (author) {
+ url.searchParams.set('author', author)
+ }
+ shareUrl(url.toString())
+ }, [tag, author])
+
+ const onRefresh = React.useCallback(async () => {
+ setIsPTR(true)
+ await refetch()
+ setIsPTR(false)
+ }, [refetch])
+
+ const onEndReached = React.useCallback(() => {
+ if (isFetchingNextPage || !hasNextPage || error) return
+ fetchNextPage()
+ }, [isFetchingNextPage, hasNextPage, error, fetchNextPage])
+
+ return (
+ <>
+ (
+
+
+
+ )
+ : undefined
+ }
+ />
+ {posts.length < 1 ? (
+
+ ) : (
+
+ }
+ ListFooterComponent={
+
+ }
+ initialNumToRender={initialNumToRender}
+ windowSize={11}
+ />
+ )}
+ >
+ )
+}
diff --git a/src/screens/Login/ChooseAccountForm.tsx b/src/screens/Login/ChooseAccountForm.tsx
new file mode 100644
index 0000000000..134411903d
--- /dev/null
+++ b/src/screens/Login/ChooseAccountForm.tsx
@@ -0,0 +1,84 @@
+import React from 'react'
+import {View} from 'react-native'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {useAnalytics} from '#/lib/analytics/analytics'
+import {logEvent} from '#/lib/statsig/statsig'
+import {SessionAccount, useSession, useSessionApi} from '#/state/session'
+import {useLoggedOutViewControls} from '#/state/shell/logged-out'
+import * as Toast from '#/view/com/util/Toast'
+import {atoms as a} from '#/alf'
+import {AccountList} from '#/components/AccountList'
+import {Button, ButtonText} from '#/components/Button'
+import * as TextField from '#/components/forms/TextField'
+import {FormContainer} from './FormContainer'
+
+export const ChooseAccountForm = ({
+ onSelectAccount,
+ onPressBack,
+}: {
+ onSelectAccount: (account?: SessionAccount) => void
+ onPressBack: () => void
+}) => {
+ const {track, screen} = useAnalytics()
+ const {_} = useLingui()
+ const {currentAccount} = useSession()
+ const {initSession} = useSessionApi()
+ const {setShowLoggedOut} = useLoggedOutViewControls()
+
+ React.useEffect(() => {
+ screen('Choose Account')
+ }, [screen])
+
+ const onSelect = React.useCallback(
+ async (account: SessionAccount) => {
+ if (account.accessJwt) {
+ if (account.did === currentAccount?.did) {
+ setShowLoggedOut(false)
+ Toast.show(_(msg`Already signed in as @${account.handle}`))
+ } else {
+ await initSession(account)
+ logEvent('account:loggedIn', {
+ logContext: 'ChooseAccountForm',
+ withPassword: false,
+ })
+ track('Sign In', {resumedSession: true})
+ setTimeout(() => {
+ Toast.show(_(msg`Signed in as @${account.handle}`))
+ }, 100)
+ }
+ } else {
+ onSelectAccount(account)
+ }
+ },
+ [currentAccount, track, initSession, onSelectAccount, setShowLoggedOut, _],
+ )
+
+ return (
+ Select account}>
+
+
+ Sign in as...
+
+ onSelectAccount()}
+ />
+
+
+
+
+
+
+ )
+}
diff --git a/src/screens/Login/ForgotPasswordForm.tsx b/src/screens/Login/ForgotPasswordForm.tsx
new file mode 100644
index 0000000000..ec30bab4a8
--- /dev/null
+++ b/src/screens/Login/ForgotPasswordForm.tsx
@@ -0,0 +1,184 @@
+import React, {useEffect, useState} from 'react'
+import {ActivityIndicator, Keyboard, View} from 'react-native'
+import {ComAtprotoServerDescribeServer} from '@atproto/api'
+import {BskyAgent} from '@atproto/api'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import * as EmailValidator from 'email-validator'
+
+import {useAnalytics} from '#/lib/analytics/analytics'
+import {isNetworkError} from '#/lib/strings/errors'
+import {cleanError} from '#/lib/strings/errors'
+import {logger} from '#/logger'
+import {atoms as a, useTheme} from '#/alf'
+import {Button, ButtonText} from '#/components/Button'
+import {FormError} from '#/components/forms/FormError'
+import {HostingProvider} from '#/components/forms/HostingProvider'
+import * as TextField from '#/components/forms/TextField'
+import {At_Stroke2_Corner0_Rounded as At} from '#/components/icons/At'
+import {Text} from '#/components/Typography'
+import {FormContainer} from './FormContainer'
+
+type ServiceDescription = ComAtprotoServerDescribeServer.OutputSchema
+
+export const ForgotPasswordForm = ({
+ error,
+ serviceUrl,
+ serviceDescription,
+ setError,
+ setServiceUrl,
+ onPressBack,
+ onEmailSent,
+}: {
+ error: string
+ serviceUrl: string
+ serviceDescription: ServiceDescription | undefined
+ setError: (v: string) => void
+ setServiceUrl: (v: string) => void
+ onPressBack: () => void
+ onEmailSent: () => void
+}) => {
+ const t = useTheme()
+ const [isProcessing, setIsProcessing] = useState(false)
+ const [email, setEmail] = useState('')
+ const {screen} = useAnalytics()
+ const {_} = useLingui()
+
+ useEffect(() => {
+ screen('Signin:ForgotPassword')
+ }, [screen])
+
+ const onPressSelectService = React.useCallback(() => {
+ Keyboard.dismiss()
+ }, [])
+
+ const onPressNext = async () => {
+ if (!EmailValidator.validate(email)) {
+ return setError(_(msg`Your email appears to be invalid.`))
+ }
+
+ setError('')
+ setIsProcessing(true)
+
+ try {
+ const agent = new BskyAgent({service: serviceUrl})
+ await agent.com.atproto.server.requestPasswordReset({email})
+ onEmailSent()
+ } catch (e: any) {
+ const errMsg = e.toString()
+ logger.warn('Failed to request password reset', {error: e})
+ setIsProcessing(false)
+ if (isNetworkError(e)) {
+ setError(
+ _(
+ msg`Unable to contact your service. Please check your Internet connection.`,
+ ),
+ )
+ } else {
+ setError(cleanError(errMsg))
+ }
+ }
+ }
+
+ return (
+ Reset password}>
+
+
+ Hosting provider
+
+
+
+
+
+ Email address
+
+
+
+
+
+
+
+
+
+ Enter the email you used to create your account. We'll send you a
+ "reset code" so you can set a new password.
+
+
+
+
+
+
+
+
+ {!serviceDescription || isProcessing ? (
+
+ ) : (
+
+ )}
+ {!serviceDescription || isProcessing ? (
+
+ Processing...
+
+ ) : undefined}
+
+
+
+
+
+ )
+}
diff --git a/src/screens/Login/FormContainer.tsx b/src/screens/Login/FormContainer.tsx
new file mode 100644
index 0000000000..d5e075bdb1
--- /dev/null
+++ b/src/screens/Login/FormContainer.tsx
@@ -0,0 +1,32 @@
+import React from 'react'
+import {type StyleProp, View, type ViewStyle} from 'react-native'
+
+import {atoms as a, useBreakpoints, useTheme} from '#/alf'
+import {Text} from '#/components/Typography'
+
+export function FormContainer({
+ testID,
+ titleText,
+ children,
+ style,
+}: {
+ testID?: string
+ titleText?: React.ReactNode
+ children: React.ReactNode
+ style?: StyleProp
+}) {
+ const {gtMobile} = useBreakpoints()
+ const t = useTheme()
+ return (
+
+ {titleText && !gtMobile && (
+
+ {titleText}
+
+ )}
+ {children}
+
+ )
+}
diff --git a/src/screens/Login/LoginForm.tsx b/src/screens/Login/LoginForm.tsx
new file mode 100644
index 0000000000..711619e85c
--- /dev/null
+++ b/src/screens/Login/LoginForm.tsx
@@ -0,0 +1,269 @@
+import React, {useRef, useState} from 'react'
+import {
+ ActivityIndicator,
+ Keyboard,
+ LayoutAnimation,
+ TextInput,
+ View,
+} from 'react-native'
+import {ComAtprotoServerDescribeServer} from '@atproto/api'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {useAnalytics} from '#/lib/analytics/analytics'
+import {isNetworkError} from '#/lib/strings/errors'
+import {cleanError} from '#/lib/strings/errors'
+import {createFullHandle} from '#/lib/strings/handles'
+import {logger} from '#/logger'
+import {useSessionApi} from '#/state/session'
+import {atoms as a, useTheme} from '#/alf'
+import {Button, ButtonIcon, ButtonText} from '#/components/Button'
+import {FormError} from '#/components/forms/FormError'
+import {HostingProvider} from '#/components/forms/HostingProvider'
+import * as TextField from '#/components/forms/TextField'
+import {At_Stroke2_Corner0_Rounded as At} from '#/components/icons/At'
+import {Lock_Stroke2_Corner0_Rounded as Lock} from '#/components/icons/Lock'
+import {Loader} from '#/components/Loader'
+import {Text} from '#/components/Typography'
+import {FormContainer} from './FormContainer'
+
+type ServiceDescription = ComAtprotoServerDescribeServer.OutputSchema
+
+export const LoginForm = ({
+ error,
+ serviceUrl,
+ serviceDescription,
+ initialHandle,
+ setError,
+ setServiceUrl,
+ onPressRetryConnect,
+ onPressBack,
+ onPressForgotPassword,
+}: {
+ error: string
+ serviceUrl: string
+ serviceDescription: ServiceDescription | undefined
+ initialHandle: string
+ setError: (v: string) => void
+ setServiceUrl: (v: string) => void
+ onPressRetryConnect: () => void
+ onPressBack: () => void
+ onPressForgotPassword: () => void
+}) => {
+ const {track} = useAnalytics()
+ const t = useTheme()
+ const [isProcessing, setIsProcessing] = useState(false)
+ const [identifier, setIdentifier] = useState(initialHandle)
+ const [password, setPassword] = useState('')
+ const passwordInputRef = useRef(null)
+ const {_} = useLingui()
+ const {login} = useSessionApi()
+
+ const onPressSelectService = React.useCallback(() => {
+ Keyboard.dismiss()
+ track('Signin:PressedSelectService')
+ }, [track])
+
+ const onPressNext = async () => {
+ if (isProcessing) return
+ Keyboard.dismiss()
+ LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut)
+ setError('')
+ setIsProcessing(true)
+
+ try {
+ // try to guess the handle if the user just gave their own username
+ let fullIdent = identifier
+ if (
+ !identifier.includes('@') && // not an email
+ !identifier.includes('.') && // not a domain
+ serviceDescription &&
+ serviceDescription.availableUserDomains.length > 0
+ ) {
+ let matched = false
+ for (const domain of serviceDescription.availableUserDomains) {
+ if (fullIdent.endsWith(domain)) {
+ matched = true
+ }
+ }
+ if (!matched) {
+ fullIdent = createFullHandle(
+ identifier,
+ serviceDescription.availableUserDomains[0],
+ )
+ }
+ }
+
+ // TODO remove double login
+ await login(
+ {
+ service: serviceUrl,
+ identifier: fullIdent,
+ password,
+ },
+ 'LoginForm',
+ )
+ } catch (e: any) {
+ const errMsg = e.toString()
+ LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut)
+ setIsProcessing(false)
+ if (errMsg.includes('Authentication Required')) {
+ logger.debug('Failed to login due to invalid credentials', {
+ error: errMsg,
+ })
+ setError(_(msg`Invalid username or password`))
+ } else if (isNetworkError(e)) {
+ logger.warn('Failed to login due to network error', {error: errMsg})
+ setError(
+ _(
+ msg`Unable to contact your service. Please check your Internet connection.`,
+ ),
+ )
+ } else {
+ logger.warn('Failed to login', {error: errMsg})
+ setError(cleanError(errMsg))
+ }
+ }
+ }
+
+ const isReady = !!serviceDescription && !!identifier && !!password
+ return (
+ Sign in}>
+
+
+ Hosting provider
+
+
+
+
+
+ Account
+
+
+
+
+ {
+ passwordInputRef.current?.focus()
+ }}
+ blurOnSubmit={false} // prevents flickering due to onSubmitEditing going to next field
+ value={identifier}
+ onChangeText={str =>
+ setIdentifier((str || '').toLowerCase().trim())
+ }
+ editable={!isProcessing}
+ accessibilityHint={_(
+ msg`Input the username or email address you used at signup`,
+ )}
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {!serviceDescription && error ? (
+
+ ) : !serviceDescription ? (
+ <>
+
+
+ Connecting...
+
+ >
+ ) : isReady ? (
+
+ ) : undefined}
+
+
+ )
+}
diff --git a/src/screens/Login/PasswordUpdatedForm.tsx b/src/screens/Login/PasswordUpdatedForm.tsx
new file mode 100644
index 0000000000..5407f3f1e3
--- /dev/null
+++ b/src/screens/Login/PasswordUpdatedForm.tsx
@@ -0,0 +1,50 @@
+import React, {useEffect} from 'react'
+import {View} from 'react-native'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {useAnalytics} from '#/lib/analytics/analytics'
+import {atoms as a, useBreakpoints} from '#/alf'
+import {Button, ButtonText} from '#/components/Button'
+import {Text} from '#/components/Typography'
+import {FormContainer} from './FormContainer'
+
+export const PasswordUpdatedForm = ({
+ onPressNext,
+}: {
+ onPressNext: () => void
+}) => {
+ const {screen} = useAnalytics()
+ const {_} = useLingui()
+ const {gtMobile} = useBreakpoints()
+
+ useEffect(() => {
+ screen('Signin:PasswordUpdatedForm')
+ }, [screen])
+
+ return (
+
+
+ Password updated!
+
+
+ You can now sign in with your new password.
+
+
+
+
+
+ )
+}
diff --git a/src/screens/Login/ScreenTransition.tsx b/src/screens/Login/ScreenTransition.tsx
new file mode 100644
index 0000000000..ab0a223678
--- /dev/null
+++ b/src/screens/Login/ScreenTransition.tsx
@@ -0,0 +1,10 @@
+import React from 'react'
+import Animated, {FadeInRight, FadeOutLeft} from 'react-native-reanimated'
+
+export function ScreenTransition({children}: {children: React.ReactNode}) {
+ return (
+
+ {children}
+
+ )
+}
diff --git a/src/screens/Login/ScreenTransition.web.tsx b/src/screens/Login/ScreenTransition.web.tsx
new file mode 100644
index 0000000000..4583720aa8
--- /dev/null
+++ b/src/screens/Login/ScreenTransition.web.tsx
@@ -0,0 +1 @@
+export {Fragment as ScreenTransition} from 'react'
diff --git a/src/screens/Login/SetNewPasswordForm.tsx b/src/screens/Login/SetNewPasswordForm.tsx
new file mode 100644
index 0000000000..88f7ec5416
--- /dev/null
+++ b/src/screens/Login/SetNewPasswordForm.tsx
@@ -0,0 +1,192 @@
+import React, {useEffect, useState} from 'react'
+import {ActivityIndicator, View} from 'react-native'
+import {BskyAgent} from '@atproto/api'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {useAnalytics} from '#/lib/analytics/analytics'
+import {isNetworkError} from '#/lib/strings/errors'
+import {cleanError} from '#/lib/strings/errors'
+import {checkAndFormatResetCode} from '#/lib/strings/password'
+import {logger} from '#/logger'
+import {atoms as a, useTheme} from '#/alf'
+import {Button, ButtonText} from '#/components/Button'
+import {FormError} from '#/components/forms/FormError'
+import * as TextField from '#/components/forms/TextField'
+import {Lock_Stroke2_Corner0_Rounded as Lock} from '#/components/icons/Lock'
+import {Ticket_Stroke2_Corner0_Rounded as Ticket} from '#/components/icons/Ticket'
+import {Text} from '#/components/Typography'
+import {FormContainer} from './FormContainer'
+
+export const SetNewPasswordForm = ({
+ error,
+ serviceUrl,
+ setError,
+ onPressBack,
+ onPasswordSet,
+}: {
+ error: string
+ serviceUrl: string
+ setError: (v: string) => void
+ onPressBack: () => void
+ onPasswordSet: () => void
+}) => {
+ const {screen} = useAnalytics()
+ const {_} = useLingui()
+ const t = useTheme()
+
+ useEffect(() => {
+ screen('Signin:SetNewPasswordForm')
+ }, [screen])
+
+ const [isProcessing, setIsProcessing] = useState(false)
+ const [resetCode, setResetCode] = useState('')
+ const [password, setPassword] = useState('')
+
+ const onPressNext = async () => {
+ // Check that the code is correct. We do this again just incase the user enters the code after their pw and we
+ // don't get to call onBlur first
+ const formattedCode = checkAndFormatResetCode(resetCode)
+ // TODO Better password strength check
+ if (!formattedCode || !password) {
+ setError(
+ _(
+ msg`You have entered an invalid code. It should look like XXXXX-XXXXX.`,
+ ),
+ )
+ return
+ }
+
+ setError('')
+ setIsProcessing(true)
+
+ try {
+ const agent = new BskyAgent({service: serviceUrl})
+ await agent.com.atproto.server.resetPassword({
+ token: formattedCode,
+ password,
+ })
+ onPasswordSet()
+ } catch (e: any) {
+ const errMsg = e.toString()
+ logger.warn('Failed to set new password', {error: e})
+ setIsProcessing(false)
+ if (isNetworkError(e)) {
+ setError(
+ _(
+ msg`Unable to contact your service. Please check your Internet connection.`,
+ ),
+ )
+ } else {
+ setError(cleanError(errMsg))
+ }
+ }
+ }
+
+ const onBlur = () => {
+ const formattedCode = checkAndFormatResetCode(resetCode)
+ if (!formattedCode) {
+ setError(
+ _(
+ msg`You have entered an invalid code. It should look like XXXXX-XXXXX.`,
+ ),
+ )
+ return
+ }
+ setResetCode(formattedCode)
+ }
+
+ return (
+ Set new password}>
+
+
+ You will receive an email with a "reset code." Enter that code here,
+ then enter your new password.
+
+
+
+
+ Reset code
+
+
+ setError('')}
+ onBlur={onBlur}
+ editable={!isProcessing}
+ accessibilityHint={_(
+ msg`Input code sent to your email for password reset`,
+ )}
+ />
+
+
+
+
+ New password
+
+
+
+
+
+
+
+
+
+
+
+ {isProcessing ? (
+
+ ) : (
+
+ )}
+ {isProcessing ? (
+
+ Updating...
+
+ ) : undefined}
+
+
+ )
+}
diff --git a/src/screens/Login/index.tsx b/src/screens/Login/index.tsx
new file mode 100644
index 0000000000..1fce63d298
--- /dev/null
+++ b/src/screens/Login/index.tsx
@@ -0,0 +1,178 @@
+import React from 'react'
+import {KeyboardAvoidingView} from 'react-native'
+import {LayoutAnimationConfig} from 'react-native-reanimated'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {useAnalytics} from '#/lib/analytics/analytics'
+import {DEFAULT_SERVICE} from '#/lib/constants'
+import {logger} from '#/logger'
+import {useServiceQuery} from '#/state/queries/service'
+import {SessionAccount, useSession} from '#/state/session'
+import {useLoggedOutView} from '#/state/shell/logged-out'
+import {LoggedOutLayout} from '#/view/com/util/layouts/LoggedOutLayout'
+import {ForgotPasswordForm} from '#/screens/Login/ForgotPasswordForm'
+import {LoginForm} from '#/screens/Login/LoginForm'
+import {PasswordUpdatedForm} from '#/screens/Login/PasswordUpdatedForm'
+import {SetNewPasswordForm} from '#/screens/Login/SetNewPasswordForm'
+import {atoms as a} from '#/alf'
+import {ChooseAccountForm} from './ChooseAccountForm'
+import {ScreenTransition} from './ScreenTransition'
+
+enum Forms {
+ Login,
+ ChooseAccount,
+ ForgotPassword,
+ SetNewPassword,
+ PasswordUpdated,
+}
+
+export const Login = ({onPressBack}: {onPressBack: () => void}) => {
+ const {_} = useLingui()
+
+ const {accounts} = useSession()
+ const {track} = useAnalytics()
+ const {requestedAccountSwitchTo} = useLoggedOutView()
+ const requestedAccount = accounts.find(
+ acc => acc.did === requestedAccountSwitchTo,
+ )
+
+ const [error, setError] = React.useState('')
+ const [serviceUrl, setServiceUrl] = React.useState(
+ requestedAccount?.service || DEFAULT_SERVICE,
+ )
+ const [initialHandle, setInitialHandle] = React.useState(
+ requestedAccount?.handle || '',
+ )
+ const [currentForm, setCurrentForm] = React.useState(
+ requestedAccount
+ ? Forms.Login
+ : accounts.length
+ ? Forms.ChooseAccount
+ : Forms.Login,
+ )
+
+ const {
+ data: serviceDescription,
+ error: serviceError,
+ refetch: refetchService,
+ } = useServiceQuery(serviceUrl)
+
+ const onSelectAccount = (account?: SessionAccount) => {
+ if (account?.service) {
+ setServiceUrl(account.service)
+ }
+ setInitialHandle(account?.handle || '')
+ setCurrentForm(Forms.Login)
+ }
+
+ const gotoForm = (form: Forms) => {
+ setError('')
+ setCurrentForm(form)
+ }
+
+ React.useEffect(() => {
+ if (serviceError) {
+ setError(
+ _(
+ msg`Unable to contact your service. Please check your Internet connection.`,
+ ),
+ )
+ logger.warn(`Failed to fetch service description for ${serviceUrl}`, {
+ error: String(serviceError),
+ })
+ } else {
+ setError('')
+ }
+ }, [serviceError, serviceUrl, _])
+
+ const onPressForgotPassword = () => {
+ track('Signin:PressedForgotPassword')
+ setCurrentForm(Forms.ForgotPassword)
+ }
+
+ let content = null
+ let title = ''
+ let description = ''
+
+ switch (currentForm) {
+ case Forms.Login:
+ title = _(msg`Sign in`)
+ description = _(msg`Enter your username and password`)
+ content = (
+
+ accounts.length ? gotoForm(Forms.ChooseAccount) : onPressBack()
+ }
+ onPressForgotPassword={onPressForgotPassword}
+ onPressRetryConnect={refetchService}
+ />
+ )
+ break
+ case Forms.ChooseAccount:
+ title = _(msg`Sign in`)
+ description = _(msg`Select from an existing account`)
+ content = (
+
+ )
+ break
+ case Forms.ForgotPassword:
+ title = _(msg`Forgot Password`)
+ description = _(msg`Let's get your password reset!`)
+ content = (
+ gotoForm(Forms.Login)}
+ onEmailSent={() => gotoForm(Forms.SetNewPassword)}
+ />
+ )
+ break
+ case Forms.SetNewPassword:
+ title = _(msg`Forgot Password`)
+ description = _(msg`Let's get your password reset!`)
+ content = (
+ gotoForm(Forms.ForgotPassword)}
+ onPasswordSet={() => gotoForm(Forms.PasswordUpdated)}
+ />
+ )
+ break
+ case Forms.PasswordUpdated:
+ title = _(msg`Password updated`)
+ description = _(msg`You can now sign in with your new password.`)
+ content = (
+ gotoForm(Forms.Login)} />
+ )
+ break
+ }
+
+ return (
+
+
+
+ {content}
+
+
+
+ )
+}
diff --git a/src/screens/Moderation/index.tsx b/src/screens/Moderation/index.tsx
new file mode 100644
index 0000000000..a874e745cc
--- /dev/null
+++ b/src/screens/Moderation/index.tsx
@@ -0,0 +1,554 @@
+import React from 'react'
+import {View} from 'react-native'
+import {useSafeAreaFrame} from 'react-native-safe-area-context'
+import {ComAtprotoLabelDefs} from '@atproto/api'
+import {LABELS} from '@atproto/api'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {useFocusEffect} from '@react-navigation/native'
+
+import {getLabelingServiceTitle} from '#/lib/moderation'
+import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
+import {logger} from '#/logger'
+import {
+ useMyLabelersQuery,
+ usePreferencesQuery,
+ UsePreferencesQueryResponse,
+ usePreferencesSetAdultContentMutation,
+} from '#/state/queries/preferences'
+import {
+ useProfileQuery,
+ useProfileUpdateMutation,
+} from '#/state/queries/profile'
+import {useSession} from '#/state/session'
+import {useSetMinimalShellMode} from '#/state/shell'
+import {useAnalytics} from 'lib/analytics/analytics'
+import {ViewHeader} from '#/view/com/util/ViewHeader'
+import {CenteredView} from '#/view/com/util/Views'
+import {ScrollView} from '#/view/com/util/Views'
+import {atoms as a, useBreakpoints, useTheme, ViewStyleProp} from '#/alf'
+import {Button, ButtonText} from '#/components/Button'
+import * as Dialog from '#/components/Dialog'
+import {BirthDateSettingsDialog} from '#/components/dialogs/BirthDateSettings'
+import {useGlobalDialogsControlContext} from '#/components/dialogs/Context'
+import {Divider} from '#/components/Divider'
+import * as Toggle from '#/components/forms/Toggle'
+import {ChevronRight_Stroke2_Corner0_Rounded as ChevronRight} from '#/components/icons/Chevron'
+import {CircleBanSign_Stroke2_Corner0_Rounded as CircleBanSign} from '#/components/icons/CircleBanSign'
+import {Props as SVGIconProps} from '#/components/icons/common'
+import {Filter_Stroke2_Corner0_Rounded as Filter} from '#/components/icons/Filter'
+import {Group3_Stroke2_Corner0_Rounded as Group} from '#/components/icons/Group'
+import {Person_Stroke2_Corner0_Rounded as Person} from '#/components/icons/Person'
+import * as LabelingService from '#/components/LabelingServiceCard'
+import {InlineLinkText, Link} from '#/components/Link'
+import {Loader} from '#/components/Loader'
+import {GlobalLabelPreference} from '#/components/moderation/LabelPreference'
+import {Text} from '#/components/Typography'
+
+function ErrorState({error}: {error: string}) {
+ const t = useTheme()
+ return (
+
+
+
+ Hmmmm, it seems we're having trouble loading this data. See below for
+ more details. If this issue persists, please contact us.
+
+
+
+ {error}
+
+
+ )
+}
+
+export function ModerationScreen(
+ _props: NativeStackScreenProps,
+) {
+ const t = useTheme()
+ const {_} = useLingui()
+ const {
+ isLoading: isPreferencesLoading,
+ error: preferencesError,
+ data: preferences,
+ } = usePreferencesQuery()
+ const {gtMobile} = useBreakpoints()
+ const {height} = useSafeAreaFrame()
+
+ const isLoading = isPreferencesLoading
+ const error = preferencesError
+
+ return (
+
+
+
+ {isLoading ? (
+
+
+
+ ) : error || !preferences ? (
+
+ ) : (
+
+ )}
+
+ )
+}
+
+function SubItem({
+ title,
+ icon: Icon,
+ style,
+}: ViewStyleProp & {
+ title: string
+ icon: React.ComponentType
+}) {
+ const t = useTheme()
+ return (
+
+
+
+ {title}
+
+
+
+ )
+}
+
+export function ModerationScreenInner({
+ preferences,
+}: {
+ preferences: UsePreferencesQueryResponse
+}) {
+ const {_} = useLingui()
+ const t = useTheme()
+ const setMinimalShellMode = useSetMinimalShellMode()
+ const {screen} = useAnalytics()
+ const {gtMobile} = useBreakpoints()
+ const {mutedWordsDialogControl} = useGlobalDialogsControlContext()
+ const birthdateDialogControl = Dialog.useDialogControl()
+ const {
+ isLoading: isLabelersLoading,
+ data: labelers,
+ error: labelersError,
+ } = useMyLabelersQuery()
+
+ useFocusEffect(
+ React.useCallback(() => {
+ screen('Moderation')
+ setMinimalShellMode(false)
+ }, [screen, setMinimalShellMode]),
+ )
+
+ const {mutateAsync: setAdultContentPref, variables: optimisticAdultContent} =
+ usePreferencesSetAdultContentMutation()
+ const adultContentEnabled = !!(
+ (optimisticAdultContent && optimisticAdultContent.enabled) ||
+ (!optimisticAdultContent && preferences.moderationPrefs.adultContentEnabled)
+ )
+ const ageNotSet = !preferences.userAge
+ const isUnderage = (preferences.userAge || 0) < 18
+
+ const onToggleAdultContentEnabled = React.useCallback(
+ async (selected: boolean) => {
+ try {
+ await setAdultContentPref({
+ enabled: selected,
+ })
+ } catch (e: any) {
+ logger.error(`Failed to set adult content pref`, {
+ message: e.message,
+ })
+ }
+ },
+ [setAdultContentPref],
+ )
+
+ return (
+
+
+ Moderation tools
+
+
+
+
+
+
+ {state => (
+
+ )}
+
+
+
+ {state => (
+
+ )}
+
+
+
+ {state => (
+
+ )}
+
+
+
+
+ Content filters
+
+
+
+ {ageNotSet && (
+ <>
+
+
+
+ >
+ )}
+
+ {!ageNotSet && !isUnderage && (
+ <>
+
+
+ Enable adult content
+
+
+
+
+ {adultContentEnabled ? (
+ Enabled
+ ) : (
+ Disabled
+ )}
+
+
+
+
+
+
+ >
+ )}
+ {!isUnderage && adultContentEnabled && (
+ <>
+
+
+
+
+
+
+ >
+ )}
+
+
+
+
+
+ Advanced
+
+
+ {isLabelersLoading ? (
+
+
+
+ ) : labelersError || !labelers ? (
+
+
+
+ We were unable to load your configured labelers at this time.
+
+
+
+ ) : (
+
+ {labelers.map((labeler, i) => {
+ return (
+
+ {i !== 0 && }
+
+ {state => (
+
+
+
+
+
+
+
+ )}
+
+
+ )
+ })}
+
+ )}
+
+
+ Logged-out visibility
+
+
+
+
+
+
+ )
+}
+
+function PwiOptOut() {
+ const t = useTheme()
+ const {_} = useLingui()
+ const {currentAccount} = useSession()
+ const {data: profile} = useProfileQuery({did: currentAccount?.did})
+ const updateProfile = useProfileUpdateMutation()
+
+ const isOptedOut =
+ profile?.labels?.some(l => l.val === '!no-unauthenticated') || false
+ const canToggle = profile && !updateProfile.isPending
+
+ const onToggleOptOut = React.useCallback(() => {
+ if (!profile) {
+ return
+ }
+ let wasAdded = false
+ updateProfile.mutate({
+ profile,
+ updates: existing => {
+ // create labels attr if needed
+ existing.labels = ComAtprotoLabelDefs.isSelfLabels(existing.labels)
+ ? existing.labels
+ : {
+ $type: 'com.atproto.label.defs#selfLabels',
+ values: [],
+ }
+
+ // toggle the label
+ const hasLabel = existing.labels.values.some(
+ l => l.val === '!no-unauthenticated',
+ )
+ if (hasLabel) {
+ wasAdded = false
+ existing.labels.values = existing.labels.values.filter(
+ l => l.val !== '!no-unauthenticated',
+ )
+ } else {
+ wasAdded = true
+ existing.labels.values.push({val: '!no-unauthenticated'})
+ }
+
+ // delete if no longer needed
+ if (existing.labels.values.length === 0) {
+ delete existing.labels
+ }
+ return existing
+ },
+ checkCommitted: res => {
+ const exists = !!res.data.labels?.some(
+ l => l.val === '!no-unauthenticated',
+ )
+ return exists === wasAdded
+ },
+ })
+ }, [updateProfile, profile])
+
+ return (
+
+
+
+
+
+
+ Discourage apps from showing my account to logged-out users
+
+
+
+
+ {updateProfile.isPending && }
+
+
+
+
+
+ Bluesky will not show your profile and posts to logged-out users.
+ Other apps may not honor this request. This does not make your
+ account private.
+
+
+
+
+ Note: Bluesky is an open and public network. This setting only
+ limits the visibility of your content on the Bluesky app and
+ website, and other apps may not respect this setting. Your content
+ may still be shown to logged-out users by other apps and websites.
+
+
+
+
+ Learn more about what is public on Bluesky.
+
+
+
+ )
+}
diff --git a/src/screens/Onboarding/Layout.tsx b/src/screens/Onboarding/Layout.tsx
index 6337cee09d..d48234cca8 100644
--- a/src/screens/Onboarding/Layout.tsx
+++ b/src/screens/Onboarding/Layout.tsx
@@ -1,29 +1,27 @@
import React from 'react'
import {View} from 'react-native'
import {useSafeAreaInsets} from 'react-native-safe-area-context'
-import {useLingui} from '@lingui/react'
import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
-import {IS_DEV} from '#/env'
import {isWeb} from '#/platform/detection'
import {useOnboardingDispatch} from '#/state/shell'
-
+import {ScrollView} from '#/view/com/util/Views'
+import {Context} from '#/screens/Onboarding/state'
import {
- useTheme,
atoms as a,
- useBreakpoints,
- web,
- native,
flatten,
+ native,
TextStyleProp,
+ useBreakpoints,
+ useTheme,
+ web,
} from '#/alf'
-import {P, leading, Text} from '#/components/Typography'
+import {Button, ButtonIcon, ButtonText} from '#/components/Button'
import {ChevronLeft_Stroke2_Corner0_Rounded as ChevronLeft} from '#/components/icons/Chevron'
-import {Button, ButtonIcon} from '#/components/Button'
-import {ScrollView} from '#/view/com/util/Views'
import {createPortalGroup} from '#/components/Portal'
-
-import {Context} from '#/screens/Onboarding/state'
+import {leading, P, Text} from '#/components/Typography'
+import {IS_DEV} from '#/env'
const COL_WIDTH = 500
@@ -75,7 +73,7 @@ export function Layout({children}: React.PropsWithChildren<{}>) {
onPress={() => onboardDispatch({type: 'skip'})}
// DEV ONLY
label="Clear onboarding state">
- Clear
+ Clear
)}
@@ -204,7 +202,7 @@ export function Layout({children}: React.PropsWithChildren<{}>) {
)
}
-export function Title({
+export function TitleText({
children,
style,
}: React.PropsWithChildren) {
@@ -224,7 +222,7 @@ export function Title({
)
}
-export function Description({
+export function DescriptionText({
children,
style,
}: React.PropsWithChildren) {
diff --git a/src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx b/src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx
index dec53d2edb..06b5a145af 100644
--- a/src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx
+++ b/src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx
@@ -1,18 +1,17 @@
import React from 'react'
import {View} from 'react-native'
-import LinearGradient from 'react-native-linear-gradient'
import {Image} from 'expo-image'
-import {useLingui} from '@lingui/react'
+import {LinearGradient} from 'expo-linear-gradient'
import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
-import {useTheme, atoms as a} from '#/alf'
+import {FeedSourceInfo, useFeedSourceInfoQuery} from '#/state/queries/feed'
+import {FeedConfig} from '#/screens/Onboarding/StepAlgoFeeds'
+import {atoms as a, useTheme} from '#/alf'
import * as Toggle from '#/components/forms/Toggle'
-import {useFeedSourceInfoQuery, FeedSourceInfo} from '#/state/queries/feed'
-import {Text} from '#/components/Typography'
-import {RichText} from '#/components/RichText'
-
import {Check_Stroke2_Corner0_Rounded as Check} from '#/components/icons/Check'
-import {FeedConfig} from '#/screens/Onboarding/StepAlgoFeeds'
+import {RichText} from '#/components/RichText'
+import {Text} from '#/components/Typography'
function PrimaryFeedCardInner({
feed,
@@ -238,13 +237,14 @@ function FeedCardInner({feed}: {feed: FeedSourceInfo; config: FeedConfig}) {
/>
-
+
+ ]}
+ numberOfLines={1}>
{feed.displayName}
{
@@ -99,15 +100,15 @@ export function StepAlgoFeeds() {
-
+
Choose your main feeds
-
-
+
+
Custom feeds built by the community bring you new experiences and help
you find the content you love.
-
+
We recommend our "Discover" feed:
-
- We also think you'll like "For You" by Skygaze:
-
-
{
await getAgent().setInterestsPref({tags: selectedInterests})
@@ -76,6 +79,7 @@ export function StepFinished() {
onboardDispatch({type: 'finish'})
track('OnboardingV2:StepFinished:End')
track('OnboardingV2:Complete')
+ logEvent('onboarding:finished:nextPressed', {})
}, [state, dispatch, onboardDispatch, setSaving, saveFeeds, track])
React.useEffect(() => {
@@ -86,12 +90,12 @@ export function StepFinished() {
-
+
You're ready to go!
-
-
+
+
We hope you have a wonderful time. Remember, Bluesky is:
-
+
diff --git a/src/screens/Onboarding/StepFollowingFeed.tsx b/src/screens/Onboarding/StepFollowingFeed.tsx
index 898afad134..a1c7299f02 100644
--- a/src/screens/Onboarding/StepFollowingFeed.tsx
+++ b/src/screens/Onboarding/StepFollowingFeed.tsx
@@ -1,28 +1,28 @@
import React from 'react'
import {View} from 'react-native'
-import {useLingui} from '@lingui/react'
import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
-import {atoms as a} from '#/alf'
-import {ChevronRight_Stroke2_Corner0_Rounded as ChevronRight} from '#/components/icons/Chevron'
-import {FilterTimeline_Stroke2_Corner0_Rounded as FilterTimeline} from '#/components/icons/FilterTimeline'
-import {Button, ButtonIcon, ButtonText} from '#/components/Button'
-import {Text} from '#/components/Typography'
-import {Divider} from '#/components/Divider'
-import * as Toggle from '#/components/forms/Toggle'
import {useAnalytics} from '#/lib/analytics/analytics'
-
-import {Context} from '#/screens/Onboarding/state'
-import {
- Title,
- Description,
- OnboardingControls,
-} from '#/screens/Onboarding/Layout'
+import {logEvent} from '#/lib/statsig/statsig'
import {
usePreferencesQuery,
useSetFeedViewPreferencesMutation,
} from 'state/queries/preferences'
+import {
+ DescriptionText,
+ OnboardingControls,
+ TitleText,
+} from '#/screens/Onboarding/Layout'
+import {Context} from '#/screens/Onboarding/state'
+import {atoms as a} from '#/alf'
+import {Button, ButtonIcon, ButtonText} from '#/components/Button'
+import {Divider} from '#/components/Divider'
+import * as Toggle from '#/components/forms/Toggle'
import {IconCircle} from '#/components/IconCircle'
+import {ChevronRight_Stroke2_Corner0_Rounded as ChevronRight} from '#/components/icons/Chevron'
+import {FilterTimeline_Stroke2_Corner0_Rounded as FilterTimeline} from '#/components/icons/FilterTimeline'
+import {Text} from '#/components/Typography'
export function StepFollowingFeed() {
const {_} = useLingui()
@@ -46,6 +46,7 @@ export function StepFollowingFeed() {
const onContinue = React.useCallback(() => {
dispatch({type: 'next'})
track('OnboardingV2:StepFollowingFeed:End')
+ logEvent('onboarding:followingFeed:nextPressed', {})
}, [track, dispatch])
React.useEffect(() => {
@@ -57,12 +58,12 @@ export function StepFollowingFeed() {
-
+
Your default feed is "Following"
-
-
+
+
It shows posts from the people you follow as they happen.
-
+
-
+
You can change these settings later.
-
+
- {title}
- {description}
+ {title}
+ {description}
{isLoading ? (
diff --git a/src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx b/src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx
index b38b3df1ed..7563bece10 100644
--- a/src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx
+++ b/src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx
@@ -1,18 +1,18 @@
import React from 'react'
import {View} from 'react-native'
-import {useLingui} from '@lingui/react'
import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
import {UseMutateFunction} from '@tanstack/react-query'
+import {logger} from '#/logger'
+import {isIOS} from '#/platform/detection'
+import {usePreferencesQuery} from '#/state/queries/preferences'
import * as Toast from '#/view/com/util/Toast'
import {atoms as a, useTheme} from '#/alf'
-import {usePreferencesQuery} from '#/state/queries/preferences'
-import {logger} from '#/logger'
-import {Text} from '#/components/Typography'
import * as Toggle from '#/components/forms/Toggle'
import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
import * as Prompt from '#/components/Prompt'
-import {isIOS} from '#/platform/detection'
+import {Text} from '#/components/Typography'
function Card({children}: React.PropsWithChildren<{}>) {
const t = useTheme()
@@ -56,7 +56,9 @@ export function AdultContentEnabledPref({
try {
mutate({
- enabled: !(variables?.enabled ?? preferences?.adultContentEnabled),
+ enabled: !(
+ variables?.enabled ?? preferences?.moderationPrefs.adultContentEnabled
+ ),
})
} catch (e) {
Toast.show(
@@ -75,7 +77,10 @@ export function AdultContentEnabledPref({
- Enable Adult Content
+
+ Enable Adult Content
+
@@ -106,15 +113,17 @@ export function AdultContentEnabledPref({
)}
- Adult Content
-
+
+ Adult Content
+
+
Due to Apple policies, adult content can only be enabled on the web
after completing sign up.
-
+
- OK
+ prompt.close()} cta={_(msg`OK`)} />
>
diff --git a/src/screens/Onboarding/StepModeration/ModerationOption.tsx b/src/screens/Onboarding/StepModeration/ModerationOption.tsx
index c61b520bab..d6334e6bda 100644
--- a/src/screens/Onboarding/StepModeration/ModerationOption.tsx
+++ b/src/screens/Onboarding/StepModeration/ModerationOption.tsx
@@ -1,40 +1,51 @@
import React from 'react'
import {View} from 'react-native'
-import {LabelPreference} from '@atproto/api'
+import {InterpretedLabelValueDefinition, LabelPreference} from '@atproto/api'
+import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
-import {msg} from '@lingui/macro'
-import Animated, {Easing, Layout, FadeIn} from 'react-native-reanimated'
+import {useGlobalLabelStrings} from '#/lib/moderation/useGlobalLabelStrings'
import {
- CONFIGURABLE_LABEL_GROUPS,
- ConfigurableLabelGroup,
usePreferencesQuery,
usePreferencesSetContentLabelMutation,
} from '#/state/queries/preferences'
import {atoms as a, useTheme} from '#/alf'
-import {Text} from '#/components/Typography'
import * as ToggleButton from '#/components/forms/ToggleButton'
+import {Text} from '#/components/Typography'
export function ModerationOption({
- labelGroup,
- isMounted,
+ labelValueDefinition,
+ disabled,
}: {
- labelGroup: ConfigurableLabelGroup
- isMounted: React.MutableRefObject
+ labelValueDefinition: InterpretedLabelValueDefinition
+ disabled?: boolean
}) {
const {_} = useLingui()
const t = useTheme()
- const groupInfo = CONFIGURABLE_LABEL_GROUPS[labelGroup]
const {data: preferences} = usePreferencesQuery()
const {mutate, variables} = usePreferencesSetContentLabelMutation()
+ const label = labelValueDefinition.identifier
const visibility =
- variables?.visibility ?? preferences?.contentLabels?.[labelGroup]
+ variables?.visibility ?? preferences?.moderationPrefs.labels?.[label]
+
+ const allLabelStrings = useGlobalLabelStrings()
+ const labelStrings =
+ labelValueDefinition.identifier in allLabelStrings
+ ? allLabelStrings[labelValueDefinition.identifier]
+ : {
+ name: labelValueDefinition.identifier,
+ description: `Labeled "${labelValueDefinition.identifier}"`,
+ }
const onChange = React.useCallback(
(vis: string[]) => {
- mutate({labelGroup, visibility: vis[0] as LabelPreference})
+ mutate({
+ label,
+ visibility: vis[0] as LabelPreference,
+ labelerDid: undefined,
+ })
},
- [mutate, labelGroup],
+ [mutate, label],
)
const labels = {
@@ -44,7 +55,7 @@ export function ModerationOption({
}
return (
-
-
- {groupInfo.title}
+ ]}>
+
+ {labelStrings.name}
- {groupInfo.subtitle}
+ {labelStrings.description}
-
-
-
- {labels.hide}
-
-
- {labels.warn}
-
-
- {labels.show}
-
-
+
+ {disabled ? (
+
+ Hide
+
+ ) : (
+
+
+ {labels.show}
+
+
+ {labels.warn}
+
+
+ {labels.hide}
+
+
+ )}
-
+
)
}
diff --git a/src/screens/Onboarding/StepModeration/index.tsx b/src/screens/Onboarding/StepModeration/index.tsx
index 543a5b1598..d494f48dd1 100644
--- a/src/screens/Onboarding/StepModeration/index.tsx
+++ b/src/screens/Onboarding/StepModeration/index.tsx
@@ -1,40 +1,27 @@
import React from 'react'
import {View} from 'react-native'
-import {useLingui} from '@lingui/react'
+import {LABELS} from '@atproto/api'
import {msg, Trans} from '@lingui/macro'
-import Animated, {Easing, Layout} from 'react-native-reanimated'
+import {useLingui} from '@lingui/react'
-import {atoms as a} from '#/alf'
-import {
- configurableAdultLabelGroups,
- configurableOtherLabelGroups,
- usePreferencesSetAdultContentMutation,
-} from 'state/queries/preferences'
-import {Divider} from '#/components/Divider'
-import {Button, ButtonIcon, ButtonText} from '#/components/Button'
-import {ChevronRight_Stroke2_Corner0_Rounded as ChevronRight} from '#/components/icons/Chevron'
-import {EyeSlash_Stroke2_Corner0_Rounded as EyeSlash} from '#/components/icons/EyeSlash'
-import {usePreferencesQuery} from '#/state/queries/preferences'
-import {Loader} from '#/components/Loader'
import {useAnalytics} from '#/lib/analytics/analytics'
-
+import {logEvent} from '#/lib/statsig/statsig'
+import {usePreferencesQuery} from '#/state/queries/preferences'
+import {usePreferencesSetAdultContentMutation} from 'state/queries/preferences'
import {
- Description,
+ DescriptionText,
OnboardingControls,
- Title,
+ TitleText,
} from '#/screens/Onboarding/Layout'
-import {ModerationOption} from '#/screens/Onboarding/StepModeration/ModerationOption'
-import {AdultContentEnabledPref} from '#/screens/Onboarding/StepModeration/AdultContentEnabledPref'
import {Context} from '#/screens/Onboarding/state'
+import {AdultContentEnabledPref} from '#/screens/Onboarding/StepModeration/AdultContentEnabledPref'
+import {ModerationOption} from '#/screens/Onboarding/StepModeration/ModerationOption'
+import {atoms as a} from '#/alf'
+import {Button, ButtonIcon, ButtonText} from '#/components/Button'
import {IconCircle} from '#/components/IconCircle'
-
-function AnimatedDivider() {
- return (
-
-
-
- )
-}
+import {ChevronRight_Stroke2_Corner0_Rounded as ChevronRight} from '#/components/icons/Chevron'
+import {EyeSlash_Stroke2_Corner0_Rounded as EyeSlash} from '#/components/icons/EyeSlash'
+import {Loader} from '#/components/Loader'
export function StepModeration() {
const {_} = useLingui()
@@ -52,12 +39,13 @@ export function StepModeration() {
const adultContentEnabled = !!(
(variables && variables.enabled) ||
- (!variables && preferences?.adultContentEnabled)
+ (!variables && preferences?.moderationPrefs.adultContentEnabled)
)
const onContinue = React.useCallback(() => {
dispatch({type: 'next'})
track('OnboardingV2:StepModeration:End')
+ logEvent('onboarding:moderation:nextPressed', {})
}, [track, dispatch])
React.useEffect(() => {
@@ -68,14 +56,14 @@ export function StepModeration() {
-
+
You're in control
-
-
+
+
Select what you want to see (or not see), and we’ll handle the rest.
-
+
{!preferences ? (
@@ -86,22 +74,19 @@ export function StepModeration() {
- {adultContentEnabled &&
- configurableAdultLabelGroups.map((g, index) => (
-
- {index === 0 && }
-
-
-
- ))}
-
- {configurableOtherLabelGroups.map((g, index) => (
-
- {!adultContentEnabled && index === 0 && }
-
-
-
- ))}
+
+
+
+
>
)}
diff --git a/src/screens/Onboarding/StepSuggestedAccounts/SuggestedAccountCard.tsx b/src/screens/Onboarding/StepSuggestedAccounts/SuggestedAccountCard.tsx
index 0670058920..838420429b 100644
--- a/src/screens/Onboarding/StepSuggestedAccounts/SuggestedAccountCard.tsx
+++ b/src/screens/Onboarding/StepSuggestedAccounts/SuggestedAccountCard.tsx
@@ -2,13 +2,13 @@ import React from 'react'
import {View, ViewStyle} from 'react-native'
import {AppBskyActorDefs, moderateProfile} from '@atproto/api'
-import {useTheme, atoms as a, flatten} from '#/alf'
-import {Text} from '#/components/Typography'
+import {useModerationOpts} from '#/state/queries/preferences'
+import {UserAvatar} from '#/view/com/util/UserAvatar'
+import {atoms as a, flatten, useTheme} from '#/alf'
import {useItemContext} from '#/components/forms/Toggle'
import {Check_Stroke2_Corner0_Rounded as Check} from '#/components/icons/Check'
-import {UserAvatar} from '#/view/com/util/UserAvatar'
-import {useModerationOpts} from '#/state/queries/preferences'
import {RichText} from '#/components/RichText'
+import {Text} from '#/components/Typography'
export function SuggestedAccountCard({
profile,
@@ -88,7 +88,7 @@ export function SuggestedAccountCard({
diff --git a/src/screens/Onboarding/StepSuggestedAccounts/index.tsx b/src/screens/Onboarding/StepSuggestedAccounts/index.tsx
index 14faddc10f..e9bc3f0fde 100644
--- a/src/screens/Onboarding/StepSuggestedAccounts/index.tsx
+++ b/src/screens/Onboarding/StepSuggestedAccounts/index.tsx
@@ -1,33 +1,33 @@
import React from 'react'
import {View} from 'react-native'
import {AppBskyActorDefs} from '@atproto/api'
-import {useLingui} from '@lingui/react'
import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
-import {atoms as a, useBreakpoints} from '#/alf'
-import {PlusLarge_Stroke2_Corner0_Rounded as Plus} from '#/components/icons/Plus'
-import {At_Stroke2_Corner0_Rounded as At} from '#/components/icons/At'
-import {Button, ButtonIcon, ButtonText} from '#/components/Button'
-import {Text} from '#/components/Typography'
-import {useProfilesQuery} from '#/state/queries/profile'
-import {Loader} from '#/components/Loader'
-import * as Toggle from '#/components/forms/Toggle'
-import {useModerationOpts} from '#/state/queries/preferences'
import {useAnalytics} from '#/lib/analytics/analytics'
+import {logEvent} from '#/lib/statsig/statsig'
import {capitalize} from '#/lib/strings/capitalize'
-
-import {Context} from '#/screens/Onboarding/state'
+import {useModerationOpts} from '#/state/queries/preferences'
+import {useProfilesQuery} from '#/state/queries/profile'
import {
- Title,
- Description,
+ DescriptionText,
OnboardingControls,
+ TitleText,
} from '#/screens/Onboarding/Layout'
+import {Context} from '#/screens/Onboarding/state'
import {
SuggestedAccountCard,
SuggestedAccountCardPlaceholder,
} from '#/screens/Onboarding/StepSuggestedAccounts/SuggestedAccountCard'
import {aggregateInterestItems} from '#/screens/Onboarding/util'
+import {atoms as a, useBreakpoints} from '#/alf'
+import {Button, ButtonIcon, ButtonText} from '#/components/Button'
+import * as Toggle from '#/components/forms/Toggle'
import {IconCircle} from '#/components/IconCircle'
+import {At_Stroke2_Corner0_Rounded as At} from '#/components/icons/At'
+import {PlusLarge_Stroke2_Corner0_Rounded as Plus} from '#/components/icons/Plus'
+import {Loader} from '#/components/Loader'
+import {Text} from '#/components/Typography'
export function Inner({
profiles,
@@ -76,7 +76,7 @@ export function StepSuggestedAccounts() {
return aggregateInterestItems(
state.interestsStepResults.selectedInterests,
state.interestsStepResults.apiResponse.suggestedAccountDids,
- state.interestsStepResults.apiResponse.suggestedAccountDids.default,
+ state.interestsStepResults.apiResponse.suggestedAccountDids.default || [],
)
}, [state.interestsStepResults])
const moderationOpts = useModerationOpts()
@@ -110,12 +110,20 @@ export function StepSuggestedAccounts() {
track('OnboardingV2:StepSuggestedAccounts:End', {
selectedAccountsLength: dids.length,
})
+ logEvent('onboarding:suggestedAccounts:nextPressed', {
+ selectedAccountsLength: dids.length,
+ skipped: false,
+ })
}, [dids, setSaving, dispatch, track])
const handleSkip = React.useCallback(() => {
// if a user comes back and clicks skip, erase follows
dispatch({type: 'setSuggestedAccountsStepResults', accountDids: []})
dispatch({type: 'next'})
+ logEvent('onboarding:suggestedAccounts:nextPressed', {
+ selectedAccountsLength: 0,
+ skipped: true,
+ })
}, [dispatch])
const isLoading = isProfilesLoading && moderationOpts
@@ -128,16 +136,16 @@ export function StepSuggestedAccounts() {
-
+
Here are some accounts for you to follow
-
-
+
+
{state.interestsStepResults.selectedInterests.length ? (
Based on your interest in {interestsText}
) : (
These are popular accounts you might like:
)}
-
+
{isLoading ? (
diff --git a/src/screens/Onboarding/StepTopicalFeeds.tsx b/src/screens/Onboarding/StepTopicalFeeds.tsx
index 4a2210853f..bfc9e91d1b 100644
--- a/src/screens/Onboarding/StepTopicalFeeds.tsx
+++ b/src/screens/Onboarding/StepTopicalFeeds.tsx
@@ -1,42 +1,48 @@
import React from 'react'
import {View} from 'react-native'
-import {useLingui} from '@lingui/react'
import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
-import {IS_PROD} from '#/env'
-import {atoms as a} from '#/alf'
-import {ChevronRight_Stroke2_Corner0_Rounded as ChevronRight} from '#/components/icons/Chevron'
-import {ListMagnifyingGlass_Stroke2_Corner0_Rounded as ListMagnifyingGlass} from '#/components/icons/ListMagnifyingGlass'
-import {Button, ButtonIcon, ButtonText} from '#/components/Button'
-import * as Toggle from '#/components/forms/Toggle'
-import {Loader} from '#/components/Loader'
import {useAnalytics} from '#/lib/analytics/analytics'
+import {logEvent} from '#/lib/statsig/statsig'
import {capitalize} from '#/lib/strings/capitalize'
-
-import {Context} from '#/screens/Onboarding/state'
+import {IS_TEST_USER} from 'lib/constants'
+import {useSession} from 'state/session'
import {
- Title,
- Description,
+ DescriptionText,
OnboardingControls,
+ TitleText,
} from '#/screens/Onboarding/Layout'
+import {Context} from '#/screens/Onboarding/state'
import {FeedCard} from '#/screens/Onboarding/StepAlgoFeeds/FeedCard'
import {aggregateInterestItems} from '#/screens/Onboarding/util'
+import {atoms as a} from '#/alf'
+import {Button, ButtonIcon, ButtonText} from '#/components/Button'
+import * as Toggle from '#/components/forms/Toggle'
import {IconCircle} from '#/components/IconCircle'
+import {ChevronRight_Stroke2_Corner0_Rounded as ChevronRight} from '#/components/icons/Chevron'
+import {ListMagnifyingGlass_Stroke2_Corner0_Rounded as ListMagnifyingGlass} from '#/components/icons/ListMagnifyingGlass'
+import {Loader} from '#/components/Loader'
export function StepTopicalFeeds() {
const {_} = useLingui()
const {track} = useAnalytics()
+ const {currentAccount} = useSession()
const {state, dispatch, interestsDisplayNames} = React.useContext(Context)
const [selectedFeedUris, setSelectedFeedUris] = React.useState([])
const [saving, setSaving] = React.useState(false)
const suggestedFeedUris = React.useMemo(() => {
- if (!IS_PROD) return []
+ if (IS_TEST_USER(currentAccount?.handle)) return []
return aggregateInterestItems(
state.interestsStepResults.selectedInterests,
state.interestsStepResults.apiResponse.suggestedFeedUris,
- state.interestsStepResults.apiResponse.suggestedFeedUris.default,
+ state.interestsStepResults.apiResponse.suggestedFeedUris.default || [],
).slice(0, 10)
- }, [state.interestsStepResults])
+ }, [
+ currentAccount?.handle,
+ state.interestsStepResults.apiResponse.suggestedFeedUris,
+ state.interestsStepResults.selectedInterests,
+ ])
const interestsText = React.useMemo(() => {
const i = state.interestsStepResults.selectedInterests.map(
@@ -56,6 +62,10 @@ export function StepTopicalFeeds() {
selectedFeeds: selectedFeedUris,
selectedFeedsLength: selectedFeedUris.length,
})
+ logEvent('onboarding:topicalFeeds:nextPressed', {
+ selectedFeeds: selectedFeedUris,
+ selectedFeedsLength: selectedFeedUris.length,
+ })
}, [selectedFeedUris, dispatch, track])
React.useEffect(() => {
@@ -66,10 +76,10 @@ export function StepTopicalFeeds() {
-
+
Feeds can be topical as well!
-
-
+
+
{state.interestsStepResults.selectedInterests.length ? (
Here are some topical feeds based on your interests: {interestsText}
@@ -81,7 +91,7 @@ export function StepTopicalFeeds() {
many as you like.
)}
-
+
()
+
+ const onPressBack = React.useCallback(() => {
+ if (navigation.canGoBack()) {
+ navigation.goBack()
+ } else {
+ navigation.navigate('Home')
+ }
+ }, [navigation])
+
+ return (
+
+
+
+
+ Hmmmm, we couldn't load that moderation service.
+
+
+
+ This moderation service is unavailable. See below for more details. If
+ this issue persists, contact us.
+
+
+
+ {error}
+
+
+
+
+
+
+ )
+}
diff --git a/src/screens/Profile/Header/DisplayName.tsx b/src/screens/Profile/Header/DisplayName.tsx
new file mode 100644
index 0000000000..c63658a44a
--- /dev/null
+++ b/src/screens/Profile/Header/DisplayName.tsx
@@ -0,0 +1,31 @@
+import React from 'react'
+import {View} from 'react-native'
+import {AppBskyActorDefs, ModerationDecision} from '@atproto/api'
+
+import {Shadow} from '#/state/cache/types'
+import {sanitizeDisplayName} from 'lib/strings/display-names'
+import {sanitizeHandle} from 'lib/strings/handles'
+import {atoms as a, useTheme} from '#/alf'
+import {Text} from '#/components/Typography'
+
+export function ProfileHeaderDisplayName({
+ profile,
+ moderation,
+}: {
+ profile: Shadow
+ moderation: ModerationDecision
+}) {
+ const t = useTheme()
+ return (
+
+
+ {sanitizeDisplayName(
+ profile.displayName || sanitizeHandle(profile.handle),
+ moderation.ui('displayName'),
+ )}
+
+
+ )
+}
diff --git a/src/screens/Profile/Header/Handle.tsx b/src/screens/Profile/Header/Handle.tsx
new file mode 100644
index 0000000000..145b7a9dde
--- /dev/null
+++ b/src/screens/Profile/Header/Handle.tsx
@@ -0,0 +1,46 @@
+import React from 'react'
+import {View} from 'react-native'
+import {AppBskyActorDefs} from '@atproto/api'
+import {Trans} from '@lingui/macro'
+
+import {Shadow} from '#/state/cache/types'
+import {isInvalidHandle} from 'lib/strings/handles'
+import {atoms as a, useTheme, web} from '#/alf'
+import {Text} from '#/components/Typography'
+
+export function ProfileHeaderHandle({
+ profile,
+}: {
+ profile: Shadow
+}) {
+ const t = useTheme()
+ const invalidHandle = isInvalidHandle(profile.handle)
+ const blockHide = profile.viewer?.blocking || profile.viewer?.blockedBy
+ return (
+
+ {profile.viewer?.followedBy && !blockHide ? (
+
+
+ Follows you
+
+
+ ) : undefined}
+
+ {invalidHandle ? ⚠Invalid Handle : `@${profile.handle}`}
+
+
+ )
+}
diff --git a/src/screens/Profile/Header/Metrics.tsx b/src/screens/Profile/Header/Metrics.tsx
new file mode 100644
index 0000000000..8789e0354f
--- /dev/null
+++ b/src/screens/Profile/Header/Metrics.tsx
@@ -0,0 +1,60 @@
+import React from 'react'
+import {View} from 'react-native'
+import {AppBskyActorDefs} from '@atproto/api'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {pluralize} from '#/lib/strings/helpers'
+import {Shadow} from '#/state/cache/types'
+import {makeProfileLink} from 'lib/routes/links'
+import {formatCount} from 'view/com/util/numeric/format'
+import {atoms as a, useTheme} from '#/alf'
+import {InlineLinkText} from '#/components/Link'
+import {Text} from '#/components/Typography'
+
+export function ProfileHeaderMetrics({
+ profile,
+}: {
+ profile: Shadow
+}) {
+ const t = useTheme()
+ const {_} = useLingui()
+ const following = formatCount(profile.followsCount || 0)
+ const followers = formatCount(profile.followersCount || 0)
+ const pluralizedFollowers = pluralize(profile.followersCount || 0, 'follower')
+
+ return (
+
+
+ {followers}
+
+ {pluralizedFollowers}
+
+
+
+
+ {following}
+
+ following
+
+
+
+
+ {formatCount(profile.postsCount || 0)}{' '}
+
+ {pluralize(profile.postsCount || 0, 'post')}
+
+
+
+ )
+}
diff --git a/src/screens/Profile/Header/ProfileHeaderLabeler.tsx b/src/screens/Profile/Header/ProfileHeaderLabeler.tsx
new file mode 100644
index 0000000000..d0fd5e20bd
--- /dev/null
+++ b/src/screens/Profile/Header/ProfileHeaderLabeler.tsx
@@ -0,0 +1,332 @@
+import React, {memo, useMemo} from 'react'
+import {View} from 'react-native'
+import {
+ AppBskyActorDefs,
+ AppBskyLabelerDefs,
+ moderateProfile,
+ ModerationOpts,
+ RichText as RichTextAPI,
+} from '@atproto/api'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {isAppLabeler} from '#/lib/moderation'
+import {pluralize} from '#/lib/strings/helpers'
+import {logger} from '#/logger'
+import {Shadow} from '#/state/cache/types'
+import {useModalControls} from '#/state/modals'
+import {useLabelerSubscriptionMutation} from '#/state/queries/labeler'
+import {useLikeMutation, useUnlikeMutation} from '#/state/queries/like'
+import {usePreferencesQuery} from '#/state/queries/preferences'
+import {useSession} from '#/state/session'
+import {useAnalytics} from 'lib/analytics/analytics'
+import {useHaptics} from 'lib/haptics'
+import {useProfileShadow} from 'state/cache/profile-shadow'
+import {ProfileMenu} from '#/view/com/profile/ProfileMenu'
+import * as Toast from '#/view/com/util/Toast'
+import {atoms as a, tokens, useTheme} from '#/alf'
+import {Button, ButtonText} from '#/components/Button'
+import {DialogOuterProps} from '#/components/Dialog'
+import {
+ Heart2_Filled_Stroke2_Corner0_Rounded as HeartFilled,
+ Heart2_Stroke2_Corner0_Rounded as Heart,
+} from '#/components/icons/Heart2'
+import {Link} from '#/components/Link'
+import * as Prompt from '#/components/Prompt'
+import {RichText} from '#/components/RichText'
+import {Text} from '#/components/Typography'
+import {ProfileHeaderDisplayName} from './DisplayName'
+import {ProfileHeaderHandle} from './Handle'
+import {ProfileHeaderMetrics} from './Metrics'
+import {ProfileHeaderShell} from './Shell'
+
+interface Props {
+ profile: AppBskyActorDefs.ProfileViewDetailed
+ labeler: AppBskyLabelerDefs.LabelerViewDetailed
+ descriptionRT: RichTextAPI | null
+ moderationOpts: ModerationOpts
+ hideBackButton?: boolean
+ isPlaceholderProfile?: boolean
+}
+
+let ProfileHeaderLabeler = ({
+ profile: profileUnshadowed,
+ labeler,
+ descriptionRT,
+ moderationOpts,
+ hideBackButton = false,
+ isPlaceholderProfile,
+}: Props): React.ReactNode => {
+ const profile: Shadow =
+ useProfileShadow(profileUnshadowed)
+ const t = useTheme()
+ const {_} = useLingui()
+ const {currentAccount, hasSession} = useSession()
+ const {openModal} = useModalControls()
+ const {track} = useAnalytics()
+ const playHaptic = useHaptics()
+ const cantSubscribePrompt = Prompt.usePromptControl()
+ const isSelf = currentAccount?.did === profile.did
+
+ const moderation = useMemo(
+ () => moderateProfile(profile, moderationOpts),
+ [profile, moderationOpts],
+ )
+ const {data: preferences} = usePreferencesQuery()
+ const {mutateAsync: toggleSubscription, variables} =
+ useLabelerSubscriptionMutation()
+ const isSubscribed =
+ variables?.subscribe ??
+ preferences?.moderationPrefs.labelers.find(l => l.did === profile.did)
+ const canSubscribe =
+ isSubscribed ||
+ (preferences ? preferences?.moderationPrefs.labelers.length < 9 : false)
+ const {mutateAsync: likeMod, isPending: isLikePending} = useLikeMutation()
+ const {mutateAsync: unlikeMod, isPending: isUnlikePending} =
+ useUnlikeMutation()
+ const [likeUri, setLikeUri] = React.useState(
+ labeler.viewer?.like || '',
+ )
+ const [likeCount, setLikeCount] = React.useState(labeler.likeCount || 0)
+
+ const onToggleLiked = React.useCallback(async () => {
+ if (!labeler) {
+ return
+ }
+ try {
+ playHaptic()
+
+ if (likeUri) {
+ await unlikeMod({uri: likeUri})
+ track('CustomFeed:Unlike')
+ setLikeCount(c => c - 1)
+ setLikeUri('')
+ } else {
+ const res = await likeMod({uri: labeler.uri, cid: labeler.cid})
+ track('CustomFeed:Like')
+ setLikeCount(c => c + 1)
+ setLikeUri(res.uri)
+ }
+ } catch (e: any) {
+ Toast.show(
+ _(
+ msg`There was an an issue contacting the server, please check your internet connection and try again.`,
+ ),
+ )
+ logger.error(`Failed to toggle labeler like`, {message: e.message})
+ }
+ }, [labeler, playHaptic, likeUri, unlikeMod, track, likeMod, _])
+
+ const onPressEditProfile = React.useCallback(() => {
+ track('ProfileHeader:EditProfileButtonClicked')
+ openModal({
+ name: 'edit-profile',
+ profile,
+ })
+ }, [track, openModal, profile])
+
+ const onPressSubscribe = React.useCallback(async () => {
+ if (!canSubscribe) {
+ cantSubscribePrompt.open()
+ return
+ }
+ try {
+ await toggleSubscription({
+ did: profile.did,
+ subscribe: !isSubscribed,
+ })
+ } catch (e: any) {
+ // setSubscriptionError(e.message)
+ logger.error(`Failed to subscribe to labeler`, {message: e.message})
+ }
+ }, [
+ toggleSubscription,
+ isSubscribed,
+ profile,
+ canSubscribe,
+ cantSubscribePrompt,
+ ])
+
+ const isMe = React.useMemo(
+ () => currentAccount?.did === profile.did,
+ [currentAccount, profile],
+ )
+
+ return (
+
+
+
+ {isMe ? (
+
+ ) : !isAppLabeler(profile.did) ? (
+ <>
+
+ >
+ ) : null}
+
+
+
+
+
+
+ {!isPlaceholderProfile && (
+ <>
+ {isSelf && }
+ {descriptionRT && !moderation.ui('profileView').blur ? (
+
+
+
+ ) : undefined}
+ {!isAppLabeler(profile.did) && (
+
+
+
+ {typeof likeCount === 'number' && (
+
+ {({hovered, focused, pressed}) => (
+
+
+ Liked by {likeCount} {pluralize(likeCount, 'user')}
+
+
+ )}
+
+ )}
+
+ )}
+ >
+ )}
+
+
+
+ )
+}
+ProfileHeaderLabeler = memo(ProfileHeaderLabeler)
+export {ProfileHeaderLabeler}
+
+function CantSubscribePrompt({
+ control,
+}: {
+ control: DialogOuterProps['control']
+}) {
+ const {_} = useLingui()
+ return (
+
+ Unable to subscribe
+
+
+ We're sorry! You can only subscribe to ten labelers, and you've
+ reached your limit of ten.
+
+
+
+
+
+
+ )
+}
diff --git a/src/screens/Profile/Header/ProfileHeaderStandard.tsx b/src/screens/Profile/Header/ProfileHeaderStandard.tsx
new file mode 100644
index 0000000000..d6c6ff7bd1
--- /dev/null
+++ b/src/screens/Profile/Header/ProfileHeaderStandard.tsx
@@ -0,0 +1,295 @@
+import React, {memo, useMemo} from 'react'
+import {View} from 'react-native'
+import {
+ AppBskyActorDefs,
+ moderateProfile,
+ ModerationOpts,
+ RichText as RichTextAPI,
+} from '@atproto/api'
+import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {useGate} from '#/lib/statsig/statsig'
+import {logger} from '#/logger'
+import {isWeb} from '#/platform/detection'
+import {Shadow} from '#/state/cache/types'
+import {useModalControls} from '#/state/modals'
+import {
+ useProfileBlockMutationQueue,
+ useProfileFollowMutationQueue,
+} from '#/state/queries/profile'
+import {useRequireAuth, useSession} from '#/state/session'
+import {useAnalytics} from 'lib/analytics/analytics'
+import {sanitizeDisplayName} from 'lib/strings/display-names'
+import {useProfileShadow} from 'state/cache/profile-shadow'
+import {ProfileHeaderSuggestedFollows} from '#/view/com/profile/ProfileHeaderSuggestedFollows'
+import {ProfileMenu} from '#/view/com/profile/ProfileMenu'
+import * as Toast from '#/view/com/util/Toast'
+import {atoms as a, useTheme} from '#/alf'
+import {Button, ButtonIcon, ButtonText} from '#/components/Button'
+import {Check_Stroke2_Corner0_Rounded as Check} from '#/components/icons/Check'
+import {PlusLarge_Stroke2_Corner0_Rounded as Plus} from '#/components/icons/Plus'
+import * as Prompt from '#/components/Prompt'
+import {RichText} from '#/components/RichText'
+import {ProfileHeaderDisplayName} from './DisplayName'
+import {ProfileHeaderHandle} from './Handle'
+import {ProfileHeaderMetrics} from './Metrics'
+import {ProfileHeaderShell} from './Shell'
+
+interface Props {
+ profile: AppBskyActorDefs.ProfileViewDetailed
+ descriptionRT: RichTextAPI | null
+ moderationOpts: ModerationOpts
+ hideBackButton?: boolean
+ isPlaceholderProfile?: boolean
+}
+
+let ProfileHeaderStandard = ({
+ profile: profileUnshadowed,
+ descriptionRT,
+ moderationOpts,
+ hideBackButton = false,
+ isPlaceholderProfile,
+}: Props): React.ReactNode => {
+ const profile: Shadow =
+ useProfileShadow(profileUnshadowed)
+ const t = useTheme()
+ const {currentAccount, hasSession} = useSession()
+ const {_} = useLingui()
+ const {openModal} = useModalControls()
+ const {track} = useAnalytics()
+ const moderation = useMemo(
+ () => moderateProfile(profile, moderationOpts),
+ [profile, moderationOpts],
+ )
+ const [showSuggestedFollows, setShowSuggestedFollows] = React.useState(false)
+ const [queueFollow, queueUnfollow] = useProfileFollowMutationQueue(
+ profile,
+ 'ProfileHeader',
+ )
+ const [_queueBlock, queueUnblock] = useProfileBlockMutationQueue(profile)
+ const unblockPromptControl = Prompt.usePromptControl()
+ const requireAuth = useRequireAuth()
+
+ const onPressEditProfile = React.useCallback(() => {
+ track('ProfileHeader:EditProfileButtonClicked')
+ openModal({
+ name: 'edit-profile',
+ profile,
+ })
+ }, [track, openModal, profile])
+
+ const autoExpandSuggestionsOnProfileFollow = useGate(
+ 'autoexpand_suggestions_on_profile_follow',
+ )
+ const onPressFollow = () => {
+ requireAuth(async () => {
+ try {
+ track('ProfileHeader:FollowButtonClicked')
+ await queueFollow()
+ Toast.show(
+ _(
+ msg`Following ${sanitizeDisplayName(
+ profile.displayName || profile.handle,
+ moderation.ui('displayName'),
+ )}`,
+ ),
+ )
+ if (isWeb && autoExpandSuggestionsOnProfileFollow) {
+ setShowSuggestedFollows(true)
+ }
+ } catch (e: any) {
+ if (e?.name !== 'AbortError') {
+ logger.error('Failed to follow', {message: String(e)})
+ Toast.show(_(msg`There was an issue! ${e.toString()}`))
+ }
+ }
+ })
+ }
+
+ const onPressUnfollow = () => {
+ requireAuth(async () => {
+ try {
+ track('ProfileHeader:UnfollowButtonClicked')
+ await queueUnfollow()
+ Toast.show(
+ _(
+ msg`No longer following ${sanitizeDisplayName(
+ profile.displayName || profile.handle,
+ moderation.ui('displayName'),
+ )}`,
+ ),
+ )
+ } catch (e: any) {
+ if (e?.name !== 'AbortError') {
+ logger.error('Failed to unfollow', {message: String(e)})
+ Toast.show(_(msg`There was an issue! ${e.toString()}`))
+ }
+ }
+ })
+ }
+
+ const unblockAccount = React.useCallback(async () => {
+ track('ProfileHeader:UnblockAccountButtonClicked')
+ try {
+ await queueUnblock()
+ Toast.show(_(msg`Account unblocked`))
+ } catch (e: any) {
+ if (e?.name !== 'AbortError') {
+ logger.error('Failed to unblock account', {message: e})
+ Toast.show(_(msg`There was an issue! ${e.toString()}`))
+ }
+ }
+ }, [_, queueUnblock, track])
+
+ const isMe = React.useMemo(
+ () => currentAccount?.did === profile.did,
+ [currentAccount, profile],
+ )
+
+ return (
+
+
+
+ {isMe ? (
+
+ ) : profile.viewer?.blocking ? (
+ profile.viewer?.blockingByList ? null : (
+
+ )
+ ) : !profile.viewer?.blockedBy ? (
+ <>
+ {hasSession && (
+
+ )}
+
+
+ >
+ ) : null}
+
+
+
+
+
+
+ {!isPlaceholderProfile && (
+ <>
+
+ {descriptionRT && !moderation.ui('profileView').blur ? (
+
+
+
+ ) : undefined}
+ >
+ )}
+
+ {showSuggestedFollows && (
+ {
+ if (showSuggestedFollows) {
+ setShowSuggestedFollows(false)
+ } else {
+ track('ProfileHeader:SuggestedFollowsOpened')
+ setShowSuggestedFollows(true)
+ }
+ }}
+ />
+ )}
+
+
+ )
+}
+ProfileHeaderStandard = memo(ProfileHeaderStandard)
+export {ProfileHeaderStandard}
diff --git a/src/screens/Profile/Header/Shell.tsx b/src/screens/Profile/Header/Shell.tsx
new file mode 100644
index 0000000000..c6063591c6
--- /dev/null
+++ b/src/screens/Profile/Header/Shell.tsx
@@ -0,0 +1,161 @@
+import React, {memo} from 'react'
+import {StyleSheet, TouchableWithoutFeedback, View} from 'react-native'
+import {AppBskyActorDefs, ModerationDecision} from '@atproto/api'
+import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {useNavigation} from '@react-navigation/native'
+
+import {Shadow} from '#/state/cache/types'
+import {ProfileImageLightbox, useLightboxControls} from '#/state/lightbox'
+import {useSession} from '#/state/session'
+import {BACK_HITSLOP} from 'lib/constants'
+import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import {NavigationProp} from 'lib/routes/types'
+import {LoadingPlaceholder} from 'view/com/util/LoadingPlaceholder'
+import {UserAvatar} from 'view/com/util/UserAvatar'
+import {UserBanner} from 'view/com/util/UserBanner'
+import {atoms as a, useTheme} from '#/alf'
+import {LabelsOnMe} from '#/components/moderation/LabelsOnMe'
+import {ProfileHeaderAlerts} from '#/components/moderation/ProfileHeaderAlerts'
+
+interface Props {
+ profile: Shadow
+ moderation: ModerationDecision
+ hideBackButton?: boolean
+ isPlaceholderProfile?: boolean
+}
+
+let ProfileHeaderShell = ({
+ children,
+ profile,
+ moderation,
+ hideBackButton = false,
+ isPlaceholderProfile,
+}: React.PropsWithChildren): React.ReactNode => {
+ const t = useTheme()
+ const {currentAccount} = useSession()
+ const {_} = useLingui()
+ const {openLightbox} = useLightboxControls()
+ const navigation = useNavigation()
+ const {isDesktop} = useWebMediaQueries()
+
+ const onPressBack = React.useCallback(() => {
+ if (navigation.canGoBack()) {
+ navigation.goBack()
+ } else {
+ navigation.navigate('Home')
+ }
+ }, [navigation])
+
+ const onPressAvi = React.useCallback(() => {
+ const modui = moderation.ui('avatar')
+ if (profile.avatar && !(modui.blur && modui.noOverride)) {
+ openLightbox(new ProfileImageLightbox(profile))
+ }
+ }, [openLightbox, profile, moderation])
+
+ const isMe = React.useMemo(
+ () => currentAccount?.did === profile.did,
+ [currentAccount, profile],
+ )
+
+ return (
+
+
+ {isPlaceholderProfile ? (
+
+ ) : (
+
+ )}
+
+
+ {children}
+
+
+
+ {isMe && (
+
+ )}
+
+
+ {!isDesktop && !hideBackButton && (
+
+
+
+
+
+ )}
+
+
+
+
+
+
+ )
+}
+ProfileHeaderShell = memo(ProfileHeaderShell)
+export {ProfileHeaderShell}
+
+const styles = StyleSheet.create({
+ backBtnWrapper: {
+ position: 'absolute',
+ top: 10,
+ left: 10,
+ width: 30,
+ height: 30,
+ overflow: 'hidden',
+ borderRadius: 15,
+ // @ts-ignore web only
+ cursor: 'pointer',
+ },
+ backBtn: {
+ width: 30,
+ height: 30,
+ borderRadius: 15,
+ alignItems: 'center',
+ justifyContent: 'center',
+ },
+ avi: {
+ position: 'absolute',
+ top: 110,
+ left: 10,
+ width: 94,
+ height: 94,
+ borderRadius: 47,
+ borderWidth: 2,
+ },
+ aviLabeler: {
+ borderRadius: 10,
+ },
+})
diff --git a/src/screens/Profile/Header/index.tsx b/src/screens/Profile/Header/index.tsx
new file mode 100644
index 0000000000..d38d4f5f38
--- /dev/null
+++ b/src/screens/Profile/Header/index.tsx
@@ -0,0 +1,78 @@
+import React, {memo} from 'react'
+import {StyleSheet, View} from 'react-native'
+import {
+ AppBskyActorDefs,
+ AppBskyLabelerDefs,
+ ModerationOpts,
+ RichText as RichTextAPI,
+} from '@atproto/api'
+
+import {usePalette} from 'lib/hooks/usePalette'
+import {LoadingPlaceholder} from 'view/com/util/LoadingPlaceholder'
+import {ProfileHeaderLabeler} from './ProfileHeaderLabeler'
+import {ProfileHeaderStandard} from './ProfileHeaderStandard'
+
+let ProfileHeaderLoading = (_props: {}): React.ReactNode => {
+ const pal = usePalette('default')
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
+ProfileHeaderLoading = memo(ProfileHeaderLoading)
+export {ProfileHeaderLoading}
+
+interface Props {
+ profile: AppBskyActorDefs.ProfileViewDetailed
+ labeler: AppBskyLabelerDefs.LabelerViewDetailed | undefined
+ descriptionRT: RichTextAPI | null
+ moderationOpts: ModerationOpts
+ hideBackButton?: boolean
+ isPlaceholderProfile?: boolean
+}
+
+let ProfileHeader = (props: Props): React.ReactNode => {
+ if (props.profile.associated?.labeler) {
+ if (!props.labeler) {
+ return
+ }
+ return
+ }
+ return
+}
+ProfileHeader = memo(ProfileHeader)
+export {ProfileHeader}
+
+const styles = StyleSheet.create({
+ avi: {
+ position: 'absolute',
+ top: 110,
+ left: 10,
+ width: 84,
+ height: 84,
+ borderRadius: 42,
+ borderWidth: 2,
+ },
+ content: {
+ paddingTop: 8,
+ paddingHorizontal: 14,
+ paddingBottom: 4,
+ },
+ buttonsLine: {
+ flexDirection: 'row',
+ marginLeft: 'auto',
+ marginBottom: 12,
+ },
+ br40: {borderRadius: 40},
+ br50: {borderRadius: 50},
+})
diff --git a/src/screens/Profile/ProfileLabelerLikedBy.tsx b/src/screens/Profile/ProfileLabelerLikedBy.tsx
new file mode 100644
index 0000000000..8650ac2e64
--- /dev/null
+++ b/src/screens/Profile/ProfileLabelerLikedBy.tsx
@@ -0,0 +1,33 @@
+import React from 'react'
+import {View} from 'react-native'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {useFocusEffect} from '@react-navigation/native'
+
+import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
+import {makeRecordUri} from '#/lib/strings/url-helpers'
+import {useSetMinimalShellMode} from '#/state/shell'
+import {ViewHeader} from '#/view/com/util/ViewHeader'
+import {LikedByList} from '#/components/LikedByList'
+
+export function ProfileLabelerLikedByScreen({
+ route,
+}: NativeStackScreenProps) {
+ const setMinimalShellMode = useSetMinimalShellMode()
+ const {name: handleOrDid} = route.params
+ const uri = makeRecordUri(handleOrDid, 'app.bsky.labeler.service', 'self')
+ const {_} = useLingui()
+
+ useFocusEffect(
+ React.useCallback(() => {
+ setMinimalShellMode(false)
+ }, [setMinimalShellMode]),
+ )
+
+ return (
+
+
+
+
+ )
+}
diff --git a/src/screens/Profile/Sections/Feed.tsx b/src/screens/Profile/Sections/Feed.tsx
new file mode 100644
index 0000000000..bc106fcfb9
--- /dev/null
+++ b/src/screens/Profile/Sections/Feed.tsx
@@ -0,0 +1,104 @@
+import React from 'react'
+import {findNodeHandle, View} from 'react-native'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {useQueryClient} from '@tanstack/react-query'
+
+import {isNative} from '#/platform/detection'
+import {FeedDescriptor} from '#/state/queries/post-feed'
+import {RQKEY as FEED_RQKEY} from '#/state/queries/post-feed'
+import {truncateAndInvalidate} from '#/state/queries/util'
+import {usePalette} from 'lib/hooks/usePalette'
+import {Text} from '#/view/com/util/text/Text'
+import {Feed} from 'view/com/posts/Feed'
+import {EmptyState} from 'view/com/util/EmptyState'
+import {ListRef} from 'view/com/util/List'
+import {LoadLatestBtn} from 'view/com/util/load-latest/LoadLatestBtn'
+import {SectionRef} from './types'
+
+interface FeedSectionProps {
+ feed: FeedDescriptor
+ headerHeight: number
+ isFocused: boolean
+ scrollElRef: ListRef
+ ignoreFilterFor?: string
+ setScrollViewTag: (tag: number | null) => void
+}
+export const ProfileFeedSection = React.forwardRef<
+ SectionRef,
+ FeedSectionProps
+>(function FeedSectionImpl(
+ {
+ feed,
+ headerHeight,
+ isFocused,
+ scrollElRef,
+ ignoreFilterFor,
+ setScrollViewTag,
+ },
+ ref,
+) {
+ const {_} = useLingui()
+ const queryClient = useQueryClient()
+ const [hasNew, setHasNew] = React.useState(false)
+ const [isScrolledDown, setIsScrolledDown] = React.useState(false)
+
+ const onScrollToTop = React.useCallback(() => {
+ scrollElRef.current?.scrollToOffset({
+ animated: isNative,
+ offset: -headerHeight,
+ })
+ truncateAndInvalidate(queryClient, FEED_RQKEY(feed))
+ setHasNew(false)
+ }, [scrollElRef, headerHeight, queryClient, feed, setHasNew])
+ React.useImperativeHandle(ref, () => ({
+ scrollToTop: onScrollToTop,
+ }))
+
+ const renderPostsEmpty = React.useCallback(() => {
+ return
+ }, [_])
+
+ React.useEffect(() => {
+ if (isFocused && scrollElRef.current) {
+ const nativeTag = findNodeHandle(scrollElRef.current)
+ setScrollViewTag(nativeTag)
+ }
+ }, [isFocused, scrollElRef, setScrollViewTag])
+
+ return (
+
+
+ {(isScrolledDown || hasNew) && (
+
+ )}
+
+ )
+})
+
+function ProfileEndOfFeed() {
+ const pal = usePalette('default')
+
+ return (
+
+
+ End of feed
+
+
+ )
+}
diff --git a/src/screens/Profile/Sections/Labels.tsx b/src/screens/Profile/Sections/Labels.tsx
new file mode 100644
index 0000000000..f43e3633db
--- /dev/null
+++ b/src/screens/Profile/Sections/Labels.tsx
@@ -0,0 +1,225 @@
+import React from 'react'
+import {findNodeHandle, View} from 'react-native'
+import {useSafeAreaFrame} from 'react-native-safe-area-context'
+import {
+ AppBskyLabelerDefs,
+ InterpretedLabelValueDefinition,
+ interpretLabelValueDefinitions,
+ ModerationOpts,
+} from '@atproto/api'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {useAnimatedScrollHandler} from '#/lib/hooks/useAnimatedScrollHandler_FIXED'
+import {isLabelerSubscribed, lookupLabelValueDefinition} from '#/lib/moderation'
+import {useScrollHandlers} from '#/lib/ScrollContext'
+import {isNative} from '#/platform/detection'
+import {ListRef} from '#/view/com/util/List'
+import {CenteredView, ScrollView} from '#/view/com/util/Views'
+import {atoms as a, useTheme} from '#/alf'
+import {Divider} from '#/components/Divider'
+import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
+import {Loader} from '#/components/Loader'
+import {LabelerLabelPreference} from '#/components/moderation/LabelPreference'
+import {Text} from '#/components/Typography'
+import {ErrorState} from '../ErrorState'
+import {SectionRef} from './types'
+
+interface LabelsSectionProps {
+ isLabelerLoading: boolean
+ labelerInfo: AppBskyLabelerDefs.LabelerViewDetailed | undefined
+ labelerError: Error | null
+ moderationOpts: ModerationOpts
+ scrollElRef: ListRef
+ headerHeight: number
+ isFocused: boolean
+ setScrollViewTag: (tag: number | null) => void
+}
+export const ProfileLabelsSection = React.forwardRef<
+ SectionRef,
+ LabelsSectionProps
+>(function LabelsSectionImpl(
+ {
+ isLabelerLoading,
+ labelerInfo,
+ labelerError,
+ moderationOpts,
+ scrollElRef,
+ headerHeight,
+ isFocused,
+ setScrollViewTag,
+ },
+ ref,
+) {
+ const {_} = useLingui()
+ const {height: minHeight} = useSafeAreaFrame()
+
+ const onScrollToTop = React.useCallback(() => {
+ // @ts-ignore TODO fix this
+ scrollElRef.current?.scrollTo({
+ animated: isNative,
+ x: 0,
+ y: -headerHeight,
+ })
+ }, [scrollElRef, headerHeight])
+
+ React.useImperativeHandle(ref, () => ({
+ scrollToTop: onScrollToTop,
+ }))
+
+ React.useEffect(() => {
+ if (isFocused && scrollElRef.current) {
+ const nativeTag = findNodeHandle(scrollElRef.current)
+ setScrollViewTag(nativeTag)
+ }
+ }, [isFocused, scrollElRef, setScrollViewTag])
+
+ return (
+
+ {isLabelerLoading ? (
+
+
+
+ ) : labelerError || !labelerInfo ? (
+
+ ) : (
+
+ )}
+
+ )
+})
+
+export function ProfileLabelsSectionInner({
+ moderationOpts,
+ labelerInfo,
+ scrollElRef,
+ headerHeight,
+}: {
+ moderationOpts: ModerationOpts
+ labelerInfo: AppBskyLabelerDefs.LabelerViewDetailed
+ scrollElRef: ListRef
+ headerHeight: number
+}) {
+ const t = useTheme()
+ const contextScrollHandlers = useScrollHandlers()
+
+ const scrollHandler = useAnimatedScrollHandler({
+ onBeginDrag(e, ctx) {
+ contextScrollHandlers.onBeginDrag?.(e, ctx)
+ },
+ onEndDrag(e, ctx) {
+ contextScrollHandlers.onEndDrag?.(e, ctx)
+ },
+ onScroll(e, ctx) {
+ contextScrollHandlers.onScroll?.(e, ctx)
+ },
+ })
+
+ const {labelValues} = labelerInfo.policies
+ const isSubscribed = isLabelerSubscribed(labelerInfo, moderationOpts)
+ const labelDefs = React.useMemo(() => {
+ const customDefs = interpretLabelValueDefinitions(labelerInfo)
+ return labelValues
+ .map(val => lookupLabelValueDefinition(val, customDefs))
+ .filter(
+ def => def && def?.configurable,
+ ) as InterpretedLabelValueDefinition[]
+ }, [labelerInfo, labelValues])
+
+ return (
+
+
+
+
+
+ Labels are annotations on users and content. They can be used to
+ hide, warn, and categorize the network.
+
+
+ {labelerInfo.creator.viewer?.blocking ? (
+
+
+
+
+ Blocking does not prevent this labeler from placing labels on
+ your account.
+
+
+
+ ) : null}
+ {labelValues.length === 0 ? (
+
+
+ This labeler hasn't declared what labels it publishes, and may
+ not be active.
+
+
+ ) : !isSubscribed ? (
+
+
+ Subscribe to @{labelerInfo.creator.handle} to use these labels:
+
+
+ ) : null}
+
+ {labelDefs.length > 0 && (
+
+ {labelDefs.map((labelDef, i) => {
+ return (
+
+ {i !== 0 && }
+
+
+ )
+ })}
+
+ )}
+
+
+
+
+ )
+}
diff --git a/src/screens/Profile/Sections/types.ts b/src/screens/Profile/Sections/types.ts
new file mode 100644
index 0000000000..a7f77d648c
--- /dev/null
+++ b/src/screens/Profile/Sections/types.ts
@@ -0,0 +1,3 @@
+export interface SectionRef {
+ scrollToTop: () => void
+}
diff --git a/src/screens/Signup/StepCaptcha/CaptchaWebView.tsx b/src/screens/Signup/StepCaptcha/CaptchaWebView.tsx
new file mode 100644
index 0000000000..50918c4ce6
--- /dev/null
+++ b/src/screens/Signup/StepCaptcha/CaptchaWebView.tsx
@@ -0,0 +1,87 @@
+import React from 'react'
+import {StyleSheet} from 'react-native'
+import {WebView, WebViewNavigation} from 'react-native-webview'
+import {ShouldStartLoadRequest} from 'react-native-webview/lib/WebViewTypes'
+
+import {SignupState} from '#/screens/Signup/state'
+
+const ALLOWED_HOSTS = [
+ 'bsky.social',
+ 'bsky.app',
+ 'staging.bsky.app',
+ 'staging.bsky.dev',
+ 'js.hcaptcha.com',
+ 'newassets.hcaptcha.com',
+ 'api2.hcaptcha.com',
+]
+
+export function CaptchaWebView({
+ url,
+ stateParam,
+ state,
+ onSuccess,
+ onError,
+}: {
+ url: string
+ stateParam: string
+ state?: SignupState
+ onSuccess: (code: string) => void
+ onError: () => void
+}) {
+ const redirectHost = React.useMemo(() => {
+ if (!state?.serviceUrl) return 'bsky.app'
+
+ return state?.serviceUrl &&
+ new URL(state?.serviceUrl).host === 'staging.bsky.dev'
+ ? 'staging.bsky.app'
+ : 'bsky.app'
+ }, [state?.serviceUrl])
+
+ const wasSuccessful = React.useRef(false)
+
+ const onShouldStartLoadWithRequest = React.useCallback(
+ (event: ShouldStartLoadRequest) => {
+ const urlp = new URL(event.url)
+ return ALLOWED_HOSTS.includes(urlp.host)
+ },
+ [],
+ )
+
+ const onNavigationStateChange = React.useCallback(
+ (e: WebViewNavigation) => {
+ if (wasSuccessful.current) return
+
+ const urlp = new URL(e.url)
+ if (urlp.host !== redirectHost) return
+
+ const code = urlp.searchParams.get('code')
+ if (urlp.searchParams.get('state') !== stateParam || !code) {
+ onError()
+ return
+ }
+
+ wasSuccessful.current = true
+ onSuccess(code)
+ },
+ [redirectHost, stateParam, onSuccess, onError],
+ )
+
+ return (
+
+ )
+}
+
+const styles = StyleSheet.create({
+ webview: {
+ flex: 1,
+ backgroundColor: 'transparent',
+ borderRadius: 10,
+ },
+})
diff --git a/src/screens/Signup/StepCaptcha/CaptchaWebView.web.tsx b/src/screens/Signup/StepCaptcha/CaptchaWebView.web.tsx
new file mode 100644
index 0000000000..7791a58dd7
--- /dev/null
+++ b/src/screens/Signup/StepCaptcha/CaptchaWebView.web.tsx
@@ -0,0 +1,61 @@
+import React from 'react'
+import {StyleSheet} from 'react-native'
+
+// @ts-ignore web only, we will always redirect to the app on web (CORS)
+const REDIRECT_HOST = new URL(window.location.href).host
+
+export function CaptchaWebView({
+ url,
+ stateParam,
+ onSuccess,
+ onError,
+}: {
+ url: string
+ stateParam: string
+ onSuccess: (code: string) => void
+ onError: () => void
+}) {
+ const onLoad = React.useCallback(() => {
+ // @ts-ignore web
+ const frame: HTMLIFrameElement = document.getElementById(
+ 'captcha-iframe',
+ ) as HTMLIFrameElement
+
+ try {
+ // @ts-ignore web
+ const href = frame?.contentWindow?.location.href
+ if (!href) return
+ const urlp = new URL(href)
+
+ // This shouldn't happen with CORS protections, but for good measure
+ if (urlp.host !== REDIRECT_HOST) return
+
+ const code = urlp.searchParams.get('code')
+ if (urlp.searchParams.get('state') !== stateParam || !code) {
+ onError()
+ return
+ }
+ onSuccess(code)
+ } catch (e) {
+ // We don't need to handle this
+ }
+ }, [stateParam, onSuccess, onError])
+
+ return (
+
+ )
+}
+
+const styles = StyleSheet.create({
+ iframe: {
+ flex: 1,
+ borderWidth: 0,
+ borderRadius: 10,
+ backgroundColor: 'transparent',
+ },
+})
diff --git a/src/screens/Signup/StepCaptcha/index.tsx b/src/screens/Signup/StepCaptcha/index.tsx
new file mode 100644
index 0000000000..2429b0c5e9
--- /dev/null
+++ b/src/screens/Signup/StepCaptcha/index.tsx
@@ -0,0 +1,80 @@
+import React from 'react'
+import {ActivityIndicator, View} from 'react-native'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {nanoid} from 'nanoid/non-secure'
+
+import {createFullHandle} from '#/lib/strings/handles'
+import {ScreenTransition} from '#/screens/Login/ScreenTransition'
+import {useSignupContext, useSubmitSignup} from '#/screens/Signup/state'
+import {CaptchaWebView} from '#/screens/Signup/StepCaptcha/CaptchaWebView'
+import {atoms as a, useTheme} from '#/alf'
+import {FormError} from '#/components/forms/FormError'
+
+const CAPTCHA_PATH = '/gate/signup'
+
+export function StepCaptcha() {
+ const {_} = useLingui()
+ const theme = useTheme()
+ const {state, dispatch} = useSignupContext()
+ const submit = useSubmitSignup({state, dispatch})
+
+ const [completed, setCompleted] = React.useState(false)
+
+ const stateParam = React.useMemo(() => nanoid(15), [])
+ const url = React.useMemo(() => {
+ const newUrl = new URL(state.serviceUrl)
+ newUrl.pathname = CAPTCHA_PATH
+ newUrl.searchParams.set(
+ 'handle',
+ createFullHandle(state.handle, state.userDomain),
+ )
+ newUrl.searchParams.set('state', stateParam)
+ newUrl.searchParams.set('colorScheme', theme.name)
+
+ return newUrl.href
+ }, [state.serviceUrl, state.handle, state.userDomain, stateParam, theme.name])
+
+ const onSuccess = React.useCallback(
+ (code: string) => {
+ setCompleted(true)
+ submit(code)
+ },
+ [submit],
+ )
+
+ const onError = React.useCallback(() => {
+ dispatch({
+ type: 'setError',
+ value: _(msg`Error receiving captcha response.`),
+ })
+ }, [_, dispatch])
+
+ return (
+
+
+
+ {!completed ? (
+
+ ) : (
+
+ )}
+
+
+
+
+ )
+}
diff --git a/src/screens/Signup/StepHandle.tsx b/src/screens/Signup/StepHandle.tsx
new file mode 100644
index 0000000000..44a33b8331
--- /dev/null
+++ b/src/screens/Signup/StepHandle.tsx
@@ -0,0 +1,134 @@
+import React from 'react'
+import {View} from 'react-native'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {useFocusEffect} from '@react-navigation/native'
+
+import {
+ createFullHandle,
+ IsValidHandle,
+ validateHandle,
+} from '#/lib/strings/handles'
+import {ScreenTransition} from '#/screens/Login/ScreenTransition'
+import {useSignupContext} from '#/screens/Signup/state'
+import {atoms as a, useTheme} from '#/alf'
+import * as TextField from '#/components/forms/TextField'
+import {At_Stroke2_Corner0_Rounded as At} from '#/components/icons/At'
+import {Check_Stroke2_Corner0_Rounded as Check} from '#/components/icons/Check'
+import {TimesLarge_Stroke2_Corner0_Rounded as Times} from '#/components/icons/Times'
+import {Text} from '#/components/Typography'
+
+export function StepHandle() {
+ const {_} = useLingui()
+ const t = useTheme()
+ const {state, dispatch} = useSignupContext()
+
+ const [validCheck, setValidCheck] = React.useState({
+ handleChars: false,
+ hyphenStartOrEnd: false,
+ frontLength: false,
+ totalLength: true,
+ overall: false,
+ })
+
+ useFocusEffect(
+ React.useCallback(() => {
+ setValidCheck(validateHandle(state.handle, state.userDomain))
+ }, [state.handle, state.userDomain]),
+ )
+
+ const onHandleChange = React.useCallback(
+ (value: string) => {
+ if (state.error) {
+ dispatch({type: 'setError', value: ''})
+ }
+
+ dispatch({
+ type: 'setHandle',
+ value,
+ })
+ },
+ [dispatch, state.error],
+ )
+
+ return (
+
+
+
+
+
+
+
+
+
+ Your full handle will be{' '}
+
+ @{createFullHandle(state.handle, state.userDomain)}
+
+
+
+
+ {state.error ? (
+
+
+ {state.error}
+
+ ) : undefined}
+ {validCheck.hyphenStartOrEnd ? (
+
+
+
+ Only contains letters, numbers, and hyphens
+
+
+ ) : (
+
+
+
+ Doesn't begin or end with a hyphen
+
+
+ )}
+
+
+ {!validCheck.totalLength ? (
+
+ No longer than 253 characters
+
+ ) : (
+
+ At least 3 characters
+
+ )}
+
+
+
+
+ )
+}
+
+function IsValidIcon({valid}: {valid: boolean}) {
+ const t = useTheme()
+ if (!valid) {
+ return
+ }
+ return
+}
diff --git a/src/screens/Signup/StepInfo/Policies.tsx b/src/screens/Signup/StepInfo/Policies.tsx
new file mode 100644
index 0000000000..f25bda274f
--- /dev/null
+++ b/src/screens/Signup/StepInfo/Policies.tsx
@@ -0,0 +1,97 @@
+import React from 'react'
+import {View} from 'react-native'
+import {ComAtprotoServerDescribeServer} from '@atproto/api'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {atoms as a, useTheme} from '#/alf'
+import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
+import {InlineLinkText} from '#/components/Link'
+import {Text} from '#/components/Typography'
+
+export const Policies = ({
+ serviceDescription,
+ needsGuardian,
+ under13,
+}: {
+ serviceDescription: ComAtprotoServerDescribeServer.OutputSchema
+ needsGuardian: boolean
+ under13: boolean
+}) => {
+ const t = useTheme()
+ const {_} = useLingui()
+
+ if (!serviceDescription) {
+ return
+ }
+
+ const tos = validWebLink(serviceDescription.links?.termsOfService)
+ const pp = validWebLink(serviceDescription.links?.privacyPolicy)
+
+ if (!tos && !pp) {
+ return (
+
+
+
+
+
+ This service has not provided terms of service or a privacy policy.
+
+
+
+ )
+ }
+
+ const els = []
+ if (tos) {
+ els.push(
+
+ {_(msg`Terms of Service`)}
+ ,
+ )
+ }
+ if (pp) {
+ els.push(
+
+ {_(msg`Privacy Policy`)}
+ ,
+ )
+ }
+ if (els.length === 2) {
+ els.splice(
+ 1,
+ 0,
+
+ {' '}
+ and{' '}
+ ,
+ )
+ }
+
+ return (
+
+
+ By creating an account you agree to the {els}.
+
+
+ {under13 ? (
+
+ You must be 13 years of age or older to sign up.
+
+ ) : 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.
+
+
+ ) : undefined}
+
+ )
+}
+
+function validWebLink(url?: string): string | undefined {
+ return url && (url.startsWith('http://') || url.startsWith('https://'))
+ ? url
+ : undefined
+}
diff --git a/src/screens/Signup/StepInfo/index.tsx b/src/screens/Signup/StepInfo/index.tsx
new file mode 100644
index 0000000000..d22d1323a7
--- /dev/null
+++ b/src/screens/Signup/StepInfo/index.tsx
@@ -0,0 +1,146 @@
+import React from 'react'
+import {View} from 'react-native'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {logger} from '#/logger'
+import {ScreenTransition} from '#/screens/Login/ScreenTransition'
+import {is13, is18, useSignupContext} from '#/screens/Signup/state'
+import {Policies} from '#/screens/Signup/StepInfo/Policies'
+import {atoms as a} from '#/alf'
+import * as DateField from '#/components/forms/DateField'
+import {FormError} from '#/components/forms/FormError'
+import {HostingProvider} from '#/components/forms/HostingProvider'
+import * as TextField from '#/components/forms/TextField'
+import {Envelope_Stroke2_Corner0_Rounded as Envelope} from '#/components/icons/Envelope'
+import {Lock_Stroke2_Corner0_Rounded as Lock} from '#/components/icons/Lock'
+import {Ticket_Stroke2_Corner0_Rounded as Ticket} from '#/components/icons/Ticket'
+import {Loader} from '#/components/Loader'
+
+function sanitizeDate(date: Date): Date {
+ if (!date || date.toString() === 'Invalid Date') {
+ logger.error(`Create account: handled invalid date for birthDate`, {
+ hasDate: !!date,
+ })
+ return new Date()
+ }
+ return date
+}
+
+export function StepInfo() {
+ const {_} = useLingui()
+ const {state, dispatch} = useSignupContext()
+
+ return (
+
+
+
+
+
+ Hosting provider
+
+
+ dispatch({type: 'setServiceUrl', value: v})
+ }
+ />
+
+ {state.isLoading ? (
+
+
+
+ ) : state.serviceDescription ? (
+ <>
+ {state.serviceDescription.inviteCodeRequired && (
+
+
+ Invite code
+
+
+
+ {
+ dispatch({
+ type: 'setInviteCode',
+ value: value.trim(),
+ })
+ }}
+ label={_(msg`Required for this provider`)}
+ defaultValue={state.inviteCode}
+ autoCapitalize="none"
+ autoComplete="email"
+ keyboardType="email-address"
+ />
+
+
+ )}
+
+
+ Email
+
+
+
+ {
+ dispatch({
+ type: 'setEmail',
+ value: value.trim(),
+ })
+ }}
+ label={_(msg`Enter your email address`)}
+ defaultValue={state.email}
+ autoCapitalize="none"
+ autoComplete="email"
+ keyboardType="email-address"
+ />
+
+
+
+
+ Password
+
+
+
+ {
+ dispatch({
+ type: 'setPassword',
+ value,
+ })
+ }}
+ label={_(msg`Choose your password`)}
+ defaultValue={state.password}
+ secureTextEntry
+ autoComplete="new-password"
+ />
+
+
+
+
+ Your birth date
+
+ {
+ dispatch({
+ type: 'setDateOfBirth',
+ value: sanitizeDate(new Date(date)),
+ })
+ }}
+ label={_(msg`Date of birth`)}
+ accessibilityHint={_(msg`Select your date of birth`)}
+ />
+
+
+ >
+ ) : undefined}
+
+
+ )
+}
diff --git a/src/screens/Signup/index.tsx b/src/screens/Signup/index.tsx
new file mode 100644
index 0000000000..74674b0cbf
--- /dev/null
+++ b/src/screens/Signup/index.tsx
@@ -0,0 +1,228 @@
+import React from 'react'
+import {View} from 'react-native'
+import {LayoutAnimationConfig} from 'react-native-reanimated'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {useAnalytics} from '#/lib/analytics/analytics'
+import {FEEDBACK_FORM_URL} from '#/lib/constants'
+import {logEvent} from '#/lib/statsig/statsig'
+import {createFullHandle} from '#/lib/strings/handles'
+import {useServiceQuery} from '#/state/queries/service'
+import {getAgent} from '#/state/session'
+import {LoggedOutLayout} from '#/view/com/util/layouts/LoggedOutLayout'
+import {
+ initialState,
+ reducer,
+ SignupContext,
+ SignupStep,
+ useSubmitSignup,
+} from '#/screens/Signup/state'
+import {StepCaptcha} from '#/screens/Signup/StepCaptcha'
+import {StepHandle} from '#/screens/Signup/StepHandle'
+import {StepInfo} from '#/screens/Signup/StepInfo'
+import {atoms as a, useBreakpoints, useTheme} from '#/alf'
+import {Button, ButtonText} from '#/components/Button'
+import {Divider} from '#/components/Divider'
+import {InlineLinkText} from '#/components/Link'
+import {Text} from '#/components/Typography'
+
+export function Signup({onPressBack}: {onPressBack: () => void}) {
+ const {_} = useLingui()
+ const t = useTheme()
+ const {screen} = useAnalytics()
+ const [state, dispatch] = React.useReducer(reducer, initialState)
+ const submit = useSubmitSignup({state, dispatch})
+ const {gtMobile} = useBreakpoints()
+
+ const {
+ data: serviceInfo,
+ isFetching,
+ isError,
+ refetch,
+ } = useServiceQuery(state.serviceUrl)
+
+ React.useEffect(() => {
+ screen('CreateAccount')
+ }, [screen])
+
+ React.useEffect(() => {
+ if (isFetching) {
+ dispatch({type: 'setIsLoading', value: true})
+ } else if (!isFetching) {
+ dispatch({type: 'setIsLoading', value: false})
+ }
+ }, [isFetching])
+
+ React.useEffect(() => {
+ if (isError) {
+ dispatch({type: 'setServiceDescription', value: undefined})
+ dispatch({
+ type: 'setError',
+ value: _(
+ msg`Unable to contact your service. Please check your Internet connection.`,
+ ),
+ })
+ } else if (serviceInfo) {
+ dispatch({type: 'setServiceDescription', value: serviceInfo})
+ dispatch({type: 'setError', value: ''})
+ }
+ }, [_, serviceInfo, isError])
+
+ const onNextPress = React.useCallback(async () => {
+ if (state.activeStep === SignupStep.HANDLE) {
+ try {
+ dispatch({type: 'setIsLoading', value: true})
+
+ const res = await getAgent().resolveHandle({
+ handle: createFullHandle(state.handle, state.userDomain),
+ })
+
+ if (res.data.did) {
+ dispatch({
+ type: 'setError',
+ value: _(msg`That handle is already taken.`),
+ })
+ return
+ }
+ } catch (e) {
+ // Don't have to handle
+ } finally {
+ dispatch({type: 'setIsLoading', value: false})
+ }
+ }
+
+ // phoneVerificationRequired is actually whether a captcha is required
+ if (
+ state.activeStep === SignupStep.HANDLE &&
+ !state.serviceDescription?.phoneVerificationRequired
+ ) {
+ submit()
+ return
+ }
+
+ dispatch({type: 'next'})
+ logEvent('signup:nextPressed', {
+ activeStep: state.activeStep,
+ })
+ }, [
+ _,
+ state.activeStep,
+ state.handle,
+ state.serviceDescription?.phoneVerificationRequired,
+ state.userDomain,
+ submit,
+ ])
+
+ const onBackPress = React.useCallback(() => {
+ if (state.activeStep !== SignupStep.INFO) {
+ dispatch({type: 'prev'})
+ } else {
+ onPressBack()
+ }
+ }, [onPressBack, state.activeStep])
+
+ return (
+
+
+
+
+
+
+ Step {state.activeStep + 1} of{' '}
+ {state.serviceDescription &&
+ !state.serviceDescription.phoneVerificationRequired
+ ? '2'
+ : '3'}
+
+
+ {state.activeStep === SignupStep.INFO ? (
+ Your account
+ ) : state.activeStep === SignupStep.HANDLE ? (
+ Your user handle
+ ) : (
+ Complete the challenge
+ )}
+
+
+
+
+
+ {state.activeStep === SignupStep.INFO ? (
+
+ ) : state.activeStep === SignupStep.HANDLE ? (
+
+ ) : (
+
+ )}
+
+
+
+
+
+ {state.activeStep !== SignupStep.CAPTCHA && (
+ <>
+ {isError ? (
+
+ ) : (
+
+ )}
+ >
+ )}
+
+
+
+
+
+
+ Having trouble?{' '}
+
+ Contact support
+
+
+
+
+
+
+
+ )
+}
diff --git a/src/screens/Signup/state.ts b/src/screens/Signup/state.ts
new file mode 100644
index 0000000000..86a144368f
--- /dev/null
+++ b/src/screens/Signup/state.ts
@@ -0,0 +1,320 @@
+import React, {useCallback} from 'react'
+import {LayoutAnimation} from 'react-native'
+import {
+ ComAtprotoServerCreateAccount,
+ ComAtprotoServerDescribeServer,
+} from '@atproto/api'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import * as EmailValidator from 'email-validator'
+
+import {DEFAULT_SERVICE, IS_PROD_SERVICE} from '#/lib/constants'
+import {cleanError} from '#/lib/strings/errors'
+import {createFullHandle, validateHandle} from '#/lib/strings/handles'
+import {getAge} from '#/lib/strings/time'
+import {logger} from '#/logger'
+import {
+ DEFAULT_PROD_FEEDS,
+ usePreferencesSetBirthDateMutation,
+ useSetSaveFeedsMutation,
+} from '#/state/queries/preferences'
+import {useSessionApi} from '#/state/session'
+import {useOnboardingDispatch} from '#/state/shell'
+
+export type ServiceDescription = ComAtprotoServerDescribeServer.OutputSchema
+
+const DEFAULT_DATE = new Date(Date.now() - 60e3 * 60 * 24 * 365 * 20) // default to 20 years ago
+
+export enum SignupStep {
+ INFO,
+ HANDLE,
+ CAPTCHA,
+}
+
+export type SignupState = {
+ hasPrev: boolean
+ canNext: boolean
+ activeStep: SignupStep
+
+ serviceUrl: string
+ serviceDescription?: ServiceDescription
+ userDomain: string
+ dateOfBirth: Date
+ email: string
+ password: string
+ inviteCode: string
+ handle: string
+
+ error: string
+ isLoading: boolean
+}
+
+export type SignupAction =
+ | {type: 'prev'}
+ | {type: 'next'}
+ | {type: 'finish'}
+ | {type: 'setStep'; value: SignupStep}
+ | {type: 'setServiceUrl'; value: string}
+ | {type: 'setServiceDescription'; value: ServiceDescription | undefined}
+ | {type: 'setEmail'; value: string}
+ | {type: 'setPassword'; value: string}
+ | {type: 'setDateOfBirth'; value: Date}
+ | {type: 'setInviteCode'; value: string}
+ | {type: 'setHandle'; value: string}
+ | {type: 'setVerificationCode'; value: string}
+ | {type: 'setError'; value: string}
+ | {type: 'setCanNext'; value: boolean}
+ | {type: 'setIsLoading'; value: boolean}
+
+export const initialState: SignupState = {
+ hasPrev: false,
+ canNext: false,
+ activeStep: SignupStep.INFO,
+
+ serviceUrl: DEFAULT_SERVICE,
+ serviceDescription: undefined,
+ userDomain: '',
+ dateOfBirth: DEFAULT_DATE,
+ email: '',
+ password: '',
+ handle: '',
+ inviteCode: '',
+
+ error: '',
+ isLoading: false,
+}
+
+export function is13(date: Date) {
+ return getAge(date) >= 13
+}
+
+export function is18(date: Date) {
+ return getAge(date) >= 18
+}
+
+export function reducer(s: SignupState, a: SignupAction): SignupState {
+ let next = {...s}
+
+ switch (a.type) {
+ case 'prev': {
+ if (s.activeStep !== SignupStep.INFO) {
+ LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut)
+ next.activeStep--
+ next.error = ''
+ }
+ break
+ }
+ case 'next': {
+ if (s.activeStep !== SignupStep.CAPTCHA) {
+ LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut)
+ next.activeStep++
+ next.error = ''
+ }
+ break
+ }
+ case 'setStep': {
+ next.activeStep = a.value
+ break
+ }
+ case 'setServiceUrl': {
+ next.serviceUrl = a.value
+ break
+ }
+ case 'setServiceDescription': {
+ LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut)
+
+ next.serviceDescription = a.value
+ next.userDomain = a.value?.availableUserDomains[0] ?? ''
+ next.isLoading = false
+ break
+ }
+
+ case 'setEmail': {
+ next.email = a.value
+ break
+ }
+ case 'setPassword': {
+ next.password = a.value
+ break
+ }
+ case 'setDateOfBirth': {
+ next.dateOfBirth = a.value
+ break
+ }
+ case 'setInviteCode': {
+ next.inviteCode = a.value
+ break
+ }
+ case 'setHandle': {
+ next.handle = a.value
+ break
+ }
+ case 'setCanNext': {
+ next.canNext = a.value
+ break
+ }
+ case 'setIsLoading': {
+ next.isLoading = a.value
+ break
+ }
+ case 'setError': {
+ next.error = a.value
+ break
+ }
+ }
+
+ next.hasPrev = next.activeStep !== SignupStep.INFO
+
+ switch (next.activeStep) {
+ case SignupStep.INFO: {
+ const isValidEmail = EmailValidator.validate(next.email)
+ next.canNext =
+ !!(next.email && next.password && next.dateOfBirth) &&
+ (!next.serviceDescription?.inviteCodeRequired || !!next.inviteCode) &&
+ is13(next.dateOfBirth) &&
+ isValidEmail
+ break
+ }
+ case SignupStep.HANDLE: {
+ next.canNext =
+ !!next.handle && validateHandle(next.handle, next.userDomain).overall
+ break
+ }
+ }
+
+ logger.debug('signup', next)
+
+ if (s.activeStep !== next.activeStep) {
+ logger.debug('signup: step changed', {activeStep: next.activeStep})
+ }
+
+ return next
+}
+
+interface IContext {
+ state: SignupState
+ dispatch: React.Dispatch
+}
+export const SignupContext = React.createContext({} as IContext)
+export const useSignupContext = () => React.useContext(SignupContext)
+
+export function useSubmitSignup({
+ state,
+ dispatch,
+}: {
+ state: SignupState
+ dispatch: (action: SignupAction) => void
+}) {
+ const {_} = useLingui()
+ const {createAccount} = useSessionApi()
+ const {mutateAsync: setBirthDate} = usePreferencesSetBirthDateMutation()
+ const {mutate: setSavedFeeds} = useSetSaveFeedsMutation()
+ const onboardingDispatch = useOnboardingDispatch()
+
+ return useCallback(
+ async (verificationCode?: string) => {
+ if (!state.email) {
+ dispatch({type: 'setStep', value: SignupStep.INFO})
+ return dispatch({
+ type: 'setError',
+ value: _(msg`Please enter your email.`),
+ })
+ }
+ if (!EmailValidator.validate(state.email)) {
+ dispatch({type: 'setStep', value: SignupStep.INFO})
+ return dispatch({
+ type: 'setError',
+ value: _(msg`Your email appears to be invalid.`),
+ })
+ }
+ if (!state.password) {
+ dispatch({type: 'setStep', value: SignupStep.INFO})
+ return dispatch({
+ type: 'setError',
+ value: _(msg`Please choose your password.`),
+ })
+ }
+ if (!state.handle) {
+ dispatch({type: 'setStep', value: SignupStep.HANDLE})
+ return dispatch({
+ type: 'setError',
+ value: _(msg`Please choose your handle.`),
+ })
+ }
+ if (
+ state.serviceDescription?.phoneVerificationRequired &&
+ !verificationCode
+ ) {
+ dispatch({type: 'setStep', value: SignupStep.CAPTCHA})
+ return dispatch({
+ type: 'setError',
+ value: _(msg`Please complete the verification captcha.`),
+ })
+ }
+ dispatch({type: 'setError', value: ''})
+ dispatch({type: 'setIsLoading', value: true})
+
+ try {
+ onboardingDispatch({type: 'start'}) // start now to avoid flashing the wrong view
+ await createAccount({
+ service: state.serviceUrl,
+ email: state.email,
+ handle: createFullHandle(state.handle, state.userDomain),
+ password: state.password,
+ inviteCode: state.inviteCode.trim(),
+ verificationCode: verificationCode,
+ })
+ await setBirthDate({birthDate: state.dateOfBirth})
+ if (IS_PROD_SERVICE(state.serviceUrl)) {
+ setSavedFeeds(DEFAULT_PROD_FEEDS)
+ }
+ } catch (e: any) {
+ onboardingDispatch({type: 'skip'}) // undo starting the onboard
+ let errMsg = e.toString()
+ if (e instanceof ComAtprotoServerCreateAccount.InvalidInviteCodeError) {
+ dispatch({
+ type: 'setError',
+ value: _(
+ msg`Invite code not accepted. Check that you input it correctly and try again.`,
+ ),
+ })
+ dispatch({type: 'setStep', value: SignupStep.INFO})
+ return
+ }
+
+ if ([400, 429].includes(e.status)) {
+ logger.warn('Failed to create account', {message: e})
+ } else {
+ logger.error(`Failed to create account (${e.status} status)`, {
+ message: e,
+ })
+ }
+
+ const error = cleanError(errMsg)
+ const isHandleError = error.toLowerCase().includes('handle')
+
+ dispatch({type: 'setIsLoading', value: false})
+ dispatch({type: 'setError', value: cleanError(errMsg)})
+ dispatch({type: 'setStep', value: isHandleError ? 2 : 1})
+ } finally {
+ dispatch({type: 'setIsLoading', value: false})
+ }
+ },
+ [
+ state.email,
+ state.password,
+ state.handle,
+ state.serviceDescription?.phoneVerificationRequired,
+ state.serviceUrl,
+ state.userDomain,
+ state.inviteCode,
+ state.dateOfBirth,
+ dispatch,
+ _,
+ onboardingDispatch,
+ createAccount,
+ setBirthDate,
+ setSavedFeeds,
+ ],
+ )
+}
diff --git a/src/state/cache/post-shadow.ts b/src/state/cache/post-shadow.ts
index 7cf72fae43..6225cbdba0 100644
--- a/src/state/cache/post-shadow.ts
+++ b/src/state/cache/post-shadow.ts
@@ -1,13 +1,14 @@
-import {useEffect, useState, useMemo} from 'react'
-import EventEmitter from 'eventemitter3'
+import {useEffect, useMemo, useState} from 'react'
import {AppBskyFeedDefs} from '@atproto/api'
+import {QueryClient} from '@tanstack/react-query'
+import EventEmitter from 'eventemitter3'
+
import {batchedUpdates} from '#/lib/batchedUpdates'
-import {Shadow, castAsShadow} from './types'
import {findAllPostsInQueryData as findAllPostsInNotifsQueryData} from '../queries/notifications/feed'
import {findAllPostsInQueryData as findAllPostsInFeedQueryData} from '../queries/post-feed'
import {findAllPostsInQueryData as findAllPostsInThreadQueryData} from '../queries/post-thread'
import {findAllPostsInQueryData as findAllPostsInSearchQueryData} from '../queries/search-posts'
-import {queryClient} from 'lib/react-query'
+import {castAsShadow, Shadow} from './types'
export type {Shadow} from './types'
export interface PostShadow {
@@ -93,8 +94,12 @@ function mergeShadow(
})
}
-export function updatePostShadow(uri: string, value: Partial) {
- const cachedPosts = findPostsInCache(uri)
+export function updatePostShadow(
+ queryClient: QueryClient,
+ uri: string,
+ value: Partial,
+) {
+ const cachedPosts = findPostsInCache(queryClient, uri)
for (let post of cachedPosts) {
shadows.set(post, {...shadows.get(post), ...value})
}
@@ -104,6 +109,7 @@ export function updatePostShadow(uri: string, value: Partial) {
}
function* findPostsInCache(
+ queryClient: QueryClient,
uri: string,
): Generator {
for (let post of findAllPostsInFeedQueryData(queryClient, uri)) {
diff --git a/src/state/cache/profile-shadow.ts b/src/state/cache/profile-shadow.ts
index 34fe5995d3..ca791bc9e8 100644
--- a/src/state/cache/profile-shadow.ts
+++ b/src/state/cache/profile-shadow.ts
@@ -1,7 +1,10 @@
-import {useEffect, useState, useMemo} from 'react'
-import EventEmitter from 'eventemitter3'
+import {useEffect, useMemo, useState} from 'react'
import {AppBskyActorDefs} from '@atproto/api'
+import {QueryClient} from '@tanstack/react-query'
+import EventEmitter from 'eventemitter3'
+
import {batchedUpdates} from '#/lib/batchedUpdates'
+import {findAllProfilesInQueryData as findAllProfilesInActorSearchQueryData} from '../queries/actor-search'
import {findAllProfilesInQueryData as findAllProfilesInListMembersQueryData} from '../queries/list-members'
import {findAllProfilesInQueryData as findAllProfilesInMyBlockedAccountsQueryData} from '../queries/my-blocked-accounts'
import {findAllProfilesInQueryData as findAllProfilesInMyMutedAccountsQueryData} from '../queries/my-muted-accounts'
@@ -11,9 +14,7 @@ import {findAllProfilesInQueryData as findAllProfilesInProfileQueryData} from '.
import {findAllProfilesInQueryData as findAllProfilesInProfileFollowersQueryData} from '../queries/profile-followers'
import {findAllProfilesInQueryData as findAllProfilesInProfileFollowsQueryData} from '../queries/profile-follows'
import {findAllProfilesInQueryData as findAllProfilesInSuggestedFollowsQueryData} from '../queries/suggested-follows'
-import {findAllProfilesInQueryData as findAllProfilesInActorSearchQueryData} from '../queries/actor-search'
-import {Shadow, castAsShadow} from './types'
-import {queryClient} from 'lib/react-query'
+import {castAsShadow, Shadow} from './types'
export type {Shadow} from './types'
export interface ProfileShadow {
@@ -58,10 +59,11 @@ export function useProfileShadow<
}
export function updateProfileShadow(
+ queryClient: QueryClient,
did: string,
value: Partial,
) {
- const cachedProfiles = findProfilesInCache(did)
+ const cachedProfiles = findProfilesInCache(queryClient, did)
for (let post of cachedProfiles) {
shadows.set(post, {...shadows.get(post), ...value})
}
@@ -90,6 +92,7 @@ function mergeShadow(
}
function* findProfilesInCache(
+ queryClient: QueryClient,
did: string,
): Generator {
yield* findAllProfilesInListMembersQueryData(queryClient, did)
diff --git a/src/state/dialogs/index.tsx b/src/state/dialogs/index.tsx
index 4cafaa0861..26bb6792fd 100644
--- a/src/state/dialogs/index.tsx
+++ b/src/state/dialogs/index.tsx
@@ -1,20 +1,39 @@
import React from 'react'
-import {DialogControlProps} from '#/components/Dialog'
+import {SharedValue, useSharedValue} from 'react-native-reanimated'
-const DialogContext = React.createContext<{
+import {DialogControlRefProps} from '#/components/Dialog'
+import {Provider as GlobalDialogsProvider} from '#/components/dialogs/Context'
+
+interface IDialogContext {
+ /**
+ * The currently active `useDialogControl` hooks.
+ */
activeDialogs: React.MutableRefObject<
- Map>
+ Map>
>
-}>({
- activeDialogs: {
- current: new Map(),
- },
-})
+ /**
+ * The currently open dialogs, referenced by their IDs, generated from
+ * `useId`.
+ */
+ openDialogs: React.MutableRefObject>
+ /**
+ * The counterpart to `accessibilityViewIsModal` for Android. This property
+ * applies to the parent of all non-modal views, and prevents TalkBack from
+ * navigating within content beneath an open dialog.
+ *
+ * @see https://reactnative.dev/docs/accessibility#importantforaccessibility-android
+ */
+ importantForAccessibility: SharedValue<'auto' | 'no-hide-descendants'>
+}
+
+const DialogContext = React.createContext({} as IDialogContext)
const DialogControlContext = React.createContext<{
- closeAllDialogs(): void
+ closeAllDialogs(): boolean
+ setDialogIsOpen(id: string, isOpen: boolean): void
}>({
- closeAllDialogs: () => {},
+ closeAllDialogs: () => false,
+ setDialogIsOpen: () => {},
})
export function useDialogStateContext() {
@@ -27,17 +46,53 @@ export function useDialogStateControlContext() {
export function Provider({children}: React.PropsWithChildren<{}>) {
const activeDialogs = React.useRef<
- Map>
+ Map>
>(new Map())
+ const openDialogs = React.useRef>(new Set())
+ const importantForAccessibility = useSharedValue<
+ 'auto' | 'no-hide-descendants'
+ >('auto')
+
const closeAllDialogs = React.useCallback(() => {
- activeDialogs.current.forEach(dialog => dialog.current.close())
+ openDialogs.current.forEach(id => {
+ const dialog = activeDialogs.current.get(id)
+ if (dialog) dialog.current.close()
+ })
+ return openDialogs.current.size > 0
}, [])
- const context = React.useMemo(() => ({activeDialogs}), [])
- const controls = React.useMemo(() => ({closeAllDialogs}), [closeAllDialogs])
+
+ const setDialogIsOpen = React.useCallback(
+ (id: string, isOpen: boolean) => {
+ if (isOpen) {
+ openDialogs.current.add(id)
+ importantForAccessibility.value = 'no-hide-descendants'
+ } else {
+ openDialogs.current.delete(id)
+ if (openDialogs.current.size < 1) {
+ importantForAccessibility.value = 'auto'
+ }
+ }
+ },
+ [importantForAccessibility],
+ )
+
+ const context = React.useMemo(
+ () => ({
+ activeDialogs,
+ openDialogs,
+ importantForAccessibility,
+ }),
+ [importantForAccessibility, activeDialogs, openDialogs],
+ )
+ const controls = React.useMemo(
+ () => ({closeAllDialogs, setDialogIsOpen}),
+ [closeAllDialogs, setDialogIsOpen],
+ )
+
return (
- {children}
+ {children}
)
diff --git a/src/state/modals/index.tsx b/src/state/modals/index.tsx
index 691add0050..cc0f9c8b83 100644
--- a/src/state/modals/index.tsx
+++ b/src/state/modals/index.tsx
@@ -1,57 +1,18 @@
import React from 'react'
-import {AppBskyActorDefs, AppBskyGraphDefs, ModerationUI} from '@atproto/api'
-import {StyleProp, ViewStyle} from 'react-native'
import {Image as RNImage} from 'react-native-image-crop-picker'
+import {AppBskyActorDefs, AppBskyGraphDefs} from '@atproto/api'
-import {ImageModel} from '#/state/models/media/image'
-import {GalleryModel} from '#/state/models/media/gallery'
import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback'
-import {EmbedPlayerSource} from '#/lib/strings/embed-player'
+import {GalleryModel} from '#/state/models/media/gallery'
+import {ImageModel} from '#/state/models/media/image'
import {ThreadgateSetting} from '../queries/threadgate'
-export interface ConfirmModal {
- name: 'confirm'
- title: string
- message: string | (() => JSX.Element)
- onPressConfirm: () => void | Promise
- onPressCancel?: () => void | Promise
- confirmBtnText?: string
- confirmBtnStyle?: StyleProp
- cancelBtnText?: string
-}
-
export interface EditProfileModal {
name: 'edit-profile'
profile: AppBskyActorDefs.ProfileViewDetailed
onUpdate?: () => void
}
-export interface ModerationDetailsModal {
- name: 'moderation-details'
- context: 'account' | 'content'
- moderation: ModerationUI
-}
-
-export type ReportModal = {
- name: 'report'
-} & (
- | {
- uri: string
- cid: string
- }
- | {did: string}
-)
-
-export type AppealLabelModal = {
- name: 'appeal-label'
-} & (
- | {
- uri: string
- cid: string
- }
- | {did: string}
-)
-
export interface CreateOrEditListModal {
name: 'create-or-edit-list'
purpose?: string
@@ -135,10 +96,6 @@ export interface AddAppPasswordModal {
name: 'add-app-password'
}
-export interface ContentFilteringSettingsModal {
- name: 'content-filtering-settings'
-}
-
export interface ContentLanguagesSettingsModal {
name: 'content-languages-settings'
}
@@ -147,10 +104,6 @@ export interface PostLanguagesSettingsModal {
name: 'post-languages-settings'
}
-export interface BirthDateSettingsModal {
- name: 'birth-date-settings'
-}
-
export interface VerifyEmailModal {
name: 'verify-email'
showReminder?: boolean
@@ -164,20 +117,11 @@ export interface ChangePasswordModal {
name: 'change-password'
}
-export interface SwitchAccountModal {
- name: 'switch-account'
-}
-
export interface LinkWarningModal {
name: 'link-warning'
text: string
href: string
-}
-
-export interface EmbedConsentModal {
- name: 'embed-consent'
- source: EmbedPlayerSource
- onAccept: () => void
+ share?: boolean
}
export interface InAppBrowserConsentModal {
@@ -191,22 +135,14 @@ export type Modal =
| ChangeHandleModal
| DeleteAccountModal
| EditProfileModal
- | BirthDateSettingsModal
| VerifyEmailModal
| ChangeEmailModal
| ChangePasswordModal
- | SwitchAccountModal
// Curation
- | ContentFilteringSettingsModal
| ContentLanguagesSettingsModal
| PostLanguagesSettingsModal
- // Moderation
- | ModerationDetailsModal
- | ReportModal
- | AppealLabelModal
-
// Lists
| CreateOrEditListModal
| UserAddRemoveListsModal
@@ -225,9 +161,7 @@ export type Modal =
| InviteCodesModal
// Generic
- | ConfirmModal
| LinkWarningModal
- | EmbedConsentModal
| InAppBrowserConsentModal
const ModalContext = React.createContext<{
diff --git a/src/state/models/media/gallery.ts b/src/state/models/media/gallery.ts
index 04023bf820..eac8fac1fb 100644
--- a/src/state/models/media/gallery.ts
+++ b/src/state/models/media/gallery.ts
@@ -1,14 +1,25 @@
-import {makeAutoObservable, runInAction} from 'mobx'
-import {ImageModel} from './image'
import {Image as RNImage} from 'react-native-image-crop-picker'
-import {openPicker} from 'lib/media/picker'
+import {makeAutoObservable, runInAction} from 'mobx'
+
import {getImageDim} from 'lib/media/manip'
+import {openPicker} from 'lib/media/picker'
+import {ImageModel} from './image'
+
+interface InitialImageUri {
+ uri: string
+ width: number
+ height: number
+}
export class GalleryModel {
images: ImageModel[] = []
- constructor() {
+ constructor(uris?: {uri: string; width: number; height: number}[]) {
makeAutoObservable(this)
+
+ if (uris) {
+ this.addFromUris(uris)
+ }
}
get isEmpty() {
@@ -23,7 +34,7 @@ export class GalleryModel {
return this.images.some(image => image.altText.trim() === '')
}
- async add(image_: Omit) {
+ *add(image_: Omit) {
if (this.size >= 4) {
return
}
@@ -86,4 +97,15 @@ export class GalleryModel {
}),
)
}
+
+ async addFromUris(uris: InitialImageUri[]) {
+ for (const uriObj of uris) {
+ this.add({
+ mime: 'image/jpeg',
+ height: uriObj.height,
+ width: uriObj.width,
+ path: uriObj.uri,
+ })
+ }
+ }
}
diff --git a/src/state/persisted/__tests__/migrate.test.ts b/src/state/persisted/__tests__/migrate.test.ts
index e4b55d5da6..61250bd884 100644
--- a/src/state/persisted/__tests__/migrate.test.ts
+++ b/src/state/persisted/__tests__/migrate.test.ts
@@ -1,11 +1,11 @@
-import {jest, expect, test, afterEach} from '@jest/globals'
+import {afterEach, expect, jest, test} from '@jest/globals'
import AsyncStorage from '@react-native-async-storage/async-storage'
-import {defaults, schema} from '#/state/persisted/schema'
-import {transform, migrate} from '#/state/persisted/legacy'
-import * as store from '#/state/persisted/store'
import {logger} from '#/logger'
import * as fixtures from '#/state/persisted/__tests__/fixtures'
+import {migrate, transform} from '#/state/persisted/legacy'
+import {defaults, schema} from '#/state/persisted/schema'
+import * as store from '#/state/persisted/store'
const write = jest.mocked(store.write)
const read = jest.mocked(store.read)
@@ -26,7 +26,7 @@ test('migrate: fresh install', async () => {
expect(AsyncStorage.getItem).toHaveBeenCalledWith('root')
expect(read).toHaveBeenCalledTimes(1)
- expect(logger.info).toHaveBeenCalledWith(
+ expect(logger.debug).toHaveBeenCalledWith(
'persisted state: no migration needed',
)
})
@@ -38,7 +38,7 @@ test('migrate: fresh install, existing new storage', async () => {
expect(AsyncStorage.getItem).toHaveBeenCalledWith('root')
expect(read).toHaveBeenCalledTimes(1)
- expect(logger.info).toHaveBeenCalledWith(
+ expect(logger.debug).toHaveBeenCalledWith(
'persisted state: no migration needed',
)
})
@@ -68,7 +68,7 @@ test('migrate: has legacy data', async () => {
await migrate()
expect(write).toHaveBeenCalledWith(transform(fixtures.LEGACY_DATA_DUMP))
- expect(logger.info).toHaveBeenCalledWith(
+ expect(logger.debug).toHaveBeenCalledWith(
'persisted state: migrated legacy storage',
)
})
diff --git a/src/state/persisted/index.ts b/src/state/persisted/index.ts
index 2f34c2dbff..4e0aafd822 100644
--- a/src/state/persisted/index.ts
+++ b/src/state/persisted/index.ts
@@ -1,11 +1,12 @@
import EventEmitter from 'eventemitter3'
+
+import BroadcastChannel from '#/lib/broadcast'
import {logger} from '#/logger'
-import {defaults, Schema} from '#/state/persisted/schema'
import {migrate} from '#/state/persisted/legacy'
+import {defaults, Schema} from '#/state/persisted/schema'
import * as store from '#/state/persisted/store'
-import BroadcastChannel from '#/lib/broadcast'
-export type {Schema, PersistedAccount} from '#/state/persisted/schema'
+export type {PersistedAccount, Schema} from '#/state/persisted/schema'
export {defaults} from '#/state/persisted/schema'
const broadcast = new BroadcastChannel('BSKY_BROADCAST_CHANNEL')
@@ -19,7 +20,7 @@ const _emitter = new EventEmitter()
* the Provider.
*/
export async function init() {
- logger.info('persisted state: initializing')
+ logger.debug('persisted state: initializing')
broadcast.onmessage = onBroadcastMessage
@@ -27,11 +28,11 @@ export async function init() {
await migrate() // migrate old store
const stored = await store.read() // check for new store
if (!stored) {
- logger.info('persisted state: initializing default storage')
+ logger.debug('persisted state: initializing default storage')
await store.write(defaults) // opt: init new store
}
_state = stored || defaults // return new store
- logger.log('persisted state: initialized')
+ logger.debug('persisted state: initialized')
} catch (e) {
logger.error('persisted state: failed to load root state from storage', {
message: e,
diff --git a/src/state/persisted/legacy.ts b/src/state/persisted/legacy.ts
index cce080c84c..ca7967cd2e 100644
--- a/src/state/persisted/legacy.ts
+++ b/src/state/persisted/legacy.ts
@@ -2,7 +2,7 @@ import AsyncStorage from '@react-native-async-storage/async-storage'
import {logger} from '#/logger'
import {defaults, Schema, schema} from '#/state/persisted/schema'
-import {write, read} from '#/state/persisted/store'
+import {read, write} from '#/state/persisted/store'
/**
* The shape of the serialized data from our legacy Mobx store.
@@ -113,6 +113,7 @@ export function transform(legacy: Partial): Schema {
externalEmbeds: defaults.externalEmbeds,
lastSelectedHomeFeed: defaults.lastSelectedHomeFeed,
pdsAddressHistory: defaults.pdsAddressHistory,
+ disableHaptics: defaults.disableHaptics,
}
}
@@ -121,7 +122,7 @@ export function transform(legacy: Partial): Schema {
* local storage AND old storage exists.
*/
export async function migrate() {
- logger.info('persisted state: check need to migrate')
+ logger.debug('persisted state: check need to migrate')
try {
const rawLegacyData = await AsyncStorage.getItem(
@@ -131,7 +132,7 @@ export async function migrate() {
const alreadyMigrated = Boolean(newData)
if (!alreadyMigrated && rawLegacyData) {
- logger.info('persisted state: migrating legacy storage')
+ logger.debug('persisted state: migrating legacy storage')
const legacyData = JSON.parse(rawLegacyData)
const newData = transform(legacyData)
@@ -139,14 +140,14 @@ export async function migrate() {
if (validate.success) {
await write(newData)
- logger.info('persisted state: migrated legacy storage')
+ logger.debug('persisted state: migrated legacy storage')
} else {
logger.error('persisted state: legacy data failed validation', {
message: validate.error,
})
}
} else {
- logger.info('persisted state: no migration needed')
+ logger.debug('persisted state: no migration needed')
}
} catch (e: any) {
logger.error(e, {
diff --git a/src/state/persisted/schema.ts b/src/state/persisted/schema.ts
index 0aefaa4744..67e082a95d 100644
--- a/src/state/persisted/schema.ts
+++ b/src/state/persisted/schema.ts
@@ -1,4 +1,5 @@
import {z} from 'zod'
+
import {deviceLocales} from '#/platform/detection'
const externalEmbedOptions = ['show', 'hide'] as const
@@ -58,6 +59,7 @@ export const schema = z.object({
useInAppBrowser: z.boolean().optional(),
lastSelectedHomeFeed: z.string().optional(),
pdsAddressHistory: z.array(z.string()).optional(),
+ disableHaptics: z.boolean().optional(),
})
export type Schema = z.infer
@@ -93,4 +95,5 @@ export const defaults: Schema = {
useInAppBrowser: undefined,
lastSelectedHomeFeed: undefined,
pdsAddressHistory: [],
+ disableHaptics: false,
}
diff --git a/src/state/preferences/disable-haptics.tsx b/src/state/preferences/disable-haptics.tsx
new file mode 100644
index 0000000000..af2c55a182
--- /dev/null
+++ b/src/state/preferences/disable-haptics.tsx
@@ -0,0 +1,42 @@
+import React from 'react'
+
+import * as persisted from '#/state/persisted'
+
+type StateContext = boolean
+type SetContext = (v: boolean) => void
+
+const stateContext = React.createContext(
+ Boolean(persisted.defaults.disableHaptics),
+)
+const setContext = React.createContext((_: boolean) => {})
+
+export function Provider({children}: {children: React.ReactNode}) {
+ const [state, setState] = React.useState(
+ Boolean(persisted.get('disableHaptics')),
+ )
+
+ const setStateWrapped = React.useCallback(
+ (hapticsEnabled: persisted.Schema['disableHaptics']) => {
+ setState(Boolean(hapticsEnabled))
+ persisted.write('disableHaptics', hapticsEnabled)
+ },
+ [setState],
+ )
+
+ React.useEffect(() => {
+ return persisted.onUpdate(() => {
+ setState(Boolean(persisted.get('disableHaptics')))
+ })
+ }, [setStateWrapped])
+
+ return (
+
+
+ {children}
+
+
+ )
+}
+
+export const useHapticsDisabled = () => React.useContext(stateContext)
+export const useSetHapticsDisabled = () => React.useContext(setContext)
diff --git a/src/state/preferences/in-app-browser.tsx b/src/state/preferences/in-app-browser.tsx
index 4f033db659..8be7e4a101 100644
--- a/src/state/preferences/in-app-browser.tsx
+++ b/src/state/preferences/in-app-browser.tsx
@@ -1,10 +1,16 @@
import React from 'react'
-import * as persisted from '#/state/persisted'
import {Linking} from 'react-native'
import * as WebBrowser from 'expo-web-browser'
+
import {isNative} from '#/platform/detection'
-import {useModalControls} from '../modals'
+import * as persisted from '#/state/persisted'
import {usePalette} from 'lib/hooks/usePalette'
+import {
+ createBskyAppAbsoluteUrl,
+ isBskyRSSUrl,
+ isRelativeUrl,
+} from 'lib/strings/url-helpers'
+import {useModalControls} from '../modals'
type StateContext = persisted.Schema['useInAppBrowser']
type SetContext = (v: persisted.Schema['useInAppBrowser']) => void
@@ -57,6 +63,10 @@ export function useOpenLink() {
const openLink = React.useCallback(
(url: string, override?: boolean) => {
+ if (isBskyRSSUrl(url) && isRelativeUrl(url)) {
+ url = createBskyAppAbsoluteUrl(url)
+ }
+
if (isNative && !url.startsWith('mailto:')) {
if (override === undefined && enabled === undefined) {
openModal({
diff --git a/src/state/preferences/index.tsx b/src/state/preferences/index.tsx
index a442b763ad..804d0fc310 100644
--- a/src/state/preferences/index.tsx
+++ b/src/state/preferences/index.tsx
@@ -1,11 +1,12 @@
import React from 'react'
-import {Provider as LanguagesProvider} from './languages'
+
import {Provider as AltTextRequiredProvider} from '../preferences/alt-text-required'
import {Provider as HiddenPostsProvider} from '../preferences/hidden-posts'
+import {Provider as DisableHapticsProvider} from './disable-haptics'
import {Provider as ExternalEmbedsProvider} from './external-embeds-prefs'
import {Provider as InAppBrowserProvider} from './in-app-browser'
+import {Provider as LanguagesProvider} from './languages'
-export {useLanguagePrefs, useLanguagePrefsApi} from './languages'
export {
useRequireAltTextEnabled,
useSetRequireAltTextEnabled,
@@ -15,6 +16,8 @@ export {
useSetExternalEmbedPref,
} from './external-embeds-prefs'
export * from './hidden-posts'
+export {useLabelDefinitions} from './label-defs'
+export {useLanguagePrefs, useLanguagePrefsApi} from './languages'
export function Provider({children}: React.PropsWithChildren<{}>) {
return (
@@ -22,7 +25,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
- {children}
+
+ {children}
+
diff --git a/src/state/preferences/label-defs.tsx b/src/state/preferences/label-defs.tsx
new file mode 100644
index 0000000000..ecd15bc552
--- /dev/null
+++ b/src/state/preferences/label-defs.tsx
@@ -0,0 +1,26 @@
+import React from 'react'
+import {AppBskyLabelerDefs, InterpretedLabelValueDefinition} from '@atproto/api'
+
+import {useLabelDefinitionsQuery} from '../queries/preferences'
+
+interface StateContext {
+ labelDefs: Record
+ labelers: AppBskyLabelerDefs.LabelerViewDetailed[]
+}
+
+const stateContext = React.createContext({
+ labelDefs: {},
+ labelers: [],
+})
+
+export function Provider({children}: React.PropsWithChildren<{}>) {
+ const {labelDefs, labelers} = useLabelDefinitionsQuery()
+
+ const state = {labelDefs, labelers}
+
+ return {children}
+}
+
+export function useLabelDefinitions() {
+ return React.useContext(stateContext)
+}
diff --git a/src/state/queries/actor-autocomplete.ts b/src/state/queries/actor-autocomplete.ts
index 3159ad7aaf..10bc951c1a 100644
--- a/src/state/queries/actor-autocomplete.ts
+++ b/src/state/queries/actor-autocomplete.ts
@@ -1,24 +1,22 @@
import React from 'react'
-import {AppBskyActorDefs, ModerationOpts, moderateProfile} from '@atproto/api'
+import {AppBskyActorDefs, moderateProfile, ModerationOpts} from '@atproto/api'
import {useQuery, useQueryClient} from '@tanstack/react-query'
+import {isJustAMute} from '#/lib/moderation'
+import {isInvalidHandle} from '#/lib/strings/handles'
import {logger} from '#/logger'
-import {getAgent} from '#/state/session'
-import {useMyFollowsQuery} from '#/state/queries/my-follows'
import {STALE} from '#/state/queries'
-import {
- DEFAULT_LOGGED_OUT_PREFERENCES,
- getModerationOpts,
- useModerationOpts,
-} from './preferences'
-import {isInvalidHandle} from '#/lib/strings/handles'
+import {useMyFollowsQuery} from '#/state/queries/my-follows'
+import {getAgent} from '#/state/session'
+import {DEFAULT_LOGGED_OUT_PREFERENCES, useModerationOpts} from './preferences'
-const DEFAULT_MOD_OPTS = getModerationOpts({
- userDid: '',
- preferences: DEFAULT_LOGGED_OUT_PREFERENCES,
-})
+const DEFAULT_MOD_OPTS = {
+ userDid: undefined,
+ prefs: DEFAULT_LOGGED_OUT_PREFERENCES.moderationPrefs,
+}
-export const RQKEY = (prefix: string) => ['actor-autocomplete', prefix]
+const RQKEY_ROOT = 'actor-autocomplete'
+export const RQKEY = (prefix: string) => [RQKEY_ROOT, prefix]
export function useActorAutocompleteQuery(prefix: string) {
const {data: follows, isFetching} = useMyFollowsQuery()
@@ -32,7 +30,7 @@ export function useActorAutocompleteQuery(prefix: string) {
async queryFn() {
const res = prefix
? await getAgent().searchActorsTypeahead({
- term: prefix,
+ q: prefix,
limit: 8,
})
: undefined
@@ -70,7 +68,7 @@ export function useActorAutocompleteFn() {
queryKey: RQKEY(query || ''),
queryFn: () =>
getAgent().searchActorsTypeahead({
- term: query,
+ q: query,
limit,
}),
})
@@ -104,18 +102,12 @@ function computeSuggestions(
}
for (const item of searched) {
if (!items.find(item2 => item2.handle === item.handle)) {
- items.push({
- did: item.did,
- handle: item.handle,
- displayName: item.displayName,
- avatar: item.avatar,
- labels: item.labels,
- })
+ items.push(item)
}
}
return items.filter(profile => {
- const mod = moderateProfile(profile, moderationOpts)
- return !mod.account.filter && mod.account.cause?.type !== 'muted'
+ const modui = moderateProfile(profile, moderationOpts).ui('profileList')
+ return !modui.filter || isJustAMute(modui)
})
}
diff --git a/src/state/queries/actor-search.ts b/src/state/queries/actor-search.ts
index f72511548c..eb065b6cf5 100644
--- a/src/state/queries/actor-search.ts
+++ b/src/state/queries/actor-search.ts
@@ -1,22 +1,29 @@
import {AppBskyActorDefs} from '@atproto/api'
import {QueryClient, useQuery} from '@tanstack/react-query'
-import {getAgent} from '#/state/session'
import {STALE} from '#/state/queries'
+import {getAgent} from '#/state/session'
-export const RQKEY = (prefix: string) => ['actor-search', prefix]
+const RQKEY_ROOT = 'actor-search'
+export const RQKEY = (query: string) => [RQKEY_ROOT, query]
-export function useActorSearch(prefix: string) {
+export function useActorSearch({
+ query,
+ enabled,
+}: {
+ query: string
+ enabled?: boolean
+}) {
return useQuery({
staleTime: STALE.MINUTES.ONE,
- queryKey: RQKEY(prefix || ''),
+ queryKey: RQKEY(query || ''),
async queryFn() {
const res = await getAgent().searchActors({
- term: prefix,
+ q: query,
})
return res.data.actors
},
- enabled: !!prefix,
+ enabled: enabled && !!query,
})
}
@@ -26,7 +33,7 @@ export function* findAllProfilesInQueryData(
) {
const queryDatas = queryClient.getQueriesData(
{
- queryKey: ['actor-search'],
+ queryKey: [RQKEY_ROOT],
},
)
for (const [_queryKey, queryData] of queryDatas) {
diff --git a/src/state/queries/app-passwords.ts b/src/state/queries/app-passwords.ts
index 014244f01c..ddfe6643dd 100644
--- a/src/state/queries/app-passwords.ts
+++ b/src/state/queries/app-passwords.ts
@@ -1,10 +1,11 @@
import {ComAtprotoServerCreateAppPassword} from '@atproto/api'
-import {useQuery, useQueryClient, useMutation} from '@tanstack/react-query'
+import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'
import {STALE} from '#/state/queries'
import {getAgent} from '../session'
-export const RQKEY = () => ['app-passwords']
+const RQKEY_ROOT = 'app-passwords'
+export const RQKEY = () => [RQKEY_ROOT]
export function useAppPasswordsQuery() {
return useQuery({
diff --git a/src/state/queries/feed.ts b/src/state/queries/feed.ts
index 67294ece27..c56912491a 100644
--- a/src/state/queries/feed.ts
+++ b/src/state/queries/feed.ts
@@ -1,27 +1,24 @@
-import React from 'react'
import {
- useQuery,
- useInfiniteQuery,
- InfiniteData,
- QueryKey,
- useMutation,
- useQueryClient,
-} from '@tanstack/react-query'
-import {
- AtUri,
- RichText,
AppBskyFeedDefs,
AppBskyGraphDefs,
AppBskyUnspeccedGetPopularFeedGenerators,
+ AtUri,
+ RichText,
} from '@atproto/api'
+import {
+ InfiniteData,
+ QueryKey,
+ useInfiniteQuery,
+ useMutation,
+ useQuery,
+} from '@tanstack/react-query'
-import {logger} from '#/logger'
-import {router} from '#/routes'
import {sanitizeDisplayName} from '#/lib/strings/display-names'
import {sanitizeHandle} from '#/lib/strings/handles'
-import {getAgent} from '#/state/session'
-import {usePreferencesQuery} from '#/state/queries/preferences'
import {STALE} from '#/state/queries'
+import {usePreferencesQuery} from '#/state/queries/preferences'
+import {getAgent} from '#/state/session'
+import {router} from '#/routes'
export type FeedSourceFeedInfo = {
type: 'feed'
@@ -59,8 +56,9 @@ export type FeedSourceListInfo = {
export type FeedSourceInfo = FeedSourceFeedInfo | FeedSourceListInfo
+const feedSourceInfoQueryKeyRoot = 'getFeedSourceInfo'
export const feedSourceInfoQueryKey = ({uri}: {uri: string}) => [
- 'getFeedSourceInfo',
+ feedSourceInfoQueryKeyRoot,
uri,
]
@@ -219,83 +217,61 @@ const FOLLOWING_FEED_STUB: FeedSourceInfo = {
likeUri: '',
}
-export function usePinnedFeedsInfos(): {
- feeds: FeedSourceInfo[]
- hasPinnedCustom: boolean
- isLoading: boolean
-} {
- const queryClient = useQueryClient()
- const [tabs, setTabs] = React.useState([
- FOLLOWING_FEED_STUB,
- ])
- const [isLoading, setLoading] = React.useState(true)
- const {data: preferences} = usePreferencesQuery()
+const pinnedFeedInfosQueryKeyRoot = 'pinnedFeedsInfos'
- const hasPinnedCustom = React.useMemo(() => {
- return tabs.some(tab => tab !== FOLLOWING_FEED_STUB)
- }, [tabs])
+export function usePinnedFeedsInfos() {
+ const {data: preferences, isLoading: isLoadingPrefs} = usePreferencesQuery()
+ const pinnedUris = preferences?.feeds?.pinned ?? []
- React.useEffect(() => {
- if (!preferences?.feeds?.pinned) return
- const uris = preferences.feeds.pinned
-
- async function fetchFeedInfo() {
- const reqs = []
-
- for (const uri of uris) {
- const cached = queryClient.getQueryData(
- feedSourceInfoQueryKey({uri}),
- )
-
- if (cached) {
- reqs.push(cached)
- } else {
- reqs.push(
- (async () => {
- // these requests can fail, need to filter those out
- try {
- return await queryClient.fetchQuery({
- staleTime: STALE.SECONDS.FIFTEEN,
- queryKey: feedSourceInfoQueryKey({uri}),
- queryFn: async () => {
- const type = getFeedTypeFromUri(uri)
+ return useQuery({
+ staleTime: STALE.INFINITY,
+ enabled: !isLoadingPrefs,
+ queryKey: [pinnedFeedInfosQueryKeyRoot, pinnedUris.join(',')],
+ queryFn: async () => {
+ let resolved = new Map()
+
+ // Get all feeds. We can do this in a batch.
+ const feedUris = pinnedUris.filter(
+ uri => getFeedTypeFromUri(uri) === 'feed',
+ )
+ let feedsPromise = Promise.resolve()
+ if (feedUris.length > 0) {
+ feedsPromise = getAgent()
+ .app.bsky.feed.getFeedGenerators({
+ feeds: feedUris,
+ })
+ .then(res => {
+ for (let feedView of res.data.feeds) {
+ resolved.set(feedView.uri, hydrateFeedGenerator(feedView))
+ }
+ })
+ }
- if (type === 'feed') {
- const res =
- await getAgent().app.bsky.feed.getFeedGenerator({
- feed: uri,
- })
- return hydrateFeedGenerator(res.data.view)
- } else {
- const res = await getAgent().app.bsky.graph.getList({
- list: uri,
- limit: 1,
- })
- return hydrateList(res.data.list)
- }
- },
- })
- } catch (e) {
- // expected failure
- logger.info(`usePinnedFeedsInfos: failed to fetch ${uri}`, {
- error: e,
- })
- }
- })(),
- )
+ // Get all lists. This currently has to be done individually.
+ const listUris = pinnedUris.filter(
+ uri => getFeedTypeFromUri(uri) === 'list',
+ )
+ const listsPromises = listUris.map(listUri =>
+ getAgent()
+ .app.bsky.graph.getList({
+ list: listUri,
+ limit: 1,
+ })
+ .then(res => {
+ const listView = res.data.list
+ resolved.set(listView.uri, hydrateList(listView))
+ }),
+ )
+
+ // The returned result will have the original order.
+ const result = [FOLLOWING_FEED_STUB]
+ await Promise.allSettled([feedsPromise, ...listsPromises])
+ for (let pinnedUri of pinnedUris) {
+ if (resolved.has(pinnedUri)) {
+ result.push(resolved.get(pinnedUri))
}
}
-
- const views = (await Promise.all(reqs)).filter(
- Boolean,
- ) as FeedSourceInfo[]
-
- setTabs([FOLLOWING_FEED_STUB].concat(views))
- setLoading(false)
- }
-
- fetchFeedInfo()
- }, [queryClient, setTabs, preferences?.feeds?.pinned])
-
- return {feeds: tabs, hasPinnedCustom, isLoading}
+ return result
+ },
+ })
}
diff --git a/src/state/queries/handle.ts b/src/state/queries/handle.ts
index d7c4116999..ddeb35ce7b 100644
--- a/src/state/queries/handle.ts
+++ b/src/state/queries/handle.ts
@@ -1,11 +1,16 @@
import React from 'react'
-import {useQueryClient, useMutation} from '@tanstack/react-query'
+import {useMutation, useQueryClient} from '@tanstack/react-query'
-import {getAgent} from '#/state/session'
import {STALE} from '#/state/queries'
+import {getAgent} from '#/state/session'
-const fetchHandleQueryKey = (handleOrDid: string) => ['handle', handleOrDid]
-const fetchDidQueryKey = (handleOrDid: string) => ['did', handleOrDid]
+const handleQueryKeyRoot = 'handle'
+const fetchHandleQueryKey = (handleOrDid: string) => [
+ handleQueryKeyRoot,
+ handleOrDid,
+]
+const didQueryKeyRoot = 'did'
+const fetchDidQueryKey = (handleOrDid: string) => [didQueryKeyRoot, handleOrDid]
export function useFetchHandle() {
const queryClient = useQueryClient()
diff --git a/src/state/queries/invites.ts b/src/state/queries/invites.ts
index 9ae9c707f4..d5d6ecf97e 100644
--- a/src/state/queries/invites.ts
+++ b/src/state/queries/invites.ts
@@ -1,14 +1,16 @@
import {ComAtprotoServerDefs} from '@atproto/api'
import {useQuery} from '@tanstack/react-query'
-import {getAgent} from '#/state/session'
-import {STALE} from '#/state/queries'
import {cleanError} from '#/lib/strings/errors'
+import {STALE} from '#/state/queries'
+import {getAgent} from '#/state/session'
function isInviteAvailable(invite: ComAtprotoServerDefs.InviteCode): boolean {
return invite.available - invite.uses.length > 0 && !invite.disabled
}
+const inviteCodesQueryKeyRoot = 'inviteCodes'
+
export type InviteCodesQueryResponse = Exclude<
ReturnType['data'],
undefined
@@ -16,7 +18,7 @@ export type InviteCodesQueryResponse = Exclude<
export function useInviteCodesQuery() {
return useQuery({
staleTime: STALE.MINUTES.FIVE,
- queryKey: ['inviteCodes'],
+ queryKey: [inviteCodesQueryKeyRoot],
queryFn: async () => {
const res = await getAgent()
.com.atproto.server.getAccountInviteCodes({})
diff --git a/src/state/queries/labeler.ts b/src/state/queries/labeler.ts
new file mode 100644
index 0000000000..78301eb0df
--- /dev/null
+++ b/src/state/queries/labeler.ts
@@ -0,0 +1,97 @@
+import {AppBskyLabelerDefs} from '@atproto/api'
+import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'
+import {z} from 'zod'
+
+import {labelersDetailedInfoQueryKeyRoot} from '#/lib/react-query'
+import {STALE} from '#/state/queries'
+import {preferencesQueryKey} from '#/state/queries/preferences'
+import {getAgent} from '#/state/session'
+
+const labelerInfoQueryKeyRoot = 'labeler-info'
+export const labelerInfoQueryKey = (did: string) => [
+ labelerInfoQueryKeyRoot,
+ did,
+]
+
+const labelersInfoQueryKeyRoot = 'labelers-info'
+export const labelersInfoQueryKey = (dids: string[]) => [
+ labelersInfoQueryKeyRoot,
+ dids.slice().sort(),
+]
+
+export const labelersDetailedInfoQueryKey = (dids: string[]) => [
+ labelersDetailedInfoQueryKeyRoot,
+ dids,
+]
+
+export function useLabelerInfoQuery({
+ did,
+ enabled,
+}: {
+ did?: string
+ enabled?: boolean
+}) {
+ return useQuery({
+ enabled: !!did && enabled !== false,
+ queryKey: labelerInfoQueryKey(did as string),
+ queryFn: async () => {
+ const res = await getAgent().app.bsky.labeler.getServices({
+ dids: [did as string],
+ detailed: true,
+ })
+ return res.data.views[0] as AppBskyLabelerDefs.LabelerViewDetailed
+ },
+ })
+}
+
+export function useLabelersInfoQuery({dids}: {dids: string[]}) {
+ return useQuery({
+ enabled: !!dids.length,
+ queryKey: labelersInfoQueryKey(dids),
+ queryFn: async () => {
+ const res = await getAgent().app.bsky.labeler.getServices({dids})
+ return res.data.views as AppBskyLabelerDefs.LabelerView[]
+ },
+ })
+}
+
+export function useLabelersDetailedInfoQuery({dids}: {dids: string[]}) {
+ return useQuery({
+ enabled: !!dids.length,
+ queryKey: labelersDetailedInfoQueryKey(dids),
+ gcTime: 1000 * 60 * 60 * 6, // 6 hours
+ staleTime: STALE.MINUTES.ONE,
+ queryFn: async () => {
+ const res = await getAgent().app.bsky.labeler.getServices({
+ dids,
+ detailed: true,
+ })
+ return res.data.views as AppBskyLabelerDefs.LabelerViewDetailed[]
+ },
+ })
+}
+
+export function useLabelerSubscriptionMutation() {
+ const queryClient = useQueryClient()
+
+ return useMutation({
+ async mutationFn({did, subscribe}: {did: string; subscribe: boolean}) {
+ // TODO
+ z.object({
+ did: z.string(),
+ subscribe: z.boolean(),
+ }).parse({did, subscribe})
+
+ if (subscribe) {
+ await getAgent().addLabeler(did)
+ } else {
+ await getAgent().removeLabeler(did)
+ }
+ },
+ onSuccess() {
+ queryClient.invalidateQueries({
+ queryKey: preferencesQueryKey,
+ })
+ },
+ })
+}
diff --git a/src/state/queries/list-members.ts b/src/state/queries/list-members.ts
index d84089c90d..87a409b88c 100644
--- a/src/state/queries/list-members.ts
+++ b/src/state/queries/list-members.ts
@@ -1,18 +1,19 @@
import {AppBskyActorDefs, AppBskyGraphGetList} from '@atproto/api'
import {
- useInfiniteQuery,
InfiniteData,
QueryClient,
QueryKey,
+ useInfiniteQuery,
} from '@tanstack/react-query'
-import {getAgent} from '#/state/session'
import {STALE} from '#/state/queries'
+import {getAgent} from '#/state/session'
const PAGE_SIZE = 30
type RQPageParam = string | undefined
-export const RQKEY = (uri: string) => ['list-members', uri]
+const RQKEY_ROOT = 'list-members'
+export const RQKEY = (uri: string) => [RQKEY_ROOT, uri]
export function useListMembersQuery(uri: string) {
return useInfiniteQuery<
@@ -44,7 +45,7 @@ export function* findAllProfilesInQueryData(
const queryDatas = queryClient.getQueriesData<
InfiniteData
>({
- queryKey: ['list-members'],
+ queryKey: [RQKEY_ROOT],
})
for (const [_queryKey, queryData] of queryDatas) {
if (!queryData) {
diff --git a/src/state/queries/list-memberships.ts b/src/state/queries/list-memberships.ts
index 6cae3fa2e8..d5ddd5a706 100644
--- a/src/state/queries/list-memberships.ts
+++ b/src/state/queries/list-memberships.ts
@@ -17,16 +17,17 @@
import {AtUri} from '@atproto/api'
import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'
-import {useSession, getAgent} from '#/state/session'
-import {RQKEY as LIST_MEMBERS_RQKEY} from '#/state/queries/list-members'
import {STALE} from '#/state/queries'
+import {RQKEY as LIST_MEMBERS_RQKEY} from '#/state/queries/list-members'
+import {getAgent, useSession} from '#/state/session'
// sanity limit is SANITY_PAGE_LIMIT*PAGE_SIZE total records
const SANITY_PAGE_LIMIT = 1000
const PAGE_SIZE = 100
// ...which comes 100,000k list members
-export const RQKEY = () => ['list-memberships']
+const RQKEY_ROOT = 'list-memberships'
+export const RQKEY = () => [RQKEY_ROOT]
export interface ListMembersip {
membershipUri: string
diff --git a/src/state/queries/list.ts b/src/state/queries/list.ts
index 845658a279..c653d53765 100644
--- a/src/state/queries/list.ts
+++ b/src/state/queries/list.ts
@@ -1,21 +1,23 @@
+import {Image as RNImage} from 'react-native-image-crop-picker'
import {
- AtUri,
+ AppBskyGraphDefs,
AppBskyGraphGetList,
AppBskyGraphList,
- AppBskyGraphDefs,
+ AtUri,
Facet,
} from '@atproto/api'
-import {Image as RNImage} from 'react-native-image-crop-picker'
-import {useQuery, useMutation, useQueryClient} from '@tanstack/react-query'
+import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'
import chunk from 'lodash.chunk'
-import {useSession, getAgent} from '../session'
-import {invalidate as invalidateMyLists} from './my-lists'
-import {RQKEY as PROFILE_LISTS_RQKEY} from './profile-lists'
+
import {uploadBlob} from '#/lib/api'
import {until} from '#/lib/async/until'
import {STALE} from '#/state/queries'
+import {getAgent, useSession} from '../session'
+import {invalidate as invalidateMyLists} from './my-lists'
+import {RQKEY as PROFILE_LISTS_RQKEY} from './profile-lists'
-export const RQKEY = (uri: string) => ['list', uri]
+const RQKEY_ROOT = 'list'
+export const RQKEY = (uri: string) => [RQKEY_ROOT, uri]
export function useListQuery(uri?: string) {
return useQuery({
diff --git a/src/state/queries/my-blocked-accounts.ts b/src/state/queries/my-blocked-accounts.ts
index badaaec34d..36b9ac5804 100644
--- a/src/state/queries/my-blocked-accounts.ts
+++ b/src/state/queries/my-blocked-accounts.ts
@@ -1,14 +1,15 @@
import {AppBskyActorDefs, AppBskyGraphGetBlocks} from '@atproto/api'
import {
- useInfiniteQuery,
InfiniteData,
QueryClient,
QueryKey,
+ useInfiniteQuery,
} from '@tanstack/react-query'
import {getAgent} from '#/state/session'
-export const RQKEY = () => ['my-blocked-accounts']
+const RQKEY_ROOT = 'my-blocked-accounts'
+export const RQKEY = () => [RQKEY_ROOT]
type RQPageParam = string | undefined
export function useMyBlockedAccountsQuery() {
@@ -39,7 +40,7 @@ export function* findAllProfilesInQueryData(
const queryDatas = queryClient.getQueriesData<
InfiniteData
>({
- queryKey: ['my-blocked-accounts'],
+ queryKey: [RQKEY_ROOT],
})
for (const [_queryKey, queryData] of queryDatas) {
if (!queryData?.pages) {
diff --git a/src/state/queries/my-follows.ts b/src/state/queries/my-follows.ts
index f95c3f5a7c..a130347f83 100644
--- a/src/state/queries/my-follows.ts
+++ b/src/state/queries/my-follows.ts
@@ -1,14 +1,16 @@
import {AppBskyActorDefs} from '@atproto/api'
import {useQuery} from '@tanstack/react-query'
-import {useSession, getAgent} from '../session'
+
import {STALE} from '#/state/queries'
+import {getAgent, useSession} from '../session'
// sanity limit is SANITY_PAGE_LIMIT*PAGE_SIZE total records
const SANITY_PAGE_LIMIT = 1000
const PAGE_SIZE = 100
// ...which comes 10,000k follows
-export const RQKEY = () => ['my-follows']
+const RQKEY_ROOT = 'my-follows'
+export const RQKEY = () => [RQKEY_ROOT]
export function useMyFollowsQuery() {
const {currentAccount} = useSession()
diff --git a/src/state/queries/my-lists.ts b/src/state/queries/my-lists.ts
index d53e130327..284b757c6d 100644
--- a/src/state/queries/my-lists.ts
+++ b/src/state/queries/my-lists.ts
@@ -1,16 +1,18 @@
import {AppBskyGraphDefs} from '@atproto/api'
-import {useQuery, QueryClient} from '@tanstack/react-query'
+import {QueryClient, useQuery} from '@tanstack/react-query'
import {accumulate} from '#/lib/async/accumulate'
-import {useSession, getAgent} from '#/state/session'
import {STALE} from '#/state/queries'
+import {getAgent, useSession} from '#/state/session'
export type MyListsFilter =
| 'all'
| 'curate'
| 'mod'
| 'all-including-subscribed'
-export const RQKEY = (filter: MyListsFilter) => ['my-lists', filter]
+
+const RQKEY_ROOT = 'my-lists'
+export const RQKEY = (filter: MyListsFilter) => [RQKEY_ROOT, filter]
export function useMyListsQuery(filter: MyListsFilter) {
const {currentAccount} = useSession()
@@ -91,6 +93,6 @@ export function invalidate(qc: QueryClient, filter?: MyListsFilter) {
if (filter) {
qc.invalidateQueries({queryKey: RQKEY(filter)})
} else {
- qc.invalidateQueries({queryKey: ['my-lists']})
+ qc.invalidateQueries({queryKey: [RQKEY_ROOT]})
}
}
diff --git a/src/state/queries/my-muted-accounts.ts b/src/state/queries/my-muted-accounts.ts
index 8929e04d3e..9e90044bf4 100644
--- a/src/state/queries/my-muted-accounts.ts
+++ b/src/state/queries/my-muted-accounts.ts
@@ -1,14 +1,15 @@
import {AppBskyActorDefs, AppBskyGraphGetMutes} from '@atproto/api'
import {
- useInfiniteQuery,
InfiniteData,
QueryClient,
QueryKey,
+ useInfiniteQuery,
} from '@tanstack/react-query'
import {getAgent} from '#/state/session'
-export const RQKEY = () => ['my-muted-accounts']
+const RQKEY_ROOT = 'my-muted-accounts'
+export const RQKEY = () => [RQKEY_ROOT]
type RQPageParam = string | undefined
export function useMyMutedAccountsQuery() {
@@ -39,7 +40,7 @@ export function* findAllProfilesInQueryData(
const queryDatas = queryClient.getQueriesData<
InfiniteData
>({
- queryKey: ['my-muted-accounts'],
+ queryKey: [RQKEY_ROOT],
})
for (const [_queryKey, queryData] of queryDatas) {
if (!queryData?.pages) {
diff --git a/src/state/queries/notifications/feed.ts b/src/state/queries/notifications/feed.ts
index b91db92373..b4bdd741ea 100644
--- a/src/state/queries/notifications/feed.ts
+++ b/src/state/queries/notifications/feed.ts
@@ -19,28 +19,30 @@
import {useEffect, useRef} from 'react'
import {AppBskyFeedDefs} from '@atproto/api'
import {
- useInfiniteQuery,
InfiniteData,
+ QueryClient,
QueryKey,
+ useInfiniteQuery,
useQueryClient,
- QueryClient,
} from '@tanstack/react-query'
-import {useModerationOpts} from '../preferences'
-import {useUnreadNotificationsApi} from './unread'
-import {fetchPage} from './util'
-import {FeedPage} from './types'
+
import {useMutedThreads} from '#/state/muted-threads'
import {STALE} from '..'
+import {useModerationOpts} from '../preferences'
import {embedViewRecordToPostView, getEmbeddedPost} from '../util'
+import {FeedPage} from './types'
+import {useUnreadNotificationsApi} from './unread'
+import {fetchPage} from './util'
-export type {NotificationType, FeedNotification, FeedPage} from './types'
+export type {FeedNotification, FeedPage, NotificationType} from './types'
const PAGE_SIZE = 30
type RQPageParam = string | undefined
+const RQKEY_ROOT = 'notification-feed'
export function RQKEY() {
- return ['notification-feed']
+ return [RQKEY_ROOT]
}
export function useNotificationFeedQuery(opts?: {enabled?: boolean}) {
@@ -133,29 +135,12 @@ export function useNotificationFeedQuery(opts?: {enabled?: boolean}) {
return query
}
-/**
- * This helper is used by the post-thread placeholder function to
- * find a post in the query-data cache
- */
-export function findPostInQueryData(
- queryClient: QueryClient,
- uri: string,
-): AppBskyFeedDefs.PostView | undefined {
- const generator = findAllPostsInQueryData(queryClient, uri)
- const result = generator.next()
- if (result.done) {
- return undefined
- } else {
- return result.value
- }
-}
-
export function* findAllPostsInQueryData(
queryClient: QueryClient,
uri: string,
): Generator {
const queryDatas = queryClient.getQueriesData>({
- queryKey: ['notification-feed'],
+ queryKey: [RQKEY_ROOT],
})
for (const [_queryKey, queryData] of queryDatas) {
if (!queryData?.pages) {
diff --git a/src/state/queries/notifications/util.ts b/src/state/queries/notifications/util.ts
index 626d3e9118..d0c1a6f1f3 100644
--- a/src/state/queries/notifications/util.ts
+++ b/src/state/queries/notifications/util.ts
@@ -1,19 +1,19 @@
import {
- AppBskyNotificationListNotifications,
- ModerationOpts,
- moderateProfile,
+ AppBskyEmbedRecord,
AppBskyFeedDefs,
+ AppBskyFeedLike,
AppBskyFeedPost,
AppBskyFeedRepost,
- AppBskyFeedLike,
- AppBskyEmbedRecord,
+ AppBskyNotificationListNotifications,
+ moderateNotification,
+ ModerationOpts,
} from '@atproto/api'
-import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped'
-import chunk from 'lodash.chunk'
import {QueryClient} from '@tanstack/react-query'
+import chunk from 'lodash.chunk'
+
import {getAgent} from '../../session'
import {precacheProfile} from '../profile'
-import {NotificationType, FeedNotification, FeedPage} from './types'
+import {FeedNotification, FeedPage, NotificationType} from './types'
const GROUPABLE_REASONS = ['like', 'repost', 'follow']
const MS_1HR = 1e3 * 60 * 60
@@ -88,37 +88,20 @@ export async function fetchPage({
// internal methods
// =
-// TODO this should be in the sdk as moderateNotification -prf
-function shouldFilterNotif(
+export function shouldFilterNotif(
notif: AppBskyNotificationListNotifications.Notification,
moderationOpts: ModerationOpts | undefined,
): boolean {
if (!moderationOpts) {
return false
}
- const profile = moderateProfile(notif.author, moderationOpts)
- if (
- profile.account.filter ||
- profile.profile.filter ||
- notif.author.viewer?.muted
- ) {
- return true
- }
- if (
- notif.type === 'reply' ||
- notif.type === 'quote' ||
- notif.type === 'mention'
- ) {
- // NOTE: the notification overlaps the post enough for this to work
- const post = moderatePost(notif, moderationOpts)
- if (post.content.filter) {
- return true
- }
+ if (notif.author.viewer?.following) {
+ return false
}
- return false
+ return moderateNotification(notif, moderationOpts).ui('contentList').filter
}
-function groupNotifications(
+export function groupNotifications(
notifs: AppBskyNotificationListNotifications.Notification[],
): FeedNotification[] {
const groupedNotifs: FeedNotification[] = []
diff --git a/src/state/queries/post-feed.ts b/src/state/queries/post-feed.ts
index 3200090897..ee22bac691 100644
--- a/src/state/queries/post-feed.ts
+++ b/src/state/queries/post-feed.ts
@@ -1,34 +1,39 @@
import React, {useCallback, useEffect, useRef} from 'react'
import {AppState} from 'react-native'
-import {AppBskyFeedDefs, AppBskyFeedPost, PostModeration} from '@atproto/api'
import {
- useInfiniteQuery,
+ AppBskyFeedDefs,
+ AppBskyFeedPost,
+ AtUri,
+ ModerationDecision,
+} from '@atproto/api'
+import {
InfiniteData,
- QueryKey,
QueryClient,
+ QueryKey,
+ useInfiniteQuery,
useQueryClient,
} from '@tanstack/react-query'
+
+import {HomeFeedAPI} from '#/lib/api/feed/home'
import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped'
-import {useFeedTuners} from '../preferences/feed-tuners'
-import {FeedTuner, FeedTunerFn, NoopFeedTuner} from 'lib/api/feed-manip'
-import {FeedAPI, ReasonFeedSource} from 'lib/api/feed/types'
-import {FollowingFeedAPI} from 'lib/api/feed/following'
+import {logger} from '#/logger'
+import {STALE} from '#/state/queries'
+import {DEFAULT_LOGGED_OUT_PREFERENCES} from '#/state/queries/preferences/const'
+import {getAgent} from '#/state/session'
import {AuthorFeedAPI} from 'lib/api/feed/author'
-import {LikesFeedAPI} from 'lib/api/feed/likes'
import {CustomFeedAPI} from 'lib/api/feed/custom'
+import {FollowingFeedAPI} from 'lib/api/feed/following'
+import {LikesFeedAPI} from 'lib/api/feed/likes'
import {ListFeedAPI} from 'lib/api/feed/list'
import {MergeFeedAPI} from 'lib/api/feed/merge'
-import {HomeFeedAPI} from '#/lib/api/feed/home'
-import {logger} from '#/logger'
-import {STALE} from '#/state/queries'
-import {precacheFeedPostProfiles} from './profile'
-import {getAgent} from '#/state/session'
-import {DEFAULT_LOGGED_OUT_PREFERENCES} from '#/state/queries/preferences/const'
-import {getModerationOpts} from '#/state/queries/preferences/moderation'
+import {FeedAPI, ReasonFeedSource} from 'lib/api/feed/types'
+import {FeedTuner, FeedTunerFn, NoopFeedTuner} from 'lib/api/feed-manip'
+import {BSKY_FEED_OWNER_DIDS} from 'lib/constants'
import {KnownError} from '#/view/com/posts/FeedErrorMessage'
-import {embedViewRecordToPostView, getEmbeddedPost} from './util'
+import {useFeedTuners} from '../preferences/feed-tuners'
import {useModerationOpts} from './preferences'
-import {queryClient} from 'lib/react-query'
+import {precacheFeedPostProfiles} from './profile'
+import {embedViewRecordToPostView, getEmbeddedPost} from './util'
type ActorDid = string
type AuthorFilter =
@@ -53,8 +58,9 @@ export interface FeedParams {
type RQPageParam = {cursor: string | undefined; api: FeedAPI} | undefined
+const RQKEY_ROOT = 'post-feed'
export function RQKEY(feedDesc: FeedDescriptor, params?: FeedParams) {
- return ['post-feed', feedDesc, params || {}]
+ return [RQKEY_ROOT, feedDesc, params || {}]
}
export interface FeedPostSliceItem {
@@ -63,7 +69,7 @@ export interface FeedPostSliceItem {
post: AppBskyFeedDefs.PostView
record: AppBskyFeedPost.Record
reason?: AppBskyFeedDefs.ReasonRepost | ReasonFeedSource
- moderation: PostModeration
+ moderation: ModerationDecision
}
export interface FeedPostSlice {
@@ -137,24 +143,41 @@ export function usePostFeedQuery(
cursor: undefined,
}
- const res = await api.fetch({cursor, limit: PAGE_SIZE})
- precacheFeedPostProfiles(queryClient, res.feed)
-
- /*
- * If this is a public view, we need to check if posts fail moderation.
- * If all fail, we throw an error. If only some fail, we continue and let
- * moderations happen later, which results in some posts being shown and
- * some not.
- */
- if (!getAgent().session) {
- assertSomePostsPassModeration(res.feed)
- }
+ try {
+ const res = await api.fetch({cursor, limit: PAGE_SIZE})
+ precacheFeedPostProfiles(queryClient, res.feed)
+
+ /*
+ * If this is a public view, we need to check if posts fail moderation.
+ * If all fail, we throw an error. If only some fail, we continue and let
+ * moderations happen later, which results in some posts being shown and
+ * some not.
+ */
+ if (!getAgent().session) {
+ assertSomePostsPassModeration(res.feed)
+ }
+
+ return {
+ api,
+ cursor: res.cursor,
+ feed: res.feed,
+ fetchedAt: Date.now(),
+ }
+ } catch (e) {
+ const feedDescParts = feedDesc.split('|')
+ const feedOwnerDid = new AtUri(feedDescParts[1]).hostname
- return {
- api,
- cursor: res.cursor,
- feed: res.feed,
- fetchedAt: Date.now(),
+ if (
+ feedDescParts[0] === 'feedgen' &&
+ BSKY_FEED_OWNER_DIDS.includes(feedOwnerDid)
+ ) {
+ logger.error(`Bluesky feed may be offline: ${feedOwnerDid}`, {
+ feedDesc,
+ jsError: e,
+ })
+ }
+
+ throw e
}
},
initialPageParam: undefined,
@@ -227,9 +250,17 @@ export function usePostFeedQuery(
// apply moderation filter
for (let i = 0; i < slice.items.length; i++) {
+ const ignoreFilter =
+ slice.items[i].post.author.did === ignoreFilterFor
+ if (ignoreFilter) {
+ // remove mutes to avoid confused UIs
+ moderations[i].causes = moderations[i].causes.filter(
+ cause => cause.type !== 'muted',
+ )
+ }
if (
- moderations[i]?.content.filter &&
- slice.items[i].post.author.did !== ignoreFilterFor
+ !ignoreFilter &&
+ moderations[i]?.ui('contentList').filter
) {
return undefined
}
@@ -253,7 +284,7 @@ export function usePostFeedQuery(
.success
) {
return {
- _reactKey: `${slice._reactKey}-${i}`,
+ _reactKey: `${slice._reactKey}-${i}-${item.post.uri}`,
uri: item.post.uri,
post: item.post,
record: item.post.record,
@@ -365,23 +396,6 @@ function createApi(
}
}
-/**
- * This helper is used by the post-thread placeholder function to
- * find a post in the query-data cache
- */
-export function findPostInQueryData(
- queryClient: QueryClient,
- uri: string,
-): AppBskyFeedDefs.PostView | undefined {
- const generator = findAllPostsInQueryData(queryClient, uri)
- const result = generator.next()
- if (result.done) {
- return undefined
- } else {
- return result.value
- }
-}
-
export function* findAllPostsInQueryData(
queryClient: QueryClient,
uri: string,
@@ -389,7 +403,7 @@ export function* findAllPostsInQueryData(
const queryDatas = queryClient.getQueriesData<
InfiniteData
>({
- queryKey: ['post-feed'],
+ queryKey: [RQKEY_ROOT],
})
for (const [_queryKey, queryData] of queryDatas) {
if (!queryData?.pages) {
@@ -429,13 +443,12 @@ function assertSomePostsPassModeration(feed: AppBskyFeedDefs.FeedViewPost[]) {
let somePostsPassModeration = false
for (const item of feed) {
- const moderationOpts = getModerationOpts({
- userDid: '',
- preferences: DEFAULT_LOGGED_OUT_PREFERENCES,
+ const moderation = moderatePost(item.post, {
+ userDid: undefined,
+ prefs: DEFAULT_LOGGED_OUT_PREFERENCES.moderationPrefs,
})
- const moderation = moderatePost(item.post, moderationOpts)
- if (!moderation.content.filter) {
+ if (!moderation.ui('contentList').filter) {
// we have a sfw post
somePostsPassModeration = true
}
@@ -446,12 +459,16 @@ function assertSomePostsPassModeration(feed: AppBskyFeedDefs.FeedViewPost[]) {
}
}
-export function resetProfilePostsQueries(did: string, timeout = 0) {
+export function resetProfilePostsQueries(
+ queryClient: QueryClient,
+ did: string,
+ timeout = 0,
+) {
setTimeout(() => {
queryClient.resetQueries({
predicate: query =>
!!(
- query.queryKey[0] === 'post-feed' &&
+ query.queryKey[0] === RQKEY_ROOT &&
(query.queryKey[1] as string)?.includes(did)
),
})
diff --git a/src/state/queries/post-liked-by.ts b/src/state/queries/post-liked-by.ts
index 2cde07f280..6fa341b773 100644
--- a/src/state/queries/post-liked-by.ts
+++ b/src/state/queries/post-liked-by.ts
@@ -1,9 +1,9 @@
import {AppBskyActorDefs, AppBskyFeedGetLikes} from '@atproto/api'
import {
- useInfiniteQuery,
InfiniteData,
QueryClient,
QueryKey,
+ useInfiniteQuery,
} from '@tanstack/react-query'
import {getAgent} from '#/state/session'
@@ -12,9 +12,10 @@ const PAGE_SIZE = 30
type RQPageParam = string | undefined
// TODO refactor invalidate on mutate?
-export const RQKEY = (resolvedUri: string) => ['post-liked-by', resolvedUri]
+const RQKEY_ROOT = 'liked-by'
+export const RQKEY = (resolvedUri: string) => [RQKEY_ROOT, resolvedUri]
-export function usePostLikedByQuery(resolvedUri: string | undefined) {
+export function useLikedByQuery(resolvedUri: string | undefined) {
return useInfiniteQuery<
AppBskyFeedGetLikes.OutputSchema,
Error,
@@ -44,7 +45,7 @@ export function* findAllProfilesInQueryData(
const queryDatas = queryClient.getQueriesData<
InfiniteData
>({
- queryKey: ['post-liked-by'],
+ queryKey: [RQKEY_ROOT],
})
for (const [_queryKey, queryData] of queryDatas) {
if (!queryData?.pages) {
diff --git a/src/state/queries/post-reposted-by.ts b/src/state/queries/post-reposted-by.ts
index db5fa65140..f8cfff0d28 100644
--- a/src/state/queries/post-reposted-by.ts
+++ b/src/state/queries/post-reposted-by.ts
@@ -1,9 +1,9 @@
import {AppBskyActorDefs, AppBskyFeedGetRepostedBy} from '@atproto/api'
import {
- useInfiniteQuery,
InfiniteData,
QueryClient,
QueryKey,
+ useInfiniteQuery,
} from '@tanstack/react-query'
import {getAgent} from '#/state/session'
@@ -12,7 +12,8 @@ const PAGE_SIZE = 30
type RQPageParam = string | undefined
// TODO refactor invalidate on mutate?
-export const RQKEY = (resolvedUri: string) => ['post-reposted-by', resolvedUri]
+const RQKEY_ROOT = 'post-reposted-by'
+export const RQKEY = (resolvedUri: string) => [RQKEY_ROOT, resolvedUri]
export function usePostRepostedByQuery(resolvedUri: string | undefined) {
return useInfiniteQuery<
@@ -44,7 +45,7 @@ export function* findAllProfilesInQueryData(
const queryDatas = queryClient.getQueriesData<
InfiniteData
>({
- queryKey: ['post-reposted-by'],
+ queryKey: [RQKEY_ROOT],
})
for (const [_queryKey, queryData] of queryDatas) {
if (!queryData?.pages) {
diff --git a/src/state/queries/post-thread.ts b/src/state/queries/post-thread.ts
index ba42431639..832794bf54 100644
--- a/src/state/queries/post-thread.ts
+++ b/src/state/queries/post-thread.ts
@@ -1,19 +1,20 @@
import {
+ AppBskyEmbedRecord,
AppBskyFeedDefs,
- AppBskyFeedPost,
AppBskyFeedGetPostThread,
- AppBskyEmbedRecord,
+ AppBskyFeedPost,
} from '@atproto/api'
-import {useQuery, useQueryClient, QueryClient} from '@tanstack/react-query'
+import {QueryClient, useQuery, useQueryClient} from '@tanstack/react-query'
-import {getAgent} from '#/state/session'
import {UsePreferencesQueryResponse} from '#/state/queries/preferences/types'
-import {findPostInQueryData as findPostInFeedQueryData} from './post-feed'
-import {findPostInQueryData as findPostInNotifsQueryData} from './notifications/feed'
+import {getAgent} from '#/state/session'
+import {findAllPostsInQueryData as findAllPostsInNotifsQueryData} from './notifications/feed'
+import {findAllPostsInQueryData as findAllPostsInFeedQueryData} from './post-feed'
import {precacheThreadPostProfiles} from './profile'
import {getEmbeddedPost} from './util'
-export const RQKEY = (uri: string) => ['post-thread', uri]
+const RQKEY_ROOT = 'post-thread'
+export const RQKEY = (uri: string) => [RQKEY_ROOT, uri]
type ThreadViewNode = AppBskyFeedGetPostThread.OutputSchema['thread']
export interface ThreadCtx {
@@ -82,21 +83,9 @@ export function usePostThreadQuery(uri: string | undefined) {
return undefined
}
{
- const item = findPostInQueryData(queryClient, uri)
- if (item) {
- return threadNodeToPlaceholderThread(item)
- }
- }
- {
- const item = findPostInFeedQueryData(queryClient, uri)
- if (item) {
- return postViewToPlaceholderThread(item)
- }
- }
- {
- const item = findPostInNotifsQueryData(queryClient, uri)
- if (item) {
- return postViewToPlaceholderThread(item)
+ const post = findPostInQueryData(queryClient, uri)
+ if (post) {
+ return post
}
}
return undefined
@@ -171,11 +160,18 @@ function responseToThreadNodes(
AppBskyFeedPost.isRecord(node.post.record) &&
AppBskyFeedPost.validateRecord(node.post.record).success
) {
+ const post = node.post
+ // These should normally be present. They're missing only for
+ // posts that were *just* created. Ideally, the backend would
+ // know to return zeros. Fill them in manually to compensate.
+ post.replyCount ??= 0
+ post.likeCount ??= 0
+ post.repostCount ??= 0
return {
type: 'post',
_reactKey: node.post.uri,
uri: node.post.uri,
- post: node.post,
+ post: post,
record: node.post.record,
parent:
node.parent && direction !== 'down'
@@ -213,14 +209,24 @@ function responseToThreadNodes(
function findPostInQueryData(
queryClient: QueryClient,
uri: string,
-): ThreadNode | undefined {
- const generator = findAllPostsInQueryData(queryClient, uri)
- const result = generator.next()
- if (result.done) {
- return undefined
- } else {
- return result.value
+): ThreadNode | void {
+ let partial
+ for (let item of findAllPostsInQueryData(queryClient, uri)) {
+ if (item.type === 'post') {
+ // Currently, the backend doesn't send full post info in some cases
+ // (for example, for quoted posts). We use missing `likeCount`
+ // as a way to detect that. In the future, we should fix this on
+ // the backend, which will let us always stop on the first result.
+ const hasAllInfo = item.post.likeCount != null
+ if (hasAllInfo) {
+ return item
+ } else {
+ partial = item
+ // Keep searching, we might still find a full post in the cache.
+ }
+ }
}
+ return partial
}
export function* findAllPostsInQueryData(
@@ -228,7 +234,7 @@ export function* findAllPostsInQueryData(
uri: string,
): Generator {
const queryDatas = queryClient.getQueriesData({
- queryKey: ['post-thread'],
+ queryKey: [RQKEY_ROOT],
})
for (const [_queryKey, queryData] of queryDatas) {
if (!queryData) {
@@ -236,7 +242,10 @@ export function* findAllPostsInQueryData(
}
for (const item of traverseThread(queryData)) {
if (item.uri === uri) {
- yield item
+ const placeholder = threadNodeToPlaceholderThread(item)
+ if (placeholder) {
+ yield placeholder
+ }
}
const quotedPost =
item.type === 'post' ? getEmbeddedPost(item.post.embed) : undefined
@@ -245,6 +254,12 @@ export function* findAllPostsInQueryData(
}
}
}
+ for (let post of findAllPostsInFeedQueryData(queryClient, uri)) {
+ yield postViewToPlaceholderThread(post)
+ }
+ for (let post of findAllPostsInNotifsQueryData(queryClient, uri)) {
+ yield postViewToPlaceholderThread(post)
+ }
}
function* traverseThread(node: ThreadNode): Generator {
diff --git a/src/state/queries/post.ts b/src/state/queries/post.ts
index eb59f7da40..77497f6bab 100644
--- a/src/state/queries/post.ts
+++ b/src/state/queries/post.ts
@@ -1,13 +1,17 @@
import {useCallback} from 'react'
-import {AppBskyFeedDefs, AtUri} from '@atproto/api'
-import {useQuery, useMutation, useQueryClient} from '@tanstack/react-query'
-import {Shadow} from '#/state/cache/types'
-import {getAgent} from '#/state/session'
-import {updatePostShadow} from '#/state/cache/post-shadow'
+import {AppBskyActorDefs, AppBskyFeedDefs, AtUri} from '@atproto/api'
+import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'
+
import {track} from '#/lib/analytics/analytics'
import {useToggleMutationQueue} from '#/lib/hooks/useToggleMutationQueue'
+import {logEvent, LogEvents, toClout} from '#/lib/statsig/statsig'
+import {updatePostShadow} from '#/state/cache/post-shadow'
+import {Shadow} from '#/state/cache/types'
+import {getAgent, useSession} from '#/state/session'
+import {findProfileQueryData} from './profile'
-export const RQKEY = (postUri: string) => ['post', postUri]
+const RQKEY_ROOT = 'post'
+export const RQKEY = (postUri: string) => [RQKEY_ROOT, postUri]
export function usePostQuery(uri: string | undefined) {
return useQuery({
@@ -58,12 +62,15 @@ export function useGetPost() {
export function usePostLikeMutationQueue(
post: Shadow,
+ logContext: LogEvents['post:like']['logContext'] &
+ LogEvents['post:unlike']['logContext'],
) {
+ const queryClient = useQueryClient()
const postUri = post.uri
const postCid = post.cid
const initialLikeUri = post.viewer?.like
- const likeMutation = usePostLikeMutation()
- const unlikeMutation = usePostUnlikeMutation()
+ const likeMutation = usePostLikeMutation(logContext, post)
+ const unlikeMutation = usePostUnlikeMutation(logContext)
const queueToggle = useToggleMutationQueue({
initialState: initialLikeUri,
@@ -86,7 +93,7 @@ export function usePostLikeMutationQueue(
},
onSuccess(finalLikeUri) {
// finalize
- updatePostShadow(postUri, {
+ updatePostShadow(queryClient, postUri, {
likeUri: finalLikeUri,
})
},
@@ -94,39 +101,72 @@ export function usePostLikeMutationQueue(
const queueLike = useCallback(() => {
// optimistically update
- updatePostShadow(postUri, {
+ updatePostShadow(queryClient, postUri, {
likeUri: 'pending',
})
return queueToggle(true)
- }, [postUri, queueToggle])
+ }, [queryClient, postUri, queueToggle])
const queueUnlike = useCallback(() => {
// optimistically update
- updatePostShadow(postUri, {
+ updatePostShadow(queryClient, postUri, {
likeUri: undefined,
})
return queueToggle(false)
- }, [postUri, queueToggle])
+ }, [queryClient, postUri, queueToggle])
return [queueLike, queueUnlike]
}
-function usePostLikeMutation() {
+function usePostLikeMutation(
+ logContext: LogEvents['post:like']['logContext'],
+ post: Shadow,
+) {
+ const {currentAccount} = useSession()
+ const queryClient = useQueryClient()
+ const postAuthor = post.author
return useMutation<
{uri: string}, // responds with the uri of the like
Error,
{uri: string; cid: string} // the post's uri and cid
>({
- mutationFn: post => getAgent().like(post.uri, post.cid),
+ mutationFn: ({uri, cid}) => {
+ let ownProfile: AppBskyActorDefs.ProfileViewDetailed | undefined
+ if (currentAccount) {
+ ownProfile = findProfileQueryData(queryClient, currentAccount.did)
+ }
+ logEvent('post:like', {
+ logContext,
+ doesPosterFollowLiker: postAuthor.viewer
+ ? Boolean(postAuthor.viewer.followedBy)
+ : undefined,
+ doesLikerFollowPoster: postAuthor.viewer
+ ? Boolean(postAuthor.viewer.following)
+ : undefined,
+ likerClout: toClout(ownProfile?.followersCount),
+ postClout:
+ post.likeCount != null &&
+ post.repostCount != null &&
+ post.replyCount != null
+ ? toClout(post.likeCount + post.repostCount + post.replyCount)
+ : undefined,
+ })
+ return getAgent().like(uri, cid)
+ },
onSuccess() {
track('Post:Like')
},
})
}
-function usePostUnlikeMutation() {
+function usePostUnlikeMutation(
+ logContext: LogEvents['post:unlike']['logContext'],
+) {
return useMutation({
- mutationFn: ({likeUri}) => getAgent().deleteLike(likeUri),
+ mutationFn: ({likeUri}) => {
+ logEvent('post:unlike', {logContext})
+ return getAgent().deleteLike(likeUri)
+ },
onSuccess() {
track('Post:Unlike')
},
@@ -135,12 +175,15 @@ function usePostUnlikeMutation() {
export function usePostRepostMutationQueue(
post: Shadow,
+ logContext: LogEvents['post:repost']['logContext'] &
+ LogEvents['post:unrepost']['logContext'],
) {
+ const queryClient = useQueryClient()
const postUri = post.uri
const postCid = post.cid
const initialRepostUri = post.viewer?.repost
- const repostMutation = usePostRepostMutation()
- const unrepostMutation = usePostUnrepostMutation()
+ const repostMutation = usePostRepostMutation(logContext)
+ const unrepostMutation = usePostUnrepostMutation(logContext)
const queueToggle = useToggleMutationQueue({
initialState: initialRepostUri,
@@ -163,7 +206,7 @@ export function usePostRepostMutationQueue(
},
onSuccess(finalRepostUri) {
// finalize
- updatePostShadow(postUri, {
+ updatePostShadow(queryClient, postUri, {
repostUri: finalRepostUri,
})
},
@@ -171,39 +214,49 @@ export function usePostRepostMutationQueue(
const queueRepost = useCallback(() => {
// optimistically update
- updatePostShadow(postUri, {
+ updatePostShadow(queryClient, postUri, {
repostUri: 'pending',
})
return queueToggle(true)
- }, [postUri, queueToggle])
+ }, [queryClient, postUri, queueToggle])
const queueUnrepost = useCallback(() => {
// optimistically update
- updatePostShadow(postUri, {
+ updatePostShadow(queryClient, postUri, {
repostUri: undefined,
})
return queueToggle(false)
- }, [postUri, queueToggle])
+ }, [queryClient, postUri, queueToggle])
return [queueRepost, queueUnrepost]
}
-function usePostRepostMutation() {
+function usePostRepostMutation(
+ logContext: LogEvents['post:repost']['logContext'],
+) {
return useMutation<
{uri: string}, // responds with the uri of the repost
Error,
{uri: string; cid: string} // the post's uri and cid
>({
- mutationFn: post => getAgent().repost(post.uri, post.cid),
+ mutationFn: post => {
+ logEvent('post:repost', {logContext})
+ return getAgent().repost(post.uri, post.cid)
+ },
onSuccess() {
track('Post:Repost')
},
})
}
-function usePostUnrepostMutation() {
+function usePostUnrepostMutation(
+ logContext: LogEvents['post:unrepost']['logContext'],
+) {
return useMutation({
- mutationFn: ({repostUri}) => getAgent().deleteRepost(repostUri),
+ mutationFn: ({repostUri}) => {
+ logEvent('post:unrepost', {logContext})
+ return getAgent().deleteRepost(repostUri)
+ },
onSuccess() {
track('Post:Unrepost')
},
@@ -211,12 +264,13 @@ function usePostUnrepostMutation() {
}
export function usePostDeleteMutation() {
+ const queryClient = useQueryClient()
return useMutation({
mutationFn: async ({uri}) => {
await getAgent().deletePost(uri)
},
onSuccess(data, variables) {
- updatePostShadow(variables.uri, {isDeleted: true})
+ updatePostShadow(queryClient, variables.uri, {isDeleted: true})
track('Post:Delete')
},
})
diff --git a/src/state/queries/preferences/const.ts b/src/state/queries/preferences/const.ts
index 2d9d02994e..1c911d72cc 100644
--- a/src/state/queries/preferences/const.ts
+++ b/src/state/queries/preferences/const.ts
@@ -1,13 +1,13 @@
+import {DEFAULT_LOGGED_OUT_LABEL_PREFERENCES} from '#/state/queries/preferences/moderation'
import {
- UsePreferencesQueryResponse,
ThreadViewPreferences,
+ UsePreferencesQueryResponse,
} from '#/state/queries/preferences/types'
-import {DEFAULT_LOGGED_OUT_LABEL_PREFERENCES} from '#/state/queries/preferences/moderation'
export const DEFAULT_HOME_FEED_PREFS: UsePreferencesQueryResponse['feedViewPrefs'] =
{
hideReplies: false,
- hideRepliesByUnfollowed: false,
+ hideRepliesByUnfollowed: true,
hideRepliesByLikeCount: 0,
hideReposts: false,
hideQuotePosts: false,
@@ -29,21 +29,17 @@ export const DEFAULT_PROD_FEEDS = {
export const DEFAULT_LOGGED_OUT_PREFERENCES: UsePreferencesQueryResponse = {
birthDate: new Date('2022-11-17'), // TODO(pwi)
- adultContentEnabled: false,
feeds: {
saved: [],
pinned: [],
unpinned: [],
},
- // labels are undefined until set by user
- contentLabels: {
- nsfw: DEFAULT_LOGGED_OUT_LABEL_PREFERENCES.nsfw,
- nudity: DEFAULT_LOGGED_OUT_LABEL_PREFERENCES.nudity,
- suggestive: DEFAULT_LOGGED_OUT_LABEL_PREFERENCES.suggestive,
- gore: DEFAULT_LOGGED_OUT_LABEL_PREFERENCES.gore,
- hate: DEFAULT_LOGGED_OUT_LABEL_PREFERENCES.hate,
- spam: DEFAULT_LOGGED_OUT_LABEL_PREFERENCES.spam,
- impersonation: DEFAULT_LOGGED_OUT_LABEL_PREFERENCES.impersonation,
+ moderationPrefs: {
+ adultContentEnabled: false,
+ labels: DEFAULT_LOGGED_OUT_LABEL_PREFERENCES,
+ labelers: [],
+ mutedWords: [],
+ hiddenPosts: [],
},
feedViewPrefs: DEFAULT_HOME_FEED_PREFS,
threadViewPrefs: DEFAULT_THREAD_VIEW_PREFS,
diff --git a/src/state/queries/preferences/index.ts b/src/state/queries/preferences/index.ts
index 632d31a13c..85e3f9a25d 100644
--- a/src/state/queries/preferences/index.ts
+++ b/src/state/queries/preferences/index.ts
@@ -1,31 +1,36 @@
-import {useMemo} from 'react'
-import {useQuery, useMutation, useQueryClient} from '@tanstack/react-query'
-import {LabelPreference, BskyFeedViewPreference} from '@atproto/api'
+import {createContext, useContext, useMemo} from 'react'
+import {
+ AppBskyActorDefs,
+ BSKY_LABELER_DID,
+ BskyFeedViewPreference,
+ LabelPreference,
+ ModerationOpts,
+} from '@atproto/api'
+import {useMutation, useQuery, useQueryClient} from '@tanstack/react-query'
import {track} from '#/lib/analytics/analytics'
import {getAge} from '#/lib/strings/time'
-import {useSession, getAgent} from '#/state/session'
-import {DEFAULT_LABEL_PREFERENCES} from '#/state/queries/preferences/moderation'
-import {
- ConfigurableLabelGroup,
- UsePreferencesQueryResponse,
- ThreadViewPreferences,
-} from '#/state/queries/preferences/types'
-import {temp__migrateLabelPref} from '#/state/queries/preferences/util'
+import {useHiddenPosts, useLabelDefinitions} from '#/state/preferences'
+import {STALE} from '#/state/queries'
import {
DEFAULT_HOME_FEED_PREFS,
- DEFAULT_THREAD_VIEW_PREFS,
DEFAULT_LOGGED_OUT_PREFERENCES,
+ DEFAULT_THREAD_VIEW_PREFS,
} from '#/state/queries/preferences/const'
-import {getModerationOpts} from '#/state/queries/preferences/moderation'
-import {STALE} from '#/state/queries'
-import {useHiddenPosts} from '#/state/preferences/hidden-posts'
+import {DEFAULT_LOGGED_OUT_LABEL_PREFERENCES} from '#/state/queries/preferences/moderation'
+import {
+ ThreadViewPreferences,
+ UsePreferencesQueryResponse,
+} from '#/state/queries/preferences/types'
+import {getAgent, useSession} from '#/state/session'
+import {saveLabelers} from '#/state/session/agent-config'
-export * from '#/state/queries/preferences/types'
-export * from '#/state/queries/preferences/moderation'
export * from '#/state/queries/preferences/const'
+export * from '#/state/queries/preferences/moderation'
+export * from '#/state/queries/preferences/types'
-export const preferencesQueryKey = ['getPreferences']
+const preferencesQueryKeyRoot = 'getPreferences'
+export const preferencesQueryKey = [preferencesQueryKeyRoot]
export function usePreferencesQuery() {
return useQuery({
@@ -40,6 +45,13 @@ export function usePreferencesQuery() {
return DEFAULT_LOGGED_OUT_PREFERENCES
} else {
const res = await agent.getPreferences()
+
+ // save to local storage to ensure there are labels on initial requests
+ saveLabelers(
+ agent.session.did,
+ res.moderationPrefs.labelers.map(l => l.did),
+ )
+
const preferences: UsePreferencesQueryResponse = {
...res,
feeds: {
@@ -50,32 +62,6 @@ export function usePreferencesQuery() {
return !res.feeds.pinned?.includes(f)
}) || [],
},
- // labels are undefined until set by user
- contentLabels: {
- nsfw: temp__migrateLabelPref(
- res.contentLabels?.nsfw || DEFAULT_LABEL_PREFERENCES.nsfw,
- ),
- nudity: temp__migrateLabelPref(
- res.contentLabels?.nudity || DEFAULT_LABEL_PREFERENCES.nudity,
- ),
- suggestive: temp__migrateLabelPref(
- res.contentLabels?.suggestive ||
- DEFAULT_LABEL_PREFERENCES.suggestive,
- ),
- gore: temp__migrateLabelPref(
- res.contentLabels?.gore || DEFAULT_LABEL_PREFERENCES.gore,
- ),
- hate: temp__migrateLabelPref(
- res.contentLabels?.hate || DEFAULT_LABEL_PREFERENCES.hate,
- ),
- spam: temp__migrateLabelPref(
- res.contentLabels?.spam || DEFAULT_LABEL_PREFERENCES.spam,
- ),
- impersonation: temp__migrateLabelPref(
- res.contentLabels?.impersonation ||
- DEFAULT_LABEL_PREFERENCES.impersonation,
- ),
- },
feedViewPrefs: {
...DEFAULT_HOME_FEED_PREFS,
...(res.feedViewPrefs.home || {}),
@@ -92,24 +78,41 @@ export function usePreferencesQuery() {
})
}
+// used in the moderation state devtool
+export const moderationOptsOverrideContext = createContext<
+ ModerationOpts | undefined
+>(undefined)
+
export function useModerationOpts() {
+ const override = useContext(moderationOptsOverrideContext)
const {currentAccount} = useSession()
const prefs = usePreferencesQuery()
- const hiddenPosts = useHiddenPosts()
- const opts = useMemo(() => {
+ const {labelDefs} = useLabelDefinitions()
+ const hiddenPosts = useHiddenPosts() // TODO move this into pds-stored prefs
+ const opts = useMemo(() => {
+ if (override) {
+ return override
+ }
if (!prefs.data) {
return
}
- const moderationOpts = getModerationOpts({
- userDid: currentAccount?.did || '',
- preferences: prefs.data,
- })
-
return {
- ...moderationOpts,
- hiddenPosts,
+ userDid: currentAccount?.did,
+ prefs: {
+ ...prefs.data.moderationPrefs,
+ labelers: prefs.data.moderationPrefs.labelers.length
+ ? prefs.data.moderationPrefs.labelers
+ : [
+ {
+ did: BSKY_LABELER_DID,
+ labels: DEFAULT_LOGGED_OUT_LABEL_PREFERENCES,
+ },
+ ],
+ hiddenPosts: hiddenPosts || [],
+ },
+ labelDefs,
}
- }, [currentAccount?.did, prefs.data, hiddenPosts])
+ }, [override, currentAccount, labelDefs, prefs.data, hiddenPosts])
return opts
}
@@ -133,10 +136,32 @@ export function usePreferencesSetContentLabelMutation() {
return useMutation<
void,
unknown,
- {labelGroup: ConfigurableLabelGroup; visibility: LabelPreference}
+ {label: string; visibility: LabelPreference; labelerDid: string | undefined}
>({
- mutationFn: async ({labelGroup, visibility}) => {
- await getAgent().setContentLabelPref(labelGroup, visibility)
+ mutationFn: async ({label, visibility, labelerDid}) => {
+ await getAgent().setContentLabelPref(label, visibility, labelerDid)
+ // triggers a refetch
+ await queryClient.invalidateQueries({
+ queryKey: preferencesQueryKey,
+ })
+ },
+ })
+}
+
+export function useSetContentLabelMutation() {
+ const queryClient = useQueryClient()
+
+ return useMutation({
+ mutationFn: async ({
+ label,
+ visibility,
+ labelerDid,
+ }: {
+ label: string
+ visibility: LabelPreference
+ labelerDid?: string
+ }) => {
+ await getAgent().setContentLabelPref(label, visibility, labelerDid)
// triggers a refetch
await queryClient.invalidateQueries({
queryKey: preferencesQueryKey,
@@ -164,7 +189,7 @@ export function usePreferencesSetBirthDateMutation() {
return useMutation({
mutationFn: async ({birthDate}: {birthDate: Date}) => {
- await getAgent().setPersonalDetails({birthDate})
+ await getAgent().setPersonalDetails({birthDate: birthDate.toISOString()})
// triggers a refetch
await queryClient.invalidateQueries({
queryKey: preferencesQueryKey,
@@ -278,3 +303,45 @@ export function useUnpinFeedMutation() {
},
})
}
+
+export function useUpsertMutedWordsMutation() {
+ const queryClient = useQueryClient()
+
+ return useMutation({
+ mutationFn: async (mutedWords: AppBskyActorDefs.MutedWord[]) => {
+ await getAgent().upsertMutedWords(mutedWords)
+ // triggers a refetch
+ await queryClient.invalidateQueries({
+ queryKey: preferencesQueryKey,
+ })
+ },
+ })
+}
+
+export function useUpdateMutedWordMutation() {
+ const queryClient = useQueryClient()
+
+ return useMutation({
+ mutationFn: async (mutedWord: AppBskyActorDefs.MutedWord) => {
+ await getAgent().updateMutedWord(mutedWord)
+ // triggers a refetch
+ await queryClient.invalidateQueries({
+ queryKey: preferencesQueryKey,
+ })
+ },
+ })
+}
+
+export function useRemoveMutedWordMutation() {
+ const queryClient = useQueryClient()
+
+ return useMutation({
+ mutationFn: async (mutedWord: AppBskyActorDefs.MutedWord) => {
+ await getAgent().removeMutedWord(mutedWord)
+ // triggers a refetch
+ await queryClient.invalidateQueries({
+ queryKey: preferencesQueryKey,
+ })
+ },
+ })
+}
diff --git a/src/state/queries/preferences/moderation.ts b/src/state/queries/preferences/moderation.ts
index cdae529374..d3d50f1b33 100644
--- a/src/state/queries/preferences/moderation.ts
+++ b/src/state/queries/preferences/moderation.ts
@@ -1,181 +1,53 @@
+import React from 'react'
import {
- LabelPreference,
- ComAtprotoLabelDefs,
- ModerationOpts,
+ BskyAgent,
+ DEFAULT_LABEL_SETTINGS,
+ interpretLabelValueDefinitions,
} from '@atproto/api'
-import {
- LabelGroup,
- ConfigurableLabelGroup,
- UsePreferencesQueryResponse,
-} from '#/state/queries/preferences/types'
-
-export type Label = ComAtprotoLabelDefs.Label
-
-export type LabelGroupConfig = {
- id: LabelGroup
- title: string
- isAdultImagery?: boolean
- subtitle?: string
- warning: string
- values: string[]
-}
-
-export const DEFAULT_LABEL_PREFERENCES: Record<
- ConfigurableLabelGroup,
- LabelPreference
-> = {
- nsfw: 'hide',
- nudity: 'warn',
- suggestive: 'warn',
- gore: 'warn',
- hate: 'hide',
- spam: 'hide',
- impersonation: 'hide',
-}
+import {useLabelersDetailedInfoQuery} from '../labeler'
+import {usePreferencesQuery} from './index'
/**
* More strict than our default settings for logged in users.
- *
- * TODO(pwi)
*/
-export const DEFAULT_LOGGED_OUT_LABEL_PREFERENCES: Record<
- ConfigurableLabelGroup,
- LabelPreference
-> = {
- nsfw: 'hide',
- nudity: 'hide',
- suggestive: 'hide',
- gore: 'hide',
- hate: 'hide',
- spam: 'hide',
- impersonation: 'hide',
-}
-
-export const ILLEGAL_LABEL_GROUP: LabelGroupConfig = {
- id: 'illegal',
- title: 'Illegal Content',
- warning: 'Illegal Content',
- values: ['csam', 'dmca-violation', 'nudity-nonconsensual'],
-}
-
-export const ALWAYS_FILTER_LABEL_GROUP: LabelGroupConfig = {
- id: 'always-filter',
- title: 'Content Warning',
- warning: 'Content Warning',
- values: ['!filter'],
-}
-
-export const ALWAYS_WARN_LABEL_GROUP: LabelGroupConfig = {
- id: 'always-warn',
- title: 'Content Warning',
- warning: 'Content Warning',
- values: ['!warn', 'account-security'],
-}
-
-export const UNKNOWN_LABEL_GROUP: LabelGroupConfig = {
- id: 'unknown',
- title: 'Unknown Label',
- warning: 'Content Warning',
- values: [],
-}
-
-export const CONFIGURABLE_LABEL_GROUPS: Record<
- ConfigurableLabelGroup,
- LabelGroupConfig
-> = {
- nsfw: {
- id: 'nsfw',
- title: 'Explicit Sexual Images',
- subtitle: 'i.e. pornography',
- warning: 'Sexually Explicit',
- values: ['porn', 'nsfl'],
- isAdultImagery: true,
- },
- nudity: {
- id: 'nudity',
- title: 'Other Nudity',
- subtitle: 'Including non-sexual and artistic',
- warning: 'Nudity',
- values: ['nudity'],
- isAdultImagery: true,
- },
- suggestive: {
- id: 'suggestive',
- title: 'Sexually Suggestive',
- subtitle: 'Does not include nudity',
- warning: 'Sexually Suggestive',
- values: ['sexual'],
- isAdultImagery: true,
- },
- gore: {
- id: 'gore',
- title: 'Violent / Bloody',
- subtitle: 'Gore, self-harm, torture',
- warning: 'Violence',
- values: ['gore', 'self-harm', 'torture', 'nsfl', 'corpse'],
- isAdultImagery: true,
- },
- hate: {
- id: 'hate',
- title: 'Hate Group Iconography',
- subtitle: 'Images of terror groups, articles covering events, etc.',
- warning: 'Hate Groups',
- values: ['icon-kkk', 'icon-nazi', 'icon-intolerant', 'behavior-intolerant'],
- },
- spam: {
- id: 'spam',
- title: 'Spam',
- subtitle: 'Excessive unwanted interactions',
- warning: 'Spam',
- values: ['spam'],
- },
- impersonation: {
- id: 'impersonation',
- title: 'Impersonation',
- subtitle: 'Accounts falsely claiming to be people or orgs',
- warning: 'Impersonation',
- values: ['impersonation'],
- },
-}
-
-export function getModerationOpts({
- userDid,
- preferences,
-}: {
- userDid: string
- preferences: UsePreferencesQueryResponse
-}): ModerationOpts {
- return {
- userDid: userDid,
- adultContentEnabled: preferences.adultContentEnabled,
- labels: {
- porn: preferences.contentLabels.nsfw,
- sexual: preferences.contentLabels.suggestive,
- nudity: preferences.contentLabels.nudity,
- nsfl: preferences.contentLabels.gore,
- corpse: preferences.contentLabels.gore,
- gore: preferences.contentLabels.gore,
- torture: preferences.contentLabels.gore,
- 'self-harm': preferences.contentLabels.gore,
- 'intolerant-race': preferences.contentLabels.hate,
- 'intolerant-gender': preferences.contentLabels.hate,
- 'intolerant-sexual-orientation': preferences.contentLabels.hate,
- 'intolerant-religion': preferences.contentLabels.hate,
- intolerant: preferences.contentLabels.hate,
- 'icon-intolerant': preferences.contentLabels.hate,
- spam: preferences.contentLabels.spam,
- impersonation: preferences.contentLabels.impersonation,
- scam: 'warn',
- },
- labelers: [
- {
- labeler: {
- did: '',
- displayName: 'Bluesky Social',
- },
- labels: {},
- },
- ],
- }
+export const DEFAULT_LOGGED_OUT_LABEL_PREFERENCES: typeof DEFAULT_LABEL_SETTINGS =
+ Object.fromEntries(
+ Object.entries(DEFAULT_LABEL_SETTINGS).map(([key, _pref]) => [key, 'hide']),
+ )
+
+export function useMyLabelersQuery() {
+ const prefs = usePreferencesQuery()
+ const dids = Array.from(
+ new Set(
+ BskyAgent.appLabelers.concat(
+ prefs.data?.moderationPrefs.labelers.map(l => l.did) || [],
+ ),
+ ),
+ )
+ const labelers = useLabelersDetailedInfoQuery({dids})
+ const isLoading = prefs.isLoading || labelers.isLoading
+ const error = prefs.error || labelers.error
+ return React.useMemo(() => {
+ return {
+ isLoading,
+ error,
+ data: labelers.data,
+ }
+ }, [labelers, isLoading, error])
+}
+
+export function useLabelDefinitionsQuery() {
+ const labelers = useMyLabelersQuery()
+ return React.useMemo(() => {
+ return {
+ labelDefs: Object.fromEntries(
+ (labelers.data || []).map(labeler => [
+ labeler.creator.did,
+ interpretLabelValueDefinitions(labeler),
+ ]),
+ ),
+ labelers: labelers.data || [],
+ }
+ }, [labelers])
}
diff --git a/src/state/queries/preferences/types.ts b/src/state/queries/preferences/types.ts
index 45c9eed7de..ba444fe029 100644
--- a/src/state/queries/preferences/types.ts
+++ b/src/state/queries/preferences/types.ts
@@ -1,46 +1,13 @@
import {
+ BskyFeedViewPreference,
BskyPreferences,
- LabelPreference,
BskyThreadViewPreference,
- BskyFeedViewPreference,
} from '@atproto/api'
-export const configurableAdultLabelGroups = [
- 'nsfw',
- 'nudity',
- 'suggestive',
- 'gore',
-] as const
-
-export const configurableOtherLabelGroups = [
- 'hate',
- 'spam',
- 'impersonation',
-] as const
-
-export const configurableLabelGroups = [
- ...configurableAdultLabelGroups,
- ...configurableOtherLabelGroups,
-] as const
-export type ConfigurableLabelGroup = (typeof configurableLabelGroups)[number]
-
-export type LabelGroup =
- | ConfigurableLabelGroup
- | 'illegal'
- | 'always-filter'
- | 'always-warn'
- | 'unknown'
-
export type UsePreferencesQueryResponse = Omit<
BskyPreferences,
'contentLabels' | 'feedViewPrefs' | 'feeds'
> & {
- /*
- * Content labels previously included 'show', which has been deprecated in
- * favor of 'ignore'. The API can return legacy data from the database, and
- * we clean up the data in `usePreferencesQuery`.
- */
- contentLabels: Record
feedViewPrefs: BskyFeedViewPreference & {
lab_mergeFeedEnabled?: boolean
}
diff --git a/src/state/queries/preferences/util.ts b/src/state/queries/preferences/util.ts
deleted file mode 100644
index 7b8160c283..0000000000
--- a/src/state/queries/preferences/util.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import {LabelPreference} from '@atproto/api'
-
-/**
- * Content labels previously included 'show', which has been deprecated in
- * favor of 'ignore'. The API can return legacy data from the database, and
- * we clean up the data in `usePreferencesQuery`.
- *
- * @deprecated
- */
-export function temp__migrateLabelPref(
- pref: LabelPreference | 'show',
-): LabelPreference {
- // @ts-ignore
- if (pref === 'show') return 'ignore'
- return pref
-}
diff --git a/src/state/queries/profile-extra-info.ts b/src/state/queries/profile-extra-info.ts
deleted file mode 100644
index 8fc32c33eb..0000000000
--- a/src/state/queries/profile-extra-info.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import {useQuery} from '@tanstack/react-query'
-
-import {getAgent} from '#/state/session'
-import {STALE} from '#/state/queries'
-
-// TODO refactor invalidate on mutate?
-export const RQKEY = (did: string) => ['profile-extra-info', did]
-
-/**
- * Fetches some additional information for the profile screen which
- * is not available in the API's ProfileView
- */
-export function useProfileExtraInfoQuery(did: string) {
- return useQuery({
- staleTime: STALE.MINUTES.ONE,
- queryKey: RQKEY(did),
- async queryFn() {
- const [listsRes, feedsRes] = await Promise.all([
- getAgent().app.bsky.graph.getLists({
- actor: did,
- limit: 1,
- }),
- getAgent().app.bsky.feed.getActorFeeds({
- actor: did,
- limit: 1,
- }),
- ])
- return {
- hasLists: listsRes.data.lists.length > 0,
- hasFeedgens: feedsRes.data.feeds.length > 0,
- }
- },
- })
-}
diff --git a/src/state/queries/profile-feedgens.ts b/src/state/queries/profile-feedgens.ts
index 7d33eb9c80..c690be1979 100644
--- a/src/state/queries/profile-feedgens.ts
+++ b/src/state/queries/profile-feedgens.ts
@@ -1,5 +1,5 @@
import {AppBskyFeedGetActorFeeds} from '@atproto/api'
-import {useInfiniteQuery, InfiniteData, QueryKey} from '@tanstack/react-query'
+import {InfiniteData, QueryKey, useInfiniteQuery} from '@tanstack/react-query'
import {getAgent} from '#/state/session'
@@ -7,7 +7,8 @@ const PAGE_SIZE = 30
type RQPageParam = string | undefined
// TODO refactor invalidate on mutate?
-export const RQKEY = (did: string) => ['profile-feedgens', did]
+const RQKEY_ROOT = 'profile-feedgens'
+export const RQKEY = (did: string) => [RQKEY_ROOT, did]
export function useProfileFeedgensQuery(
did: string,
diff --git a/src/state/queries/profile-followers.ts b/src/state/queries/profile-followers.ts
index fdefc82536..d7dfe25c64 100644
--- a/src/state/queries/profile-followers.ts
+++ b/src/state/queries/profile-followers.ts
@@ -1,9 +1,9 @@
import {AppBskyActorDefs, AppBskyGraphGetFollowers} from '@atproto/api'
import {
- useInfiniteQuery,
InfiniteData,
QueryClient,
QueryKey,
+ useInfiniteQuery,
} from '@tanstack/react-query'
import {getAgent} from '#/state/session'
@@ -11,7 +11,8 @@ import {getAgent} from '#/state/session'
const PAGE_SIZE = 30
type RQPageParam = string | undefined
-export const RQKEY = (did: string) => ['profile-followers', did]
+const RQKEY_ROOT = 'profile-followers'
+export const RQKEY = (did: string) => [RQKEY_ROOT, did]
export function useProfileFollowersQuery(did: string | undefined) {
return useInfiniteQuery<
@@ -43,7 +44,7 @@ export function* findAllProfilesInQueryData(
const queryDatas = queryClient.getQueriesData<
InfiniteData
>({
- queryKey: ['profile-followers'],
+ queryKey: [RQKEY_ROOT],
})
for (const [_queryKey, queryData] of queryDatas) {
if (!queryData?.pages) {
diff --git a/src/state/queries/profile-follows.ts b/src/state/queries/profile-follows.ts
index 428c8aebd1..3abac2f108 100644
--- a/src/state/queries/profile-follows.ts
+++ b/src/state/queries/profile-follows.ts
@@ -1,19 +1,20 @@
import {AppBskyActorDefs, AppBskyGraphGetFollows} from '@atproto/api'
import {
- useInfiniteQuery,
InfiniteData,
QueryClient,
QueryKey,
+ useInfiniteQuery,
} from '@tanstack/react-query'
-import {getAgent} from '#/state/session'
import {STALE} from '#/state/queries'
+import {getAgent} from '#/state/session'
const PAGE_SIZE = 30
type RQPageParam = string | undefined
// TODO refactor invalidate on mutate?
-export const RQKEY = (did: string) => ['profile-follows', did]
+const RQKEY_ROOT = 'profile-follows'
+export const RQKEY = (did: string) => [RQKEY_ROOT, did]
export function useProfileFollowsQuery(did: string | undefined) {
return useInfiniteQuery<
@@ -46,7 +47,7 @@ export function* findAllProfilesInQueryData(
const queryDatas = queryClient.getQueriesData<
InfiniteData
>({
- queryKey: ['profile-follows'],
+ queryKey: [RQKEY_ROOT],
})
for (const [_queryKey, queryData] of queryDatas) {
if (!queryData?.pages) {
diff --git a/src/state/queries/profile-lists.ts b/src/state/queries/profile-lists.ts
index 505d33b9fa..9cc395e435 100644
--- a/src/state/queries/profile-lists.ts
+++ b/src/state/queries/profile-lists.ts
@@ -1,11 +1,13 @@
import {AppBskyGraphGetLists} from '@atproto/api'
-import {useInfiniteQuery, InfiniteData, QueryKey} from '@tanstack/react-query'
+import {InfiniteData, QueryKey, useInfiniteQuery} from '@tanstack/react-query'
+
import {getAgent} from '#/state/session'
const PAGE_SIZE = 30
type RQPageParam = string | undefined
-export const RQKEY = (did: string) => ['profile-lists', did]
+const RQKEY_ROOT = 'profile-lists'
+export const RQKEY = (did: string) => [RQKEY_ROOT, did]
export function useProfileListsQuery(did: string, opts?: {enabled?: boolean}) {
const enabled = opts?.enabled !== false
diff --git a/src/state/queries/profile.ts b/src/state/queries/profile.ts
index e81ea0f3f0..a962fecff7 100644
--- a/src/state/queries/profile.ts
+++ b/src/state/queries/profile.ts
@@ -1,37 +1,47 @@
import {useCallback} from 'react'
+import {Image as RNImage} from 'react-native-image-crop-picker'
import {
- AtUri,
AppBskyActorDefs,
- AppBskyActorProfile,
AppBskyActorGetProfile,
- AppBskyFeedDefs,
+ AppBskyActorProfile,
AppBskyEmbedRecord,
AppBskyEmbedRecordWithMedia,
+ AppBskyFeedDefs,
+ AtUri,
} from '@atproto/api'
import {
+ QueryClient,
+ useMutation,
useQuery,
useQueryClient,
- useMutation,
- QueryClient,
} from '@tanstack/react-query'
-import {Image as RNImage} from 'react-native-image-crop-picker'
-import {useSession, getAgent} from '../session'
-import {updateProfileShadow} from '../cache/profile-shadow'
+
+import {track} from '#/lib/analytics/analytics'
import {uploadBlob} from '#/lib/api'
import {until} from '#/lib/async/until'
+import {useToggleMutationQueue} from '#/lib/hooks/useToggleMutationQueue'
+import {logEvent, LogEvents, toClout} from '#/lib/statsig/statsig'
import {Shadow} from '#/state/cache/types'
+import {STALE} from '#/state/queries'
import {resetProfilePostsQueries} from '#/state/queries/post-feed'
-import {useToggleMutationQueue} from '#/lib/hooks/useToggleMutationQueue'
-import {RQKEY as RQKEY_MY_MUTED} from './my-muted-accounts'
+import {updateProfileShadow} from '../cache/profile-shadow'
+import {getAgent, useSession} from '../session'
import {RQKEY as RQKEY_MY_BLOCKED} from './my-blocked-accounts'
-import {STALE} from '#/state/queries'
-import {track} from '#/lib/analytics/analytics'
+import {RQKEY as RQKEY_MY_MUTED} from './my-muted-accounts'
import {ThreadNode} from './post-thread'
-export const RQKEY = (did: string) => ['profile', did]
-export const profilesQueryKey = (handles: string[]) => ['profiles', handles]
+const RQKEY_ROOT = 'profile'
+export const RQKEY = (did: string) => [RQKEY_ROOT, did]
+
+const profilesQueryKeyRoot = 'profiles'
+export const profilesQueryKey = (handles: string[]) => [
+ profilesQueryKeyRoot,
+ handles,
+]
+
+const profileBasicQueryKeyRoot = 'profileBasic'
export const profileBasicQueryKey = (didOrHandle: string) => [
- 'profileBasic',
+ profileBasicQueryKeyRoot,
didOrHandle,
]
@@ -186,11 +196,14 @@ export function useProfileUpdateMutation() {
export function useProfileFollowMutationQueue(
profile: Shadow,
+ logContext: LogEvents['profile:follow']['logContext'] &
+ LogEvents['profile:unfollow']['logContext'],
) {
+ const queryClient = useQueryClient()
const did = profile.did
const initialFollowingUri = profile.viewer?.following
- const followMutation = useProfileFollowMutation()
- const unfollowMutation = useProfileUnfollowMutation()
+ const followMutation = useProfileFollowMutation(logContext, profile)
+ const unfollowMutation = useProfileUnfollowMutation(logContext)
const queueToggle = useToggleMutationQueue({
initialState: initialFollowingUri,
@@ -212,7 +225,7 @@ export function useProfileFollowMutationQueue(
},
onSuccess(finalFollowingUri) {
// finalize
- updateProfileShadow(did, {
+ updateProfileShadow(queryClient, did, {
followingUri: finalFollowingUri,
})
},
@@ -220,26 +233,43 @@ export function useProfileFollowMutationQueue(
const queueFollow = useCallback(() => {
// optimistically update
- updateProfileShadow(did, {
+ updateProfileShadow(queryClient, did, {
followingUri: 'pending',
})
return queueToggle(true)
- }, [did, queueToggle])
+ }, [queryClient, did, queueToggle])
const queueUnfollow = useCallback(() => {
// optimistically update
- updateProfileShadow(did, {
+ updateProfileShadow(queryClient, did, {
followingUri: undefined,
})
return queueToggle(false)
- }, [did, queueToggle])
+ }, [queryClient, did, queueToggle])
return [queueFollow, queueUnfollow]
}
-function useProfileFollowMutation() {
+function useProfileFollowMutation(
+ logContext: LogEvents['profile:follow']['logContext'],
+ profile: Shadow,
+) {
+ const {currentAccount} = useSession()
+ const queryClient = useQueryClient()
return useMutation<{uri: string; cid: string}, Error, {did: string}>({
mutationFn: async ({did}) => {
+ let ownProfile: AppBskyActorDefs.ProfileViewDetailed | undefined
+ if (currentAccount) {
+ ownProfile = findProfileQueryData(queryClient, currentAccount.did)
+ }
+ logEvent('profile:follow', {
+ logContext,
+ didBecomeMutual: profile.viewer
+ ? Boolean(profile.viewer.followedBy)
+ : undefined,
+ followeeClout: toClout(profile.followersCount),
+ followerClout: toClout(ownProfile?.followersCount),
+ })
return await getAgent().follow(did)
},
onSuccess(data, variables) {
@@ -248,9 +278,12 @@ function useProfileFollowMutation() {
})
}
-function useProfileUnfollowMutation() {
+function useProfileUnfollowMutation(
+ logContext: LogEvents['profile:unfollow']['logContext'],
+) {
return useMutation({
mutationFn: async ({followUri}) => {
+ logEvent('profile:unfollow', {logContext})
track('Profile:Unfollow', {username: followUri})
return await getAgent().deleteFollow(followUri)
},
@@ -260,6 +293,7 @@ function useProfileUnfollowMutation() {
export function useProfileMuteMutationQueue(
profile: Shadow,
) {
+ const queryClient = useQueryClient()
const did = profile.did
const initialMuted = profile.viewer?.muted
const muteMutation = useProfileMuteMutation()
@@ -282,25 +316,25 @@ export function useProfileMuteMutationQueue(
},
onSuccess(finalMuted) {
// finalize
- updateProfileShadow(did, {muted: finalMuted})
+ updateProfileShadow(queryClient, did, {muted: finalMuted})
},
})
const queueMute = useCallback(() => {
// optimistically update
- updateProfileShadow(did, {
+ updateProfileShadow(queryClient, did, {
muted: true,
})
return queueToggle(true)
- }, [did, queueToggle])
+ }, [queryClient, did, queueToggle])
const queueUnmute = useCallback(() => {
// optimistically update
- updateProfileShadow(did, {
+ updateProfileShadow(queryClient, did, {
muted: false,
})
return queueToggle(false)
- }, [did, queueToggle])
+ }, [queryClient, did, queueToggle])
return [queueMute, queueUnmute]
}
@@ -332,6 +366,7 @@ function useProfileUnmuteMutation() {
export function useProfileBlockMutationQueue(
profile: Shadow,
) {
+ const queryClient = useQueryClient()
const did = profile.did
const initialBlockingUri = profile.viewer?.blocking
const blockMutation = useProfileBlockMutation()
@@ -357,7 +392,7 @@ export function useProfileBlockMutationQueue(
},
onSuccess(finalBlockingUri) {
// finalize
- updateProfileShadow(did, {
+ updateProfileShadow(queryClient, did, {
blockingUri: finalBlockingUri,
})
},
@@ -365,19 +400,19 @@ export function useProfileBlockMutationQueue(
const queueBlock = useCallback(() => {
// optimistically update
- updateProfileShadow(did, {
+ updateProfileShadow(queryClient, did, {
blockingUri: 'pending',
})
return queueToggle(true)
- }, [did, queueToggle])
+ }, [queryClient, did, queueToggle])
const queueUnblock = useCallback(() => {
// optimistically update
- updateProfileShadow(did, {
+ updateProfileShadow(queryClient, did, {
blockingUri: undefined,
})
return queueToggle(false)
- }, [did, queueToggle])
+ }, [queryClient, did, queueToggle])
return [queueBlock, queueUnblock]
}
@@ -397,13 +432,14 @@ function useProfileBlockMutation() {
},
onSuccess(_, {did}) {
queryClient.invalidateQueries({queryKey: RQKEY_MY_BLOCKED()})
- resetProfilePostsQueries(did, 1000)
+ resetProfilePostsQueries(queryClient, did, 1000)
},
})
}
function useProfileUnblockMutation() {
const {currentAccount} = useSession()
+ const queryClient = useQueryClient()
return useMutation({
mutationFn: async ({blockUri}) => {
if (!currentAccount) {
@@ -416,7 +452,7 @@ function useProfileUnblockMutation() {
})
},
onSuccess(_, {did}) {
- resetProfilePostsQueries(did, 1000)
+ resetProfilePostsQueries(queryClient, did, 1000)
},
})
}
@@ -497,7 +533,7 @@ export function* findAllProfilesInQueryData(
): Generator {
const queryDatas =
queryClient.getQueriesData({
- queryKey: ['profile'],
+ queryKey: [RQKEY_ROOT],
})
for (const [_queryKey, queryData] of queryDatas) {
if (!queryData) {
@@ -508,3 +544,12 @@ export function* findAllProfilesInQueryData(
}
}
}
+
+export function findProfileQueryData(
+ queryClient: QueryClient,
+ did: string,
+): AppBskyActorDefs.ProfileViewDetailed | undefined {
+ return queryClient.getQueryData(
+ RQKEY(did),
+ )
+}
diff --git a/src/state/queries/resolve-uri.ts b/src/state/queries/resolve-uri.ts
index 95fc867ddf..18005cccf9 100644
--- a/src/state/queries/resolve-uri.ts
+++ b/src/state/queries/resolve-uri.ts
@@ -1,11 +1,12 @@
+import {AppBskyActorDefs, AtUri} from '@atproto/api'
import {useQuery, useQueryClient, UseQueryResult} from '@tanstack/react-query'
-import {AtUri, AppBskyActorDefs} from '@atproto/api'
-import {profileBasicQueryKey as RQKEY_PROFILE_BASIC} from './profile'
-import {getAgent} from '#/state/session'
import {STALE} from '#/state/queries'
+import {getAgent} from '#/state/session'
+import {profileBasicQueryKey as RQKEY_PROFILE_BASIC} from './profile'
-export const RQKEY = (didOrHandle: string) => ['resolved-did', didOrHandle]
+const RQKEY_ROOT = 'resolved-did'
+export const RQKEY = (didOrHandle: string) => [RQKEY_ROOT, didOrHandle]
type UriUseQueryResult = UseQueryResult<{did: string; uri: string}, Error>
export function useResolveUriQuery(uri: string | undefined): UriUseQueryResult {
diff --git a/src/state/queries/search-posts.ts b/src/state/queries/search-posts.ts
index e0b317ca9d..1822577c93 100644
--- a/src/state/queries/search-posts.ts
+++ b/src/state/queries/search-posts.ts
@@ -1,20 +1,30 @@
import {AppBskyFeedDefs, AppBskyFeedSearchPosts} from '@atproto/api'
import {
- useInfiniteQuery,
InfiniteData,
- QueryKey,
QueryClient,
+ QueryKey,
+ useInfiniteQuery,
} from '@tanstack/react-query'
import {getAgent} from '#/state/session'
import {embedViewRecordToPostView, getEmbeddedPost} from './util'
-const searchPostsQueryKey = ({query}: {query: string}) => [
- 'search-posts',
+const searchPostsQueryKeyRoot = 'search-posts'
+const searchPostsQueryKey = ({query, sort}: {query: string; sort?: string}) => [
+ searchPostsQueryKeyRoot,
query,
+ sort,
]
-export function useSearchPostsQuery({query}: {query: string}) {
+export function useSearchPostsQuery({
+ query,
+ sort,
+ enabled,
+}: {
+ query: string
+ sort?: 'top' | 'latest'
+ enabled?: boolean
+}) {
return useInfiniteQuery<
AppBskyFeedSearchPosts.OutputSchema,
Error,
@@ -22,17 +32,24 @@ export function useSearchPostsQuery({query}: {query: string}) {
QueryKey,
string | undefined
>({
- queryKey: searchPostsQueryKey({query}),
+ queryKey: searchPostsQueryKey({query, sort}),
queryFn: async ({pageParam}) => {
- const res = await getAgent().app.bsky.feed.searchPosts({
- q: query,
- limit: 25,
- cursor: pageParam,
- })
- return res.data
+ // waiting on new APIs
+ switch (sort) {
+ // case 'top':
+ // case 'latest':
+ default:
+ const res = await getAgent().app.bsky.feed.searchPosts({
+ q: query,
+ limit: 25,
+ cursor: pageParam,
+ })
+ return res.data
+ }
},
initialPageParam: undefined,
getNextPageParam: lastPage => lastPage.cursor,
+ enabled,
})
}
@@ -43,7 +60,7 @@ export function* findAllPostsInQueryData(
const queryDatas = queryClient.getQueriesData<
InfiniteData
>({
- queryKey: ['search-posts'],
+ queryKey: [searchPostsQueryKeyRoot],
})
for (const [_queryKey, queryData] of queryDatas) {
if (!queryData?.pages) {
diff --git a/src/state/queries/service.ts b/src/state/queries/service.ts
index 5f7e10778b..6bfd0b0114 100644
--- a/src/state/queries/service.ts
+++ b/src/state/queries/service.ts
@@ -1,7 +1,8 @@
import {BskyAgent} from '@atproto/api'
import {useQuery} from '@tanstack/react-query'
-export const RQKEY = (serviceUrl: string) => ['service', serviceUrl]
+const RQKEY_ROOT = 'service'
+export const RQKEY = (serviceUrl: string) => [RQKEY_ROOT, serviceUrl]
export function useServiceQuery(serviceUrl: string) {
return useQuery({
diff --git a/src/state/queries/suggested-feeds.ts b/src/state/queries/suggested-feeds.ts
index 7e6b534ad5..3be0c0b892 100644
--- a/src/state/queries/suggested-feeds.ts
+++ b/src/state/queries/suggested-feeds.ts
@@ -1,10 +1,11 @@
-import {useInfiniteQuery, InfiniteData, QueryKey} from '@tanstack/react-query'
import {AppBskyFeedGetSuggestedFeeds} from '@atproto/api'
+import {InfiniteData, QueryKey, useInfiniteQuery} from '@tanstack/react-query'
-import {getAgent} from '#/state/session'
import {STALE} from '#/state/queries'
+import {getAgent} from '#/state/session'
-export const suggestedFeedsQueryKey = ['suggestedFeeds']
+const suggestedFeedsQueryKeyRoot = 'suggestedFeeds'
+export const suggestedFeedsQueryKey = [suggestedFeedsQueryKeyRoot]
export function useSuggestedFeedsQuery() {
return useInfiniteQuery<
diff --git a/src/state/queries/suggested-follows.ts b/src/state/queries/suggested-follows.ts
index 932226b75c..a93f935f25 100644
--- a/src/state/queries/suggested-follows.ts
+++ b/src/state/queries/suggested-follows.ts
@@ -6,21 +6,24 @@ import {
moderateProfile,
} from '@atproto/api'
import {
- useInfiniteQuery,
- useQueryClient,
- useQuery,
InfiniteData,
QueryClient,
QueryKey,
+ useInfiniteQuery,
+ useQuery,
+ useQueryClient,
} from '@tanstack/react-query'
-import {useSession, getAgent} from '#/state/session'
-import {useModerationOpts} from '#/state/queries/preferences'
import {STALE} from '#/state/queries'
+import {useModerationOpts} from '#/state/queries/preferences'
+import {getAgent, useSession} from '#/state/session'
+
+const suggestedFollowsQueryKeyRoot = 'suggested-follows'
+const suggestedFollowsQueryKey = [suggestedFollowsQueryKeyRoot]
-const suggestedFollowsQueryKey = ['suggested-follows']
+const suggestedFollowsByActorQueryKeyRoot = 'suggested-follows-by-actor'
const suggestedFollowsByActorQueryKey = (did: string) => [
- 'suggested-follows-by-actor',
+ suggestedFollowsByActorQueryKeyRoot,
did,
]
@@ -46,7 +49,8 @@ export function useSuggestedFollowsQuery() {
res.data.actors = res.data.actors
.filter(
- actor => !moderateProfile(actor, moderationOpts!).account.filter,
+ actor =>
+ !moderateProfile(actor, moderationOpts!).ui('profileList').filter,
)
.filter(actor => {
const viewer = actor.viewer
@@ -124,7 +128,7 @@ function* findAllProfilesInSuggestedFollowsQueryData(
const queryDatas = queryClient.getQueriesData<
InfiniteData
>({
- queryKey: ['suggested-follows'],
+ queryKey: [suggestedFollowsQueryKeyRoot],
})
for (const [_queryKey, queryData] of queryDatas) {
if (!queryData?.pages) {
@@ -147,7 +151,7 @@ function* findAllProfilesInSuggestedFollowsByActorQueryData(
const queryDatas =
queryClient.getQueriesData(
{
- queryKey: ['suggested-follows-by-actor'],
+ queryKey: [suggestedFollowsByActorQueryKeyRoot],
},
)
for (const [_queryKey, queryData] of queryDatas) {
diff --git a/src/state/queries/util.ts b/src/state/queries/util.ts
index f3a87ae5db..24f28ca529 100644
--- a/src/state/queries/util.ts
+++ b/src/state/queries/util.ts
@@ -1,10 +1,10 @@
-import {QueryClient, QueryKey, InfiniteData} from '@tanstack/react-query'
import {
AppBskyEmbedRecord,
AppBskyEmbedRecordWithMedia,
AppBskyFeedDefs,
AppBskyFeedPost,
} from '@atproto/api'
+import {InfiniteData, QueryClient, QueryKey} from '@tanstack/react-query'
export function truncateAndInvalidate(
queryClient: QueryClient,
@@ -53,5 +53,6 @@ export function embedViewRecordToPostView(
record: v.value,
indexedAt: v.indexedAt,
labels: v.labels,
+ embed: v.embeds?.[0],
}
}
diff --git a/src/state/session/agent-config.ts b/src/state/session/agent-config.ts
new file mode 100644
index 0000000000..3ee2718a39
--- /dev/null
+++ b/src/state/session/agent-config.ts
@@ -0,0 +1,12 @@
+import AsyncStorage from '@react-native-async-storage/async-storage'
+
+const PREFIX = 'agent-labelers'
+
+export async function saveLabelers(did: string, value: string[]) {
+ await AsyncStorage.setItem(`${PREFIX}:${did}`, JSON.stringify(value))
+}
+
+export async function readLabelers(did: string): Promise {
+ const rawData = await AsyncStorage.getItem(`${PREFIX}:${did}`)
+ return rawData ? JSON.parse(rawData) : undefined
+}
diff --git a/src/state/session/index.tsx b/src/state/session/index.tsx
index b555a997b8..5c7cc15916 100644
--- a/src/state/session/index.tsx
+++ b/src/state/session/index.tsx
@@ -1,18 +1,25 @@
import React from 'react'
-import {BskyAgent, AtpPersistSessionHandler} from '@atproto/api'
-import {useQueryClient} from '@tanstack/react-query'
+import {
+ AtpPersistSessionHandler,
+ BSKY_LABELER_DID,
+ BskyAgent,
+} from '@atproto/api'
import {jwtDecode} from 'jwt-decode'
+import {track} from '#/lib/analytics/analytics'
import {networkRetry} from '#/lib/async/retry'
+import {IS_TEST_USER} from '#/lib/constants'
+import {logEvent, LogEvents} from '#/lib/statsig/statsig'
+import {hasProp} from '#/lib/type-guards'
import {logger} from '#/logger'
+import {isWeb} from '#/platform/detection'
import * as persisted from '#/state/persisted'
import {PUBLIC_BSKY_AGENT} from '#/state/queries'
-import {IS_PROD} from '#/lib/constants'
-import {emitSessionDropped} from '../events'
import {useLoggedOutViewControls} from '#/state/shell/logged-out'
import {useCloseAllActiveElements} from '#/state/util'
-import {track} from '#/lib/analytics/analytics'
-import {hasProp} from '#/lib/type-guards'
+import {IS_DEV} from '#/env'
+import {emitSessionDropped} from '../events'
+import {readLabelers} from './agent-config'
let __globalAgent: BskyAgent = PUBLIC_BSKY_AGENT
@@ -36,7 +43,6 @@ export type SessionState = {
}
export type StateContext = SessionState & {
hasSession: boolean
- isSandbox: boolean
}
export type ApiContext = {
createAccount: (props: {
@@ -48,17 +54,22 @@ export type ApiContext = {
verificationPhone?: string
verificationCode?: string
}) => Promise
- login: (props: {
- service: string
- identifier: string
- password: string
- }) => Promise
+ login: (
+ props: {
+ service: string
+ identifier: string
+ password: string
+ },
+ logContext: LogEvents['account:loggedIn']['logContext'],
+ ) => Promise
/**
* A full logout. Clears the `currentAccount` from session, AND removes
* access tokens from all accounts, so that returning as any user will
* require a full login.
*/
- logout: () => Promise
+ logout: (
+ logContext: LogEvents['account:loggedOut']['logContext'],
+ ) => Promise
/**
* A partial logout. Clears the `currentAccount` from session, but DOES NOT
* clear access tokens from accounts, allowing the user to return to their
@@ -70,7 +81,10 @@ export type ApiContext = {
initSession: (account: SessionAccount) => Promise
resumeSession: (account?: SessionAccount) => Promise
removeAccount: (account: SessionAccount) => void
- selectAccount: (account: SessionAccount) => Promise
+ selectAccount: (
+ account: SessionAccount,
+ logContext: LogEvents['account:loggedIn']['logContext'],
+ ) => Promise
updateCurrentAccount: (
account: Partial<
Pick
@@ -84,7 +98,6 @@ const StateContext = React.createContext({
accounts: [],
currentAccount: undefined,
hasSession: false,
- isSandbox: false,
})
const ApiContext = React.createContext({
@@ -136,7 +149,7 @@ function createPersistSessionHandler(
accessJwt: session?.accessJwt,
}
- logger.info(`session: persistSession`, {
+ logger.debug(`session: persistSession`, {
event,
deactivated: refreshedAccount.deactivated,
})
@@ -164,7 +177,6 @@ function createPersistSessionHandler(
}
export function Provider({children}: React.PropsWithChildren<{}>) {
- const queryClient = useQueryClient()
const isDirty = React.useRef(false)
const [state, setState] = React.useState({
isInitialLoad: true,
@@ -197,12 +209,11 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
const clearCurrentAccount = React.useCallback(() => {
logger.warn(`session: clear current account`)
__globalAgent = PUBLIC_BSKY_AGENT
- queryClient.clear()
setStateAndPersist(s => ({
...s,
currentAccount: undefined,
}))
- }, [setStateAndPersist, queryClient])
+ }, [setStateAndPersist])
const createAccount = React.useCallback(
async ({
@@ -216,6 +227,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
}: any) => {
logger.info(`session: creating account`)
track('Try Create Account')
+ logEvent('account:create:begin', {})
const agent = new BskyAgent({service})
@@ -258,6 +270,8 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
deactivated,
}
+ await configureModeration(agent, account)
+
agent.setPersistSessionHandler(
createPersistSessionHandler(
account,
@@ -269,17 +283,17 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
)
__globalAgent = agent
- queryClient.clear()
upsertAccount(account)
logger.debug(`session: created account`, {}, logger.DebugContext.session)
track('Create Account')
+ logEvent('account:create:success', {})
},
- [upsertAccount, queryClient, clearCurrentAccount],
+ [upsertAccount, clearCurrentAccount],
)
const login = React.useCallback(
- async ({service, identifier, password}) => {
+ async ({service, identifier, password}, logContext) => {
logger.debug(`session: login`, {}, logger.DebugContext.session)
const agent = new BskyAgent({service})
@@ -301,6 +315,8 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
deactivated: isSessionDeactivated(agent.session.accessJwt),
}
+ await configureModeration(agent, account)
+
agent.setPersistSessionHandler(
createPersistSessionHandler(
account,
@@ -312,30 +328,36 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
)
__globalAgent = agent
- queryClient.clear()
+ // @ts-ignore
+ if (IS_DEV && isWeb) window.agent = agent
upsertAccount(account)
logger.debug(`session: logged in`, {}, logger.DebugContext.session)
track('Sign In', {resumedSession: false})
+ logEvent('account:loggedIn', {logContext, withPassword: true})
},
- [upsertAccount, queryClient, clearCurrentAccount],
+ [upsertAccount, clearCurrentAccount],
)
- const logout = React.useCallback(async () => {
- logger.info(`session: logout`)
- clearCurrentAccount()
- setStateAndPersist(s => {
- return {
- ...s,
- accounts: s.accounts.map(a => ({
- ...a,
- refreshJwt: undefined,
- accessJwt: undefined,
- })),
- }
- })
- }, [clearCurrentAccount, setStateAndPersist])
+ const logout = React.useCallback(
+ async logContext => {
+ logger.debug(`session: logout`)
+ clearCurrentAccount()
+ setStateAndPersist(s => {
+ return {
+ ...s,
+ accounts: s.accounts.map(a => ({
+ ...a,
+ refreshJwt: undefined,
+ accessJwt: undefined,
+ })),
+ }
+ })
+ logEvent('account:loggedOut', {logContext})
+ },
+ [clearCurrentAccount, setStateAndPersist],
+ )
const initSession = React.useCallback(
async account => {
@@ -351,6 +373,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
{networkErrorCallback: clearCurrentAccount},
),
})
+ // @ts-ignore
+ if (IS_DEV && isWeb) window.agent = agent
+ await configureModeration(agent, account)
let canReusePrevSession = false
try {
@@ -377,17 +402,16 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
}
if (canReusePrevSession) {
- logger.info(`session: attempting to reuse previous session`)
+ logger.debug(`session: attempting to reuse previous session`)
agent.session = prevSession
__globalAgent = agent
- queryClient.clear()
upsertAccount(account)
if (prevSession.deactivated) {
// don't attempt to resume
// use will be taken to the deactivated screen
- logger.info(`session: reusing session for deactivated account`)
+ logger.debug(`session: reusing session for deactivated account`)
return
}
@@ -413,12 +437,11 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
__globalAgent = PUBLIC_BSKY_AGENT
})
} else {
- logger.info(`session: attempting to resume using previous session`)
+ logger.debug(`session: attempting to resume using previous session`)
try {
const freshAccount = await resumeSessionWithFreshAccount()
__globalAgent = agent
- queryClient.clear()
upsertAccount(freshAccount)
} catch (e) {
/*
@@ -434,7 +457,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
}
async function resumeSessionWithFreshAccount(): Promise {
- logger.info(`session: resumeSessionWithFreshAccount`)
+ logger.debug(`session: resumeSessionWithFreshAccount`)
await networkRetry(1, () => agent.resumeSession(prevSession))
@@ -459,7 +482,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
}
}
},
- [upsertAccount, queryClient, clearCurrentAccount],
+ [upsertAccount, clearCurrentAccount],
)
const resumeSession = React.useCallback(
@@ -526,11 +549,12 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
)
const selectAccount = React.useCallback(
- async account => {
+ async (account, logContext) => {
setState(s => ({...s, isSwitchingAccounts: true}))
try {
await initSession(account)
setState(s => ({...s, isSwitchingAccounts: false}))
+ logEvent('account:loggedIn', {logContext, withPassword: false})
} catch (e) {
// reset this in case of error
setState(s => ({...s, isSwitchingAccounts: false}))
@@ -555,11 +579,11 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
return persisted.onUpdate(() => {
const session = persisted.get('session')
- logger.info(`session: persisted onUpdate`, {})
+ logger.debug(`session: persisted onUpdate`, {})
if (session.currentAccount && session.currentAccount.refreshJwt) {
if (session.currentAccount?.did !== state.currentAccount?.did) {
- logger.info(`session: persisted onUpdate, switching accounts`, {
+ logger.debug(`session: persisted onUpdate, switching accounts`, {
from: {
did: state.currentAccount?.did,
handle: state.currentAccount?.handle,
@@ -572,7 +596,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
initSession(session.currentAccount)
} else {
- logger.info(`session: persisted onUpdate, updating session`, {})
+ logger.debug(`session: persisted onUpdate, updating session`, {})
/*
* Use updated session in this tab's agent. Do not call
@@ -610,9 +634,6 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
() => ({
...state,
hasSession: !!state.currentAccount,
- isSandbox: state.currentAccount
- ? !IS_PROD(state.currentAccount?.service)
- : false,
}),
[state],
)
@@ -649,6 +670,28 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
)
}
+async function configureModeration(agent: BskyAgent, account: SessionAccount) {
+ if (IS_TEST_USER(account.handle)) {
+ const did = (
+ await agent
+ .resolveHandle({handle: 'mod-authority.test'})
+ .catch(_ => undefined)
+ )?.data.did
+ if (did) {
+ console.warn('USING TEST ENV MODERATION')
+ BskyAgent.configure({appLabelers: [did]})
+ }
+ } else {
+ BskyAgent.configure({appLabelers: [BSKY_LABELER_DID]})
+ const labelerDids = await readLabelers(account.did).catch(_ => {})
+ if (labelerDids) {
+ agent.configureLabelersHeader(
+ labelerDids.filter(did => did !== BSKY_LABELER_DID),
+ )
+ }
+ }
+}
+
export function useSession() {
return React.useContext(StateContext)
}
diff --git a/src/state/shell/composer.tsx b/src/state/shell/composer.tsx
index 696a3c5ba1..048b747aac 100644
--- a/src/state/shell/composer.tsx
+++ b/src/state/shell/composer.tsx
@@ -1,22 +1,20 @@
import React from 'react'
import {
+ AppBskyActorDefs,
AppBskyEmbedRecord,
AppBskyRichtextFacet,
- PostModeration,
+ ModerationDecision,
} from '@atproto/api'
+
import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback'
export interface ComposerOptsPostRef {
uri: string
cid: string
text: string
- author: {
- handle: string
- displayName?: string
- avatar?: string
- }
+ author: AppBskyActorDefs.ProfileViewBasic
embed?: AppBskyEmbedRecord.ViewRecord['embed']
- moderation?: PostModeration
+ moderation?: ModerationDecision
}
export interface ComposerOptsQuote {
uri: string
@@ -38,6 +36,8 @@ export interface ComposerOpts {
quote?: ComposerOptsQuote
mention?: string // handle of user to mention
openPicker?: (pos: DOMRect | undefined) => void
+ text?: string
+ imageUris?: {uri: string; width: number; height: number}[]
}
type StateContext = ComposerOpts | undefined
diff --git a/src/state/shell/selected-feed.tsx b/src/state/shell/selected-feed.tsx
index a05d8661b4..5c0ac0b02a 100644
--- a/src/state/shell/selected-feed.tsx
+++ b/src/state/shell/selected-feed.tsx
@@ -1,6 +1,8 @@
import React from 'react'
-import * as persisted from '#/state/persisted'
+
+import {useGate} from '#/lib/statsig/statsig'
import {isWeb} from '#/platform/detection'
+import * as persisted from '#/state/persisted'
type StateContext = string
type SetContext = (v: string) => void
@@ -8,7 +10,7 @@ type SetContext = (v: string) => void
const stateContext = React.createContext('home')
const setContext = React.createContext((_: string) => {})
-function getInitialFeed() {
+function getInitialFeed(startSessionWithFollowing: boolean) {
if (isWeb) {
if (window.location.pathname === '/') {
const params = new URLSearchParams(window.location.search)
@@ -24,16 +26,21 @@ function getInitialFeed() {
return feedFromSession
}
}
- const feedFromPersisted = persisted.get('lastSelectedHomeFeed')
- if (feedFromPersisted) {
- // Fall back to the last chosen one across all tabs.
- return feedFromPersisted
+ if (!startSessionWithFollowing) {
+ const feedFromPersisted = persisted.get('lastSelectedHomeFeed')
+ if (feedFromPersisted) {
+ // Fall back to the last chosen one across all tabs.
+ return feedFromPersisted
+ }
}
return 'home'
}
export function Provider({children}: React.PropsWithChildren<{}>) {
- const [state, setState] = React.useState(getInitialFeed)
+ const startSessionWithFollowing = useGate('start_session_with_following')
+ const [state, setState] = React.useState(() =>
+ getInitialFeed(startSessionWithFollowing),
+ )
const saveState = React.useCallback((feed: string) => {
setState(feed)
diff --git a/src/state/util.ts b/src/state/util.ts
index 57f4331b05..b452b941a2 100644
--- a/src/state/util.ts
+++ b/src/state/util.ts
@@ -1,4 +1,6 @@
import {useCallback} from 'react'
+
+import {useDialogStateControlContext} from '#/state/dialogs'
import {useLightboxControls} from './lightbox'
import {useModalControls} from './modals'
import {useComposerControls} from './shell/composer'
@@ -12,6 +14,7 @@ export function useCloseAnyActiveElement() {
const {closeLightbox} = useLightboxControls()
const {closeModal} = useModalControls()
const {closeComposer} = useComposerControls()
+ const {closeAllDialogs} = useDialogStateControlContext()
const setDrawerOpen = useSetDrawerOpen()
return useCallback(() => {
if (closeLightbox()) {
@@ -23,9 +26,12 @@ export function useCloseAnyActiveElement() {
if (closeComposer()) {
return true
}
+ if (closeAllDialogs()) {
+ return true
+ }
setDrawerOpen(false)
return false
- }, [closeLightbox, closeModal, closeComposer, setDrawerOpen])
+ }, [closeLightbox, closeModal, closeComposer, setDrawerOpen, closeAllDialogs])
}
/**
@@ -35,11 +41,19 @@ export function useCloseAllActiveElements() {
const {closeLightbox} = useLightboxControls()
const {closeAllModals} = useModalControls()
const {closeComposer} = useComposerControls()
+ const {closeAllDialogs: closeAlfDialogs} = useDialogStateControlContext()
const setDrawerOpen = useSetDrawerOpen()
return useCallback(() => {
closeLightbox()
closeAllModals()
closeComposer()
+ closeAlfDialogs()
setDrawerOpen(false)
- }, [closeLightbox, closeAllModals, closeComposer, setDrawerOpen])
+ }, [
+ closeLightbox,
+ closeAllModals,
+ closeComposer,
+ closeAlfDialogs,
+ setDrawerOpen,
+ ])
}
diff --git a/src/view/com/auth/HomeLoggedOutCTA.tsx b/src/view/com/auth/HomeLoggedOutCTA.tsx
index f796d8baee..4c8c35da73 100644
--- a/src/view/com/auth/HomeLoggedOutCTA.tsx
+++ b/src/view/com/auth/HomeLoggedOutCTA.tsx
@@ -1,14 +1,15 @@
import React from 'react'
import {StyleSheet, TouchableOpacity, View} from 'react-native'
+import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
-import {Trans, msg} from '@lingui/macro'
-import {ScrollView} from '../util/Views'
-import {Text} from '../util/text/Text'
+
import {usePalette} from '#/lib/hooks/usePalette'
-import {colors, s} from '#/lib/styles'
-import {TextLink} from '../util/Link'
import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
+import {colors, s} from '#/lib/styles'
import {useLoggedOutViewControls} from '#/state/shell/logged-out'
+import {TextLink} from '../util/Link'
+import {Text} from '../util/text/Text'
+import {ScrollView} from '../util/Views'
export function HomeLoggedOutCTA() {
const pal = usePalette('default')
@@ -52,7 +53,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`,
+ )}>
- Sign In
+ Sign in
diff --git a/src/view/com/auth/LoggedOut.tsx b/src/view/com/auth/LoggedOut.tsx
index 603abbab2d..c8c81dd771 100644
--- a/src/view/com/auth/LoggedOut.tsx
+++ b/src/view/com/auth/LoggedOut.tsx
@@ -1,27 +1,28 @@
import React from 'react'
-import {View, Pressable} from 'react-native'
+import {Pressable, View} from 'react-native'
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
-import {Trans, msg} from '@lingui/macro'
import {useNavigation} from '@react-navigation/native'
-import {isIOS, isNative} from 'platform/detection'
-import {Login} from 'view/com/auth/login/Login'
-import {CreateAccount} from 'view/com/auth/create/CreateAccount'
-import {ErrorBoundary} from 'view/com/util/ErrorBoundary'
-import {s} from 'lib/styles'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useAnalytics} from 'lib/analytics/analytics'
-import {SplashScreen} from './SplashScreen'
-import {useSetMinimalShellMode} from '#/state/shell/minimal-mode'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import {useAnalytics} from '#/lib/analytics/analytics'
+import {usePalette} from '#/lib/hooks/usePalette'
+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
+import {logEvent} from '#/lib/statsig/statsig'
+import {s} from '#/lib/styles'
+import {isIOS, isNative} from '#/platform/detection'
+import {useSession} from '#/state/session'
import {
useLoggedOutView,
useLoggedOutViewControls,
} from '#/state/shell/logged-out'
-import {useSession} from '#/state/session'
-import {Text} from '#/view/com/util/text/Text'
+import {useSetMinimalShellMode} from '#/state/shell/minimal-mode'
import {NavigationProp} from 'lib/routes/types'
+import {ErrorBoundary} from '#/view/com/util/ErrorBoundary'
+import {Text} from '#/view/com/util/text/Text'
+import {Login} from '#/screens/Login'
+import {Signup} from '#/screens/Signup'
+import {SplashScreen} from './SplashScreen'
enum ScreenState {
S_LoginOrCreateAccount,
@@ -133,10 +134,14 @@ export function LoggedOut({onDismiss}: {onDismiss?: () => void}) {
{screenState === ScreenState.S_LoginOrCreateAccount ? (
setScreenState(ScreenState.S_Login)}
- onPressCreateAccount={() =>
+ onPressSignin={() => {
+ setScreenState(ScreenState.S_Login)
+ logEvent('splash:signInPressed', {})
+ }}
+ onPressCreateAccount={() => {
setScreenState(ScreenState.S_CreateAccount)
- }
+ logEvent('splash:createAccountPressed', {})
+ }}
/>
) : undefined}
{screenState === ScreenState.S_Login ? (
@@ -148,7 +153,7 @@ export function LoggedOut({onDismiss}: {onDismiss?: () => void}) {
/>
) : undefined}
{screenState === ScreenState.S_CreateAccount ? (
-
setScreenState(ScreenState.S_LoginOrCreateAccount)
}
diff --git a/src/view/com/auth/SplashScreen.tsx b/src/view/com/auth/SplashScreen.tsx
index 134ae11f10..763b01dfa1 100644
--- a/src/view/com/auth/SplashScreen.tsx
+++ b/src/view/com/auth/SplashScreen.tsx
@@ -1,23 +1,21 @@
import React from 'react'
-import {StyleSheet, TouchableOpacity, View} from 'react-native'
+import {View} from 'react-native'
+import RNPickerSelect, {PickerSelectProps} from 'react-native-picker-select'
import {useSafeAreaInsets} from 'react-native-safe-area-context'
-import {Text} from 'view/com/util/text/Text'
-import {ErrorBoundary} from 'view/com/util/ErrorBoundary'
-import {s, colors} from 'lib/styles'
-import {usePalette} from 'lib/hooks/usePalette'
-import {CenteredView} from '../util/Views'
-import {Trans, msg} from '@lingui/macro'
+import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
-import {Logo} from '#/view/icons/Logo'
-import {Logotype} from '#/view/icons/Logotype'
-import {
- FontAwesomeIcon,
- FontAwesomeIconStyle,
-} from '@fortawesome/react-native-fontawesome'
-import RNPickerSelect, {PickerSelectProps} from 'react-native-picker-select'
+
import {sanitizeAppLanguageSetting} from '#/locale/helpers'
-import {useLanguagePrefs, useLanguagePrefsApi} from '#/state/preferences'
import {APP_LANGUAGES} from '#/locale/languages'
+import {useLanguagePrefs, useLanguagePrefsApi} from '#/state/preferences'
+import {Logo} from '#/view/icons/Logo'
+import {Logotype} from '#/view/icons/Logotype'
+import {ErrorBoundary} from 'view/com/util/ErrorBoundary'
+import {atoms as a, useTheme} from '#/alf'
+import {Button, ButtonText} from '#/components/Button'
+import {ChevronBottom_Stroke2_Corner0_Rounded as ChevronDown} from '#/components/icons/Chevron'
+import {Text} from '#/components/Typography'
+import {CenteredView} from '../util/Views'
export const SplashScreen = ({
onPressSignin,
@@ -26,7 +24,7 @@ export const SplashScreen = ({
onPressSignin: () => void
onPressCreateAccount: () => void
}) => {
- const pal = usePalette('default')
+ const t = useTheme()
const {_} = useLingui()
const langPrefs = useLanguagePrefs()
@@ -46,45 +44,62 @@ export const SplashScreen = ({
)
return (
-
+
-
+
-
-
+
+
-
+
What's up?
-
-
+
-
+
+
+ label={_(msg`Sign in`)}
+ accessibilityHint={_(
+ msg`Opens flow to sign into your existing Bluesky account`,
+ )}
+ style={[a.mx_xl, a.mb_xl]}
+ size="large"
+ variant="solid"
+ color="secondary">
+
+ Sign in
+
+
-
-
+
+
-
+ style={[
+ a.absolute,
+ a.inset_0,
+ {left: 'auto'},
+ {pointerEvents: 'none'},
+ a.align_center,
+ a.justify_center,
+ ]}>
+
@@ -132,44 +142,3 @@ export const SplashScreen = ({
)
}
-
-const styles = StyleSheet.create({
- container: {
- height: '100%',
- },
- hero: {
- flex: 2,
- justifyContent: 'center',
- alignItems: 'center',
- },
- btns: {
- paddingBottom: 0,
- },
- title: {
- textAlign: 'center',
- fontSize: 68,
- fontWeight: 'bold',
- },
- subtitle: {
- textAlign: 'center',
- fontSize: 42,
- fontWeight: 'bold',
- },
- btn: {
- borderRadius: 32,
- paddingVertical: 16,
- marginBottom: 20,
- marginHorizontal: 20,
- },
- btnLabel: {
- textAlign: 'center',
- fontSize: 21,
- },
- footer: {
- paddingHorizontal: 16,
- paddingTop: 12,
- paddingBottom: 24,
- justifyContent: 'center',
- alignItems: 'center',
- },
-})
diff --git a/src/view/com/auth/SplashScreen.web.tsx b/src/view/com/auth/SplashScreen.web.tsx
index f1921c7ffb..7a2ee16cf3 100644
--- a/src/view/com/auth/SplashScreen.web.tsx
+++ b/src/view/com/auth/SplashScreen.web.tsx
@@ -1,21 +1,22 @@
import React from 'react'
-import {StyleSheet, TouchableOpacity, View, Pressable} from 'react-native'
+import {Pressable, View} from 'react-native'
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import {Text} from 'view/com/util/text/Text'
-import {TextLink} from '../util/Link'
-import {ErrorBoundary} from 'view/com/util/ErrorBoundary'
-import {s, colors} from 'lib/styles'
-import {usePalette} from 'lib/hooks/usePalette'
-import {CenteredView} from '../util/Views'
-import {isWeb} from 'platform/detection'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {Trans, msg} from '@lingui/macro'
-import {Logo} from '#/view/icons/Logo'
-import {Logotype} from '#/view/icons/Logotype'
+import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+
import {sanitizeAppLanguageSetting} from '#/locale/helpers'
-import {useLanguagePrefs, useLanguagePrefsApi} from '#/state/preferences'
import {APP_LANGUAGES} from '#/locale/languages'
+import {useLanguagePrefs, useLanguagePrefsApi} from '#/state/preferences'
+import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import {Logo} from '#/view/icons/Logo'
+import {Logotype} from '#/view/icons/Logotype'
+import {ErrorBoundary} from 'view/com/util/ErrorBoundary'
+import {atoms as a, useTheme} from '#/alf'
+import {Button, ButtonText} from '#/components/Button'
+import {ChevronBottom_Stroke2_Corner0_Rounded as ChevronDown} from '#/components/icons/Chevron'
+import {InlineLinkText} from '#/components/Link'
+import {Text} from '#/components/Typography'
+import {CenteredView} from '../util/Views'
export const SplashScreen = ({
onDismiss,
@@ -26,10 +27,9 @@ export const SplashScreen = ({
onPressSignin: () => void
onPressCreateAccount: () => void
}) => {
- const pal = usePalette('default')
- const {isTabletOrMobile} = useWebMediaQueries()
- const styles = useStyles()
- const isMobileWeb = isWeb && isTabletOrMobile
+ const {_} = useLingui()
+ const t = useTheme()
+ const {isTabletOrMobile: isMobileWeb} = useWebMediaQueries()
return (
<>
@@ -48,61 +48,88 @@ export const SplashScreen = ({
icon="x"
size={24}
style={{
- color: String(pal.text.color),
+ color: String(t.atoms.text.color),
}}
/>
)}
-
+
-
+
+
+
+
+
+
-
-
+
+ What's up?
+
-
-
+
-
+
+
+ label={_(msg`Sign in`)}
+ accessibilityHint={_(
+ msg`Opens flow to sign into your existing Bluesky account`,
+ )}
+ style={[a.mx_xl, a.mb_xl]}
+ size="large"
+ variant="solid"
+ color="secondary">
+
+ Sign in
+
+
-
+
>
)
}
-function Footer({styles}: {styles: ReturnType}) {
- const pal = usePalette('default')
- const {_} = useLingui()
+function Footer() {
+ const t = useTheme()
const langPrefs = useLanguagePrefs()
const setLangPrefs = useLanguagePrefsApi()
@@ -122,39 +149,39 @@ function Footer({styles}: {styles: ReturnType}) {
)
return (
-
-
-
-
+
+
+ Business
+
+
+ Blog
+
+
+ Jobs
+
-
+
-
-
+
+
{APP_LANGUAGES.find(l => l.code2 === sanitizedLang)?.name}
-
)
}
-const useStyles = () => {
- return StyleSheet.create({
- container: {
- height: '100%',
- },
- containerInner: {
- height: '100%',
- justifyContent: 'center',
- // @ts-ignore web only
- paddingBottom: '20vh',
- paddingHorizontal: 20,
- },
- containerInnerMobile: {
- paddingBottom: 50,
- },
- title: {
- textAlign: 'center',
- color: colors.blue3,
- fontSize: 68,
- fontWeight: 'bold',
- paddingBottom: 10,
- },
- titleMobile: {
- textAlign: 'center',
- color: colors.blue3,
- fontSize: 58,
- fontWeight: 'bold',
- },
- subtitle: {
- textAlign: 'center',
- color: colors.gray5,
- fontSize: 52,
- fontWeight: 'bold',
- paddingBottom: 30,
- },
- subtitleMobile: {
- textAlign: 'center',
- color: colors.gray5,
- fontSize: 42,
- fontWeight: 'bold',
- paddingBottom: 30,
- },
- btns: {
- gap: 10,
- justifyContent: 'center',
- paddingBottom: 40,
- },
- btn: {
- borderRadius: 30,
- paddingHorizontal: 24,
- paddingVertical: 12,
- minWidth: 220,
- },
- btnLabel: {
- textAlign: 'center',
- fontSize: 18,
- },
- notice: {
- paddingHorizontal: 40,
- textAlign: 'center',
- },
- footer: {
- position: 'absolute',
- left: 0,
- right: 0,
- bottom: 0,
- padding: 20,
- borderTopWidth: 1,
- flexDirection: 'row',
- flexWrap: 'wrap',
- gap: 20,
- },
- footerDivider: {flexGrow: 1},
- footerLink: {},
- })
-}
diff --git a/src/view/com/auth/create/CreateAccount.tsx b/src/view/com/auth/create/CreateAccount.tsx
deleted file mode 100644
index 5d452736ae..0000000000
--- a/src/view/com/auth/create/CreateAccount.tsx
+++ /dev/null
@@ -1,219 +0,0 @@
-import React from 'react'
-import {
- ActivityIndicator,
- ScrollView,
- StyleSheet,
- TouchableOpacity,
- View,
-} from 'react-native'
-import {useAnalytics} from 'lib/analytics/analytics'
-import {Text} from '../../util/text/Text'
-import {LoggedOutLayout} from 'view/com/util/layouts/LoggedOutLayout'
-import {s} from 'lib/styles'
-import {usePalette} from 'lib/hooks/usePalette'
-import {msg, Trans} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-import {useOnboardingDispatch} from '#/state/shell'
-import {useSessionApi} from '#/state/session'
-import {useCreateAccount, submit} from './state'
-import {useServiceQuery} from '#/state/queries/service'
-import {
- usePreferencesSetBirthDateMutation,
- useSetSaveFeedsMutation,
- DEFAULT_PROD_FEEDS,
-} from '#/state/queries/preferences'
-import {FEEDBACK_FORM_URL, HITSLOP_10, IS_PROD} from '#/lib/constants'
-
-import {Step1} from './Step1'
-import {Step2} from './Step2'
-import {Step3} from './Step3'
-import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
-import {TextLink} from '../../util/Link'
-
-export function CreateAccount({onPressBack}: {onPressBack: () => void}) {
- const {screen} = useAnalytics()
- const pal = usePalette('default')
- const {_} = useLingui()
- const [uiState, uiDispatch] = useCreateAccount()
- const onboardingDispatch = useOnboardingDispatch()
- const {createAccount} = useSessionApi()
- const {mutate: setBirthDate} = usePreferencesSetBirthDateMutation()
- const {mutate: setSavedFeeds} = useSetSaveFeedsMutation()
- const {isTabletOrDesktop} = useWebMediaQueries()
-
- React.useEffect(() => {
- screen('CreateAccount')
- }, [screen])
-
- // fetch service info
- // =
-
- const {
- data: serviceInfo,
- isFetching: serviceInfoIsFetching,
- error: serviceInfoError,
- refetch: refetchServiceInfo,
- } = useServiceQuery(uiState.serviceUrl)
-
- React.useEffect(() => {
- if (serviceInfo) {
- uiDispatch({type: 'set-service-description', value: serviceInfo})
- uiDispatch({type: 'set-error', value: ''})
- } else if (serviceInfoError) {
- uiDispatch({
- type: 'set-error',
- value: _(
- msg`Unable to contact your service. Please check your Internet connection.`,
- ),
- })
- }
- }, [_, uiDispatch, serviceInfo, serviceInfoError])
-
- // event handlers
- // =
-
- const onPressBackInner = React.useCallback(() => {
- if (uiState.canBack) {
- uiDispatch({type: 'back'})
- } else {
- onPressBack()
- }
- }, [uiState, uiDispatch, onPressBack])
-
- const onPressNext = React.useCallback(async () => {
- if (!uiState.canNext) {
- return
- }
- if (uiState.step < 3) {
- uiDispatch({type: 'next'})
- } else {
- try {
- await submit({
- onboardingDispatch,
- createAccount,
- uiState,
- uiDispatch,
- _,
- })
- setBirthDate({birthDate: uiState.birthDate})
- if (IS_PROD(uiState.serviceUrl)) {
- setSavedFeeds(DEFAULT_PROD_FEEDS)
- }
- } catch {
- // dont need to handle here
- }
- }
- }, [
- uiState,
- uiDispatch,
- onboardingDispatch,
- createAccount,
- setBirthDate,
- setSavedFeeds,
- _,
- ])
-
- // rendering
- // =
-
- return (
-
-
-
- {uiState.step === 1 && (
-
- )}
- {uiState.step === 2 && (
-
- )}
- {uiState.step === 3 && (
-
- )}
-
-
-
-
- Back
-
-
-
- {uiState.canNext ? (
-
- {uiState.isProcessing ? (
-
- ) : (
-
- Next
-
- )}
-
- ) : serviceInfoError ? (
- refetchServiceInfo()}
- accessibilityRole="button"
- accessibilityLabel={_(msg`Retry`)}
- accessibilityHint=""
- accessibilityLiveRegion="polite"
- hitSlop={HITSLOP_10}>
-
- Retry
-
-
- ) : serviceInfoIsFetching ? (
- <>
-
-
- Connecting...
-
- >
- ) : undefined}
-
-
-
-
-
- Having trouble?{' '}
-
-
-
-
-
-
-
-
- )
-}
-
-const styles = StyleSheet.create({
- stepContainer: {
- paddingHorizontal: 20,
- paddingVertical: 20,
- },
-})
diff --git a/src/view/com/auth/create/Policies.tsx b/src/view/com/auth/create/Policies.tsx
deleted file mode 100644
index 2c7d60818e..0000000000
--- a/src/view/com/auth/create/Policies.tsx
+++ /dev/null
@@ -1,114 +0,0 @@
-import React from 'react'
-import {StyleSheet, View} from 'react-native'
-import {
- FontAwesomeIcon,
- FontAwesomeIconStyle,
-} from '@fortawesome/react-native-fontawesome'
-import {ComAtprotoServerDescribeServer} from '@atproto/api'
-import {TextLink} from '../../util/Link'
-import {Text} from '../../util/text/Text'
-import {s, colors} from 'lib/styles'
-import {usePalette} from 'lib/hooks/usePalette'
-
-type ServiceDescription = ComAtprotoServerDescribeServer.OutputSchema
-
-export const Policies = ({
- serviceDescription,
- needsGuardian,
-}: {
- serviceDescription: ServiceDescription
- needsGuardian: boolean
-}) => {
- const pal = usePalette('default')
- if (!serviceDescription) {
- return
- }
- const tos = validWebLink(serviceDescription.links?.termsOfService)
- const pp = validWebLink(serviceDescription.links?.privacyPolicy)
- if (!tos && !pp) {
- return (
-
-
-
-
-
- This service has not provided terms of service or a privacy policy.
-
-
- )
- }
- const els = []
- if (tos) {
- els.push(
- ,
- )
- }
- if (pp) {
- els.push(
- ,
- )
- }
- if (els.length === 2) {
- els.splice(
- 1,
- 0,
-
- {' '}
- and{' '}
- ,
- )
- }
- return (
-
-
- 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.
-
- )}
-
- )
-}
-
-function validWebLink(url?: string): string | undefined {
- return url && (url.startsWith('http://') || url.startsWith('https://'))
- ? url
- : undefined
-}
-
-const styles = StyleSheet.create({
- policies: {
- flexDirection: 'column',
- gap: 8,
- },
- errorIcon: {
- borderWidth: 1,
- borderColor: colors.white,
- borderRadius: 30,
- width: 16,
- height: 16,
- alignItems: 'center',
- justifyContent: 'center',
- },
-})
diff --git a/src/view/com/auth/create/Step1.tsx b/src/view/com/auth/create/Step1.tsx
deleted file mode 100644
index a7abbfaa8d..0000000000
--- a/src/view/com/auth/create/Step1.tsx
+++ /dev/null
@@ -1,283 +0,0 @@
-import React from 'react'
-import {
- ActivityIndicator,
- Keyboard,
- StyleSheet,
- TouchableOpacity,
- TouchableWithoutFeedback,
- View,
-} from 'react-native'
-import {CreateAccountState, CreateAccountDispatch, is18} from './state'
-import {Text} from 'view/com/util/text/Text'
-import {DateInput} from 'view/com/util/forms/DateInput'
-import {StepHeader} from './StepHeader'
-import {s} from 'lib/styles'
-import {usePalette} from 'lib/hooks/usePalette'
-import {TextInput} from '../util/TextInput'
-import {Policies} from './Policies'
-import {ErrorMessage} from 'view/com/util/error/ErrorMessage'
-import {isWeb} from 'platform/detection'
-import {Trans, msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-import {useModalControls} from '#/state/modals'
-import {logger} from '#/logger'
-import {
- FontAwesomeIcon,
- FontAwesomeIconStyle,
-} from '@fortawesome/react-native-fontawesome'
-import {useDialogControl} from '#/components/Dialog'
-
-import {ServerInputDialog} from '../server-input'
-import {toNiceDomain} from '#/lib/strings/url-helpers'
-
-function sanitizeDate(date: Date): Date {
- if (!date || date.toString() === 'Invalid Date') {
- logger.error(`Create account: handled invalid date for birthDate`, {
- hasDate: !!date,
- })
- return new Date()
- }
- return date
-}
-
-export function Step1({
- uiState,
- uiDispatch,
-}: {
- uiState: CreateAccountState
- uiDispatch: CreateAccountDispatch
-}) {
- const pal = usePalette('default')
- const {_} = useLingui()
- const {openModal} = useModalControls()
- const serverInputControl = useDialogControl()
-
- const onPressSelectService = React.useCallback(() => {
- serverInputControl.open()
- Keyboard.dismiss()
- }, [serverInputControl])
-
- const onPressWaitlist = React.useCallback(() => {
- openModal({name: 'waitlist'})
- }, [openModal])
-
- const birthDate = React.useMemo(() => {
- return sanitizeDate(uiState.birthDate)
- }, [uiState.birthDate])
-
- return (
-
- uiDispatch({type: 'set-service-url', value: url})}
- />
-
-
-
-
- Hosting provider
-
-
-
-
-
-
- {toNiceDomain(uiState.serviceUrl)}
-
-
-
-
-
-
-
-
-
- {!uiState.serviceDescription ? (
-
- ) : (
- <>
- {uiState.isInviteCodeRequired && (
-
-
- Invite code
-
- uiDispatch({type: 'set-invite-code', value})}
- accessibilityLabel={_(msg`Invite code`)}
- accessibilityHint={_(msg`Input invite code to proceed`)}
- autoCapitalize="none"
- autoComplete="off"
- autoCorrect={false}
- autoFocus={true}
- />
-
- )}
-
- {!uiState.inviteCode && uiState.isInviteCodeRequired ? (
-
-
- Don't have an invite code?{' '}
-
-
-
-
- Join the waitlist.
-
-
-
-
- ) : (
- <>
-
-
- Email address
-
- uiDispatch({type: 'set-email', value})}
- accessibilityLabel={_(msg`Email`)}
- accessibilityHint={_(msg`Input email for Bluesky account`)}
- accessibilityLabelledBy="email"
- autoCapitalize="none"
- autoComplete="email"
- autoCorrect={false}
- autoFocus={!uiState.isInviteCodeRequired}
- />
-
-
-
-
- Password
-
- uiDispatch({type: 'set-password', value})}
- accessibilityLabel={_(msg`Password`)}
- accessibilityHint={_(msg`Set password`)}
- accessibilityLabelledBy="password"
- autoCapitalize="none"
- autoComplete="new-password"
- autoCorrect={false}
- />
-
-
-
-
- Your birth date
-
-
- uiDispatch({type: 'set-birth-date', value})
- }
- buttonType="default-light"
- buttonStyle={[pal.border, styles.dateInputButton]}
- buttonLabelType="lg"
- accessibilityLabel={_(msg`Birthday`)}
- accessibilityHint={_(msg`Enter your birth date`)}
- accessibilityLabelledBy="birthDate"
- />
-
-
- {uiState.serviceDescription && (
-
- )}
- >
- )}
- >
- )}
- {uiState.error ? (
-
- ) : undefined}
-
- )
-}
-
-const styles = StyleSheet.create({
- error: {
- borderRadius: 6,
- marginTop: 10,
- },
- dateInputButton: {
- borderWidth: 1,
- borderRadius: 6,
- paddingVertical: 14,
- },
- // @ts-expect-error: Suppressing error due to incomplete `ViewStyle` type definition in react-native-web, missing `cursor` prop as discussed in https://github.com/necolas/react-native-web/issues/832.
- touchable: {
- ...(isWeb && {cursor: 'pointer'}),
- },
-})
diff --git a/src/view/com/auth/create/Step2.tsx b/src/view/com/auth/create/Step2.tsx
deleted file mode 100644
index 2e16b13bb5..0000000000
--- a/src/view/com/auth/create/Step2.tsx
+++ /dev/null
@@ -1,307 +0,0 @@
-import React from 'react'
-import {
- ActivityIndicator,
- StyleSheet,
- TouchableWithoutFeedback,
- View,
-} from 'react-native'
-import RNPickerSelect from 'react-native-picker-select'
-import {
- CreateAccountState,
- CreateAccountDispatch,
- requestVerificationCode,
-} from './state'
-import {Text} from 'view/com/util/text/Text'
-import {StepHeader} from './StepHeader'
-import {s} from 'lib/styles'
-import {usePalette} from 'lib/hooks/usePalette'
-import {TextInput} from '../util/TextInput'
-import {Button} from '../../util/forms/Button'
-import {ErrorMessage} from 'view/com/util/error/ErrorMessage'
-import {isAndroid, isWeb} from 'platform/detection'
-import {Trans, msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
-import parsePhoneNumber from 'libphonenumber-js'
-import {COUNTRY_CODES} from '#/lib/country-codes'
-import {
- FontAwesomeIcon,
- FontAwesomeIconStyle,
-} from '@fortawesome/react-native-fontawesome'
-import {HITSLOP_10} from '#/lib/constants'
-
-export function Step2({
- uiState,
- uiDispatch,
-}: {
- uiState: CreateAccountState
- uiDispatch: CreateAccountDispatch
-}) {
- const pal = usePalette('default')
- const {_} = useLingui()
- const {isMobile} = useWebMediaQueries()
-
- const onPressRequest = React.useCallback(() => {
- const phoneNumber = parsePhoneNumber(
- uiState.verificationPhone,
- uiState.phoneCountry,
- )
- if (phoneNumber && phoneNumber.isValid()) {
- requestVerificationCode({uiState, uiDispatch, _})
- } else {
- uiDispatch({
- type: 'set-error',
- value: _(
- msg`There's something wrong with this number. Please choose your country and enter your full phone number!`,
- ),
- })
- }
- }, [uiState, uiDispatch, _])
-
- const onPressRetry = React.useCallback(() => {
- uiDispatch({type: 'set-has-requested-verification-code', value: false})
- }, [uiDispatch])
-
- const phoneNumberFormatted = React.useMemo(
- () =>
- uiState.hasRequestedVerificationCode
- ? parsePhoneNumber(
- uiState.verificationPhone,
- uiState.phoneCountry,
- )?.formatInternational()
- : '',
- [
- uiState.hasRequestedVerificationCode,
- uiState.verificationPhone,
- uiState.phoneCountry,
- ],
- )
-
- return (
-
-
-
- {!uiState.hasRequestedVerificationCode ? (
- <>
-
-
- Country
-
-
-
- uiDispatch({type: 'set-phone-country', value})
- }
- items={COUNTRY_CODES.filter(l => Boolean(l.code2)).map(l => ({
- label: l.name,
- value: l.code2,
- key: l.code2,
- }))}
- style={{
- inputAndroid: {
- backgroundColor: pal.view.backgroundColor,
- color: pal.text.color,
- fontSize: 21,
- letterSpacing: 0.5,
- fontWeight: '500',
- paddingHorizontal: 14,
- paddingVertical: 8,
- borderRadius: 4,
- },
- inputIOS: {
- backgroundColor: pal.view.backgroundColor,
- color: pal.text.color,
- fontSize: 14,
- letterSpacing: 0.5,
- fontWeight: '500',
- paddingHorizontal: 14,
- paddingVertical: 8,
- borderWidth: 1,
- borderColor: pal.border.borderColor,
- borderRadius: 4,
- },
- inputWeb: {
- // @ts-ignore web only
- cursor: 'pointer',
- '-moz-appearance': 'none',
- '-webkit-appearance': 'none',
- appearance: 'none',
- outline: 0,
- borderWidth: 1,
- borderColor: pal.border.borderColor,
- backgroundColor: pal.view.backgroundColor,
- color: pal.text.color,
- fontSize: 14,
- letterSpacing: 0.5,
- fontWeight: '500',
- paddingHorizontal: 14,
- paddingVertical: 8,
- borderRadius: 4,
- },
- }}
- accessibilityLabel={_(msg`Select your phone's country`)}
- accessibilityHint=""
- accessibilityLabelledBy="phoneCountry"
- />
-
-
-
-
-
-
-
-
- Phone number
-
-
- uiDispatch({type: 'set-verification-phone', value})
- }
- accessibilityLabel={_(msg`Email`)}
- accessibilityHint={_(
- msg`Input phone number for SMS verification`,
- )}
- accessibilityLabelledBy="phoneNumber"
- keyboardType="phone-pad"
- autoCapitalize="none"
- autoComplete="tel"
- autoCorrect={false}
- autoFocus={true}
- />
-
-
- Please enter a phone number that can receive SMS text messages.
-
-
-
-
-
- {uiState.isProcessing ? (
-
- ) : (
-
- )}
-
- >
- ) : (
- <>
-
-
-
- Verification code{' '}
-
-
-
-
- Retry
-
-
-
-
-
- uiDispatch({type: 'set-verification-code', value})
- }
- accessibilityLabel={_(msg`Email`)}
- accessibilityHint={_(
- msg`Input the verification code we have texted to you`,
- )}
- accessibilityLabelledBy="verificationCode"
- keyboardType="phone-pad"
- autoCapitalize="none"
- autoComplete="one-time-code"
- textContentType="oneTimeCode"
- autoCorrect={false}
- autoFocus={true}
- />
-
-
- Please enter the verification code sent to{' '}
- {phoneNumberFormatted}.
-
-
-
- >
- )}
-
- {uiState.error ? (
-
- ) : undefined}
-
- )
-}
-
-const styles = StyleSheet.create({
- error: {
- borderRadius: 6,
- marginTop: 10,
- },
- // @ts-expect-error: Suppressing error due to incomplete `ViewStyle` type definition in react-native-web, missing `cursor` prop as discussed in https://github.com/necolas/react-native-web/issues/832.
- touchable: {
- ...(isWeb && {cursor: 'pointer'}),
- },
-})
diff --git a/src/view/com/auth/create/Step3.tsx b/src/view/com/auth/create/Step3.tsx
deleted file mode 100644
index 3a52abf800..0000000000
--- a/src/view/com/auth/create/Step3.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import React from 'react'
-import {StyleSheet, View} from 'react-native'
-import {CreateAccountState, CreateAccountDispatch} from './state'
-import {Text} from 'view/com/util/text/Text'
-import {StepHeader} from './StepHeader'
-import {s} from 'lib/styles'
-import {TextInput} from '../util/TextInput'
-import {createFullHandle} from 'lib/strings/handles'
-import {usePalette} from 'lib/hooks/usePalette'
-import {ErrorMessage} from 'view/com/util/error/ErrorMessage'
-import {msg, Trans} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-
-/** STEP 3: Your user handle
- * @field User handle
- */
-export function Step3({
- uiState,
- uiDispatch,
-}: {
- uiState: CreateAccountState
- uiDispatch: CreateAccountDispatch
-}) {
- const pal = usePalette('default')
- const {_} = useLingui()
- return (
-
-
-
- uiDispatch({type: 'set-handle', value})}
- // TODO: Add explicit text label
- accessibilityLabel={_(msg`User handle`)}
- accessibilityHint={_(msg`Input your user handle`)}
- />
-
- Your full handle will be{' '}
-
- @{createFullHandle(uiState.handle, uiState.userDomain)}
-
-
-
- {uiState.error ? (
-
- ) : undefined}
-
- )
-}
-
-const styles = StyleSheet.create({
- error: {
- borderRadius: 6,
- },
-})
diff --git a/src/view/com/auth/create/StepHeader.tsx b/src/view/com/auth/create/StepHeader.tsx
deleted file mode 100644
index af6bf54781..0000000000
--- a/src/view/com/auth/create/StepHeader.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-import React from 'react'
-import {StyleSheet, View} from 'react-native'
-import {Text} from 'view/com/util/text/Text'
-import {usePalette} from 'lib/hooks/usePalette'
-import {Trans} from '@lingui/macro'
-import {CreateAccountState} from './state'
-
-export function StepHeader({
- uiState,
- title,
- children,
-}: React.PropsWithChildren<{uiState: CreateAccountState; title: string}>) {
- const pal = usePalette('default')
- const numSteps = uiState.isPhoneVerificationRequired ? 3 : 2
- return (
-
-
-
- {uiState.step === 3 ? (
- Last step!
- ) : (
-
- Step {uiState.step} of {numSteps}
-
- )}
-
-
-
- {title}
-
-
- {children}
-
- )
-}
-
-const styles = StyleSheet.create({
- container: {
- flexDirection: 'row',
- justifyContent: 'space-between',
- alignItems: 'center',
- marginBottom: 20,
- },
-})
diff --git a/src/view/com/auth/create/state.ts b/src/view/com/auth/create/state.ts
deleted file mode 100644
index e8a7cd4ed2..0000000000
--- a/src/view/com/auth/create/state.ts
+++ /dev/null
@@ -1,350 +0,0 @@
-import {useReducer} from 'react'
-import {
- ComAtprotoServerDescribeServer,
- ComAtprotoServerCreateAccount,
- BskyAgent,
-} from '@atproto/api'
-import {I18nContext, useLingui} from '@lingui/react'
-import {msg} from '@lingui/macro'
-import * as EmailValidator from 'email-validator'
-import {getAge} from 'lib/strings/time'
-import {logger} from '#/logger'
-import {createFullHandle} from '#/lib/strings/handles'
-import {cleanError} from '#/lib/strings/errors'
-import {DispatchContext as OnboardingDispatchContext} from '#/state/shell/onboarding'
-import {ApiContext as SessionApiContext} from '#/state/session'
-import {DEFAULT_SERVICE} from '#/lib/constants'
-import parsePhoneNumber, {CountryCode} from 'libphonenumber-js'
-
-export type ServiceDescription = ComAtprotoServerDescribeServer.OutputSchema
-const DEFAULT_DATE = new Date(Date.now() - 60e3 * 60 * 24 * 365 * 20) // default to 20 years ago
-
-export type CreateAccountAction =
- | {type: 'set-step'; value: number}
- | {type: 'set-error'; value: string | undefined}
- | {type: 'set-processing'; value: boolean}
- | {type: 'set-service-url'; value: string}
- | {type: 'set-service-description'; value: ServiceDescription | undefined}
- | {type: 'set-user-domain'; value: string}
- | {type: 'set-invite-code'; value: string}
- | {type: 'set-email'; value: string}
- | {type: 'set-password'; value: string}
- | {type: 'set-phone-country'; value: CountryCode}
- | {type: 'set-verification-phone'; value: string}
- | {type: 'set-verification-code'; value: string}
- | {type: 'set-has-requested-verification-code'; value: boolean}
- | {type: 'set-handle'; value: string}
- | {type: 'set-birth-date'; value: Date}
- | {type: 'next'}
- | {type: 'back'}
-
-export interface CreateAccountState {
- // state
- step: number
- error: string | undefined
- isProcessing: boolean
- serviceUrl: string
- serviceDescription: ServiceDescription | undefined
- userDomain: string
- inviteCode: string
- email: string
- password: string
- phoneCountry: CountryCode
- verificationPhone: string
- verificationCode: string
- hasRequestedVerificationCode: boolean
- handle: string
- birthDate: Date
-
- // computed
- canBack: boolean
- canNext: boolean
- isInviteCodeRequired: boolean
- isPhoneVerificationRequired: boolean
-}
-
-export type CreateAccountDispatch = (action: CreateAccountAction) => void
-
-export function useCreateAccount() {
- const {_} = useLingui()
- return useReducer(createReducer({_}), {
- step: 1,
- error: undefined,
- isProcessing: false,
- serviceUrl: DEFAULT_SERVICE,
- serviceDescription: undefined,
- userDomain: '',
- inviteCode: '',
- email: '',
- password: '',
- phoneCountry: 'US',
- verificationPhone: '',
- verificationCode: '',
- hasRequestedVerificationCode: false,
- handle: '',
- birthDate: DEFAULT_DATE,
-
- canBack: false,
- canNext: false,
- isInviteCodeRequired: false,
- isPhoneVerificationRequired: false,
- })
-}
-
-export async function requestVerificationCode({
- uiState,
- uiDispatch,
- _,
-}: {
- uiState: CreateAccountState
- uiDispatch: CreateAccountDispatch
- _: I18nContext['_']
-}) {
- const phoneNumber = parsePhoneNumber(
- uiState.verificationPhone,
- uiState.phoneCountry,
- )?.number
- if (!phoneNumber) {
- return
- }
- uiDispatch({type: 'set-error', value: ''})
- uiDispatch({type: 'set-processing', value: true})
- uiDispatch({type: 'set-verification-phone', value: phoneNumber})
- try {
- const agent = new BskyAgent({service: uiState.serviceUrl})
- await agent.com.atproto.temp.requestPhoneVerification({
- phoneNumber,
- })
- uiDispatch({type: 'set-has-requested-verification-code', value: true})
- } catch (e: any) {
- logger.error(
- `Failed to request sms verification code (${e.status} status)`,
- {message: e},
- )
- uiDispatch({type: 'set-error', value: cleanError(e.toString())})
- }
- uiDispatch({type: 'set-processing', value: false})
-}
-
-export async function submit({
- createAccount,
- onboardingDispatch,
- uiState,
- uiDispatch,
- _,
-}: {
- createAccount: SessionApiContext['createAccount']
- onboardingDispatch: OnboardingDispatchContext
- uiState: CreateAccountState
- uiDispatch: CreateAccountDispatch
- _: I18nContext['_']
-}) {
- if (!uiState.email) {
- uiDispatch({type: 'set-step', value: 1})
- return uiDispatch({
- type: 'set-error',
- value: _(msg`Please enter your email.`),
- })
- }
- if (!EmailValidator.validate(uiState.email)) {
- uiDispatch({type: 'set-step', value: 1})
- return uiDispatch({
- type: 'set-error',
- value: _(msg`Your email appears to be invalid.`),
- })
- }
- if (!uiState.password) {
- uiDispatch({type: 'set-step', value: 1})
- return uiDispatch({
- type: 'set-error',
- value: _(msg`Please choose your password.`),
- })
- }
- if (
- uiState.isPhoneVerificationRequired &&
- (!uiState.verificationPhone || !uiState.verificationCode)
- ) {
- uiDispatch({type: 'set-step', value: 2})
- return uiDispatch({
- type: 'set-error',
- value: _(msg`Please enter the code you received by SMS.`),
- })
- }
- if (!uiState.handle) {
- uiDispatch({type: 'set-step', value: 3})
- return uiDispatch({
- type: 'set-error',
- value: _(msg`Please choose your handle.`),
- })
- }
- uiDispatch({type: 'set-error', value: ''})
- uiDispatch({type: 'set-processing', value: true})
-
- try {
- onboardingDispatch({type: 'start'}) // start now to avoid flashing the wrong view
- await createAccount({
- service: uiState.serviceUrl,
- email: uiState.email,
- handle: createFullHandle(uiState.handle, uiState.userDomain),
- password: uiState.password,
- inviteCode: uiState.inviteCode.trim(),
- verificationPhone: uiState.verificationPhone.trim(),
- verificationCode: uiState.verificationCode.trim(),
- })
- } catch (e: any) {
- onboardingDispatch({type: 'skip'}) // undo starting the onboard
- let errMsg = e.toString()
- if (e instanceof ComAtprotoServerCreateAccount.InvalidInviteCodeError) {
- errMsg = _(
- msg`Invite code not accepted. Check that you input it correctly and try again.`,
- )
- uiDispatch({type: 'set-step', value: 1})
- } else if (e.error === 'InvalidPhoneVerification') {
- uiDispatch({type: 'set-step', value: 2})
- }
-
- if ([400, 429].includes(e.status)) {
- logger.warn('Failed to create account', {message: e})
- } else {
- logger.error(`Failed to create account (${e.status} status)`, {
- message: e,
- })
- }
-
- uiDispatch({type: 'set-processing', value: false})
- uiDispatch({type: 'set-error', value: cleanError(errMsg)})
- throw e
- }
-}
-
-export function is13(state: CreateAccountState) {
- return getAge(state.birthDate) >= 13
-}
-
-export function is18(state: CreateAccountState) {
- return getAge(state.birthDate) >= 18
-}
-
-function createReducer({_}: {_: I18nContext['_']}) {
- return function reducer(
- state: CreateAccountState,
- action: CreateAccountAction,
- ): CreateAccountState {
- switch (action.type) {
- case 'set-step': {
- return compute({...state, step: action.value})
- }
- case 'set-error': {
- return compute({...state, error: action.value})
- }
- case 'set-processing': {
- return compute({...state, isProcessing: action.value})
- }
- case 'set-service-url': {
- return compute({
- ...state,
- serviceUrl: action.value,
- serviceDescription:
- state.serviceUrl !== action.value
- ? undefined
- : state.serviceDescription,
- })
- }
- case 'set-service-description': {
- return compute({
- ...state,
- serviceDescription: action.value,
- userDomain: action.value?.availableUserDomains[0] || '',
- })
- }
- case 'set-user-domain': {
- return compute({...state, userDomain: action.value})
- }
- case 'set-invite-code': {
- return compute({...state, inviteCode: action.value})
- }
- case 'set-email': {
- return compute({...state, email: action.value})
- }
- case 'set-password': {
- return compute({...state, password: action.value})
- }
- case 'set-phone-country': {
- return compute({...state, phoneCountry: action.value})
- }
- case 'set-verification-phone': {
- return compute({
- ...state,
- verificationPhone: action.value,
- hasRequestedVerificationCode: false,
- })
- }
- case 'set-verification-code': {
- return compute({...state, verificationCode: action.value.trim()})
- }
- case 'set-has-requested-verification-code': {
- return compute({...state, hasRequestedVerificationCode: action.value})
- }
- case 'set-handle': {
- return compute({...state, handle: action.value})
- }
- case 'set-birth-date': {
- return compute({...state, birthDate: action.value})
- }
- case 'next': {
- if (state.step === 1) {
- if (!is13(state)) {
- return compute({
- ...state,
- error: _(
- msg`Unfortunately, you do not meet the requirements to create an account.`,
- ),
- })
- }
- }
- let increment = 1
- if (state.step === 1 && !state.isPhoneVerificationRequired) {
- increment = 2
- }
- return compute({...state, error: '', step: state.step + increment})
- }
- case 'back': {
- let decrement = 1
- if (state.step === 3 && !state.isPhoneVerificationRequired) {
- decrement = 2
- }
- return compute({...state, error: '', step: state.step - decrement})
- }
- }
- }
-}
-
-function compute(state: CreateAccountState): CreateAccountState {
- let canNext = true
- if (state.step === 1) {
- canNext =
- !!state.serviceDescription &&
- (!state.isInviteCodeRequired || !!state.inviteCode) &&
- !!state.email &&
- !!state.password
- } else if (state.step === 2) {
- canNext =
- !state.isPhoneVerificationRequired ||
- (!!state.verificationPhone &&
- isValidVerificationCode(state.verificationCode))
- } else if (state.step === 3) {
- canNext = !!state.handle
- }
- return {
- ...state,
- canBack: state.step > 1,
- canNext,
- isInviteCodeRequired: !!state.serviceDescription?.inviteCodeRequired,
- isPhoneVerificationRequired:
- !!state.serviceDescription?.phoneVerificationRequired,
- }
-}
-
-function isValidVerificationCode(str: string): boolean {
- return /[0-9]{6}/.test(str)
-}
diff --git a/src/view/com/auth/login/ChooseAccountForm.tsx b/src/view/com/auth/login/ChooseAccountForm.tsx
deleted file mode 100644
index 32cd8315d3..0000000000
--- a/src/view/com/auth/login/ChooseAccountForm.tsx
+++ /dev/null
@@ -1,158 +0,0 @@
-import React from 'react'
-import {ScrollView, TouchableOpacity, View} from 'react-native'
-import {
- FontAwesomeIcon,
- FontAwesomeIconStyle,
-} from '@fortawesome/react-native-fontawesome'
-import {useAnalytics} from 'lib/analytics/analytics'
-import {Text} from '../../util/text/Text'
-import {UserAvatar} from '../../util/UserAvatar'
-import {s, colors} from 'lib/styles'
-import {usePalette} from 'lib/hooks/usePalette'
-import {Trans, msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-import {styles} from './styles'
-import {useSession, useSessionApi, SessionAccount} from '#/state/session'
-import {useProfileQuery} from '#/state/queries/profile'
-import {useLoggedOutViewControls} from '#/state/shell/logged-out'
-import * as Toast from '#/view/com/util/Toast'
-
-function AccountItem({
- account,
- onSelect,
- isCurrentAccount,
-}: {
- account: SessionAccount
- onSelect: (account: SessionAccount) => void
- isCurrentAccount: boolean
-}) {
- const pal = usePalette('default')
- const {_} = useLingui()
- const {data: profile} = useProfileQuery({did: account.did})
-
- const onPress = React.useCallback(() => {
- onSelect(account)
- }, [account, onSelect])
-
- return (
-
-
-
-
-
-
-
- {profile?.displayName || account.handle}{' '}
-
-
- {account.handle}
-
-
- {isCurrentAccount ? (
-
- ) : (
-
- )}
-
-
- )
-}
-export const ChooseAccountForm = ({
- onSelectAccount,
- onPressBack,
-}: {
- onSelectAccount: (account?: SessionAccount) => void
- onPressBack: () => void
-}) => {
- const {track, screen} = useAnalytics()
- const pal = usePalette('default')
- const {_} = useLingui()
- const {accounts, currentAccount} = useSession()
- const {initSession} = useSessionApi()
- const {setShowLoggedOut} = useLoggedOutViewControls()
-
- React.useEffect(() => {
- screen('Choose Account')
- }, [screen])
-
- const onSelect = React.useCallback(
- async (account: SessionAccount) => {
- if (account.accessJwt) {
- if (account.did === currentAccount?.did) {
- setShowLoggedOut(false)
- Toast.show(_(msg`Already signed in as @${account.handle}`))
- } else {
- await initSession(account)
- track('Sign In', {resumedSession: true})
- setTimeout(() => {
- Toast.show(_(msg`Signed in as @${account.handle}`))
- }, 100)
- }
- } else {
- onSelectAccount(account)
- }
- },
- [currentAccount, track, initSession, onSelectAccount, setShowLoggedOut, _],
- )
-
- return (
-
-
- Sign in as...
-
- {accounts.map(account => (
-
- ))}
- onSelectAccount(undefined)}
- accessibilityRole="button"
- accessibilityLabel={_(msg`Login to account that is not listed`)}
- accessibilityHint="">
-
-
-
- Other account
-
-
-
-
-
-
-
-
- Back
-
-
-
-
-
- )
-}
diff --git a/src/view/com/auth/login/ForgotPasswordForm.tsx b/src/view/com/auth/login/ForgotPasswordForm.tsx
deleted file mode 100644
index 322da2b8fd..0000000000
--- a/src/view/com/auth/login/ForgotPasswordForm.tsx
+++ /dev/null
@@ -1,228 +0,0 @@
-import React, {useState, useEffect} from 'react'
-import {
- ActivityIndicator,
- Keyboard,
- TextInput,
- TouchableOpacity,
- View,
-} from 'react-native'
-import {
- FontAwesomeIcon,
- FontAwesomeIconStyle,
-} from '@fortawesome/react-native-fontawesome'
-import {ComAtprotoServerDescribeServer} from '@atproto/api'
-import * as EmailValidator from 'email-validator'
-import {BskyAgent} from '@atproto/api'
-import {useAnalytics} from 'lib/analytics/analytics'
-import {Text} from '../../util/text/Text'
-import {s} from 'lib/styles'
-import {toNiceDomain} from 'lib/strings/url-helpers'
-import {isNetworkError} from 'lib/strings/errors'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useTheme} from 'lib/ThemeContext'
-import {cleanError} from 'lib/strings/errors'
-import {logger} from '#/logger'
-import {Trans, msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-import {styles} from './styles'
-import {useDialogControl} from '#/components/Dialog'
-
-import {ServerInputDialog} from '../server-input'
-
-type ServiceDescription = ComAtprotoServerDescribeServer.OutputSchema
-
-export const ForgotPasswordForm = ({
- error,
- serviceUrl,
- serviceDescription,
- setError,
- setServiceUrl,
- onPressBack,
- onEmailSent,
-}: {
- error: string
- serviceUrl: string
- serviceDescription: ServiceDescription | undefined
- setError: (v: string) => void
- setServiceUrl: (v: string) => void
- onPressBack: () => void
- onEmailSent: () => void
-}) => {
- const pal = usePalette('default')
- const theme = useTheme()
- const [isProcessing, setIsProcessing] = useState(false)
- const [email, setEmail] = useState('')
- const {screen} = useAnalytics()
- const {_} = useLingui()
- const serverInputControl = useDialogControl()
-
- useEffect(() => {
- screen('Signin:ForgotPassword')
- }, [screen])
-
- const onPressSelectService = React.useCallback(() => {
- serverInputControl.open()
- Keyboard.dismiss()
- }, [serverInputControl])
-
- const onPressNext = async () => {
- if (!EmailValidator.validate(email)) {
- return setError(_(msg`Your email appears to be invalid.`))
- }
-
- setError('')
- setIsProcessing(true)
-
- try {
- const agent = new BskyAgent({service: serviceUrl})
- await agent.com.atproto.server.requestPasswordReset({email})
- onEmailSent()
- } catch (e: any) {
- const errMsg = e.toString()
- logger.warn('Failed to request password reset', {error: e})
- setIsProcessing(false)
- if (isNetworkError(e)) {
- setError(
- _(
- msg`Unable to contact your service. Please check your Internet connection.`,
- ),
- )
- } else {
- setError(cleanError(errMsg))
- }
- }
- }
-
- return (
- <>
-
-
-
- Reset password
-
-
-
- Enter the email you used to create your account. We'll send you a
- "reset code" so you can set a new password.
-
-
-
-
-
-
- {toNiceDomain(serviceUrl)}
-
-
-
-
-
-
-
-
-
-
- {error ? (
-
-
-
-
-
- {error}
-
-
- ) : undefined}
-
-
-
- Back
-
-
-
- {!serviceDescription || isProcessing ? (
-
- ) : !email ? (
-
- Next
-
- ) : (
-
-
- Next
-
-
- )}
- {!serviceDescription || isProcessing ? (
-
- Processing...
-
- ) : undefined}
-
-
-
-
-
- Already have a code?
-
-
-
-
- >
- )
-}
diff --git a/src/view/com/auth/login/Login.tsx b/src/view/com/auth/login/Login.tsx
deleted file mode 100644
index bc931ac04c..0000000000
--- a/src/view/com/auth/login/Login.tsx
+++ /dev/null
@@ -1,164 +0,0 @@
-import React, {useState, useEffect} from 'react'
-import {KeyboardAvoidingView} from 'react-native'
-import {useAnalytics} from 'lib/analytics/analytics'
-import {LoggedOutLayout} from 'view/com/util/layouts/LoggedOutLayout'
-import {DEFAULT_SERVICE} from '#/lib/constants'
-import {usePalette} from 'lib/hooks/usePalette'
-import {logger} from '#/logger'
-import {ChooseAccountForm} from './ChooseAccountForm'
-import {LoginForm} from './LoginForm'
-import {ForgotPasswordForm} from './ForgotPasswordForm'
-import {SetNewPasswordForm} from './SetNewPasswordForm'
-import {PasswordUpdatedForm} from './PasswordUpdatedForm'
-import {useLingui} from '@lingui/react'
-import {msg} from '@lingui/macro'
-import {useSession, SessionAccount} from '#/state/session'
-import {useServiceQuery} from '#/state/queries/service'
-import {useLoggedOutView} from '#/state/shell/logged-out'
-
-enum Forms {
- Login,
- ChooseAccount,
- ForgotPassword,
- SetNewPassword,
- PasswordUpdated,
-}
-
-export const Login = ({onPressBack}: {onPressBack: () => void}) => {
- const {_} = useLingui()
- const pal = usePalette('default')
-
- const {accounts} = useSession()
- const {track} = useAnalytics()
- const {requestedAccountSwitchTo} = useLoggedOutView()
- const requestedAccount = accounts.find(
- a => a.did === requestedAccountSwitchTo,
- )
-
- const [error, setError] = useState('')
- const [serviceUrl, setServiceUrl] = useState(
- requestedAccount?.service || DEFAULT_SERVICE,
- )
- const [initialHandle, setInitialHandle] = useState(
- requestedAccount?.handle || '',
- )
- const [currentForm, setCurrentForm] = useState(
- requestedAccount
- ? Forms.Login
- : accounts.length
- ? Forms.ChooseAccount
- : Forms.Login,
- )
-
- const {
- data: serviceDescription,
- error: serviceError,
- refetch: refetchService,
- } = useServiceQuery(serviceUrl)
-
- const onSelectAccount = (account?: SessionAccount) => {
- if (account?.service) {
- setServiceUrl(account.service)
- }
- setInitialHandle(account?.handle || '')
- setCurrentForm(Forms.Login)
- }
-
- const gotoForm = (form: Forms) => () => {
- setError('')
- setCurrentForm(form)
- }
-
- useEffect(() => {
- if (serviceError) {
- setError(
- _(
- msg`Unable to contact your service. Please check your Internet connection.`,
- ),
- )
- logger.warn(`Failed to fetch service description for ${serviceUrl}`, {
- error: String(serviceError),
- })
- } else {
- setError('')
- }
- }, [serviceError, serviceUrl, _])
-
- const onPressRetryConnect = () => refetchService()
- const onPressForgotPassword = () => {
- track('Signin:PressedForgotPassword')
- setCurrentForm(Forms.ForgotPassword)
- }
-
- return (
-
- {currentForm === Forms.Login ? (
-
-
-
- ) : undefined}
- {currentForm === Forms.ChooseAccount ? (
-
-
-
- ) : undefined}
- {currentForm === Forms.ForgotPassword ? (
-
-
-
- ) : undefined}
- {currentForm === Forms.SetNewPassword ? (
-
-
-
- ) : undefined}
- {currentForm === Forms.PasswordUpdated ? (
-
-
-
- ) : undefined}
-
- )
-}
diff --git a/src/view/com/auth/login/LoginForm.tsx b/src/view/com/auth/login/LoginForm.tsx
deleted file mode 100644
index e480de7a4c..0000000000
--- a/src/view/com/auth/login/LoginForm.tsx
+++ /dev/null
@@ -1,298 +0,0 @@
-import React, {useState, useRef} from 'react'
-import {
- ActivityIndicator,
- Keyboard,
- TextInput,
- TouchableOpacity,
- View,
-} from 'react-native'
-import {
- FontAwesomeIcon,
- FontAwesomeIconStyle,
-} from '@fortawesome/react-native-fontawesome'
-import {ComAtprotoServerDescribeServer} from '@atproto/api'
-import {useAnalytics} from 'lib/analytics/analytics'
-import {Text} from '../../util/text/Text'
-import {s} from 'lib/styles'
-import {createFullHandle} from 'lib/strings/handles'
-import {toNiceDomain} from 'lib/strings/url-helpers'
-import {isNetworkError} from 'lib/strings/errors'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useTheme} from 'lib/ThemeContext'
-import {useSessionApi} from '#/state/session'
-import {cleanError} from 'lib/strings/errors'
-import {logger} from '#/logger'
-import {Trans, msg} from '@lingui/macro'
-import {styles} from './styles'
-import {useLingui} from '@lingui/react'
-import {useDialogControl} from '#/components/Dialog'
-
-import {ServerInputDialog} from '../server-input'
-
-type ServiceDescription = ComAtprotoServerDescribeServer.OutputSchema
-
-export const LoginForm = ({
- error,
- serviceUrl,
- serviceDescription,
- initialHandle,
- setError,
- setServiceUrl,
- onPressRetryConnect,
- onPressBack,
- onPressForgotPassword,
-}: {
- error: string
- serviceUrl: string
- serviceDescription: ServiceDescription | undefined
- initialHandle: string
- setError: (v: string) => void
- setServiceUrl: (v: string) => void
- onPressRetryConnect: () => void
- onPressBack: () => void
- onPressForgotPassword: () => void
-}) => {
- const {track} = useAnalytics()
- const pal = usePalette('default')
- const theme = useTheme()
- const [isProcessing, setIsProcessing] = useState(false)
- const [identifier, setIdentifier] = useState(initialHandle)
- const [password, setPassword] = useState('')
- const passwordInputRef = useRef(null)
- const {_} = useLingui()
- const {login} = useSessionApi()
- const serverInputControl = useDialogControl()
-
- const onPressSelectService = () => {
- serverInputControl.open()
- Keyboard.dismiss()
- track('Signin:PressedSelectService')
- }
-
- const onPressNext = async () => {
- Keyboard.dismiss()
- setError('')
- setIsProcessing(true)
-
- try {
- // try to guess the handle if the user just gave their own username
- let fullIdent = identifier
- if (
- !identifier.includes('@') && // not an email
- !identifier.includes('.') && // not a domain
- serviceDescription &&
- serviceDescription.availableUserDomains.length > 0
- ) {
- let matched = false
- for (const domain of serviceDescription.availableUserDomains) {
- if (fullIdent.endsWith(domain)) {
- matched = true
- }
- }
- if (!matched) {
- fullIdent = createFullHandle(
- identifier,
- serviceDescription.availableUserDomains[0],
- )
- }
- }
-
- // TODO remove double login
- await login({
- service: serviceUrl,
- identifier: fullIdent,
- password,
- })
- } catch (e: any) {
- const errMsg = e.toString()
- setIsProcessing(false)
- if (errMsg.includes('Authentication Required')) {
- logger.info('Failed to login due to invalid credentials', {
- error: errMsg,
- })
- setError(_(msg`Invalid username or password`))
- } else if (isNetworkError(e)) {
- logger.warn('Failed to login due to network error', {error: errMsg})
- setError(
- _(
- msg`Unable to contact your service. Please check your Internet connection.`,
- ),
- )
- } else {
- logger.warn('Failed to login', {error: errMsg})
- setError(cleanError(errMsg))
- }
- }
- }
-
- const isReady = !!serviceDescription && !!identifier && !!password
- return (
-
-
-
-
- Sign into
-
-
-
-
-
-
- {toNiceDomain(serviceUrl)}
-
-
-
-
-
-
-
-
- Account
-
-
-
-
- {
- passwordInputRef.current?.focus()
- }}
- blurOnSubmit={false} // prevents flickering due to onSubmitEditing going to next field
- keyboardAppearance={theme.colorScheme}
- value={identifier}
- onChangeText={str =>
- setIdentifier((str || '').toLowerCase().trim())
- }
- editable={!isProcessing}
- accessibilityLabel={_(msg`Username or email address`)}
- accessibilityHint={_(
- msg`Input the username or email address you used at signup`,
- )}
- />
-
-
-
-
-
-
- Forgot
-
-
-
-
- {error ? (
-
-
-
-
-
- {error}
-
-
- ) : undefined}
-
-
-
- Back
-
-
-
- {!serviceDescription && error ? (
-
-
- Retry
-
-
- ) : !serviceDescription ? (
- <>
-
-
- Connecting...
-
- >
- ) : isProcessing ? (
-
- ) : isReady ? (
-
-
- Next
-
-
- ) : undefined}
-
-
- )
-}
diff --git a/src/view/com/auth/login/PasswordUpdatedForm.tsx b/src/view/com/auth/login/PasswordUpdatedForm.tsx
deleted file mode 100644
index 71f750b141..0000000000
--- a/src/view/com/auth/login/PasswordUpdatedForm.tsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import React, {useEffect} from 'react'
-import {TouchableOpacity, View} from 'react-native'
-import {useAnalytics} from 'lib/analytics/analytics'
-import {Text} from '../../util/text/Text'
-import {s} from 'lib/styles'
-import {usePalette} from 'lib/hooks/usePalette'
-import {styles} from './styles'
-import {msg, Trans} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-
-export const PasswordUpdatedForm = ({
- onPressNext,
-}: {
- onPressNext: () => void
-}) => {
- const {screen} = useAnalytics()
- const pal = usePalette('default')
- const {_} = useLingui()
-
- useEffect(() => {
- screen('Signin:PasswordUpdatedForm')
- }, [screen])
-
- return (
- <>
-
-
- Password updated!
-
-
- You can now sign in with your new password.
-
-
-
-
-
- Okay
-
-
-
-
- >
- )
-}
diff --git a/src/view/com/auth/login/SetNewPasswordForm.tsx b/src/view/com/auth/login/SetNewPasswordForm.tsx
deleted file mode 100644
index 6d1584c86c..0000000000
--- a/src/view/com/auth/login/SetNewPasswordForm.tsx
+++ /dev/null
@@ -1,211 +0,0 @@
-import React, {useState, useEffect} from 'react'
-import {
- ActivityIndicator,
- TextInput,
- TouchableOpacity,
- View,
-} from 'react-native'
-import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import {BskyAgent} from '@atproto/api'
-import {useAnalytics} from 'lib/analytics/analytics'
-import {Text} from '../../util/text/Text'
-import {s} from 'lib/styles'
-import {isNetworkError} from 'lib/strings/errors'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useTheme} from 'lib/ThemeContext'
-import {cleanError} from 'lib/strings/errors'
-import {checkAndFormatResetCode} from 'lib/strings/password'
-import {logger} from '#/logger'
-import {styles} from './styles'
-import {Trans, msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-
-export const SetNewPasswordForm = ({
- error,
- serviceUrl,
- setError,
- onPressBack,
- onPasswordSet,
-}: {
- error: string
- serviceUrl: string
- setError: (v: string) => void
- onPressBack: () => void
- onPasswordSet: () => void
-}) => {
- const pal = usePalette('default')
- const theme = useTheme()
- const {screen} = useAnalytics()
- const {_} = useLingui()
-
- useEffect(() => {
- screen('Signin:SetNewPasswordForm')
- }, [screen])
-
- const [isProcessing, setIsProcessing] = useState(false)
- const [resetCode, setResetCode] = useState('')
- const [password, setPassword] = useState('')
-
- const onPressNext = async () => {
- // Check that the code is correct. We do this again just incase the user enters the code after their pw and we
- // don't get to call onBlur first
- const formattedCode = checkAndFormatResetCode(resetCode)
- // TODO Better password strength check
- if (!formattedCode || !password) {
- setError(
- _(
- msg`You have entered an invalid code. It should look like XXXXX-XXXXX.`,
- ),
- )
- return
- }
-
- setError('')
- setIsProcessing(true)
-
- try {
- const agent = new BskyAgent({service: serviceUrl})
- await agent.com.atproto.server.resetPassword({
- token: formattedCode,
- password,
- })
- onPasswordSet()
- } catch (e: any) {
- const errMsg = e.toString()
- logger.warn('Failed to set new password', {error: e})
- setIsProcessing(false)
- if (isNetworkError(e)) {
- setError(
- 'Unable to contact your service. Please check your Internet connection.',
- )
- } else {
- setError(cleanError(errMsg))
- }
- }
- }
-
- const onBlur = () => {
- const formattedCode = checkAndFormatResetCode(resetCode)
- if (!formattedCode) {
- setError(
- _(
- msg`You have entered an invalid code. It should look like XXXXX-XXXXX.`,
- ),
- )
- return
- }
- setResetCode(formattedCode)
- }
-
- return (
- <>
-
-
- Set new password
-
-
-
- You will receive an email with a "reset code." Enter that code here,
- then enter your new password.
-
-
-
-
-
- setError('')}
- onBlur={onBlur}
- editable={!isProcessing}
- accessible={true}
- accessibilityLabel={_(msg`Reset code`)}
- accessibilityHint={_(
- msg`Input code sent to your email for password reset`,
- )}
- />
-
-
-
-
-
-
- {error ? (
-
-
-
-
-
- {error}
-
-
- ) : undefined}
-
-
-
- Back
-
-
-
- {isProcessing ? (
-
- ) : !resetCode || !password ? (
-
- Next
-
- ) : (
-
-
- Next
-
-
- )}
- {isProcessing ? (
-
- Updating...
-
- ) : undefined}
-
-
- >
- )
-}
diff --git a/src/view/com/auth/login/styles.ts b/src/view/com/auth/login/styles.ts
deleted file mode 100644
index 9dccc2803b..0000000000
--- a/src/view/com/auth/login/styles.ts
+++ /dev/null
@@ -1,118 +0,0 @@
-import {StyleSheet} from 'react-native'
-import {colors} from 'lib/styles'
-import {isWeb} from '#/platform/detection'
-
-export const styles = StyleSheet.create({
- screenTitle: {
- marginBottom: 10,
- marginHorizontal: 20,
- },
- instructions: {
- marginBottom: 20,
- marginHorizontal: 20,
- },
- group: {
- borderWidth: 1,
- borderRadius: 10,
- marginBottom: 20,
- marginHorizontal: 20,
- },
- groupLabel: {
- paddingHorizontal: 20,
- paddingBottom: 5,
- },
- groupContent: {
- borderTopWidth: 1,
- flexDirection: 'row',
- alignItems: 'center',
- },
- noTopBorder: {
- borderTopWidth: 0,
- },
- groupContentIcon: {
- marginLeft: 10,
- },
- account: {
- borderTopWidth: 1,
- paddingHorizontal: 20,
- paddingVertical: 4,
- },
- accountLast: {
- borderBottomWidth: 1,
- marginBottom: 20,
- paddingVertical: 8,
- },
- textInput: {
- flex: 1,
- width: '100%',
- paddingVertical: 10,
- paddingHorizontal: 12,
- fontSize: 17,
- letterSpacing: 0.25,
- fontWeight: '400',
- borderRadius: 10,
- },
- textInputInnerBtn: {
- flexDirection: 'row',
- alignItems: 'center',
- paddingVertical: 6,
- paddingHorizontal: 8,
- marginHorizontal: 6,
- },
- textBtn: {
- flexDirection: 'row',
- flex: 1,
- alignItems: 'center',
- },
- textBtnLabel: {
- flex: 1,
- paddingVertical: 10,
- paddingHorizontal: 12,
- },
- textBtnFakeInnerBtn: {
- flexDirection: 'row',
- alignItems: 'center',
- borderRadius: 6,
- paddingVertical: 6,
- paddingHorizontal: 8,
- marginHorizontal: 6,
- },
- accountText: {
- flex: 1,
- flexDirection: 'row',
- alignItems: 'baseline',
- paddingVertical: 10,
- },
- accountTextOther: {
- paddingLeft: 12,
- },
- error: {
- backgroundColor: colors.red4,
- flexDirection: 'row',
- alignItems: 'center',
- marginTop: -5,
- marginHorizontal: 20,
- marginBottom: 15,
- borderRadius: 8,
- paddingHorizontal: 8,
- paddingVertical: 8,
- },
- errorIcon: {
- borderWidth: 1,
- borderColor: colors.white,
- color: colors.white,
- borderRadius: 30,
- width: 16,
- height: 16,
- alignItems: 'center',
- justifyContent: 'center',
- marginRight: 5,
- },
- dimmed: {opacity: 0.5},
-
- maxHeight: {
- // @ts-ignore web only -prf
- maxHeight: isWeb ? '100vh' : undefined,
- height: !isWeb ? '100%' : undefined,
- },
-})
diff --git a/src/view/com/auth/onboarding/RecommendedFollowsItem.tsx b/src/view/com/auth/onboarding/RecommendedFollowsItem.tsx
index 07001068cc..9bf269cb86 100644
--- a/src/view/com/auth/onboarding/RecommendedFollowsItem.tsx
+++ b/src/view/com/auth/onboarding/RecommendedFollowsItem.tsx
@@ -1,24 +1,26 @@
import React from 'react'
-import {View, StyleSheet, ActivityIndicator} from 'react-native'
-import {ProfileModeration, AppBskyActorDefs} from '@atproto/api'
-import {Button} from '#/view/com/util/forms/Button'
+import {ActivityIndicator, StyleSheet, View} from 'react-native'
+import Animated, {FadeInRight} from 'react-native-reanimated'
+import {AppBskyActorDefs, ModerationDecision} from '@atproto/api'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {logger} from '#/logger'
+import {Shadow, useProfileShadow} from '#/state/cache/profile-shadow'
+import {useProfileFollowMutationQueue} from '#/state/queries/profile'
+import {useAnalytics} from 'lib/analytics/analytics'
import {usePalette} from 'lib/hooks/usePalette'
+import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
import {sanitizeDisplayName} from 'lib/strings/display-names'
import {sanitizeHandle} from 'lib/strings/handles'
import {s} from 'lib/styles'
-import {UserAvatar} from 'view/com/util/UserAvatar'
+import {Button} from '#/view/com/util/forms/Button'
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 {Shadow, useProfileShadow} from '#/state/cache/profile-shadow'
-import {useProfileFollowMutationQueue} from '#/state/queries/profile'
-import {logger} from '#/logger'
+import {UserAvatar} from 'view/com/util/UserAvatar'
type Props = {
profile: AppBskyActorDefs.ProfileViewBasic
- moderation: ProfileModeration
+ moderation: ModerationDecision
onFollowStateChange: (props: {
did: string
following: boolean
@@ -56,13 +58,13 @@ export function RecommendedFollowsItem({
)
}
-export function ProfileCard({
+function ProfileCard({
profile,
onFollowStateChange,
moderation,
}: {
profile: Shadow
- moderation: ProfileModeration
+ moderation: ModerationDecision
onFollowStateChange: (props: {
did: string
following: boolean
@@ -70,9 +72,13 @@ export function ProfileCard({
}) {
const {track} = useAnalytics()
const pal = usePalette('default')
+ const {_} = useLingui()
const [addingMoreSuggestions, setAddingMoreSuggestions] =
React.useState(false)
- const [queueFollow, queueUnfollow] = useProfileFollowMutationQueue(profile)
+ const [queueFollow, queueUnfollow] = useProfileFollowMutationQueue(
+ profile,
+ 'RecommendedFollowsItem',
+ )
const onToggleFollow = React.useCallback(async () => {
try {
@@ -110,7 +116,7 @@ export function ProfileCard({
@@ -121,7 +127,7 @@ export function ProfileCard({
lineHeight={1.2}>
{sanitizeDisplayName(
profile.displayName || sanitizeHandle(profile.handle),
- moderation.profile,
+ moderation.ui('displayName'),
)}
@@ -133,7 +139,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`)}
/>
{profile.description ? (
diff --git a/src/view/com/auth/onboarding/WelcomeMobile.tsx b/src/view/com/auth/onboarding/WelcomeMobile.tsx
index 5de1a78170..078b01215a 100644
--- a/src/view/com/auth/onboarding/WelcomeMobile.tsx
+++ b/src/view/com/auth/onboarding/WelcomeMobile.tsx
@@ -1,12 +1,14 @@
import React from 'react'
import {Pressable, StyleSheet, View} from 'react-native'
-import {Text} from 'view/com/util/text/Text'
-import {s} from 'lib/styles'
-import {usePalette} from 'lib/hooks/usePalette'
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {usePalette} from 'lib/hooks/usePalette'
+import {s} from 'lib/styles'
import {Button} from 'view/com/util/forms/Button'
+import {Text} from 'view/com/util/text/Text'
import {ViewHeader} from 'view/com/util/ViewHeader'
-import {Trans} from '@lingui/macro'
type Props = {
next: () => void
@@ -15,6 +17,7 @@ type Props = {
export function WelcomeMobile({next, skip}: Props) {
const pal = usePalette('default')
+ const {_} = useLingui()
return (
@@ -91,7 +94,7 @@ export function WelcomeMobile({next, skip}: Props) {
diff --git a/src/view/com/composer/Composer.tsx b/src/view/com/composer/Composer.tsx
index 1ed6b98a55..24f61a2ee1 100644
--- a/src/view/com/composer/Composer.tsx
+++ b/src/view/com/composer/Composer.tsx
@@ -1,5 +1,4 @@
import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react'
-import {observer} from 'mobx-react-lite'
import {
ActivityIndicator,
BackHandler,
@@ -13,56 +12,61 @@ import {
View,
} from 'react-native'
import {useSafeAreaInsets} from 'react-native-safe-area-context'
-import LinearGradient from 'react-native-linear-gradient'
-import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {LinearGradient} from 'expo-linear-gradient'
import {RichText} from '@atproto/api'
-import {useAnalytics} from 'lib/analytics/analytics'
-import {useIsKeyboardVisible} from 'lib/hooks/useIsKeyboardVisible'
-import {ExternalEmbed} from './ExternalEmbed'
-import {Text} from '../util/text/Text'
-import * as Toast from '../util/Toast'
-// TODO: Prevent naming components that coincide with RN primitives
-// due to linting false positives
-import {TextInput, TextInputRef} from './text-input/TextInput'
-import {CharProgress} from './char-progress/CharProgress'
-import {UserAvatar} from '../util/UserAvatar'
-import * as apilib from 'lib/api/index'
-import {ComposerOpts} from 'state/shell/composer'
-import {s, colors, gradients} from 'lib/styles'
-import {cleanError} from 'lib/strings/errors'
-import {shortenLinks} from 'lib/strings/rich-text-manip'
-import {toShortUrl} from 'lib/strings/url-helpers'
-import {SelectPhotoBtn} from './photos/SelectPhotoBtn'
-import {OpenCameraBtn} from './photos/OpenCameraBtn'
-import {ThreadgateBtn} from './threadgate/ThreadgateBtn'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {useExternalLinkFetch} from './useExternalLinkFetch'
-import {isWeb, isNative, isAndroid, isIOS} from 'platform/detection'
-import QuoteEmbed from '../util/post-embeds/QuoteEmbed'
-import {GalleryModel} from 'state/models/media/gallery'
-import {Gallery} from './photos/Gallery'
-import {MAX_GRAPHEME_LENGTH} from 'lib/constants'
-import {LabelsBtn} from './labels/LabelsBtn'
-import {SelectLangBtn} from './select-language/SelectLangBtn'
-import {SuggestedLanguage} from './select-language/SuggestedLanguage'
-import {insertMentionAt} from 'lib/strings/mention-manip'
-import {Trans, msg} from '@lingui/macro'
+import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
-import {useModals, useModalControls} from '#/state/modals'
+import {observer} from 'mobx-react-lite'
+
+import {logEvent} from '#/lib/statsig/statsig'
+import {logger} from '#/logger'
+import {emitPostCreated} from '#/state/events'
+import {useModals} from '#/state/modals'
import {useRequireAltTextEnabled} from '#/state/preferences'
import {
+ toPostLanguages,
useLanguagePrefs,
useLanguagePrefsApi,
- toPostLanguages,
} from '#/state/preferences/languages'
-import {useSession, getAgent} from '#/state/session'
import {useProfileQuery} from '#/state/queries/profile'
-import {useComposerControls} from '#/state/shell/composer'
-import {emitPostCreated} from '#/state/events'
import {ThreadgateSetting} from '#/state/queries/threadgate'
-import {logger} from '#/logger'
+import {getAgent, useSession} from '#/state/session'
+import {useComposerControls} from '#/state/shell/composer'
+import {useAnalytics} from 'lib/analytics/analytics'
+import * as apilib from 'lib/api/index'
+import {MAX_GRAPHEME_LENGTH} from 'lib/constants'
+import {useIsKeyboardVisible} from 'lib/hooks/useIsKeyboardVisible'
+import {usePalette} from 'lib/hooks/usePalette'
+import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import {cleanError} from 'lib/strings/errors'
+import {insertMentionAt} from 'lib/strings/mention-manip'
+import {shortenLinks} from 'lib/strings/rich-text-manip'
+import {toShortUrl} from 'lib/strings/url-helpers'
+import {colors, gradients, s} from 'lib/styles'
+import {isAndroid, isIOS, isNative, isWeb} from 'platform/detection'
+import {useDialogStateControlContext} from 'state/dialogs'
+import {GalleryModel} from 'state/models/media/gallery'
+import {ComposerOpts} from 'state/shell/composer'
import {ComposerReplyTo} from 'view/com/composer/ComposerReplyTo'
+import * as Prompt from '#/components/Prompt'
+import {QuoteEmbed} from '../util/post-embeds/QuoteEmbed'
+import {Text} from '../util/text/Text'
+import * as Toast from '../util/Toast'
+import {UserAvatar} from '../util/UserAvatar'
+import {CharProgress} from './char-progress/CharProgress'
+import {ExternalEmbed} from './ExternalEmbed'
+import {LabelsBtn} from './labels/LabelsBtn'
+import {Gallery} from './photos/Gallery'
+import {OpenCameraBtn} from './photos/OpenCameraBtn'
+import {SelectPhotoBtn} from './photos/SelectPhotoBtn'
+import {SelectLangBtn} from './select-language/SelectLangBtn'
+import {SuggestedLanguage} from './select-language/SuggestedLanguage'
+// TODO: Prevent naming components that coincide with RN primitives
+// due to linting false positives
+import {TextInput, TextInputRef} from './text-input/TextInput'
+import {ThreadgateBtn} from './threadgate/ThreadgateBtn'
+import {useExternalLinkFetch} from './useExternalLinkFetch'
type Props = ComposerOpts
export const ComposePost = observer(function ComposePost({
@@ -71,11 +75,12 @@ export const ComposePost = observer(function ComposePost({
quote: initQuote,
mention: initMention,
openPicker,
+ text: initText,
+ imageUris: initImageUris,
}: Props) {
const {currentAccount} = useSession()
const {data: currentProfile} = useProfileQuery({did: currentAccount!.did})
- const {isModalActive, activeModals} = useModals()
- const {openModal, closeModal} = useModalControls()
+ const {isModalActive} = useModals()
const {closeComposer} = useComposerControls()
const {track} = useAnalytics()
const pal = usePalette('default')
@@ -85,13 +90,18 @@ export const ComposePost = observer(function ComposePost({
const langPrefs = useLanguagePrefs()
const setLangPrefs = useLanguagePrefsApi()
const textInput = useRef(null)
+ const discardPromptControl = Prompt.usePromptControl()
+ const {closeAllDialogs} = useDialogStateControlContext()
+
const [isKeyboardVisible] = useIsKeyboardVisible({iosUseWillEvents: true})
const [isProcessing, setIsProcessing] = useState(false)
const [processingState, setProcessingState] = useState('')
const [error, setError] = useState('')
const [richtext, setRichText] = useState(
new RichText({
- text: initMention
+ text: initText
+ ? initText
+ : initMention
? insertMentionAt(
`@${initMention}`,
initMention.length + 1,
@@ -110,7 +120,10 @@ export const ComposePost = observer(function ComposePost({
const [labels, setLabels] = useState([])
const [threadgate, setThreadgate] = useState([])
const [suggestedLinks, setSuggestedLinks] = useState>(new Set())
- const gallery = useMemo(() => new GalleryModel(), [])
+ const gallery = useMemo(
+ () => new GalleryModel(initImageUris),
+ [initImageUris],
+ )
const onClose = useCallback(() => {
closeComposer()
}, [closeComposer])
@@ -127,27 +140,21 @@ export const ComposePost = observer(function ComposePost({
const onPressCancel = useCallback(() => {
if (graphemeLength > 0 || !gallery.isEmpty) {
- if (activeModals.some(modal => modal.name === 'confirm')) {
- closeModal()
- }
+ closeAllDialogs()
if (Keyboard) {
Keyboard.dismiss()
}
- openModal({
- name: 'confirm',
- title: _(msg`Discard draft`),
- onPressConfirm: onClose,
- onPressCancel: () => {
- closeModal()
- },
- message: _(msg`Are you sure you'd like to discard this draft?`),
- confirmBtnText: _(msg`Discard`),
- confirmBtnStyle: {backgroundColor: colors.red4},
- })
+ discardPromptControl.open()
} else {
onClose()
}
- }, [openModal, closeModal, activeModals, onClose, graphemeLength, gallery, _])
+ }, [
+ graphemeLength,
+ gallery.isEmpty,
+ closeAllDialogs,
+ discardPromptControl,
+ onClose,
+ ])
// android back button
useEffect(() => {
if (!isAndroid) {
@@ -250,6 +257,16 @@ export const ComposePost = observer(function ComposePost({
setIsProcessing(false)
return
} finally {
+ if (postUri) {
+ logEvent('post:create', {
+ imageCount: gallery.size,
+ isReply: replyTo != null,
+ hasLink: extLink != null,
+ hasQuote: quote != null,
+ langs: langPrefs.postLanguage,
+ logContext: 'Composer',
+ })
+ }
track('Create Post', {
imageCount: gallery.size,
})
@@ -399,7 +416,11 @@ export const ComposePost = observer(function ComposePost({
styles.textInputLayout,
isNative && styles.textInputLayoutMobile,
]}>
-
+
)}
{quote ? (
-
+
) : undefined}
@@ -481,6 +502,15 @@ export const ComposePost = observer(function ComposePost({
+
+
)
})
diff --git a/src/view/com/composer/ComposerReplyTo.tsx b/src/view/com/composer/ComposerReplyTo.tsx
index 39a1473a3b..54df85a962 100644
--- a/src/view/com/composer/ComposerReplyTo.tsx
+++ b/src/view/com/composer/ComposerReplyTo.tsx
@@ -1,21 +1,22 @@
import React from 'react'
import {LayoutAnimation, Pressable, StyleSheet, View} from 'react-native'
import {Image} from 'expo-image'
-import {useLingui} from '@lingui/react'
-import {msg} from '@lingui/macro'
import {
AppBskyEmbedImages,
AppBskyEmbedRecord,
AppBskyEmbedRecordWithMedia,
AppBskyFeedPost,
} from '@atproto/api'
-import {ComposerOptsPostRef} from 'state/shell/composer'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
import {usePalette} from 'lib/hooks/usePalette'
import {sanitizeDisplayName} from 'lib/strings/display-names'
import {sanitizeHandle} from 'lib/strings/handles'
-import {UserAvatar} from 'view/com/util/UserAvatar'
+import {ComposerOptsPostRef} from 'state/shell/composer'
+import {QuoteEmbed} from 'view/com/util/post-embeds/QuoteEmbed'
import {Text} from 'view/com/util/text/Text'
-import QuoteEmbed from 'view/com/util/post-embeds/QuoteEmbed'
+import {UserAvatar} from 'view/com/util/UserAvatar'
export function ComposerReplyTo({replyTo}: {replyTo: ComposerOptsPostRef}) {
const pal = usePalette('default')
@@ -86,7 +87,8 @@ export function ComposerReplyTo({replyTo}: {replyTo: ComposerOptsPostRef}) {
@@ -103,7 +105,7 @@ export function ComposerReplyTo({replyTo}: {replyTo: ComposerOptsPostRef}) {
{replyTo.text}
- {images && !replyTo.moderation?.embed.blur && (
+ {images && !replyTo.moderation?.ui('contentMedia').blur && (
)}
diff --git a/src/view/com/composer/Prompt.tsx b/src/view/com/composer/Prompt.tsx
index 632bb2634b..729f71d4fb 100644
--- a/src/view/com/composer/Prompt.tsx
+++ b/src/view/com/composer/Prompt.tsx
@@ -1,13 +1,14 @@
import React from 'react'
import {StyleSheet, TouchableOpacity} from 'react-native'
-import {UserAvatar} from '../util/UserAvatar'
-import {Text} from '../util/text/Text'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {Trans, msg} from '@lingui/macro'
+import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
-import {useSession} from '#/state/session'
+
import {useProfileQuery} from '#/state/queries/profile'
+import {useSession} from '#/state/session'
+import {usePalette} from 'lib/hooks/usePalette'
+import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import {Text} from '../util/text/Text'
+import {UserAvatar} from '../util/UserAvatar'
export function ComposePrompt({onPressCompose}: {onPressCompose: () => void}) {
const {currentAccount} = useSession()
@@ -23,7 +24,11 @@ export function ComposePrompt({onPressCompose}: {onPressCompose: () => void}) {
accessibilityRole="button"
accessibilityLabel={_(msg`Compose reply`)}
accessibilityHint={_(msg`Opens composer`)}>
-
+
{
track('Composer:CameraOpened')
@@ -31,6 +35,9 @@ export function OpenCameraBtn({gallery}: Props) {
if (!(await requestCameraAccessIfNeeded())) {
return
}
+ if (!mediaPermissionRes?.granted && mediaPermissionRes?.canAskAgain) {
+ await requestMediaPermission()
+ }
const img = await openCamera({
width: POST_IMG_MAX.width,
@@ -38,12 +45,23 @@ export function OpenCameraBtn({gallery}: Props) {
freeStyleCropEnabled: true,
})
+ // If we don't have permissions it's fine, we just wont save it. The post itself will still have access to
+ // the image even without these permissions
+ if (mediaPermissionRes) {
+ await MediaLibrary.createAssetAsync(img.path)
+ }
gallery.add(img)
} catch (err: any) {
// ignore
logger.warn('Error using camera', {error: err})
}
- }, [gallery, track, requestCameraAccessIfNeeded])
+ }, [
+ gallery,
+ track,
+ requestCameraAccessIfNeeded,
+ mediaPermissionRes,
+ requestMediaPermission,
+ ])
const shouldShowCameraButton = isNative || isMobileWeb
if (!shouldShowCameraButton) {
diff --git a/src/view/com/composer/select-language/SelectLangBtn.tsx b/src/view/com/composer/select-language/SelectLangBtn.tsx
index 78b1e9ba27..7a086789ac 100644
--- a/src/view/com/composer/select-language/SelectLangBtn.tsx
+++ b/src/view/com/composer/select-language/SelectLangBtn.tsx
@@ -1,27 +1,28 @@
import React, {useCallback, useMemo} from 'react'
-import {StyleSheet, Keyboard} from 'react-native'
+import {Keyboard, StyleSheet} from 'react-native'
import {
FontAwesomeIcon,
FontAwesomeIconStyle,
} from '@fortawesome/react-native-fontawesome'
-import {Text} from 'view/com/util/text/Text'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {useModalControls} from '#/state/modals'
+import {
+ hasPostLanguage,
+ toPostLanguages,
+ useLanguagePrefs,
+ useLanguagePrefsApi,
+} from '#/state/preferences/languages'
+import {usePalette} from 'lib/hooks/usePalette'
+import {isNative} from 'platform/detection'
import {
DropdownButton,
DropdownItem,
DropdownItemButton,
} from 'view/com/util/forms/DropdownButton'
-import {usePalette} from 'lib/hooks/usePalette'
-import {isNative} from 'platform/detection'
+import {Text} from 'view/com/util/text/Text'
import {codeToLanguageName} from '../../../../locale/helpers'
-import {useModalControls} from '#/state/modals'
-import {
- useLanguagePrefs,
- useLanguagePrefsApi,
- toPostLanguages,
- hasPostLanguage,
-} from '#/state/preferences/languages'
-import {t, msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
export function SelectLangBtn() {
const pal = usePalette('default')
@@ -84,15 +85,15 @@ export function SelectLangBtn() {
}
return [
- {heading: true, label: t`Post language`},
+ {heading: true, label: _(msg`Post language`)},
...arr.slice(0, 6),
{sep: true},
{
- label: t`Other...`,
+ label: _(msg`Other...`),
onPress: onPressMore,
},
]
- }, [onPressMore, langPrefs, setLangPrefs, postLanguagesPref])
+ }, [onPressMore, langPrefs, setLangPrefs, postLanguagesPref, _])
return (
void
@@ -190,12 +191,11 @@ export const TextInput = forwardRef(function TextInputImpl(
let i = 0
return Array.from(richtext.segments()).map(segment => {
- const isTag = AppBskyRichtextFacet.isTag(segment.facet?.features?.[0])
return (
{segment.text}
diff --git a/src/view/com/composer/text-input/TextInput.web.tsx b/src/view/com/composer/text-input/TextInput.web.tsx
index 199f1f7499..cc03910939 100644
--- a/src/view/com/composer/text-input/TextInput.web.tsx
+++ b/src/view/com/composer/text-input/TextInput.web.tsx
@@ -1,28 +1,30 @@
import React from 'react'
import {StyleSheet, View} from 'react-native'
-import {RichText, AppBskyRichtextFacet} from '@atproto/api'
-import EventEmitter from 'eventemitter3'
-import {useEditor, EditorContent, JSONContent} from '@tiptap/react'
+import Animated, {FadeIn, FadeOut} from 'react-native-reanimated'
+import {AppBskyRichtextFacet, RichText} from '@atproto/api'
+import {Trans} from '@lingui/macro'
import {Document} from '@tiptap/extension-document'
-import History from '@tiptap/extension-history'
import Hardbreak from '@tiptap/extension-hard-break'
+import History from '@tiptap/extension-history'
import {Mention} from '@tiptap/extension-mention'
import {Paragraph} from '@tiptap/extension-paragraph'
import {Placeholder} from '@tiptap/extension-placeholder'
import {Text as TiptapText} from '@tiptap/extension-text'
-import isEqual from 'lodash.isequal'
-import {createSuggestion} from './web/Autocomplete'
-import {useColorSchemeStyle} from 'lib/hooks/useColorSchemeStyle'
-import {isUriImage, blobToDataUri} from 'lib/media/util'
-import {Emoji} from './web/EmojiPicker.web'
-import {LinkDecorator} from './web/LinkDecorator'
import {generateJSON} from '@tiptap/html'
-import {useActorAutocompleteFn} from '#/state/queries/actor-autocomplete'
+import {EditorContent, JSONContent, useEditor} from '@tiptap/react'
+import EventEmitter from 'eventemitter3'
+import isEqual from 'lodash.isequal'
+
import {usePalette} from '#/lib/hooks/usePalette'
+import {useActorAutocompleteFn} from '#/state/queries/actor-autocomplete'
+import {useColorSchemeStyle} from 'lib/hooks/useColorSchemeStyle'
+import {blobToDataUri, isUriImage} from 'lib/media/util'
import {Portal} from '#/components/Portal'
import {Text} from '../../util/text/Text'
-import {Trans} from '@lingui/macro'
-import Animated, {FadeIn, FadeOut} from 'react-native-reanimated'
+import {createSuggestion} from './web/Autocomplete'
+import {Emoji} from './web/EmojiPicker.web'
+import {LinkDecorator} from './web/LinkDecorator'
+import {TagDecorator} from './web/TagDecorator'
export interface TextInputRef {
focus: () => void
@@ -67,6 +69,7 @@ export const TextInput = React.forwardRef(function TextInputImpl(
() => [
Document,
LinkDecorator,
+ TagDecorator,
Mention.configure({
HTMLAttributes: {
class: 'mention',
diff --git a/src/view/com/composer/text-input/mobile/Autocomplete.tsx b/src/view/com/composer/text-input/mobile/Autocomplete.tsx
index c400aa48d5..c7980d7a9e 100644
--- a/src/view/com/composer/text-input/mobile/Autocomplete.tsx
+++ b/src/view/com/composer/text-input/mobile/Autocomplete.tsx
@@ -1,13 +1,14 @@
import React, {useEffect, useRef} from 'react'
-import {Animated, TouchableOpacity, StyleSheet, View} from 'react-native'
+import {Animated, StyleSheet, TouchableOpacity, View} from 'react-native'
+import {AppBskyActorDefs} from '@atproto/api'
+import {Trans} from '@lingui/macro'
+
+import {useActorAutocompleteQuery} from '#/state/queries/actor-autocomplete'
import {useAnimatedValue} from 'lib/hooks/useAnimatedValue'
import {usePalette} from 'lib/hooks/usePalette'
import {Text} from 'view/com/util/text/Text'
import {UserAvatar} from 'view/com/util/UserAvatar'
import {useGrapheme} from '../hooks/useGrapheme'
-import {useActorAutocompleteQuery} from '#/state/queries/actor-autocomplete'
-import {Trans} from '@lingui/macro'
-import {AppBskyActorDefs} from '@atproto/api'
export function Autocomplete({
prefix,
@@ -78,7 +79,11 @@ export function Autocomplete({
accessibilityLabel={`Select ${item.handle}`}
accessibilityHint="">
-
+
{displayName}
diff --git a/src/view/com/composer/text-input/web/Autocomplete.tsx b/src/view/com/composer/text-input/web/Autocomplete.tsx
index 76058fed34..d3c7d718e7 100644
--- a/src/view/com/composer/text-input/web/Autocomplete.tsx
+++ b/src/view/com/composer/text-input/web/Autocomplete.tsx
@@ -5,19 +5,20 @@ import React, {
useState,
} from 'react'
import {Pressable, StyleSheet, View} from 'react-native'
+import {Trans} from '@lingui/macro'
import {ReactRenderer} from '@tiptap/react'
-import tippy, {Instance as TippyInstance} from 'tippy.js'
import {
+ SuggestionKeyDownProps,
SuggestionOptions,
SuggestionProps,
- SuggestionKeyDownProps,
} from '@tiptap/suggestion'
+import tippy, {Instance as TippyInstance} from 'tippy.js'
+
import {ActorAutocompleteFn} from '#/state/queries/actor-autocomplete'
import {usePalette} from 'lib/hooks/usePalette'
import {Text} from 'view/com/util/text/Text'
import {UserAvatar} from 'view/com/util/UserAvatar'
import {useGrapheme} from '../hooks/useGrapheme'
-import {Trans} from '@lingui/macro'
interface MentionListRef {
onKeyDown: (props: SuggestionKeyDownProps) => boolean
@@ -175,7 +176,11 @@ const MentionList = forwardRef(
}}
accessibilityRole="button">
-
+
{displayName}
diff --git a/src/view/com/composer/text-input/web/LinkDecorator.ts b/src/view/com/composer/text-input/web/LinkDecorator.ts
index 19945de086..1486bc3df4 100644
--- a/src/view/com/composer/text-input/web/LinkDecorator.ts
+++ b/src/view/com/composer/text-input/web/LinkDecorator.ts
@@ -14,10 +14,12 @@
* the facet-set.
*/
+import {URL_REGEX} from '@atproto/api'
import {Mark} from '@tiptap/core'
-import {Plugin, PluginKey} from '@tiptap/pm/state'
import {Node as ProsemirrorNode} from '@tiptap/pm/model'
+import {Plugin, PluginKey} from '@tiptap/pm/state'
import {Decoration, DecorationSet} from '@tiptap/pm/view'
+
import {isValidDomain} from 'lib/strings/url-helpers'
export const LinkDecorator = Mark.create({
@@ -78,8 +80,7 @@ function linkDecorator() {
function iterateUris(str: string, cb: (from: number, to: number) => void) {
let match
- const re =
- /(^|\s|\()((https?:\/\/[\S]+)|((?[a-z][a-z0-9]*(\.[a-z0-9]+)+)[\S]*))/gim
+ const re = URL_REGEX
while ((match = re.exec(str))) {
let uri = match[2]
if (!uri.startsWith('http')) {
diff --git a/src/view/com/composer/text-input/web/TagDecorator.ts b/src/view/com/composer/text-input/web/TagDecorator.ts
new file mode 100644
index 0000000000..9225fd6bf9
--- /dev/null
+++ b/src/view/com/composer/text-input/web/TagDecorator.ts
@@ -0,0 +1,91 @@
+/**
+ * TipTap is a stateful rich-text editor, which is extremely useful
+ * when you _want_ it to be stateful formatting such as bold and italics.
+ *
+ * However we also use "stateless" behaviors, specifically for URLs
+ * where the text itself drives the formatting.
+ *
+ * This plugin uses a regex to detect URIs and then applies
+ * link decorations (a with the "autolink") class. That avoids
+ * adding any stateful formatting to TipTap's document model.
+ *
+ * We then run the URI detection again when constructing the
+ * RichText object from TipTap's output and merge their features into
+ * the facet-set.
+ */
+
+import {TAG_REGEX, TRAILING_PUNCTUATION_REGEX} from '@atproto/api'
+import {Mark} from '@tiptap/core'
+import {Node as ProsemirrorNode} from '@tiptap/pm/model'
+import {Plugin, PluginKey} from '@tiptap/pm/state'
+import {Decoration, DecorationSet} from '@tiptap/pm/view'
+
+function getDecorations(doc: ProsemirrorNode) {
+ const decorations: Decoration[] = []
+
+ doc.descendants((node, pos) => {
+ if (node.isText && node.text) {
+ const regex = TAG_REGEX
+ const textContent = node.textContent
+
+ let match
+ while ((match = regex.exec(textContent))) {
+ const [matchedString, _, tag] = match
+
+ if (!tag || tag.replace(TRAILING_PUNCTUATION_REGEX, '').length > 64)
+ continue
+
+ const [trailingPunc = ''] = tag.match(TRAILING_PUNCTUATION_REGEX) || []
+ const matchedFrom = match.index + matchedString.indexOf(tag)
+ const matchedTo = matchedFrom + (tag.length - trailingPunc.length)
+
+ /*
+ * The match is exclusive of `#` so we need to adjust the start of the
+ * highlight by -1 to include the `#`
+ */
+ const start = pos + matchedFrom - 1
+ const end = pos + matchedTo
+
+ decorations.push(
+ Decoration.inline(start, end, {
+ class: 'autolink',
+ }),
+ )
+ }
+ }
+ })
+
+ return DecorationSet.create(doc, decorations)
+}
+
+const tagDecoratorPlugin: Plugin = new Plugin({
+ key: new PluginKey('link-decorator'),
+
+ state: {
+ init: (_, {doc}) => getDecorations(doc),
+ apply: (transaction, decorationSet) => {
+ if (transaction.docChanged) {
+ return getDecorations(transaction.doc)
+ }
+ return decorationSet.map(transaction.mapping, transaction.doc)
+ },
+ },
+
+ props: {
+ decorations(state) {
+ return tagDecoratorPlugin.getState(state)
+ },
+ },
+})
+
+export const TagDecorator = Mark.create({
+ name: 'tag-decorator',
+ priority: 1000,
+ keepOnSplit: false,
+ inclusive() {
+ return true
+ },
+ addProseMirrorPlugins() {
+ return [tagDecoratorPlugin]
+ },
+})
diff --git a/src/view/com/composer/useExternalLinkFetch.e2e.ts b/src/view/com/composer/useExternalLinkFetch.e2e.ts
new file mode 100644
index 0000000000..8ad86d4520
--- /dev/null
+++ b/src/view/com/composer/useExternalLinkFetch.e2e.ts
@@ -0,0 +1,46 @@
+import {useEffect, useState} from 'react'
+
+import {getAgent} from '#/state/session'
+import * as apilib from 'lib/api/index'
+import {getLinkMeta} from 'lib/link-meta/link-meta'
+import {ComposerOpts} from 'state/shell/composer'
+
+export function useExternalLinkFetch({}: {
+ setQuote: (opts: ComposerOpts['quote']) => void
+}) {
+ const [extLink, setExtLink] = useState(
+ undefined,
+ )
+
+ useEffect(() => {
+ let aborted = false
+ const cleanup = () => {
+ aborted = true
+ }
+ if (!extLink) {
+ return cleanup
+ }
+ if (!extLink.meta) {
+ getLinkMeta(getAgent(), extLink.uri).then(meta => {
+ if (aborted) {
+ return
+ }
+ setExtLink({
+ uri: extLink.uri,
+ isLoading: !!meta.image,
+ meta,
+ })
+ })
+ return cleanup
+ }
+ if (extLink.isLoading) {
+ setExtLink({
+ ...extLink,
+ isLoading: false, // done
+ })
+ }
+ return cleanup
+ }, [extLink])
+
+ return {extLink, setExtLink}
+}
diff --git a/src/view/com/feeds/FeedPage.tsx b/src/view/com/feeds/FeedPage.tsx
index 9595e77e5e..25c7e1006d 100644
--- a/src/view/com/feeds/FeedPage.tsx
+++ b/src/view/com/feeds/FeedPage.tsx
@@ -1,33 +1,29 @@
import React from 'react'
-import {
- FontAwesomeIcon,
- FontAwesomeIconStyle,
-} from '@fortawesome/react-native-fontawesome'
+import {useWindowDimensions, View} from 'react-native'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
import {useNavigation} from '@react-navigation/native'
-import {useAnalytics} from 'lib/analytics/analytics'
import {useQueryClient} from '@tanstack/react-query'
+
+import {getRootNavigation, getTabState, TabState} from '#/lib/routes/helpers'
+import {logEvent, useGate} from '#/lib/statsig/statsig'
+import {isNative} from '#/platform/detection'
+import {listenSoftReset} from '#/state/events'
import {RQKEY as FEED_RQKEY} from '#/state/queries/post-feed'
-import {MainScrollProvider} from '../util/MainScrollProvider'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {useSetMinimalShellMode} from '#/state/shell'
import {FeedDescriptor, FeedParams} from '#/state/queries/post-feed'
+import {truncateAndInvalidate} from '#/state/queries/util'
+import {useSession} from '#/state/session'
+import {useSetMinimalShellMode} from '#/state/shell'
+import {useComposerControls} from '#/state/shell/composer'
+import {useAnalytics} from 'lib/analytics/analytics'
+import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
import {ComposeIcon2} from 'lib/icons'
-import {colors, s} from 'lib/styles'
-import {View, useWindowDimensions} from 'react-native'
-import {ListMethods} from '../util/List'
+import {s} from 'lib/styles'
import {Feed} from '../posts/Feed'
-import {TextLink} from '../util/Link'
import {FAB} from '../util/fab/FAB'
+import {ListMethods} from '../util/List'
import {LoadLatestBtn} from '../util/load-latest/LoadLatestBtn'
-import {msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-import {useSession} from '#/state/session'
-import {useComposerControls} from '#/state/shell/composer'
-import {listenSoftReset, emitSoftReset} from '#/state/events'
-import {truncateAndInvalidate} from '#/state/queries/util'
-import {TabState, getTabState, getRootNavigation} from '#/lib/routes/helpers'
-import {isNative} from '#/platform/detection'
+import {MainScrollProvider} from '../util/MainScrollProvider'
const POLL_FREQ = 60e3 // 60sec
@@ -46,11 +42,9 @@ export function FeedPage({
renderEmptyState: () => JSX.Element
renderEndOfFeed?: () => JSX.Element
}) {
- const {isSandbox, hasSession} = useSession()
- const pal = usePalette('default')
+ const {hasSession} = useSession()
const {_} = useLingui()
const navigation = useNavigation()
- const {isDesktop} = useWebMediaQueries()
const queryClient = useQueryClient()
const {openComposer} = useComposerControls()
const [isScrolledDown, setIsScrolledDown] = React.useState(false)
@@ -76,6 +70,11 @@ export function FeedPage({
scrollToTop()
truncateAndInvalidate(queryClient, FEED_RQKEY(feed))
setHasNew(false)
+ logEvent('feed:refresh', {
+ feedType: feed.split('|')[0],
+ feedUrl: feed,
+ reason: 'soft-reset',
+ })
}
}, [navigation, isPageFocused, scrollToTop, queryClient, feed, setHasNew])
@@ -97,73 +96,23 @@ export function FeedPage({
scrollToTop()
truncateAndInvalidate(queryClient, FEED_RQKEY(feed))
setHasNew(false)
+ logEvent('feed:refresh', {
+ feedType: feed.split('|')[0],
+ feedUrl: feed,
+ reason: 'load-latest',
+ })
}, [scrollToTop, feed, queryClient, setHasNew])
- const ListHeaderComponent = React.useCallback(() => {
- if (isDesktop) {
- return (
-
-
- {isSandbox ? 'SANDBOX' : 'Bluesky'}{' '}
- {hasNew && (
-
- )}
- >
- }
- onPress={emitSoftReset}
- />
- {hasSession && (
-
- }
- />
- )}
-
- )
- }
- return <>>
- }, [
- isDesktop,
- pal.view,
- pal.text,
- pal.textLight,
- hasNew,
- _,
- isSandbox,
- hasSession,
- ])
+ let feedPollInterval
+ if (
+ useGate('disable_poll_on_discover') &&
+ feed === // Discover
+ 'feedgen|at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/whats-hot'
+ ) {
+ feedPollInterval = undefined
+ } else {
+ feedPollInterval = POLL_FREQ
+ }
return (
@@ -173,14 +122,13 @@ export function FeedPage({
enabled={isPageFocused}
feed={feed}
feedParams={feedParams}
- pollInterval={POLL_FREQ}
+ pollInterval={feedPollInterval}
disablePoll={hasNew}
scrollElRef={scrollElRef}
onScrolledDownChange={setIsScrolledDown}
onHasNew={setHasNew}
renderEmptyState={renderEmptyState}
renderEndOfFeed={renderEndOfFeed}
- ListHeaderComponent={ListHeaderComponent}
headerOffset={headerOffset}
/>
@@ -209,21 +157,12 @@ export function FeedPage({
function useHeaderOffset() {
const {isDesktop, isTablet} = useWebMediaQueries()
const {fontScale} = useWindowDimensions()
- const {hasSession} = useSession()
if (isDesktop || isTablet) {
return 0
}
- if (hasSession) {
- const navBarPad = 16
- const navBarText = 21 * fontScale
- const tabBarPad = 20 + 3 // nav bar padding + border
- const tabBarText = 16 * fontScale
- const magic = 7 * fontScale
- return navBarPad + navBarText + tabBarPad + tabBarText + magic
- } else {
- const navBarPad = 16
- const navBarText = 21 * fontScale
- const magic = 4 * fontScale
- return navBarPad + navBarText + magic
- }
+ const navBarHeight = 42
+ const tabBarPad = 10 + 10 + 3 // padding + border
+ const normalLineHeight = 1.2
+ const tabBarText = 16 * normalLineHeight * fontScale
+ return navBarHeight + tabBarPad + tabBarText
}
diff --git a/src/view/com/feeds/FeedSourceCard.tsx b/src/view/com/feeds/FeedSourceCard.tsx
index 0de88b248d..84f79b7435 100644
--- a/src/view/com/feeds/FeedSourceCard.tsx
+++ b/src/view/com/feeds/FeedSourceCard.tsx
@@ -1,30 +1,31 @@
import React from 'react'
import {Pressable, StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
-import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import {Text} from '../util/text/Text'
-import {RichText} from '../util/text/RichText'
-import {usePalette} from 'lib/hooks/usePalette'
-import {s} from 'lib/styles'
-import {UserAvatar} from '../util/UserAvatar'
-import {useNavigation} from '@react-navigation/native'
-import {NavigationProp} from 'lib/routes/types'
-import {pluralize} from 'lib/strings/helpers'
import {AtUri} from '@atproto/api'
-import * as Toast from 'view/com/util/Toast'
-import {sanitizeHandle} from 'lib/strings/handles'
-import {logger} from '#/logger'
-import {useModalControls} from '#/state/modals'
-import {Trans, msg} from '@lingui/macro'
+import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+
+import {logger} from '#/logger'
+import {FeedSourceInfo, useFeedSourceInfoQuery} from '#/state/queries/feed'
import {
usePinFeedMutation,
- UsePreferencesQueryResponse,
usePreferencesQuery,
- useSaveFeedMutation,
+ UsePreferencesQueryResponse,
useRemoveFeedMutation,
+ useSaveFeedMutation,
} from '#/state/queries/preferences'
-import {useFeedSourceInfoQuery, FeedSourceInfo} from '#/state/queries/feed'
+import {useNavigationDeduped} from 'lib/hooks/useNavigationDeduped'
+import {usePalette} from 'lib/hooks/usePalette'
+import {sanitizeHandle} from 'lib/strings/handles'
+import {pluralize} from 'lib/strings/helpers'
+import {s} from 'lib/styles'
import {FeedLoadingPlaceholder} from '#/view/com/util/LoadingPlaceholder'
+import * as Toast from 'view/com/util/Toast'
+import {useTheme} from '#/alf'
+import * as Prompt from '#/components/Prompt'
+import {RichText} from '#/components/RichText'
+import {Text} from '../util/text/Text'
+import {UserAvatar} from '../util/UserAvatar'
export function FeedSourceCard({
feedUri,
@@ -82,10 +83,11 @@ export function FeedSourceCardLoaded({
pinOnSave?: boolean
showMinimalPlaceholder?: boolean
}) {
+ const t = useTheme()
const pal = usePalette('default')
const {_} = useLingui()
- const navigation = useNavigation()
- const {openModal} = useModalControls()
+ const removePromptControl = Prompt.usePromptControl()
+ const navigation = useNavigationDeduped()
const {isPending: isSavePending, mutateAsync: saveFeed} =
useSaveFeedMutation()
@@ -95,40 +97,45 @@ export function FeedSourceCardLoaded({
const isSaved = Boolean(preferences?.feeds?.saved?.includes(feed?.uri || ''))
+ const onSave = React.useCallback(async () => {
+ if (!feed) return
+
+ try {
+ if (pinOnSave) {
+ await pinFeed({uri: feed.uri})
+ } else {
+ await saveFeed({uri: feed.uri})
+ }
+ Toast.show(_(msg`Added to my feeds`))
+ } catch (e) {
+ Toast.show(_(msg`There was an issue contacting your server`))
+ logger.error('Failed to save feed', {message: e})
+ }
+ }, [_, feed, pinFeed, pinOnSave, saveFeed])
+
+ const onUnsave = React.useCallback(async () => {
+ if (!feed) return
+
+ try {
+ await removeFeed({uri: feed.uri})
+ // await item.unsave()
+ Toast.show(_(msg`Removed from my feeds`))
+ } catch (e) {
+ Toast.show(_(msg`There was an issue contacting your server`))
+ logger.error('Failed to unsave feed', {message: e})
+ }
+ }, [_, feed, removeFeed])
+
const onToggleSaved = React.useCallback(async () => {
// Only feeds can be un/saved, lists are handled elsewhere
if (feed?.type !== 'feed') return
if (isSaved) {
- openModal({
- name: 'confirm',
- title: _(msg`Remove from my feeds`),
- message: _(msg`Remove ${feed?.displayName} from my feeds?`),
- onPressConfirm: async () => {
- try {
- await removeFeed({uri: feed.uri})
- // await item.unsave()
- Toast.show(_(msg`Removed from my feeds`))
- } catch (e) {
- Toast.show(_(msg`There was an issue contacting your server`))
- logger.error('Failed to unsave feed', {message: e})
- }
- },
- })
+ removePromptControl.open()
} else {
- try {
- if (pinOnSave) {
- await pinFeed({uri: feed.uri})
- } else {
- await saveFeed({uri: feed.uri})
- }
- Toast.show(_(msg`Added to my feeds`))
- } catch (e) {
- Toast.show(_(msg`There was an issue contacting your server`))
- logger.error('Failed to save feed', {message: e})
- }
+ await onSave()
}
- }, [isSaved, openModal, feed, removeFeed, saveFeed, _, pinOnSave, pinFeed])
+ }, [feed?.type, isSaved, removePromptControl, onSave])
/*
* LOAD STATE
@@ -166,25 +173,7 @@ export function FeedSourceCardLoaded({
accessibilityRole="button"
accessibilityLabel={_(msg`Remove from my feeds`)}
accessibilityHint=""
- onPress={() => {
- openModal({
- name: 'confirm',
- title: _(msg`Remove from my feeds`),
- message: _(msg`Remove this feed from my feeds?`),
- onPressConfirm: async () => {
- try {
- await removeFeed({uri: feedUri})
- // await item.unsave()
- Toast.show(_(msg`Removed from my feeds`))
- } catch (e) {
- Toast.show(
- _(msg`There was an issue contacting your server`),
- )
- logger.error('Failed to unsave feed', {message: e})
- }
- },
- })
- }}
+ onPress={onToggleSaved}
hitSlop={15}
style={styles.btn}>
{
- if (feed.type === 'feed') {
- navigation.push('ProfileFeed', {
- name: feed.creatorDid,
- rkey: new AtUri(feed.uri).rkey,
- })
- } else if (feed.type === 'list') {
- navigation.push('ProfileList', {
- name: feed.creatorDid,
- rkey: new AtUri(feed.uri).rkey,
- })
- }
- }}
- key={feed.uri}>
-
-
-
-
-
-
- {feed.displayName}
-
-
- {feed.type === 'feed' ? (
- Feed by {sanitizeHandle(feed.creatorHandle, '@')}
- ) : (
- List by {sanitizeHandle(feed.creatorHandle, '@')}
- )}
-
-
-
- {showSaveBtn && feed.type === 'feed' && (
-
-
- {isSaved ? (
-
+ <>
+ {
+ if (feed.type === 'feed') {
+ navigation.push('ProfileFeed', {
+ name: feed.creatorDid,
+ rkey: new AtUri(feed.uri).rkey,
+ })
+ } else if (feed.type === 'list') {
+ navigation.push('ProfileList', {
+ name: feed.creatorDid,
+ rkey: new AtUri(feed.uri).rkey,
+ })
+ }
+ }}
+ key={feed.uri}>
+
+
+
+
+
+
+ {feed.displayName}
+
+
+ {feed.type === 'feed' ? (
+ Feed by {sanitizeHandle(feed.creatorHandle, '@')}
) : (
-
+ List by {sanitizeHandle(feed.creatorHandle, '@')}
)}
-
+
- )}
-
- {showDescription && feed.description ? (
-
- ) : null}
+ {showSaveBtn && feed.type === 'feed' && (
+
+
+ {isSaved ? (
+
+ ) : (
+
+ )}
+
+
+ )}
+
- {showLikes && feed.type === 'feed' ? (
-
-
- Liked by {feed.likeCount || 0}{' '}
- {pluralize(feed.likeCount || 0, 'user')}
-
-
- ) : null}
-
+ {showDescription && feed.description ? (
+
+ ) : null}
+
+ {showLikes && feed.type === 'feed' ? (
+
+
+ Liked by {feed.likeCount || 0}{' '}
+ {pluralize(feed.likeCount || 0, 'user')}
+
+
+ ) : null}
+
+
+
+ >
)
}
diff --git a/src/view/com/feeds/ProfileFeedgens.tsx b/src/view/com/feeds/ProfileFeedgens.tsx
index e9cf9e5359..a006b11c06 100644
--- a/src/view/com/feeds/ProfileFeedgens.tsx
+++ b/src/view/com/feeds/ProfileFeedgens.tsx
@@ -1,22 +1,29 @@
import React from 'react'
-import {StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
+import {
+ findNodeHandle,
+ StyleProp,
+ StyleSheet,
+ View,
+ ViewStyle,
+} from 'react-native'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
import {useQueryClient} from '@tanstack/react-query'
-import {List, ListRef} from '../util/List'
-import {FeedSourceCardLoaded} from './FeedSourceCard'
-import {ErrorMessage} from '../util/error/ErrorMessage'
-import {LoadMoreRetryBtn} from '../util/LoadMoreRetryBtn'
-import {Text} from '../util/text/Text'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useProfileFeedgensQuery, RQKEY} from '#/state/queries/profile-feedgens'
-import {logger} from '#/logger'
-import {Trans, msg} from '@lingui/macro'
+
import {cleanError} from '#/lib/strings/errors'
import {useTheme} from '#/lib/ThemeContext'
-import {usePreferencesQuery} from '#/state/queries/preferences'
+import {logger} from '#/logger'
+import {isNative} from '#/platform/detection'
import {hydrateFeedGenerator} from '#/state/queries/feed'
+import {usePreferencesQuery} from '#/state/queries/preferences'
+import {RQKEY, useProfileFeedgensQuery} from '#/state/queries/profile-feedgens'
+import {usePalette} from 'lib/hooks/usePalette'
import {FeedLoadingPlaceholder} from '#/view/com/util/LoadingPlaceholder'
-import {isNative} from '#/platform/detection'
-import {useLingui} from '@lingui/react'
+import {ErrorMessage} from '../util/error/ErrorMessage'
+import {List, ListRef} from '../util/List'
+import {LoadMoreRetryBtn} from '../util/LoadMoreRetryBtn'
+import {Text} from '../util/text/Text'
+import {FeedSourceCardLoaded} from './FeedSourceCard'
const LOADING = {_reactKey: '__loading__'}
const EMPTY = {_reactKey: '__empty__'}
@@ -34,13 +41,14 @@ interface ProfileFeedgensProps {
enabled?: boolean
style?: StyleProp
testID?: string
+ setScrollViewTag: (tag: number | null) => void
}
export const ProfileFeedgens = React.forwardRef<
SectionRef,
ProfileFeedgensProps
>(function ProfileFeedgensImpl(
- {did, scrollElRef, headerOffset, enabled, style, testID},
+ {did, scrollElRef, headerOffset, enabled, style, testID, setScrollViewTag},
ref,
) {
const pal = usePalette('default')
@@ -169,6 +177,13 @@ export const ProfileFeedgens = React.forwardRef<
[error, refetch, onPressRetryLoadMore, pal, preferences, _],
)
+ React.useEffect(() => {
+ if (enabled && scrollElRef.current) {
+ const nativeTag = findNodeHandle(scrollElRef.current)
+ setScrollViewTag(nativeTag)
+ }
+ }, [enabled, scrollElRef, setScrollViewTag])
+
return (
void
+ feeds: FeedSourceInfo[]
+ },
+) {
+ const {feeds} = props
+ const navigation = useNavigation()
+ const pal = usePalette('default')
+
+ const hasPinnedCustom = React.useMemo(() => {
+ return feeds.some(tab => tab.uri !== '')
+ }, [feeds])
+
+ const items = React.useMemo(() => {
+ const pinnedNames = feeds.map(f => f.displayName)
+ if (!hasPinnedCustom) {
+ return pinnedNames.concat('Feeds ✨')
+ }
+ return pinnedNames
+ }, [hasPinnedCustom, feeds])
+
+ const onPressFeedsLink = React.useCallback(() => {
+ if (isWeb) {
+ navigation.navigate('Feeds')
+ } else {
+ navigation.navigate('FeedsTab')
+ navigation.popToTop()
+ }
+ }, [navigation])
+
+ const onSelect = React.useCallback(
+ (index: number) => {
+ if (!hasPinnedCustom && index === items.length - 1) {
+ onPressFeedsLink()
+ } else if (props.onSelect) {
+ props.onSelect(index)
+ }
+ },
+ [items.length, onPressFeedsLink, props, hasPinnedCustom],
+ )
+
+ return (
+
+
+
+ )
+}
diff --git a/src/view/com/home/HomeHeaderLayout.tsx b/src/view/com/home/HomeHeaderLayout.tsx
new file mode 100644
index 0000000000..70bf064d4a
--- /dev/null
+++ b/src/view/com/home/HomeHeaderLayout.tsx
@@ -0,0 +1 @@
+export {HomeHeaderLayoutMobile as HomeHeaderLayout} from './HomeHeaderLayoutMobile'
diff --git a/src/view/com/home/HomeHeaderLayout.web.tsx b/src/view/com/home/HomeHeaderLayout.web.tsx
new file mode 100644
index 0000000000..2f57c5eefb
--- /dev/null
+++ b/src/view/com/home/HomeHeaderLayout.web.tsx
@@ -0,0 +1,112 @@
+import React from 'react'
+import {StyleSheet, View} from 'react-native'
+import Animated from 'react-native-reanimated'
+import {
+ FontAwesomeIcon,
+ FontAwesomeIconStyle,
+} from '@fortawesome/react-native-fontawesome'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {CogIcon} from '#/lib/icons'
+import {useShellLayout} from '#/state/shell/shell-layout'
+import {useMinimalShellMode} from 'lib/hooks/useMinimalShellMode'
+import {usePalette} from 'lib/hooks/usePalette'
+import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import {Logo} from '#/view/icons/Logo'
+import {Link} from '../util/Link'
+import {HomeHeaderLayoutMobile} from './HomeHeaderLayoutMobile'
+
+export function HomeHeaderLayout(props: {
+ children: React.ReactNode
+ tabBarAnchor: JSX.Element | null | undefined
+}) {
+ const {isMobile} = useWebMediaQueries()
+ if (isMobile) {
+ return
+ } else {
+ return
+ }
+}
+
+function HomeHeaderLayoutDesktopAndTablet({
+ children,
+ tabBarAnchor,
+}: {
+ children: React.ReactNode
+ tabBarAnchor: JSX.Element | null | undefined
+}) {
+ const pal = usePalette('default')
+ const {headerMinimalShellTransform} = useMinimalShellMode()
+ const {headerHeight} = useShellLayout()
+ const {_} = useLingui()
+
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+ {tabBarAnchor}
+ {
+ headerHeight.value = e.nativeEvent.layout.height
+ }}
+ style={[
+ pal.view,
+ pal.border,
+ styles.bar,
+ styles.tabBar,
+ headerMinimalShellTransform,
+ ]}>
+ {children}
+
+ >
+ )
+}
+
+const styles = StyleSheet.create({
+ bar: {
+ // @ts-ignore Web only
+ left: 'calc(50% - 300px)',
+ width: 600,
+ borderLeftWidth: 1,
+ borderRightWidth: 1,
+ },
+ topBar: {
+ flexDirection: 'row',
+ justifyContent: 'space-between',
+ alignItems: 'center',
+ paddingHorizontal: 18,
+ paddingTop: 16,
+ paddingBottom: 8,
+ },
+ tabBar: {
+ // @ts-ignore Web only
+ position: 'sticky',
+ top: 0,
+ flexDirection: 'column',
+ alignItems: 'center',
+ borderLeftWidth: 1,
+ borderRightWidth: 1,
+ zIndex: 1,
+ },
+})
diff --git a/src/view/com/pager/FeedsTabBarMobile.tsx b/src/view/com/home/HomeHeaderLayoutMobile.tsx
similarity index 57%
rename from src/view/com/pager/FeedsTabBarMobile.tsx
rename to src/view/com/home/HomeHeaderLayoutMobile.tsx
index 4eba241aed..1d031590e6 100644
--- a/src/view/com/pager/FeedsTabBarMobile.tsx
+++ b/src/view/com/home/HomeHeaderLayoutMobile.tsx
@@ -1,73 +1,36 @@
import React from 'react'
import {StyleSheet, TouchableOpacity, View} from 'react-native'
-import {TabBar} from 'view/com/pager/TabBar'
-import {RenderTabBarFnProps} from 'view/com/pager/Pager'
-import {usePalette} from 'lib/hooks/usePalette'
-import {Link} from '../util/Link'
+import Animated from 'react-native-reanimated'
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
import {FontAwesomeIconStyle} from '@fortawesome/react-native-fontawesome'
-import {HITSLOP_10} from 'lib/constants'
-import Animated from 'react-native-reanimated'
import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
-import {useMinimalShellMode} from 'lib/hooks/useMinimalShellMode'
+
import {useSetDrawerOpen} from '#/state/shell/drawer-open'
import {useShellLayout} from '#/state/shell/shell-layout'
-import {useSession} from '#/state/session'
-import {usePinnedFeedsInfos} from '#/state/queries/feed'
+import {HITSLOP_10} from 'lib/constants'
+import {useMinimalShellMode} from 'lib/hooks/useMinimalShellMode'
+import {usePalette} from 'lib/hooks/usePalette'
import {isWeb} from 'platform/detection'
-import {useNavigation} from '@react-navigation/native'
-import {NavigationProp} from 'lib/routes/types'
import {Logo} from '#/view/icons/Logo'
-
-import {IS_DEV} from '#/env'
import {atoms} from '#/alf'
-import {Link as Link2} from '#/components/Link'
import {ColorPalette_Stroke2_Corner0_Rounded as ColorPalette} from '#/components/icons/ColorPalette'
+import {Link as Link2} from '#/components/Link'
+import {IS_DEV} from '#/env'
+import {Link} from '../util/Link'
-export function FeedsTabBar(
- props: RenderTabBarFnProps & {testID?: string; onPressSelected: () => void},
-) {
+export function HomeHeaderLayoutMobile({
+ children,
+}: {
+ children: React.ReactNode
+ tabBarAnchor: JSX.Element | null | undefined
+}) {
const pal = usePalette('default')
- const {hasSession} = useSession()
const {_} = useLingui()
const setDrawerOpen = useSetDrawerOpen()
- const navigation = useNavigation()
- const {feeds, hasPinnedCustom} = usePinnedFeedsInfos()
const {headerHeight} = useShellLayout()
const {headerMinimalShellTransform} = useMinimalShellMode()
- const items = React.useMemo(() => {
- if (!hasSession) return []
-
- const pinnedNames = feeds.map(f => f.displayName)
-
- if (!hasPinnedCustom) {
- return pinnedNames.concat('Feeds ✨')
- }
- return pinnedNames
- }, [hasSession, hasPinnedCustom, feeds])
-
- const onPressFeedsLink = React.useCallback(() => {
- if (isWeb) {
- navigation.navigate('Feeds')
- } else {
- navigation.navigate('FeedsTab')
- navigation.popToTop()
- }
- }, [navigation])
-
- const onSelect = React.useCallback(
- (index: number) => {
- if (hasSession && !hasPinnedCustom && index === items.length - 1) {
- onPressFeedsLink()
- } else if (props.onSelect) {
- props.onSelect(index)
- }
- },
- [items.length, onPressFeedsLink, props, hasSession, hasPinnedCustom],
- )
-
const onPressAvi = React.useCallback(() => {
setDrawerOpen(true)
}, [setDrawerOpen])
@@ -113,35 +76,21 @@ export function FeedsTabBar(
)}
-
- {hasSession && (
-
-
-
- )}
+
+
+
-
- {items.length > 0 && (
-
- )}
+ {children}
)
}
@@ -155,7 +104,6 @@ const styles = StyleSheet.create({
right: 0,
top: 0,
flexDirection: 'column',
- borderBottomWidth: 1,
},
topBar: {
flexDirection: 'row',
diff --git a/src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx b/src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx
index 3401adaff4..e7caa58a8e 100644
--- a/src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx
+++ b/src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx
@@ -6,9 +6,17 @@
*
*/
import React from 'react'
-import {createHitslop} from 'lib/constants'
-import {SafeAreaView, Text, TouchableOpacity, StyleSheet} from 'react-native'
-import {t} from '@lingui/macro'
+import {
+ SafeAreaView,
+ StyleSheet,
+ TouchableOpacity,
+ ViewStyle,
+} from 'react-native'
+import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {createHitslop} from '#/lib/constants'
type Props = {
onRequestClose: () => void
@@ -16,20 +24,23 @@ type Props = {
const HIT_SLOP = createHitslop(16)
-const ImageDefaultHeader = ({onRequestClose}: Props) => (
-
-
- ✕
-
-
-)
+const ImageDefaultHeader = ({onRequestClose}: Props) => {
+ const {_} = useLingui()
+ return (
+
+
+
+
+
+ )
+}
const styles = StyleSheet.create({
root: {
@@ -37,8 +48,8 @@ const styles = StyleSheet.create({
pointerEvents: 'box-none',
},
closeButton: {
- marginRight: 8,
- marginTop: 8,
+ marginRight: 10,
+ marginTop: 10,
width: 44,
height: 44,
alignItems: 'center',
@@ -46,13 +57,10 @@ const styles = StyleSheet.create({
borderRadius: 22,
backgroundColor: '#00000077',
},
- closeText: {
- lineHeight: 22,
- fontSize: 19,
- textAlign: 'center',
- color: '#FFF',
- includeFontPadding: false,
- },
+ blurredBackground: {
+ backdropFilter: 'blur(10px)',
+ WebkitBackdropFilter: 'blur(10px)',
+ } as ViewStyle,
})
export default ImageDefaultHeader
diff --git a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx
index 003ad61ba6..722a8c4373 100644
--- a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx
+++ b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.android.tsx
@@ -1,28 +1,28 @@
import React, {useState} from 'react'
-
import {ActivityIndicator, Dimensions, StyleSheet} from 'react-native'
-import {Image} from 'expo-image'
+import {Gesture, GestureDetector} from 'react-native-gesture-handler'
import Animated, {
runOnJS,
+ useAnimatedReaction,
useAnimatedRef,
useAnimatedStyle,
- useAnimatedReaction,
useSharedValue,
withDecay,
withSpring,
} from 'react-native-reanimated'
-import {GestureDetector, Gesture} from 'react-native-gesture-handler'
+import {Image} from 'expo-image'
+
+import type {Dimensions as ImageDimensions, ImageSource} from '../../@types'
import useImageDimensions from '../../hooks/useImageDimensions'
import {
- createTransform,
- readTransform,
applyRounding,
+ createTransform,
prependPan,
prependPinch,
prependTransform,
+ readTransform,
TransformMatrix,
} from '../../transforms'
-import type {ImageSource, Dimensions as ImageDimensions} from '../../@types'
const SCREEN = Dimensions.get('window')
const MIN_DOUBLE_TAP_SCALE = 2
@@ -37,6 +37,7 @@ type Props = {
onTap: () => void
onZoom: (isZoomed: boolean) => void
isScrollViewBeingDragged: boolean
+ showControls: boolean
}
const ImageItem = ({
imageSrc,
diff --git a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx
index cf4ba71df2..7f5f1dce44 100644
--- a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx
+++ b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx
@@ -7,9 +7,8 @@
*/
import React, {useState} from 'react'
-
import {Dimensions, StyleSheet} from 'react-native'
-import {Image} from 'expo-image'
+import {Gesture, GestureDetector} from 'react-native-gesture-handler'
import Animated, {
interpolate,
runOnJS,
@@ -17,12 +16,11 @@ import Animated, {
useAnimatedStyle,
useSharedValue,
} from 'react-native-reanimated'
-import {useAnimatedScrollHandler} from '#/lib/hooks/useAnimatedScrollHandler_FIXED'
-import {Gesture, GestureDetector} from 'react-native-gesture-handler'
+import {Image} from 'expo-image'
+import {useAnimatedScrollHandler} from '#/lib/hooks/useAnimatedScrollHandler_FIXED'
+import {Dimensions as ImageDimensions, ImageSource} from '../../@types'
import useImageDimensions from '../../hooks/useImageDimensions'
-
-import {ImageSource, Dimensions as ImageDimensions} from '../../@types'
import {ImageLoading} from './ImageLoading'
const SWIPE_CLOSE_OFFSET = 75
@@ -37,11 +35,18 @@ type Props = {
onTap: () => void
onZoom: (scaled: boolean) => void
isScrollViewBeingDragged: boolean
+ showControls: boolean
}
const AnimatedImage = Animated.createAnimatedComponent(Image)
-const ImageItem = ({imageSrc, onTap, onZoom, onRequestClose}: Props) => {
+const ImageItem = ({
+ imageSrc,
+ onTap,
+ onZoom,
+ onRequestClose,
+ showControls,
+}: Props) => {
const scrollViewRef = useAnimatedRef()
const translationY = useSharedValue(0)
const [loaded, setLoaded] = useState(false)
@@ -144,7 +149,7 @@ const ImageItem = ({imageSrc, onTap, onZoom, onRequestClose}: Props) => {
accessibilityLabel={imageSrc.alt}
accessibilityHint=""
onLoad={() => setLoaded(true)}
- enableLiveTextInteraction={!scaled}
+ enableLiveTextInteraction={showControls && !scaled}
/>
diff --git a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.tsx b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.tsx
index 16688b820e..4cb7903efa 100644
--- a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.tsx
+++ b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.tsx
@@ -2,6 +2,7 @@
import React from 'react'
import {View} from 'react-native'
+
import {ImageSource} from '../../@types'
type Props = {
@@ -10,6 +11,7 @@ type Props = {
onTap: () => void
onZoom: (scaled: boolean) => void
isScrollViewBeingDragged: boolean
+ showControls: boolean
}
const ImageItem = (_props: Props) => {
diff --git a/src/view/com/lightbox/ImageViewing/index.tsx b/src/view/com/lightbox/ImageViewing/index.tsx
index b6835793d1..1432b34ff8 100644
--- a/src/view/com/lightbox/ImageViewing/index.tsx
+++ b/src/view/com/lightbox/ImageViewing/index.tsx
@@ -9,15 +9,14 @@
// https://github.com/jobtoday/react-native-image-viewing
import React, {ComponentType, useCallback, useMemo, useState} from 'react'
-import {StyleSheet, View, Platform} from 'react-native'
-
-import ImageItem from './components/ImageItem/ImageItem'
-import ImageDefaultHeader from './components/ImageDefaultHeader'
-
-import {ImageSource} from './@types'
+import {Platform, StyleSheet, View} from 'react-native'
+import PagerView from 'react-native-pager-view'
import Animated, {useAnimatedStyle, withSpring} from 'react-native-reanimated'
import {Edge, SafeAreaView} from 'react-native-safe-area-context'
-import PagerView from 'react-native-pager-view'
+
+import {ImageSource} from './@types'
+import ImageDefaultHeader from './components/ImageDefaultHeader'
+import ImageItem from './components/ImageItem/ImageItem'
type Props = {
images: ImageSource[]
@@ -122,6 +121,7 @@ function ImageViewing({
imageSrc={imageSrc}
onRequestClose={onRequestClose}
isScrollViewBeingDragged={isDragging}
+ showControls={showControls}
/>
))}
diff --git a/src/view/com/lightbox/Lightbox.tsx b/src/view/com/lightbox/Lightbox.tsx
index 2ee5b8d593..d82578ab56 100644
--- a/src/view/com/lightbox/Lightbox.tsx
+++ b/src/view/com/lightbox/Lightbox.tsx
@@ -1,22 +1,23 @@
import React from 'react'
import {LayoutAnimation, StyleSheet, View} from 'react-native'
-import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import ImageView from './ImageViewing'
-import {shareImageModal, saveImageToMediaLibrary} from 'lib/media/manip'
-import * as Toast from '../util/Toast'
-import {Text} from '../util/text/Text'
-import {s, colors} from 'lib/styles'
-import {Button} from '../util/forms/Button'
-import {isIOS} from 'platform/detection'
import * as MediaLibrary from 'expo-media-library'
+import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
import {
+ ImagesLightbox,
+ ProfileImageLightbox,
useLightbox,
useLightboxControls,
- ProfileImageLightbox,
- ImagesLightbox,
} from '#/state/lightbox'
-import {Trans, msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
+import {saveImageToMediaLibrary, shareImageModal} from 'lib/media/manip'
+import {colors, s} from 'lib/styles'
+import {isIOS} from 'platform/detection'
+import {Button} from '../util/forms/Button'
+import {Text} from '../util/text/Text'
+import * as Toast from '../util/Toast'
+import ImageView from './ImageViewing'
export function Lightbox() {
const {activeLightbox} = useLightbox()
@@ -78,9 +79,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, _],
diff --git a/src/view/com/lightbox/Lightbox.web.tsx b/src/view/com/lightbox/Lightbox.web.tsx
index fb97c30a45..8b31e0ecff 100644
--- a/src/view/com/lightbox/Lightbox.web.tsx
+++ b/src/view/com/lightbox/Lightbox.web.tsx
@@ -2,28 +2,31 @@ import React, {useCallback, useEffect, useState} from 'react'
import {
Image,
ImageStyle,
+ Pressable,
+ StyleSheet,
TouchableOpacity,
TouchableWithoutFeedback,
- StyleSheet,
View,
- Pressable,
+ ViewStyle,
} from 'react-native'
import {
FontAwesomeIcon,
FontAwesomeIconStyle,
} from '@fortawesome/react-native-fontawesome'
-import {colors, s} from 'lib/styles'
-import ImageDefaultHeader from './ImageViewing/components/ImageDefaultHeader'
-import {Text} from '../util/text/Text'
-import {useLingui} from '@lingui/react'
import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {useWebBodyScrollLock} from '#/lib/hooks/useWebBodyScrollLock'
+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
import {
- useLightbox,
- useLightboxControls,
ImagesLightbox,
ProfileImageLightbox,
+ useLightbox,
+ useLightboxControls,
} from '#/state/lightbox'
-import {useWebBodyScrollLock} from '#/lib/hooks/useWebBodyScrollLock'
+import {colors, s} from 'lib/styles'
+import {Text} from '../util/text/Text'
+import ImageDefaultHeader from './ImageViewing/components/ImageDefaultHeader'
interface Img {
uri: string
@@ -111,6 +114,14 @@ function LightboxInner({
return () => window.removeEventListener('keydown', onKeyDown)
}, [onKeyDown])
+ const {isTabletOrDesktop} = useWebMediaQueries()
+ const btnStyle = React.useMemo(() => {
+ return isTabletOrDesktop ? styles.btnTablet : styles.btnMobile
+ }, [isTabletOrDesktop])
+ const iconSize = React.useMemo(() => {
+ return isTabletOrDesktop ? 32 : 24
+ }, [isTabletOrDesktop])
+
return (
)}
{canGoRight && (
)}
@@ -213,20 +234,30 @@ const styles = StyleSheet.create({
},
btn: {
position: 'absolute',
- backgroundColor: '#000',
- width: 50,
- height: 50,
+ backgroundColor: '#00000077',
justifyContent: 'center',
alignItems: 'center',
+ },
+ btnTablet: {
+ width: 50,
+ height: 50,
borderRadius: 25,
+ left: 30,
+ right: 30,
+ },
+ btnMobile: {
+ width: 44,
+ height: 44,
+ borderRadius: 22,
+ left: 20,
+ right: 20,
},
leftBtn: {
- left: 30,
+ right: 'auto',
top: '50%',
},
rightBtn: {
- position: 'absolute',
- right: 30,
+ left: 'auto',
top: '50%',
},
footer: {
@@ -234,4 +265,8 @@ const styles = StyleSheet.create({
paddingVertical: 24,
backgroundColor: colors.black,
},
+ blurredBackground: {
+ backdropFilter: 'blur(10px)',
+ WebkitBackdropFilter: 'blur(10px)',
+ } as ViewStyle,
})
diff --git a/src/view/com/lists/ListCard.tsx b/src/view/com/lists/ListCard.tsx
index 5750faec19..f78306bfea 100644
--- a/src/view/com/lists/ListCard.tsx
+++ b/src/view/com/lists/ListCard.tsx
@@ -1,17 +1,19 @@
import React from 'react'
import {StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
-import {AtUri, AppBskyGraphDefs, RichText} from '@atproto/api'
-import {Link} from '../util/Link'
-import {Text} from '../util/text/Text'
-import {RichText as RichTextCom} from '../util/text/RichText'
-import {UserAvatar} from '../util/UserAvatar'
-import {s} from 'lib/styles'
-import {usePalette} from 'lib/hooks/usePalette'
+import {AppBskyGraphDefs, AtUri, RichText} from '@atproto/api'
+import {Trans} from '@lingui/macro'
+
import {useSession} from '#/state/session'
+import {usePalette} from 'lib/hooks/usePalette'
+import {makeProfileLink} from 'lib/routes/links'
import {sanitizeDisplayName} from 'lib/strings/display-names'
import {sanitizeHandle} from 'lib/strings/handles'
-import {makeProfileLink} from 'lib/routes/links'
-import {Trans} from '@lingui/macro'
+import {s} from 'lib/styles'
+import {atoms as a} from '#/alf'
+import {RichText as RichTextCom} from '#/components/RichText'
+import {Link} from '../util/Link'
+import {Text} from '../util/text/Text'
+import {UserAvatar} from '../util/UserAvatar'
export const ListCard = ({
testID,
@@ -119,9 +121,9 @@ export const ListCard = ({
{descriptionRichText ? (
) : undefined}
diff --git a/src/view/com/lists/ProfileLists.tsx b/src/view/com/lists/ProfileLists.tsx
index a47b25bed4..003d1c60e7 100644
--- a/src/view/com/lists/ProfileLists.tsx
+++ b/src/view/com/lists/ProfileLists.tsx
@@ -1,21 +1,28 @@
import React from 'react'
-import {StyleProp, StyleSheet, View, ViewStyle} from 'react-native'
+import {
+ findNodeHandle,
+ StyleProp,
+ StyleSheet,
+ View,
+ ViewStyle,
+} from 'react-native'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
import {useQueryClient} from '@tanstack/react-query'
-import {List, ListRef} from '../util/List'
-import {ListCard} from './ListCard'
-import {ErrorMessage} from '../util/error/ErrorMessage'
-import {LoadMoreRetryBtn} from '../util/LoadMoreRetryBtn'
-import {Text} from '../util/text/Text'
-import {useAnalytics} from 'lib/analytics/analytics'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useProfileListsQuery, RQKEY} from '#/state/queries/profile-lists'
-import {logger} from '#/logger'
-import {Trans, msg} from '@lingui/macro'
+
import {cleanError} from '#/lib/strings/errors'
import {useTheme} from '#/lib/ThemeContext'
-import {FeedLoadingPlaceholder} from '#/view/com/util/LoadingPlaceholder'
+import {logger} from '#/logger'
import {isNative} from '#/platform/detection'
-import {useLingui} from '@lingui/react'
+import {RQKEY, useProfileListsQuery} from '#/state/queries/profile-lists'
+import {useAnalytics} from 'lib/analytics/analytics'
+import {usePalette} from 'lib/hooks/usePalette'
+import {FeedLoadingPlaceholder} from '#/view/com/util/LoadingPlaceholder'
+import {ErrorMessage} from '../util/error/ErrorMessage'
+import {List, ListRef} from '../util/List'
+import {LoadMoreRetryBtn} from '../util/LoadMoreRetryBtn'
+import {Text} from '../util/text/Text'
+import {ListCard} from './ListCard'
const LOADING = {_reactKey: '__loading__'}
const EMPTY = {_reactKey: '__empty__'}
@@ -33,11 +40,12 @@ interface ProfileListsProps {
enabled?: boolean
style?: StyleProp
testID?: string
+ setScrollViewTag: (tag: number | null) => void
}
export const ProfileLists = React.forwardRef(
function ProfileListsImpl(
- {did, scrollElRef, headerOffset, enabled, style, testID},
+ {did, scrollElRef, headerOffset, enabled, style, testID, setScrollViewTag},
ref,
) {
const pal = usePalette('default')
@@ -171,6 +179,13 @@ export const ProfileLists = React.forwardRef(
[error, refetch, onPressRetryLoadMore, pal, _],
)
+ React.useEffect(() => {
+ if (enabled && scrollElRef.current) {
+ const nativeTag = findNodeHandle(scrollElRef.current)
+ setScrollViewTag(nativeTag)
+ }
+ }, [enabled, scrollElRef, setScrollViewTag])
+
return (
{
if (appPassword) {
- Clipboard.setString(appPassword)
+ setStringAsync(appPassword)
Toast.show(_(msg`Copied to clipboard`))
setWasCopied(true)
}
diff --git a/src/view/com/modals/AltImage.tsx b/src/view/com/modals/AltImage.tsx
index 17ce05cda8..197a6079ea 100644
--- a/src/view/com/modals/AltImage.tsx
+++ b/src/view/com/modals/AltImage.tsx
@@ -1,28 +1,29 @@
-import React, {useMemo, useCallback, useState} from 'react'
+import React, {useCallback, useMemo, useState} from 'react'
import {
ImageStyle,
+ ScrollView as RNScrollView,
StyleSheet,
- TouchableOpacity,
- View,
TextInput as RNTextInput,
+ TouchableOpacity,
useWindowDimensions,
- ScrollView as RNScrollView,
+ View,
} from 'react-native'
-import {ScrollView, TextInput} from './util'
import {Image} from 'expo-image'
+import {LinearGradient} from 'expo-linear-gradient'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {useModalControls} from '#/state/modals'
+import {MAX_ALT_TEXT} from 'lib/constants'
+import {useIsKeyboardVisible} from 'lib/hooks/useIsKeyboardVisible'
import {usePalette} from 'lib/hooks/usePalette'
-import {gradients, s} from 'lib/styles'
import {enforceLen} from 'lib/strings/helpers'
-import {MAX_ALT_TEXT} from 'lib/constants'
+import {gradients, s} from 'lib/styles'
import {useTheme} from 'lib/ThemeContext'
-import {useIsKeyboardVisible} from 'lib/hooks/useIsKeyboardVisible'
-import {Text} from '../util/text/Text'
-import LinearGradient from 'react-native-linear-gradient'
import {isWeb} from 'platform/detection'
import {ImageModel} from 'state/models/media/image'
-import {useLingui} from '@lingui/react'
-import {Trans, msg} from '@lingui/macro'
-import {useModalControls} from '#/state/modals'
+import {Text} from '../util/text/Text'
+import {ScrollView, TextInput} from './util'
export const snapPoints = ['100%']
diff --git a/src/view/com/modals/AppealLabel.tsx b/src/view/com/modals/AppealLabel.tsx
deleted file mode 100644
index b0aaaf6255..0000000000
--- a/src/view/com/modals/AppealLabel.tsx
+++ /dev/null
@@ -1,139 +0,0 @@
-import React, {useState} from 'react'
-import {StyleSheet, TouchableOpacity, View} from 'react-native'
-import {ComAtprotoModerationDefs} from '@atproto/api'
-import {ScrollView, TextInput} from './util'
-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'
-import {useModalControls} from '#/state/modals'
-import {CharProgress} from '../composer/char-progress/CharProgress'
-import {getAgent} from '#/state/session'
-import * as Toast from '../util/Toast'
-import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
-
-export const snapPoints = ['40%']
-
-type ReportComponentProps =
- | {
- uri: string
- cid: string
- }
- | {
- did: string
- }
-
-export function Component(props: ReportComponentProps) {
- const pal = usePalette('default')
- const [details, setDetails] = useState('')
- const {_} = useLingui()
- const {closeModal} = useModalControls()
- const {isMobile} = useWebMediaQueries()
- const isAccountReport = 'did' in props
-
- const submit = async () => {
- try {
- const $type = !isAccountReport
- ? 'com.atproto.repo.strongRef'
- : 'com.atproto.admin.defs#repoRef'
- await getAgent().createModerationReport({
- reasonType: ComAtprotoModerationDefs.REASONAPPEAL,
- subject: {
- $type,
- ...props,
- },
- reason: details,
- })
- Toast.show(_(msg`We'll look into your appeal promptly.`))
- } finally {
- closeModal()
- }
- }
-
- return (
-
-
- Appeal Content Warning
-
-
-
-
-
-
-
-
-
-
-
-
- Submit
-
-
-
-
- )
-}
-
-const styles = StyleSheet.create({
- detailsInputContainer: {
- borderRadius: 8,
- marginBottom: 8,
- },
- detailsInput: {
- paddingHorizontal: 12,
- paddingTop: 12,
- paddingBottom: 12,
- borderRadius: 8,
- minHeight: 100,
- fontSize: 16,
- },
- detailsInputBottomBar: {
- alignSelf: 'flex-end',
- },
- charCounter: {
- flexDirection: 'row',
- alignItems: 'center',
- paddingRight: 10,
- paddingBottom: 8,
- },
- btn: {
- flexDirection: 'row',
- alignItems: 'center',
- justifyContent: 'center',
- borderRadius: 32,
- padding: 14,
- backgroundColor: colors.blue3,
- },
-})
diff --git a/src/view/com/modals/BirthDateSettings.tsx b/src/view/com/modals/BirthDateSettings.tsx
deleted file mode 100644
index 1cab959896..0000000000
--- a/src/view/com/modals/BirthDateSettings.tsx
+++ /dev/null
@@ -1,151 +0,0 @@
-import React, {useState} from 'react'
-import {
- ActivityIndicator,
- StyleSheet,
- TouchableOpacity,
- View,
-} from 'react-native'
-import {Text} from '../util/text/Text'
-import {DateInput} from '../util/forms/DateInput'
-import {ErrorMessage} from '../util/error/ErrorMessage'
-import {s, colors} from 'lib/styles'
-import {usePalette} from 'lib/hooks/usePalette'
-import {isWeb} from 'platform/detection'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {cleanError} from 'lib/strings/errors'
-import {Trans, msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-import {useModalControls} from '#/state/modals'
-import {
- usePreferencesQuery,
- usePreferencesSetBirthDateMutation,
- UsePreferencesQueryResponse,
-} from '#/state/queries/preferences'
-import {logger} from '#/logger'
-
-export const snapPoints = ['50%', '90%']
-
-function Inner({preferences}: {preferences: UsePreferencesQueryResponse}) {
- const pal = usePalette('default')
- const {isMobile} = useWebMediaQueries()
- const {_} = useLingui()
- const {
- isPending,
- isError,
- error,
- mutateAsync: setBirthDate,
- } = usePreferencesSetBirthDateMutation()
- const [date, setDate] = useState(preferences.birthDate || new Date())
- const {closeModal} = useModalControls()
-
- const onSave = React.useCallback(async () => {
- try {
- await setBirthDate({birthDate: date})
- closeModal()
- } catch (e) {
- logger.error(`setBirthDate failed`, {message: e})
- }
- }, [date, setBirthDate, closeModal])
-
- return (
-
-
-
- My Birthday
-
-
-
-
- This information is not shared with other users.
-
-
-
-
-
-
- {isError ? (
-
- ) : undefined}
-
-
- {isPending ? (
-
-
-
- ) : (
-
-
- Save
-
-
- )}
-
-
- )
-}
-
-export function Component({}: {}) {
- const {data: preferences} = usePreferencesQuery()
-
- return !preferences ? (
-
- ) : (
-
- )
-}
-
-const styles = StyleSheet.create({
- container: {
- flex: 1,
- paddingBottom: isWeb ? 0 : 40,
- },
- titleSection: {
- paddingTop: isWeb ? 0 : 4,
- paddingBottom: isWeb ? 14 : 10,
- },
- title: {
- textAlign: 'center',
- fontWeight: '600',
- marginBottom: 5,
- },
- error: {
- borderRadius: 6,
- marginTop: 10,
- },
- dateInputButton: {
- borderWidth: 1,
- borderRadius: 6,
- paddingVertical: 14,
- },
- btn: {
- flexDirection: 'row',
- alignItems: 'center',
- justifyContent: 'center',
- borderRadius: 32,
- padding: 14,
- backgroundColor: colors.blue3,
- },
- btnContainer: {
- paddingTop: 20,
- paddingHorizontal: 20,
- },
-})
diff --git a/src/view/com/modals/ChangeHandle.tsx b/src/view/com/modals/ChangeHandle.tsx
index a43c30c29c..125da44be7 100644
--- a/src/view/com/modals/ChangeHandle.tsx
+++ b/src/view/com/modals/ChangeHandle.tsx
@@ -1,37 +1,38 @@
import React, {useState} from 'react'
-import Clipboard from '@react-native-clipboard/clipboard'
-import {ComAtprotoServerDescribeServer} from '@atproto/api'
-import * as Toast from '../util/Toast'
import {
ActivityIndicator,
StyleSheet,
TouchableOpacity,
View,
} from 'react-native'
+import {setStringAsync} from 'expo-clipboard'
+import {ComAtprotoServerDescribeServer} from '@atproto/api'
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import {ScrollView, TextInput} from './util'
-import {Text} from '../util/text/Text'
-import {Button} from '../util/forms/Button'
-import {SelectableBtn} from '../util/forms/SelectableBtn'
-import {ErrorMessage} from '../util/error/ErrorMessage'
-import {s} from 'lib/styles'
-import {createFullHandle, makeValidHandle} from 'lib/strings/handles'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useTheme} from 'lib/ThemeContext'
-import {useAnalytics} from 'lib/analytics/analytics'
-import {cleanError} from 'lib/strings/errors'
-import {logger} from '#/logger'
-import {Trans, msg} from '@lingui/macro'
+import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+
+import {logger} from '#/logger'
import {useModalControls} from '#/state/modals'
+import {useFetchDid, useUpdateHandleMutation} from '#/state/queries/handle'
import {useServiceQuery} from '#/state/queries/service'
-import {useUpdateHandleMutation, useFetchDid} from '#/state/queries/handle'
import {
+ getAgent,
+ SessionAccount,
useSession,
useSessionApi,
- SessionAccount,
- getAgent,
} from '#/state/session'
+import {useAnalytics} from 'lib/analytics/analytics'
+import {usePalette} from 'lib/hooks/usePalette'
+import {cleanError} from 'lib/strings/errors'
+import {createFullHandle, makeValidHandle} from 'lib/strings/handles'
+import {s} from 'lib/styles'
+import {useTheme} from 'lib/ThemeContext'
+import {ErrorMessage} from '../util/error/ErrorMessage'
+import {Button} from '../util/forms/Button'
+import {SelectableBtn} from '../util/forms/SelectableBtn'
+import {Text} from '../util/text/Text'
+import * as Toast from '../util/Toast'
+import {ScrollView, TextInput} from './util'
export const snapPoints = ['100%']
@@ -150,7 +151,7 @@ export function Inner({
accessibilityHint={_(msg`Exits handle change process`)}
onAccessibilityEscape={onPressCancel}>
- Cancel
+ Cancel
@@ -254,7 +255,7 @@ function ProvidedHandleForm({
+ accessibilityLabel={_(msg`Hosting provider`)}
+ accessibilityHint={_(msg`Opens modal for using custom domain`)}>
I have my own domain
@@ -321,11 +322,9 @@ function CustomHandleForm({
// events
// =
const onPressCopy = React.useCallback(() => {
- Clipboard.setString(
- isDNSForm ? `did=${currentAccount.did}` : currentAccount.did,
- )
- Toast.show('Copied to clipboard')
- }, [currentAccount, isDNSForm])
+ setStringAsync(isDNSForm ? `did=${currentAccount.did}` : currentAccount.did)
+ Toast.show(_(msg`Copied to clipboard`))
+ }, [currentAccount, isDNSForm, _])
const onChangeHandle = React.useCallback(
(v: string) => {
setHandle(v)
@@ -378,7 +377,7 @@ function CustomHandleForm({
@@ -395,18 +394,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 +417,7 @@ function CustomHandleForm({
- Host:
+ Host:
@@ -426,7 +425,7 @@ function CustomHandleForm({
- Type:
+ Type:
@@ -434,7 +433,7 @@ function CustomHandleForm({
- Value:
+ Value:
@@ -443,7 +442,7 @@ function CustomHandleForm({
- This should create a domain record at:{' '}
+ This should create a domain record at:
_atproto.{handle}
@@ -463,7 +462,7 @@ function CustomHandleForm({
- That contains the following:
+ That contains the following:
@@ -478,7 +477,9 @@ function CustomHandleForm({
{canSave === true && (
@@ -504,8 +505,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 +514,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 d8add97946..53cc46bdc0 100644
--- a/src/view/com/modals/ChangePassword.tsx
+++ b/src/view/com/modals/ChangePassword.tsx
@@ -6,24 +6,25 @@ import {
TouchableOpacity,
View,
} from 'react-native'
-import {ScrollView} from './util'
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import {TextInput} from './util'
-import {Text} from '../util/text/Text'
-import {Button} from '../util/forms/Button'
-import {ErrorMessage} from '../util/error/ErrorMessage'
-import {s, colors} from 'lib/styles'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import * as EmailValidator from 'email-validator'
+
+import {logger} from '#/logger'
+import {useModalControls} from '#/state/modals'
+import {getAgent, useSession} from '#/state/session'
import {usePalette} from 'lib/hooks/usePalette'
-import {isAndroid, isWeb} from 'platform/detection'
import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
import {cleanError, isNetworkError} from 'lib/strings/errors'
import {checkAndFormatResetCode} from 'lib/strings/password'
-import {Trans, msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-import {useModalControls} from '#/state/modals'
-import {useSession, getAgent} from '#/state/session'
-import * as EmailValidator from 'email-validator'
-import {logger} from '#/logger'
+import {colors, s} from 'lib/styles'
+import {isAndroid, isWeb} from 'platform/detection'
+import {ErrorMessage} from '../util/error/ErrorMessage'
+import {Button} from '../util/forms/Button'
+import {Text} from '../util/text/Text'
+import {ScrollView} from './util'
+import {TextInput} from './util'
enum Stages {
RequestCode,
@@ -137,7 +138,9 @@ export function Component() {
- {stage !== Stages.Done ? 'Change Password' : 'Password Changed'}
+ {stage !== Stages.Done
+ ? _(msg`Change Password`)
+ : _(msg`Password Changed`)}
@@ -180,7 +183,7 @@ export function Component() {
(false)
- const [error, setError] = useState('')
- const onPress = async () => {
- setError('')
- setIsProcessing(true)
- try {
- await onPressConfirm()
- closeModal()
- return
- } catch (e: any) {
- setError(cleanError(e))
- setIsProcessing(false)
- }
- }
- return (
-
-
- {title}
-
- {typeof message === 'string' ? (
-
- {message}
-
- ) : (
- message()
- )}
- {error ? (
-
-
-
- ) : undefined}
-
- {isProcessing ? (
-
-
-
- ) : (
-
-
- {confirmBtnText ?? Confirm}
-
-
- )}
- {onPressCancel === undefined ? null : (
-
-
- {cancelBtnText ?? Cancel}
-
-
- )}
-
- )
-}
-
-const styles = StyleSheet.create({
- container: {
- flex: 1,
- padding: 10,
- paddingBottom: isWeb ? 0 : 60,
- },
- title: {
- textAlign: 'center',
- marginBottom: 12,
- },
- description: {
- textAlign: 'center',
- paddingHorizontal: 22,
- marginBottom: 10,
- },
- btn: {
- flexDirection: 'row',
- alignItems: 'center',
- justifyContent: 'center',
- borderRadius: 32,
- padding: 14,
- marginTop: 22,
- marginHorizontal: 44,
- backgroundColor: colors.blue3,
- },
- btnCancel: {
- flexDirection: 'row',
- alignItems: 'center',
- justifyContent: 'center',
- borderRadius: 32,
- padding: 14,
- marginHorizontal: 20,
- },
-})
diff --git a/src/view/com/modals/ContentFilteringSettings.tsx b/src/view/com/modals/ContentFilteringSettings.tsx
deleted file mode 100644
index 328d23dc29..0000000000
--- a/src/view/com/modals/ContentFilteringSettings.tsx
+++ /dev/null
@@ -1,401 +0,0 @@
-import React from 'react'
-import {LabelPreference} from '@atproto/api'
-import {StyleSheet, Pressable, View, Linking} from 'react-native'
-import LinearGradient from 'react-native-linear-gradient'
-import {ScrollView} from './util'
-import {s, colors, gradients} from 'lib/styles'
-import {Text} from '../util/text/Text'
-import {TextLink} from '../util/Link'
-import {ToggleButton} from '../util/forms/ToggleButton'
-import {Button} from '../util/forms/Button'
-import {usePalette} from 'lib/hooks/usePalette'
-import {isIOS} from 'platform/detection'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import * as Toast from '../util/Toast'
-import {logger} from '#/logger'
-import {Trans, msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-import {useModalControls} from '#/state/modals'
-import {
- usePreferencesQuery,
- usePreferencesSetContentLabelMutation,
- usePreferencesSetAdultContentMutation,
- ConfigurableLabelGroup,
- CONFIGURABLE_LABEL_GROUPS,
- UsePreferencesQueryResponse,
-} from '#/state/queries/preferences'
-
-export const snapPoints = ['90%']
-
-export function Component({}: {}) {
- const {isMobile} = useWebMediaQueries()
- const pal = usePalette('default')
- const {_} = useLingui()
- const {closeModal} = useModalControls()
- const {data: preferences} = usePreferencesQuery()
-
- const onPressDone = React.useCallback(() => {
- closeModal()
- }, [closeModal])
-
- return (
-
-
- Content Filtering
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Done
-
-
-
-
-
- )
-}
-
-function AdultContentEnabledPref() {
- const pal = usePalette('default')
- const {_} = useLingui()
- const {data: preferences} = usePreferencesQuery()
- const {mutate, variables} = usePreferencesSetAdultContentMutation()
- const {openModal} = useModalControls()
-
- const onSetAge = React.useCallback(
- () => openModal({name: 'birth-date-settings'}),
- [openModal],
- )
-
- const onToggleAdultContent = React.useCallback(async () => {
- if (isIOS) return
-
- try {
- mutate({
- enabled: !(variables?.enabled ?? preferences?.adultContentEnabled),
- })
- } catch (e) {
- Toast.show(
- _(msg`There was an issue syncing your preferences with the server`),
- )
- logger.error('Failed to update preferences with server', {message: e})
- }
- }, [variables, preferences, mutate, _])
-
- const onAdultContentLinkPress = React.useCallback(() => {
- Linking.openURL('https://bsky.app/')
- }, [])
-
- return (
-
- {isIOS ? (
- preferences?.adultContentEnabled ? null : (
-
-
- Adult content can only be enabled via the Web at{' '}
-
- .
-
-
- )
- ) : typeof preferences?.birthDate === 'undefined' ? (
-
-
- Confirm your age to enable adult content.
-
-
-
- ) : (preferences.userAge || 0) >= 18 ? (
-
- ) : (
-
-
- You must be 18 or older to enable adult content.
-
-
-
- )}
-
- )
-}
-
-// TODO: Refactor this component to pass labels down to each tab
-function ContentLabelPref({
- preferences,
- labelGroup,
- disabled,
-}: {
- preferences?: UsePreferencesQueryResponse
- labelGroup: ConfigurableLabelGroup
- disabled?: boolean
-}) {
- const pal = usePalette('default')
- const visibility = preferences?.contentLabels?.[labelGroup]
- const {mutate, variables} = usePreferencesSetContentLabelMutation()
-
- const onChange = React.useCallback(
- (vis: LabelPreference) => {
- mutate({labelGroup, visibility: vis})
- },
- [mutate, labelGroup],
- )
-
- return (
-
-
-
- {CONFIGURABLE_LABEL_GROUPS[labelGroup].title}
-
- {typeof CONFIGURABLE_LABEL_GROUPS[labelGroup].subtitle === 'string' && (
-
- {CONFIGURABLE_LABEL_GROUPS[labelGroup].subtitle}
-
- )}
-
-
- {disabled || !visibility ? (
-
- Hide
-
- ) : (
-
- )}
-
- )
-}
-
-interface SelectGroupProps {
- current: LabelPreference
- onChange: (v: LabelPreference) => void
- labelGroup: ConfigurableLabelGroup
-}
-
-function SelectGroup({current, onChange, labelGroup}: SelectGroupProps) {
- const {_} = useLingui()
-
- return (
-
-
-
-
-
- )
-}
-
-interface SelectableBtnProps {
- current: string
- value: LabelPreference
- label: string
- left?: boolean
- right?: boolean
- onChange: (v: LabelPreference) => void
- labelGroup: ConfigurableLabelGroup
-}
-
-function SelectableBtn({
- current,
- value,
- label,
- left,
- right,
- onChange,
- labelGroup,
-}: SelectableBtnProps) {
- const pal = usePalette('default')
- const palPrimary = usePalette('inverted')
- const {_} = useLingui()
-
- return (
- onChange(value)}
- accessibilityRole="button"
- accessibilityLabel={value}
- accessibilityHint={_(
- msg`Set ${value} for ${labelGroup} content moderation policy`,
- )}>
-
- {label}
-
-
- )
-}
-
-const styles = StyleSheet.create({
- container: {
- flex: 1,
- },
- title: {
- textAlign: 'center',
- fontWeight: 'bold',
- fontSize: 24,
- marginBottom: 12,
- },
- description: {
- paddingHorizontal: 2,
- marginBottom: 10,
- },
- scrollContainer: {
- flex: 1,
- paddingHorizontal: 10,
- },
- btnContainer: {
- paddingTop: 10,
- paddingHorizontal: 10,
- },
- btnContainerMobile: {
- paddingBottom: 40,
- borderTopWidth: 1,
- },
-
- agePrompt: {
- flexDirection: 'row',
- justifyContent: 'space-between',
- alignItems: 'center',
- paddingLeft: 14,
- paddingRight: 10,
- paddingVertical: 8,
- borderRadius: 8,
- },
-
- contentLabelPref: {
- flexDirection: 'row',
- justifyContent: 'space-between',
- alignItems: 'center',
- paddingTop: 14,
- paddingLeft: 4,
- marginBottom: 14,
- borderTopWidth: 1,
- },
-
- selectableBtns: {
- flexDirection: 'row',
- marginLeft: 10,
- },
- selectableBtn: {
- flexDirection: 'row',
- justifyContent: 'center',
- borderWidth: 1,
- borderLeftWidth: 0,
- paddingHorizontal: 10,
- paddingVertical: 10,
- },
- selectableBtnLeft: {
- borderTopLeftRadius: 8,
- borderBottomLeftRadius: 8,
- borderLeftWidth: 1,
- },
- selectableBtnRight: {
- borderTopRightRadius: 8,
- borderBottomRightRadius: 8,
- },
-
- btn: {
- flexDirection: 'row',
- alignItems: 'center',
- justifyContent: 'center',
- width: '100%',
- borderRadius: 32,
- padding: 14,
- backgroundColor: colors.gray1,
- },
- toggleBtn: {
- paddingHorizontal: 0,
- },
-})
diff --git a/src/view/com/modals/CreateOrEditList.tsx b/src/view/com/modals/CreateOrEditList.tsx
index 0e11fcffd5..f5f4f56db0 100644
--- a/src/view/com/modals/CreateOrEditList.tsx
+++ b/src/view/com/modals/CreateOrEditList.tsx
@@ -1,4 +1,4 @@
-import React, {useState, useCallback, useMemo} from 'react'
+import React, {useCallback, useMemo, useState} from 'react'
import {
ActivityIndicator,
KeyboardAvoidingView,
@@ -8,35 +8,36 @@ import {
TouchableOpacity,
View,
} from 'react-native'
+import {Image as RNImage} from 'react-native-image-crop-picker'
+import {LinearGradient} from 'expo-linear-gradient'
import {
AppBskyGraphDefs,
AppBskyRichtextFacet,
RichText as RichTextAPI,
} from '@atproto/api'
-import LinearGradient from 'react-native-linear-gradient'
-import {Image as RNImage} from 'react-native-image-crop-picker'
-import {Text} from '../util/text/Text'
-import {ErrorMessage} from '../util/error/ErrorMessage'
-import * as Toast from '../util/Toast'
-import {s, colors, gradients} from 'lib/styles'
-import {enforceLen} from 'lib/strings/helpers'
-import {compressIfNeeded} from 'lib/media/manip'
-import {EditableUserAvatar} from '../util/UserAvatar'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useTheme} from 'lib/ThemeContext'
-import {useAnalytics} from 'lib/analytics/analytics'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {cleanError, isNetworkError} from 'lib/strings/errors'
-import {Trans, msg} from '@lingui/macro'
+import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+
+import {richTextToString} from '#/lib/strings/rich-text-helpers'
+import {shortenLinks} from '#/lib/strings/rich-text-manip'
import {useModalControls} from '#/state/modals'
import {
useListCreateMutation,
useListMetadataMutation,
} from '#/state/queries/list'
-import {richTextToString} from '#/lib/strings/rich-text-helpers'
-import {shortenLinks} from '#/lib/strings/rich-text-manip'
import {getAgent} from '#/state/session'
+import {useAnalytics} from 'lib/analytics/analytics'
+import {usePalette} from 'lib/hooks/usePalette'
+import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import {compressIfNeeded} from 'lib/media/manip'
+import {cleanError, isNetworkError} from 'lib/strings/errors'
+import {enforceLen} from 'lib/strings/helpers'
+import {colors, gradients, s} from 'lib/styles'
+import {useTheme} from 'lib/ThemeContext'
+import {ErrorMessage} from '../util/error/ErrorMessage'
+import {Text} from '../util/text/Text'
+import * as Toast from '../util/Toast'
+import {EditableUserAvatar} from '../util/UserAvatar'
const MAX_NAME = 64 // todo
const MAX_DESCRIPTION = 300 // todo
diff --git a/src/view/com/modals/DeleteAccount.tsx b/src/view/com/modals/DeleteAccount.tsx
index 40d78cfe0c..4c4fb20f18 100644
--- a/src/view/com/modals/DeleteAccount.tsx
+++ b/src/view/com/modals/DeleteAccount.tsx
@@ -1,27 +1,28 @@
import React from 'react'
import {
- SafeAreaView,
ActivityIndicator,
+ SafeAreaView,
StyleSheet,
TouchableOpacity,
View,
} from 'react-native'
-import {TextInput, ScrollView} from './util'
-import LinearGradient from 'react-native-linear-gradient'
-import * as Toast from '../util/Toast'
-import {Text} from '../util/text/Text'
-import {s, colors, gradients} from 'lib/styles'
+import {LinearGradient} from 'expo-linear-gradient'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {useModalControls} from '#/state/modals'
+import {getAgent, useSession, useSessionApi} from '#/state/session'
import {usePalette} from 'lib/hooks/usePalette'
-import {useTheme} from 'lib/ThemeContext'
import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {ErrorMessage} from '../util/error/ErrorMessage'
import {cleanError} from 'lib/strings/errors'
-import {resetToTab} from '../../../Navigation'
-import {Trans, msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-import {useModalControls} from '#/state/modals'
-import {useSession, useSessionApi, getAgent} from '#/state/session'
+import {colors, gradients, s} from 'lib/styles'
+import {useTheme} from 'lib/ThemeContext'
import {isAndroid} from 'platform/detection'
+import {resetToTab} from '../../../Navigation'
+import {ErrorMessage} from '../util/error/ErrorMessage'
+import {Text} from '../util/text/Text'
+import * as Toast from '../util/Toast'
+import {ScrollView, TextInput} from './util'
export const snapPoints = isAndroid ? ['90%'] : ['55%']
@@ -79,9 +80,7 @@ export function Component({}: {}) {
}
return (
-
+
Delete Account
@@ -173,7 +172,7 @@ export function Component({}: {}) {
Cancel
diff --git a/src/view/com/modals/EditImage.tsx b/src/view/com/modals/EditImage.tsx
index 3b35ffee21..b39dcd9364 100644
--- a/src/view/com/modals/EditImage.tsx
+++ b/src/view/com/modals/EditImage.tsx
@@ -1,26 +1,27 @@
import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react'
import {Pressable, StyleSheet, View} from 'react-native'
-import {usePalette} from 'lib/hooks/usePalette'
import {useWindowDimensions} from 'react-native'
-import {gradients, s} from 'lib/styles'
-import {useTheme} from 'lib/ThemeContext'
-import {Text} from '../util/text/Text'
-import LinearGradient from 'react-native-linear-gradient'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import {LinearGradient} from 'expo-linear-gradient'
+import {MaterialIcons} from '@expo/vector-icons'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+import {Slider} from '@miblanchard/react-native-slider'
+import {observer} from 'mobx-react-lite'
import ImageEditor, {Position} from 'react-avatar-editor'
-import {TextInput} from './util'
-import {enforceLen} from 'lib/strings/helpers'
+
+import {useModalControls} from '#/state/modals'
import {MAX_ALT_TEXT} from 'lib/constants'
+import {usePalette} from 'lib/hooks/usePalette'
+import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import {RectTallIcon, RectWideIcon, SquareIcon} from 'lib/icons'
+import {enforceLen} from 'lib/strings/helpers'
+import {gradients, s} from 'lib/styles'
+import {useTheme} from 'lib/ThemeContext'
+import {getKeys} from 'lib/type-assertions'
import {GalleryModel} from 'state/models/media/gallery'
import {ImageModel} from 'state/models/media/image'
-import {SquareIcon, RectWideIcon, RectTallIcon} from 'lib/icons'
-import {Slider} from '@miblanchard/react-native-slider'
-import {MaterialIcons} from '@expo/vector-icons'
-import {observer} from 'mobx-react-lite'
-import {getKeys} from 'lib/type-assertions'
-import {Trans, msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-import {useModalControls} from '#/state/modals'
+import {Text} from '../util/text/Text'
+import {TextInput} from './util'
export const snapPoints = ['80%']
diff --git a/src/view/com/modals/EditProfile.tsx b/src/view/com/modals/EditProfile.tsx
index 097b7b0d1b..4b94aeb42f 100644
--- a/src/view/com/modals/EditProfile.tsx
+++ b/src/view/com/modals/EditProfile.tsx
@@ -1,5 +1,4 @@
-import React, {useState, useCallback} from 'react'
-import * as Toast from '../util/Toast'
+import React, {useCallback, useState} from 'react'
import {
ActivityIndicator,
KeyboardAvoidingView,
@@ -9,28 +8,30 @@ import {
TouchableOpacity,
View,
} from 'react-native'
-import LinearGradient from 'react-native-linear-gradient'
import {Image as RNImage} from 'react-native-image-crop-picker'
-import {AppBskyActorDefs} from '@atproto/api'
-import {Text} from '../util/text/Text'
-import {ErrorMessage} from '../util/error/ErrorMessage'
-import {s, colors, gradients} from 'lib/styles'
-import {enforceLen} from 'lib/strings/helpers'
-import {MAX_DISPLAY_NAME, MAX_DESCRIPTION} from 'lib/constants'
-import {compressIfNeeded} from 'lib/media/manip'
-import {UserBanner} from '../util/UserBanner'
-import {EditableUserAvatar} from '../util/UserAvatar'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useTheme} from 'lib/ThemeContext'
-import {useAnalytics} from 'lib/analytics/analytics'
-import {cleanError} from 'lib/strings/errors'
import Animated, {FadeOut} from 'react-native-reanimated'
-import {isWeb} from 'platform/detection'
-import {Trans, msg} from '@lingui/macro'
+import {LinearGradient} from 'expo-linear-gradient'
+import {AppBskyActorDefs} from '@atproto/api'
+import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+
+import {logger} from '#/logger'
import {useModalControls} from '#/state/modals'
import {useProfileUpdateMutation} from '#/state/queries/profile'
-import {logger} from '#/logger'
+import {useAnalytics} from 'lib/analytics/analytics'
+import {MAX_DESCRIPTION, MAX_DISPLAY_NAME} from 'lib/constants'
+import {usePalette} from 'lib/hooks/usePalette'
+import {compressIfNeeded} from 'lib/media/manip'
+import {cleanError} from 'lib/strings/errors'
+import {enforceLen} from 'lib/strings/helpers'
+import {colors, gradients, s} from 'lib/styles'
+import {useTheme} from 'lib/ThemeContext'
+import {isWeb} from 'platform/detection'
+import {ErrorMessage} from '../util/error/ErrorMessage'
+import {Text} from '../util/text/Text'
+import * as Toast from '../util/Toast'
+import {EditableUserAvatar} from '../util/UserAvatar'
+import {UserBanner} from '../util/UserBanner'
const AnimatedTouchableOpacity =
Animated.createAnimatedComponent(TouchableOpacity)
diff --git a/src/view/com/modals/EmbedConsent.tsx b/src/view/com/modals/EmbedConsent.tsx
deleted file mode 100644
index 04104c52e1..0000000000
--- a/src/view/com/modals/EmbedConsent.tsx
+++ /dev/null
@@ -1,153 +0,0 @@
-import React from 'react'
-import {StyleSheet, TouchableOpacity, View} from 'react-native'
-import LinearGradient from 'react-native-linear-gradient'
-import {s, colors, gradients} from 'lib/styles'
-import {Text} from '../util/text/Text'
-import {ScrollView} from './util'
-import {usePalette} from 'lib/hooks/usePalette'
-import {
- EmbedPlayerSource,
- embedPlayerSources,
- externalEmbedLabels,
-} from '#/lib/strings/embed-player'
-import {msg, Trans} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-import {useModalControls} from '#/state/modals'
-import {useSetExternalEmbedPref} from '#/state/preferences/external-embeds-prefs'
-import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
-
-export const snapPoints = [450]
-
-export function Component({
- onAccept,
- source,
-}: {
- onAccept: () => void
- source: EmbedPlayerSource
-}) {
- const pal = usePalette('default')
- const {closeModal} = useModalControls()
- const {_} = useLingui()
- const setExternalEmbedPref = useSetExternalEmbedPref()
- const {isMobile} = useWebMediaQueries()
-
- const onShowAllPress = React.useCallback(() => {
- for (const key of embedPlayerSources) {
- setExternalEmbedPref(key, 'show')
- }
- onAccept()
- closeModal()
- }, [closeModal, onAccept, setExternalEmbedPref])
-
- const onShowPress = React.useCallback(() => {
- setExternalEmbedPref(source, 'show')
- onAccept()
- closeModal()
- }, [closeModal, onAccept, setExternalEmbedPref, source])
-
- const onHidePress = React.useCallback(() => {
- setExternalEmbedPref(source, 'hide')
- closeModal()
- }, [closeModal, setExternalEmbedPref, source])
-
- return (
-
-
- External Media
-
-
-
-
- This content is hosted by {externalEmbedLabels[source]}. Do you want
- to enable external media?
-
-
-
-
-
- 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.
-
-
-
-
-
-
- Enable External Media
-
-
-
-
-
-
-
- Enable {externalEmbedLabels[source]} only
-
-
-
-
-
-
-
- No thanks
-
-
-
-
- )
-}
-
-const styles = StyleSheet.create({
- title: {
- textAlign: 'center',
- fontWeight: 'bold',
- fontSize: 24,
- marginBottom: 12,
- },
- btn: {
- flexDirection: 'row',
- alignItems: 'center',
- justifyContent: 'center',
- width: '100%',
- borderRadius: 32,
- padding: 14,
- backgroundColor: colors.gray1,
- },
-})
diff --git a/src/view/com/modals/InAppBrowserConsent.tsx b/src/view/com/modals/InAppBrowserConsent.tsx
index 86bb46ca81..c354374a54 100644
--- a/src/view/com/modals/InAppBrowserConsent.tsx
+++ b/src/view/com/modals/InAppBrowserConsent.tsx
@@ -1,19 +1,18 @@
import React from 'react'
import {StyleSheet, View} from 'react-native'
-
-import {s} from 'lib/styles'
-import {Text} from '../util/text/Text'
-import {Button} from '../util/forms/Button'
-import {ScrollView} from './util'
-import {usePalette} from 'lib/hooks/usePalette'
-
import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+
import {useModalControls} from '#/state/modals'
import {
useOpenLink,
useSetInAppBrowser,
} from '#/state/preferences/in-app-browser'
+import {usePalette} from 'lib/hooks/usePalette'
+import {s} from 'lib/styles'
+import {Button} from '../util/forms/Button'
+import {Text} from '../util/text/Text'
+import {ScrollView} from './util'
export const snapPoints = [350]
@@ -77,7 +76,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/InviteCodes.tsx b/src/view/com/modals/InviteCodes.tsx
index c0318df015..f8cebec3f6 100644
--- a/src/view/com/modals/InviteCodes.tsx
+++ b/src/view/com/modals/InviteCodes.tsx
@@ -1,36 +1,37 @@
import React from 'react'
import {
+ ActivityIndicator,
StyleSheet,
TouchableOpacity,
View,
- ActivityIndicator,
} from 'react-native'
+import {setStringAsync} from 'expo-clipboard'
import {ComAtprotoServerDefs} from '@atproto/api'
import {
FontAwesomeIcon,
FontAwesomeIconStyle,
} from '@fortawesome/react-native-fontawesome'
-import Clipboard from '@react-native-clipboard/clipboard'
-import {Text} from '../util/text/Text'
-import {Button} from '../util/forms/Button'
-import * as Toast from '../util/Toast'
-import {ScrollView} from './util'
-import {usePalette} from 'lib/hooks/usePalette'
-import {isWeb} from 'platform/detection'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {Trans, msg} from '@lingui/macro'
-import {cleanError} from 'lib/strings/errors'
-import {useModalControls} from '#/state/modals'
-import {useInvitesState, useInvitesAPI} from '#/state/invites'
-import {UserInfoText} from '../util/UserInfoText'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
import {makeProfileLink} from '#/lib/routes/links'
-import {Link} from '../util/Link'
-import {ErrorMessage} from '../util/error/ErrorMessage'
+import {useInvitesAPI, useInvitesState} from '#/state/invites'
+import {useModalControls} from '#/state/modals'
import {
- useInviteCodesQuery,
InviteCodesQueryResponse,
+ useInviteCodesQuery,
} from '#/state/queries/invites'
-import {useLingui} from '@lingui/react'
+import {usePalette} from 'lib/hooks/usePalette'
+import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import {cleanError} from 'lib/strings/errors'
+import {isWeb} from 'platform/detection'
+import {ErrorMessage} from '../util/error/ErrorMessage'
+import {Button} from '../util/forms/Button'
+import {Link} from '../util/Link'
+import {Text} from '../util/text/Text'
+import * as Toast from '../util/Toast'
+import {UserInfoText} from '../util/UserInfoText'
+import {ScrollView} from './util'
export const snapPoints = ['70%']
@@ -148,7 +149,7 @@ function InviteCode({
const uses = invite.uses
const onPress = React.useCallback(() => {
- Clipboard.setString(invite.code)
+ setStringAsync(invite.code)
Toast.show(_(msg`Copied to clipboard`))
setInviteCopied(invite.code)
}, [setInviteCopied, invite, _])
diff --git a/src/view/com/modals/LinkWarning.tsx b/src/view/com/modals/LinkWarning.tsx
index 81fdc72853..bf5bf6d29a 100644
--- a/src/view/com/modals/LinkWarning.tsx
+++ b/src/view/com/modals/LinkWarning.tsx
@@ -1,22 +1,32 @@
import React from 'react'
import {SafeAreaView, StyleSheet, View} from 'react-native'
-import {ScrollView} from './util'
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import {Text} from '../util/text/Text'
-import {Button} from '../util/forms/Button'
-import {s, colors} from 'lib/styles'
-import {usePalette} from 'lib/hooks/usePalette'
-import {isWeb} from 'platform/detection'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {isPossiblyAUrl, splitApexDomain} from 'lib/strings/url-helpers'
-import {Trans, msg} from '@lingui/macro'
+import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+
+import {usePalette} from '#/lib/hooks/usePalette'
+import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
+import {shareUrl} from '#/lib/sharing'
+import {isPossiblyAUrl, splitApexDomain} from '#/lib/strings/url-helpers'
+import {colors, s} from '#/lib/styles'
+import {isWeb} from '#/platform/detection'
import {useModalControls} from '#/state/modals'
import {useOpenLink} from '#/state/preferences/in-app-browser'
+import {Button} from '#/view/com/util/forms/Button'
+import {Text} from '#/view/com/util/text/Text'
+import {ScrollView} from './util'
export const snapPoints = ['50%']
-export function Component({text, href}: {text: string; href: string}) {
+export function Component({
+ text,
+ href,
+ share,
+}: {
+ text: string
+ href: string
+ share?: boolean
+}) {
const pal = usePalette('default')
const {closeModal} = useModalControls()
const {isMobile} = useWebMediaQueries()
@@ -26,7 +36,11 @@ export function Component({text, href}: {text: string; href: string}) {
const onPressVisit = () => {
closeModal()
- openLink(href)
+ if (share) {
+ shareUrl(href)
+ } else {
+ openLink(href)
+ }
}
return (
@@ -72,9 +86,13 @@ export function Component({text, href}: {text: string; href: string}) {
testID="confirmBtn"
type="primary"
onPress={onPressVisit}
- accessibilityLabel={_(msg`Visit Site`)}
- accessibilityHint=""
- label="Visit Site"
+ accessibilityLabel={share ? _(msg`Share Link`) : _(msg`Visit Site`)}
+ accessibilityHint={
+ share
+ ? _(msg`Shares the linked website`)
+ : _(msg`Opens the linked website`)
+ }
+ label={share ? _(msg`Share Link`) : _(msg`Visit Site`)}
labelContainerStyle={{justifyContent: 'center', padding: 4}}
labelStyle={[s.f18]}
/>
@@ -85,8 +103,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/ListAddRemoveUsers.tsx b/src/view/com/modals/ListAddRemoveUsers.tsx
index 27c33f806c..24c805e7b9 100644
--- a/src/view/com/modals/ListAddRemoveUsers.tsx
+++ b/src/view/com/modals/ListAddRemoveUsers.tsx
@@ -7,32 +7,33 @@ import {
View,
} from 'react-native'
import {AppBskyActorDefs, AppBskyGraphDefs} from '@atproto/api'
-import {ScrollView, TextInput} from './util'
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import {Text} from '../util/text/Text'
-import {Button} from '../util/forms/Button'
-import {UserAvatar} from '../util/UserAvatar'
-import * as Toast from '../util/Toast'
-import {s, colors} from 'lib/styles'
-import {usePalette} from 'lib/hooks/usePalette'
-import {isWeb} from 'platform/detection'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {useIsKeyboardVisible} from 'lib/hooks/useIsKeyboardVisible'
-import {cleanError} from 'lib/strings/errors'
-import {sanitizeDisplayName} from 'lib/strings/display-names'
-import {sanitizeHandle} from 'lib/strings/handles'
-import {HITSLOP_20} from '#/lib/constants'
-import {Trans, msg} from '@lingui/macro'
+import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+
+import {HITSLOP_20} from '#/lib/constants'
import {useModalControls} from '#/state/modals'
+import {useActorAutocompleteQuery} from '#/state/queries/actor-autocomplete'
import {
- useDangerousListMembershipsQuery,
getMembership,
ListMembersip,
+ useDangerousListMembershipsQuery,
useListMembershipAddMutation,
useListMembershipRemoveMutation,
} from '#/state/queries/list-memberships'
-import {useActorAutocompleteQuery} from '#/state/queries/actor-autocomplete'
+import {useIsKeyboardVisible} from 'lib/hooks/useIsKeyboardVisible'
+import {usePalette} from 'lib/hooks/usePalette'
+import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import {sanitizeDisplayName} from 'lib/strings/display-names'
+import {cleanError} from 'lib/strings/errors'
+import {sanitizeHandle} from 'lib/strings/handles'
+import {colors, s} from 'lib/styles'
+import {isWeb} from 'platform/detection'
+import {Button} from '../util/forms/Button'
+import {Text} from '../util/text/Text'
+import * as Toast from '../util/Toast'
+import {UserAvatar} from '../util/UserAvatar'
+import {ScrollView, TextInput} from './util'
export const snapPoints = ['90%']
@@ -231,7 +232,11 @@ function UserResult({
width: 54,
paddingLeft: 4,
}}>
-
+
- } else if (activeModal?.name === 'edit-profile') {
+ if (activeModal?.name === 'edit-profile') {
snapPoints = EditProfileModal.snapPoints
element =
- } else if (activeModal?.name === 'report') {
- snapPoints = ReportModal.snapPoints
- element =
- } else if (activeModal?.name === 'appeal-label') {
- snapPoints = AppealLabelModal.snapPoints
- element =
} else if (activeModal?.name === 'create-or-edit-list') {
snapPoints = CreateOrEditListModal.snapPoints
element =
@@ -109,30 +91,18 @@ export function ModalsContainer() {
} else if (activeModal?.name === 'change-handle') {
snapPoints = ChangeHandleModal.snapPoints
element =
- } else if (activeModal?.name === 'waitlist') {
- snapPoints = WaitlistModal.snapPoints
- element =
} else if (activeModal?.name === 'invite-codes') {
snapPoints = InviteCodesModal.snapPoints
element =
} else if (activeModal?.name === 'add-app-password') {
snapPoints = AddAppPassword.snapPoints
element =
- } else if (activeModal?.name === 'content-filtering-settings') {
- snapPoints = ContentFilteringSettingsModal.snapPoints
- element =
} else if (activeModal?.name === 'content-languages-settings') {
snapPoints = ContentLanguagesSettingsModal.snapPoints
element =
} else if (activeModal?.name === 'post-languages-settings') {
snapPoints = PostLanguagesSettingsModal.snapPoints
element =
- } else if (activeModal?.name === 'moderation-details') {
- snapPoints = ModerationDetailsModal.snapPoints
- element =
- } else if (activeModal?.name === 'birth-date-settings') {
- snapPoints = BirthDateSettingsModal.snapPoints
- element =
} else if (activeModal?.name === 'verify-email') {
snapPoints = VerifyEmailModal.snapPoints
element =
@@ -142,15 +112,9 @@ export function ModalsContainer() {
} else if (activeModal?.name === 'change-password') {
snapPoints = ChangePasswordModal.snapPoints
element =
- } else if (activeModal?.name === 'switch-account') {
- snapPoints = SwitchAccountModal.snapPoints
- element =
} else if (activeModal?.name === 'link-warning') {
snapPoints = LinkWarningModal.snapPoints
element =
- } else if (activeModal?.name === 'embed-consent') {
- snapPoints = EmbedConsentModal.snapPoints
- element =
} else if (activeModal?.name === 'in-app-browser-consent') {
snapPoints = InAppBrowserConsentModal.snapPoints
element =
diff --git a/src/view/com/modals/Modal.web.tsx b/src/view/com/modals/Modal.web.tsx
index 97a60be913..f95c748111 100644
--- a/src/view/com/modals/Modal.web.tsx
+++ b/src/view/com/modals/Modal.web.tsx
@@ -1,40 +1,32 @@
import React from 'react'
-import {TouchableWithoutFeedback, StyleSheet, View} from 'react-native'
+import {StyleSheet, TouchableWithoutFeedback, View} from 'react-native'
import Animated, {FadeIn, FadeOut} from 'react-native-reanimated'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {useWebBodyScrollLock} from '#/lib/hooks/useWebBodyScrollLock'
-import {useModals, useModalControls} from '#/state/modals'
+import {useWebBodyScrollLock} from '#/lib/hooks/useWebBodyScrollLock'
import type {Modal as ModalIface} from '#/state/modals'
-import * as ConfirmModal from './Confirm'
-import * as EditProfileModal from './EditProfile'
-import * as ReportModal from './report/Modal'
-import * as AppealLabelModal from './AppealLabel'
+import {useModalControls, useModals} from '#/state/modals'
+import {usePalette} from 'lib/hooks/usePalette'
+import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import * as AddAppPassword from './AddAppPasswords'
+import * as AltTextImageModal from './AltImage'
+import * as ChangeEmailModal from './ChangeEmail'
+import * as ChangeHandleModal from './ChangeHandle'
+import * as ChangePasswordModal from './ChangePassword'
import * as CreateOrEditListModal from './CreateOrEditList'
-import * as UserAddRemoveLists from './UserAddRemoveLists'
-import * as ListAddUserModal from './ListAddRemoveUsers'
-import * as DeleteAccountModal from './DeleteAccount'
-import * as RepostModal from './Repost'
-import * as SelfLabelModal from './SelfLabel'
-import * as ThreadgateModal from './Threadgate'
import * as CropImageModal from './crop-image/CropImage.web'
-import * as AltTextImageModal from './AltImage'
+import * as DeleteAccountModal from './DeleteAccount'
import * as EditImageModal from './EditImage'
-import * as ChangeHandleModal from './ChangeHandle'
-import * as WaitlistModal from './Waitlist'
+import * as EditProfileModal from './EditProfile'
import * as InviteCodesModal from './InviteCodes'
-import * as AddAppPassword from './AddAppPasswords'
-import * as ContentFilteringSettingsModal from './ContentFilteringSettings'
import * as ContentLanguagesSettingsModal from './lang-settings/ContentLanguagesSettings'
import * as PostLanguagesSettingsModal from './lang-settings/PostLanguagesSettings'
-import * as ModerationDetailsModal from './ModerationDetails'
-import * as BirthDateSettingsModal from './BirthDateSettings'
-import * as VerifyEmailModal from './VerifyEmail'
-import * as ChangeEmailModal from './ChangeEmail'
-import * as ChangePasswordModal from './ChangePassword'
import * as LinkWarningModal from './LinkWarning'
-import * as EmbedConsentModal from './EmbedConsent'
+import * as ListAddUserModal from './ListAddRemoveUsers'
+import * as RepostModal from './Repost'
+import * as SelfLabelModal from './SelfLabel'
+import * as ThreadgateModal from './Threadgate'
+import * as UserAddRemoveLists from './UserAddRemoveLists'
+import * as VerifyEmailModal from './VerifyEmail'
export function ModalsContainer() {
const {isModalActive, activeModals} = useModals()
@@ -79,14 +71,8 @@ function Modal({modal}: {modal: ModalIface}) {
}
let element
- if (modal.name === 'confirm') {
- element =
- } else if (modal.name === 'edit-profile') {
+ if (modal.name === 'edit-profile') {
element =
- } else if (modal.name === 'report') {
- element =
- } else if (modal.name === 'appeal-label') {
- element =
} else if (modal.name === 'create-or-edit-list') {
element =
} else if (modal.name === 'user-add-remove-lists') {
@@ -105,14 +91,10 @@ function Modal({modal}: {modal: ModalIface}) {
element =
} else if (modal.name === 'change-handle') {
element =
- } else if (modal.name === 'waitlist') {
- element =
} else if (modal.name === 'invite-codes') {
element =
} else if (modal.name === 'add-app-password') {
element =
- } else if (modal.name === 'content-filtering-settings') {
- element =
} else if (modal.name === 'content-languages-settings') {
element =
} else if (modal.name === 'post-languages-settings') {
@@ -121,10 +103,6 @@ function Modal({modal}: {modal: ModalIface}) {
element =
} else if (modal.name === 'edit-image') {
element =
- } else if (modal.name === 'moderation-details') {
- element =
- } else if (modal.name === 'birth-date-settings') {
- element =
} else if (modal.name === 'verify-email') {
element =
} else if (modal.name === 'change-email') {
@@ -133,8 +111,6 @@ function Modal({modal}: {modal: ModalIface}) {
element =
} else if (modal.name === 'link-warning') {
element =
- } else if (modal.name === 'embed-consent') {
- element =
} else {
return null
}
diff --git a/src/view/com/modals/ModerationDetails.tsx b/src/view/com/modals/ModerationDetails.tsx
deleted file mode 100644
index f890d50dce..0000000000
--- a/src/view/com/modals/ModerationDetails.tsx
+++ /dev/null
@@ -1,142 +0,0 @@
-import React from 'react'
-import {StyleSheet, View} from 'react-native'
-import {ModerationUI} from '@atproto/api'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {s} from 'lib/styles'
-import {Text} from '../util/text/Text'
-import {TextLink} from '../util/Link'
-import {usePalette} from 'lib/hooks/usePalette'
-import {isWeb} from 'platform/detection'
-import {listUriToHref} from 'lib/strings/url-helpers'
-import {Button} from '../util/forms/Button'
-import {useModalControls} from '#/state/modals'
-import {useLingui} from '@lingui/react'
-import {Trans, msg} from '@lingui/macro'
-
-export const snapPoints = [300]
-
-export function Component({
- context,
- moderation,
-}: {
- context: 'account' | 'content'
- moderation: ModerationUI
-}) {
- const {closeModal} = useModalControls()
- const {isMobile} = useWebMediaQueries()
- const pal = usePalette('default')
- const {_} = useLingui()
-
- let name
- let description
- if (!moderation.cause) {
- name = _(msg`Content Warning`)
- description = _(
- msg`Moderator has chosen to set a general warning on the content.`,
- )
- } else if (moderation.cause.type === 'blocking') {
- if (moderation.cause.source.type === 'list') {
- const list = moderation.cause.source.list
- name = _(msg`User Blocked by List`)
- description = (
-
- This user is included in the{' '}
- {' '}
- list which you have blocked.
-
- )
- } else {
- name = _(msg`User Blocked`)
- description = _(
- msg`You have blocked this user. You cannot view their content.`,
- )
- }
- } else if (moderation.cause.type === 'blocked-by') {
- name = _(msg`User Blocks You`)
- description = _(
- msg`This user has blocked you. You cannot view their content.`,
- )
- } else if (moderation.cause.type === 'block-other') {
- name = _(msg`Content Not Available`)
- description = _(
- msg`This content is not available because one of the users involved has blocked the other.`,
- )
- } else if (moderation.cause.type === 'muted') {
- if (moderation.cause.source.type === 'list') {
- const list = moderation.cause.source.list
- name = _(msg`Account Muted by List`)
- description = (
-
- This user is included in the{' '}
- {' '}
- list which you have muted.
-
- )
- } else {
- name = _(msg`Account Muted`)
- description = _(msg`You have muted this user.`)
- }
- } else {
- name = moderation.cause.labelDef.strings[context].en.name
- description = moderation.cause.labelDef.strings[context].en.description
- }
-
- return (
-
-
- {name}
-
-
- {description}
-
-
-
-
- )
-}
-
-const styles = StyleSheet.create({
- container: {
- flex: 1,
- },
- title: {
- textAlign: 'center',
- fontWeight: 'bold',
- marginBottom: 12,
- },
- description: {
- textAlign: 'center',
- },
- btn: {
- paddingVertical: 14,
- marginTop: isWeb ? 40 : 0,
- marginBottom: isWeb ? 0 : 40,
- },
-})
diff --git a/src/view/com/modals/Repost.tsx b/src/view/com/modals/Repost.tsx
index 6e4881adcd..5dedee832b 100644
--- a/src/view/com/modals/Repost.tsx
+++ b/src/view/com/modals/Repost.tsx
@@ -1,14 +1,15 @@
import React from 'react'
import {StyleSheet, TouchableOpacity, View} from 'react-native'
-import LinearGradient from 'react-native-linear-gradient'
-import {s, colors, gradients} from 'lib/styles'
-import {Text} from '../util/text/Text'
-import {usePalette} from 'lib/hooks/usePalette'
-import {RepostIcon} from 'lib/icons'
+import {LinearGradient} from 'expo-linear-gradient'
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import {Trans, msg} from '@lingui/macro'
+import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+
import {useModalControls} from '#/state/modals'
+import {usePalette} from 'lib/hooks/usePalette'
+import {RepostIcon} from 'lib/icons'
+import {colors, gradients, s} from 'lib/styles'
+import {Text} from '../util/text/Text'
export const snapPoints = [250]
diff --git a/src/view/com/modals/SwitchAccount.tsx b/src/view/com/modals/SwitchAccount.tsx
deleted file mode 100644
index c034c4b528..0000000000
--- a/src/view/com/modals/SwitchAccount.tsx
+++ /dev/null
@@ -1,162 +0,0 @@
-import React from 'react'
-import {
- ActivityIndicator,
- StyleSheet,
- TouchableOpacity,
- View,
-} from 'react-native'
-import {Text} from '../util/text/Text'
-import {s} from 'lib/styles'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useAnalytics} from 'lib/analytics/analytics'
-import {useAccountSwitcher} from 'lib/hooks/useAccountSwitcher'
-import {UserAvatar} from '../util/UserAvatar'
-import {AccountDropdownBtn} from '../util/AccountDropdownBtn'
-import {Link} from '../util/Link'
-import {makeProfileLink} from 'lib/routes/links'
-import {BottomSheetScrollView} from '@gorhom/bottom-sheet'
-import {Haptics} from 'lib/haptics'
-import {Trans, msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-import {useSession, useSessionApi, SessionAccount} from '#/state/session'
-import {useProfileQuery} from '#/state/queries/profile'
-import {useCloseAllActiveElements} from '#/state/util'
-
-export const snapPoints = ['40%', '90%']
-
-function SwitchAccountCard({account}: {account: SessionAccount}) {
- const pal = usePalette('default')
- const {_} = useLingui()
- const {track} = useAnalytics()
- const {isSwitchingAccounts, currentAccount} = useSession()
- const {logout} = useSessionApi()
- const {data: profile} = useProfileQuery({did: account.did})
- const isCurrentAccount = account.did === currentAccount?.did
- const {onPressSwitchAccount} = useAccountSwitcher()
- const closeAllActiveElements = useCloseAllActiveElements()
-
- const onPressSignout = React.useCallback(() => {
- track('Settings:SignOutButtonClicked')
- closeAllActiveElements()
- // needs to be in timeout or the modal re-opens
- setTimeout(() => logout(), 0)
- }, [track, logout, closeAllActiveElements])
-
- const contents = (
-
-
-
-
-
-
- {profile?.displayName || account?.handle}
-
-
- {account?.handle}
-
-
-
- {isCurrentAccount ? (
-
-
- Sign out
-
-
- ) : (
-
- )}
-
- )
-
- return isCurrentAccount ? (
-
- {contents}
-
- ) : (
- onPressSwitchAccount(account)
- }
- accessibilityRole="button"
- accessibilityLabel={_(msg`Switch to ${account.handle}`)}
- accessibilityHint={_(msg`Switches the account you are logged in to`)}>
- {contents}
-
- )
-}
-
-export function Component({}: {}) {
- const pal = usePalette('default')
- const {isSwitchingAccounts, currentAccount, accounts} = useSession()
-
- React.useEffect(() => {
- Haptics.default()
- })
-
- return (
-
-
- Switch Account
-
-
- {isSwitchingAccounts || !currentAccount ? (
-
-
-
- ) : (
-
- )}
-
- {accounts
- .filter(a => a.did !== currentAccount?.did)
- .map(account => (
-
- ))}
-
- )
-}
-
-const styles = StyleSheet.create({
- container: {
- flex: 1,
- },
- innerContainer: {
- paddingBottom: 40,
- },
- title: {
- textAlign: 'center',
- marginTop: 12,
- marginBottom: 12,
- },
- linkCard: {
- flexDirection: 'row',
- alignItems: 'center',
- paddingVertical: 12,
- paddingHorizontal: 18,
- marginBottom: 1,
- },
- avi: {
- marginRight: 12,
- },
- dimmed: {
- opacity: 0.5,
- },
-})
diff --git a/src/view/com/modals/UserAddRemoveLists.tsx b/src/view/com/modals/UserAddRemoveLists.tsx
index 8452f25133..816b32c8c7 100644
--- a/src/view/com/modals/UserAddRemoveLists.tsx
+++ b/src/view/com/modals/UserAddRemoveLists.tsx
@@ -6,28 +6,29 @@ import {
View,
} from 'react-native'
import {AppBskyGraphDefs as GraphDefs} from '@atproto/api'
-import {Text} from '../util/text/Text'
-import {UserAvatar} from '../util/UserAvatar'
-import {MyLists} from '../lists/MyLists'
-import {Button} from '../util/forms/Button'
-import * as Toast from '../util/Toast'
-import {sanitizeDisplayName} from 'lib/strings/display-names'
-import {sanitizeHandle} from 'lib/strings/handles'
-import {s} from 'lib/styles'
-import {usePalette} from 'lib/hooks/usePalette'
-import {isWeb, isAndroid, isMobileWeb} from 'platform/detection'
-import {Trans, msg} from '@lingui/macro'
+import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+
+import {cleanError} from '#/lib/strings/errors'
import {useModalControls} from '#/state/modals'
import {
- useDangerousListMembershipsQuery,
getMembership,
ListMembersip,
+ useDangerousListMembershipsQuery,
useListMembershipAddMutation,
useListMembershipRemoveMutation,
} from '#/state/queries/list-memberships'
-import {cleanError} from '#/lib/strings/errors'
import {useSession} from '#/state/session'
+import {usePalette} from 'lib/hooks/usePalette'
+import {sanitizeDisplayName} from 'lib/strings/display-names'
+import {sanitizeHandle} from 'lib/strings/handles'
+import {s} from 'lib/styles'
+import {isAndroid, isMobileWeb, isWeb} from 'platform/detection'
+import {MyLists} from '../lists/MyLists'
+import {Button} from '../util/forms/Button'
+import {Text} from '../util/text/Text'
+import * as Toast from '../util/Toast'
+import {UserAvatar} from '../util/UserAvatar'
export const snapPoints = ['fullscreen']
@@ -180,7 +181,7 @@ function ListItem({
},
]}>
-
+
- Change
+ Change
>
diff --git a/src/view/com/modals/Waitlist.tsx b/src/view/com/modals/Waitlist.tsx
deleted file mode 100644
index 263dd27a2f..0000000000
--- a/src/view/com/modals/Waitlist.tsx
+++ /dev/null
@@ -1,190 +0,0 @@
-import React from 'react'
-import {
- ActivityIndicator,
- StyleSheet,
- TouchableOpacity,
- View,
-} from 'react-native'
-import {TextInput} from './util'
-import {
- FontAwesomeIcon,
- FontAwesomeIconStyle,
-} from '@fortawesome/react-native-fontawesome'
-import LinearGradient from 'react-native-linear-gradient'
-import {Text} from '../util/text/Text'
-import {s, gradients} from 'lib/styles'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useTheme} from 'lib/ThemeContext'
-import {ErrorMessage} from '../util/error/ErrorMessage'
-import {cleanError} from 'lib/strings/errors'
-import {Trans, msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-import {useModalControls} from '#/state/modals'
-
-export const snapPoints = ['80%']
-
-export function Component({}: {}) {
- const pal = usePalette('default')
- const theme = useTheme()
- const {_} = useLingui()
- const {closeModal} = useModalControls()
- const [email, setEmail] = React.useState('')
- const [isEmailSent, setIsEmailSent] = React.useState(false)
- const [isProcessing, setIsProcessing] = React.useState(false)
- const [error, setError] = React.useState('')
-
- const onPressSignup = async () => {
- setError('')
- setIsProcessing(true)
- try {
- const res = await fetch('https://bsky.app/api/waitlist', {
- method: 'POST',
- headers: {'Content-Type': 'application/json'},
- body: JSON.stringify({email}),
- })
- const resBody = await res.json()
- if (resBody.success) {
- setIsEmailSent(true)
- } else {
- setError(
- resBody.error ||
- _(msg`Something went wrong. Check your email and try again.`),
- )
- }
- } catch (e: any) {
- setError(cleanError(e))
- }
- setIsProcessing(false)
- }
- const onCancel = () => {
- closeModal()
- }
-
- return (
-
-
-
- Join the waitlist
-
-
-
- Bluesky uses invites to build a healthier community. If you don't
- know anybody with an invite, you can sign up for the waitlist and
- we'll send one soon.
-
-
-
- {error ? (
-
-
-
- ) : undefined}
- {isProcessing ? (
-
-
-
- ) : isEmailSent ? (
-
-
-
-
- Your email has been saved! We'll be in touch soon.
-
-
-
- ) : (
- <>
-
-
-
- Join Waitlist
-
-
-
-
-
- Cancel
-
-
- >
- )}
-
-
- )
-}
-
-const styles = StyleSheet.create({
- container: {
- flex: 1,
- },
- innerContainer: {
- paddingBottom: 20,
- },
- title: {
- textAlign: 'center',
- marginTop: 12,
- marginBottom: 12,
- },
- description: {
- textAlign: 'center',
- paddingHorizontal: 22,
- marginBottom: 10,
- },
- textInput: {
- borderWidth: 1,
- borderRadius: 6,
- paddingHorizontal: 16,
- paddingVertical: 12,
- fontSize: 20,
- marginHorizontal: 20,
- },
- btn: {
- flexDirection: 'row',
- alignItems: 'center',
- justifyContent: 'center',
- borderRadius: 32,
- padding: 14,
- marginHorizontal: 20,
- },
- error: {
- borderRadius: 6,
- marginHorizontal: 20,
- marginBottom: 20,
- },
-})
diff --git a/src/view/com/modals/crop-image/CropImage.web.tsx b/src/view/com/modals/crop-image/CropImage.web.tsx
index 6f094a1fdf..79ff5a02ab 100644
--- a/src/view/com/modals/crop-image/CropImage.web.tsx
+++ b/src/view/com/modals/crop-image/CropImage.web.tsx
@@ -1,18 +1,19 @@
import React from 'react'
import {StyleSheet, TouchableOpacity, View} from 'react-native'
-import ImageEditor from 'react-avatar-editor'
-import {Slider} from '@miblanchard/react-native-slider'
-import LinearGradient from 'react-native-linear-gradient'
-import {Text} from 'view/com/util/text/Text'
-import {Dimensions} from 'lib/media/types'
-import {getDataUriSize} from 'lib/media/util'
-import {s, gradients} from 'lib/styles'
-import {usePalette} from 'lib/hooks/usePalette'
-import {SquareIcon, RectWideIcon, RectTallIcon} from 'lib/icons'
import {Image as RNImage} from 'react-native-image-crop-picker'
-import {Trans, msg} from '@lingui/macro'
+import {LinearGradient} from 'expo-linear-gradient'
+import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+import {Slider} from '@miblanchard/react-native-slider'
+import ImageEditor from 'react-avatar-editor'
+
import {useModalControls} from '#/state/modals'
+import {usePalette} from 'lib/hooks/usePalette'
+import {RectTallIcon, RectWideIcon, SquareIcon} from 'lib/icons'
+import {Dimensions} from 'lib/media/types'
+import {getDataUriSize} from 'lib/media/util'
+import {gradients, s} from 'lib/styles'
+import {Text} from 'view/com/util/text/Text'
enum AspectRatio {
Square = 'square',
@@ -100,7 +101,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 +143,7 @@ export function Component({
onPress={onPressDone}
accessibilityRole="button"
accessibilityLabel={_(msg`Save image crop`)}
- accessibilityHint="Saves image crop settings">
+ accessibilityHint={_(msg`Saves image crop settings`)}>
void
- goBack: () => void
- submitReport: () => void
- isProcessing: boolean
-}) {
- const pal = usePalette('default')
- const {_} = useLingui()
- const {isMobile} = useWebMediaQueries()
-
- return (
-
-
-
-
- {' '}
- Back
-
-
-
-
-
-
-
-
-
-
-
-
- )
-}
-
-const styles = StyleSheet.create({
- backBtn: {
- flexDirection: 'row',
- alignItems: 'center',
- },
- detailsInputContainer: {
- borderRadius: 8,
- },
- detailsInput: {
- paddingHorizontal: 12,
- paddingTop: 12,
- paddingBottom: 12,
- borderRadius: 8,
- minHeight: 100,
- fontSize: 16,
- },
- detailsInputBottomBar: {
- alignSelf: 'flex-end',
- },
- charCounter: {
- flexDirection: 'row',
- alignItems: 'center',
- paddingRight: 10,
- paddingBottom: 8,
- },
-})
diff --git a/src/view/com/modals/report/Modal.tsx b/src/view/com/modals/report/Modal.tsx
deleted file mode 100644
index abbad9b402..0000000000
--- a/src/view/com/modals/report/Modal.tsx
+++ /dev/null
@@ -1,223 +0,0 @@
-import React, {useState, useMemo} from 'react'
-import {Linking, StyleSheet, TouchableOpacity, View} from 'react-native'
-import {ScrollView} from 'react-native-gesture-handler'
-import {AtUri} from '@atproto/api'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {s} from 'lib/styles'
-import {Text} from '../../util/text/Text'
-import * as Toast from '../../util/Toast'
-import {ErrorMessage} from '../../util/error/ErrorMessage'
-import {cleanError} from 'lib/strings/errors'
-import {usePalette} from 'lib/hooks/usePalette'
-import {SendReportButton} from './SendReportButton'
-import {InputIssueDetails} from './InputIssueDetails'
-import {ReportReasonOptions} from './ReasonOptions'
-import {CollectionId} from './types'
-import {Trans, msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-import {useModalControls} from '#/state/modals'
-import {getAgent} from '#/state/session'
-
-const DMCA_LINK = 'https://bsky.social/about/support/copyright'
-
-export const snapPoints = [575]
-
-const CollectionNames = {
- [CollectionId.FeedGenerator]: 'Feed',
- [CollectionId.Profile]: 'Profile',
- [CollectionId.List]: 'List',
- [CollectionId.Post]: 'Post',
-}
-
-type ReportComponentProps =
- | {
- uri: string
- cid: string
- }
- | {
- did: string
- }
-
-export function Component(content: ReportComponentProps) {
- const {closeModal} = useModalControls()
- const pal = usePalette('default')
- const {isMobile} = useWebMediaQueries()
- const [isProcessing, setIsProcessing] = useState(false)
- const [showDetailsInput, setShowDetailsInput] = useState(false)
- const [error, setError] = useState('')
- const [issue, setIssue] = useState('')
- const [details, setDetails] = useState('')
- const isAccountReport = 'did' in content
- const subjectKey = isAccountReport ? content.did : content.uri
- const atUri = useMemo(
- () => (!isAccountReport ? new AtUri(subjectKey) : null),
- [isAccountReport, subjectKey],
- )
-
- const submitReport = async () => {
- setError('')
- if (!issue) {
- return
- }
- setIsProcessing(true)
- try {
- if (issue === '__copyright__') {
- Linking.openURL(DMCA_LINK)
- closeModal()
- return
- }
- const $type = !isAccountReport
- ? 'com.atproto.repo.strongRef'
- : 'com.atproto.admin.defs#repoRef'
- await getAgent().createModerationReport({
- reasonType: issue,
- subject: {
- $type,
- ...content,
- },
- reason: details,
- })
- Toast.show("Thank you for your report! We'll look into it promptly.")
-
- closeModal()
- return
- } catch (e: any) {
- setError(cleanError(e))
- setIsProcessing(false)
- }
- }
-
- const goBack = () => {
- setShowDetailsInput(false)
- }
-
- return (
-
-
- {showDetailsInput ? (
-
- ) : (
-
- )}
-
-
- )
-}
-
-// If no atUri is passed, that means the reporting collection is account
-const getCollectionNameForReport = (atUri: AtUri | null) => {
- if (!atUri) return 'Account'
- // Generic fallback for any collection being reported
- return CollectionNames[atUri.collection as CollectionId] || 'Content'
-}
-
-const SelectIssue = ({
- error,
- setShowDetailsInput,
- issue,
- setIssue,
- submitReport,
- isProcessing,
- atUri,
-}: {
- error: string | undefined
- setShowDetailsInput: (v: boolean) => void
- issue: string | undefined
- setIssue: (v: string) => void
- submitReport: () => void
- isProcessing: boolean
- atUri: AtUri | null
-}) => {
- const pal = usePalette('default')
- const {_} = useLingui()
- const collectionName = getCollectionNameForReport(atUri)
- const onSelectIssue = (v: string) => setIssue(v)
- const goToDetails = () => {
- if (issue === '__copyright__') {
- Linking.openURL(DMCA_LINK)
- return
- }
- setShowDetailsInput(true)
- }
-
- return (
- <>
-
- Report {collectionName}
-
-
- What is the issue with this {collectionName}?
-
-
-
-
- {error ? : undefined}
- {/* If no atUri is present, the report would be for account in which case, we allow sending without specifying a reason */}
- {issue || !atUri ? (
- <>
-
-
-
- Add details to report
-
-
- >
- ) : undefined}
- >
- )
-}
-
-const styles = StyleSheet.create({
- container: {
- paddingHorizontal: 10,
- },
- title: {
- textAlign: 'center',
- fontWeight: 'bold',
- fontSize: 24,
- marginBottom: 12,
- },
- description: {
- textAlign: 'center',
- fontSize: 17,
- paddingHorizontal: 22,
- marginBottom: 10,
- },
- addDetailsBtn: {
- padding: 14,
- alignSelf: 'center',
- },
-})
diff --git a/src/view/com/modals/report/ReasonOptions.tsx b/src/view/com/modals/report/ReasonOptions.tsx
deleted file mode 100644
index 23b49b6648..0000000000
--- a/src/view/com/modals/report/ReasonOptions.tsx
+++ /dev/null
@@ -1,123 +0,0 @@
-import {View} from 'react-native'
-import React, {useMemo} from 'react'
-import {AtUri, ComAtprotoModerationDefs} from '@atproto/api'
-
-import {Text} from '../../util/text/Text'
-import {UsePaletteValue, usePalette} from 'lib/hooks/usePalette'
-import {RadioGroup, RadioGroupItem} from 'view/com/util/forms/RadioGroup'
-import {CollectionId} from './types'
-
-type ReasonMap = Record
-const CommonReasons = {
- [ComAtprotoModerationDefs.REASONRUDE]: {
- title: 'Anti-Social Behavior',
- description: 'Harassment, trolling, or intolerance',
- },
- [ComAtprotoModerationDefs.REASONVIOLATION]: {
- title: 'Illegal and Urgent',
- description: 'Glaring violations of law or terms of service',
- },
- [ComAtprotoModerationDefs.REASONOTHER]: {
- title: 'Other',
- description: 'An issue not included in these options',
- },
-}
-const CollectionToReasonsMap: Record = {
- [CollectionId.Post]: {
- [ComAtprotoModerationDefs.REASONSPAM]: {
- title: 'Spam',
- description: 'Excessive mentions or replies',
- },
- [ComAtprotoModerationDefs.REASONSEXUAL]: {
- title: 'Unwanted Sexual Content',
- description: 'Nudity or pornography not labeled as such',
- },
- __copyright__: {
- title: 'Copyright Violation',
- description: 'Contains copyrighted material',
- },
- ...CommonReasons,
- },
- [CollectionId.List]: {
- ...CommonReasons,
- [ComAtprotoModerationDefs.REASONVIOLATION]: {
- title: 'Name or Description Violates Community Standards',
- description: 'Terms used violate community standards',
- },
- },
-}
-const AccountReportReasons = {
- [ComAtprotoModerationDefs.REASONMISLEADING]: {
- title: 'Misleading Account',
- description: 'Impersonation or false claims about identity or affiliation',
- },
- [ComAtprotoModerationDefs.REASONSPAM]: {
- title: 'Frequently Posts Unwanted Content',
- description: 'Spam; excessive mentions or replies',
- },
- [ComAtprotoModerationDefs.REASONVIOLATION]: {
- title: 'Name or Description Violates Community Standards',
- description: 'Terms used violate community standards',
- },
-}
-
-const Option = ({
- pal,
- title,
- description,
-}: {
- pal: UsePaletteValue
- description: string
- title: string
-}) => {
- return (
-
-
- {title}
-
- {description}
-
- )
-}
-
-// This is mostly just content copy without almost any logic
-// so this may grow over time and it makes sense to split it up into its own file
-// to keep it separate from the actual reporting modal logic
-const useReportRadioOptions = (pal: UsePaletteValue, atUri: AtUri | null) =>
- useMemo(() => {
- let items: ReasonMap = {...CommonReasons}
- // If no atUri is passed, that means the reporting collection is account
- if (!atUri) {
- items = {...AccountReportReasons}
- }
-
- if (atUri?.collection && CollectionToReasonsMap[atUri.collection]) {
- items = {...CollectionToReasonsMap[atUri.collection]}
- }
-
- return Object.entries(items).map(([key, {title, description}]) => ({
- key,
- label: ,
- }))
- }, [pal, atUri])
-
-export const ReportReasonOptions = ({
- atUri,
- selectedIssue,
- onSelectIssue,
-}: {
- atUri: AtUri | null
- selectedIssue?: string
- onSelectIssue: (key: string) => void
-}) => {
- const pal = usePalette('default')
- const ITEMS: RadioGroupItem[] = useReportRadioOptions(pal, atUri)
- return (
-
- )
-}
diff --git a/src/view/com/modals/report/SendReportButton.tsx b/src/view/com/modals/report/SendReportButton.tsx
deleted file mode 100644
index 40c239bffe..0000000000
--- a/src/view/com/modals/report/SendReportButton.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import React from 'react'
-import LinearGradient from 'react-native-linear-gradient'
-import {
- ActivityIndicator,
- StyleSheet,
- TouchableOpacity,
- View,
-} from 'react-native'
-import {Text} from '../../util/text/Text'
-import {s, gradients, colors} from 'lib/styles'
-import {Trans, msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-
-export function SendReportButton({
- onPress,
- isProcessing,
-}: {
- onPress: () => void
- isProcessing: boolean
-}) {
- const {_} = useLingui()
- // loading state
- // =
- if (isProcessing) {
- return (
-
-
-
- )
- }
- return (
-
-
-
- Send Report
-
-
-
- )
-}
-
-const styles = StyleSheet.create({
- btn: {
- flexDirection: 'row',
- alignItems: 'center',
- justifyContent: 'center',
- width: '100%',
- borderRadius: 32,
- padding: 14,
- backgroundColor: colors.gray1,
- },
-})
diff --git a/src/view/com/modals/report/types.ts b/src/view/com/modals/report/types.ts
deleted file mode 100644
index ca947ecbd4..0000000000
--- a/src/view/com/modals/report/types.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-// TODO: ATM, @atproto/api does not export ids but it does have these listed at @atproto/api/client/lexicons
-// once we start exporting the ids from the @atproto/ap package, replace these hardcoded ones
-export enum CollectionId {
- FeedGenerator = 'app.bsky.feed.generator',
- Profile = 'app.bsky.actor.profile',
- List = 'app.bsky.graph.list',
- Post = 'app.bsky.feed.post',
-}
diff --git a/src/view/com/modals/util.tsx b/src/view/com/modals/util.tsx
index 06f394ec49..c047a0523c 100644
--- a/src/view/com/modals/util.tsx
+++ b/src/view/com/modals/util.tsx
@@ -1,4 +1,4 @@
export {
BottomSheetScrollView as ScrollView,
BottomSheetTextInput as TextInput,
-} from '@gorhom/bottom-sheet'
+} from '@discord/bottom-sheet/src'
diff --git a/src/view/com/notifications/FeedItem.tsx b/src/view/com/notifications/FeedItem.tsx
index f037097dfc..c4348441e5 100644
--- a/src/view/com/notifications/FeedItem.tsx
+++ b/src/view/com/notifications/FeedItem.tsx
@@ -1,19 +1,20 @@
-import React, {memo, useMemo, useState, useEffect} from 'react'
+import React, {memo, useEffect, useMemo, useState} from 'react'
import {
Animated,
- TouchableOpacity,
Pressable,
StyleSheet,
+ TouchableOpacity,
View,
} from 'react-native'
import {
+ AppBskyActorDefs,
AppBskyEmbedImages,
+ AppBskyEmbedRecordWithMedia,
AppBskyFeedDefs,
AppBskyFeedPost,
- ModerationOpts,
- ProfileModeration,
moderateProfile,
- AppBskyEmbedRecordWithMedia,
+ ModerationDecision,
+ ModerationOpts,
} from '@atproto/api'
import {AtUri} from '@atproto/api'
import {
@@ -21,28 +22,29 @@ import {
FontAwesomeIconStyle,
Props,
} from '@fortawesome/react-native-fontawesome'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
import {FeedNotification} from '#/state/queries/notifications/feed'
-import {s, colors} from 'lib/styles'
-import {niceDate} from 'lib/strings/time'
+import {useAnimatedValue} from 'lib/hooks/useAnimatedValue'
+import {usePalette} from 'lib/hooks/usePalette'
+import {HeartIconSolid} from 'lib/icons'
+import {makeProfileLink} from 'lib/routes/links'
import {sanitizeDisplayName} from 'lib/strings/display-names'
import {sanitizeHandle} from 'lib/strings/handles'
import {pluralize} from 'lib/strings/helpers'
-import {HeartIconSolid} from 'lib/icons'
-import {Text} from '../util/text/Text'
-import {UserAvatar, PreviewableUserAvatar} from '../util/UserAvatar'
-import {UserPreviewLink} from '../util/UserPreviewLink'
-import {ImageHorzList} from '../util/images/ImageHorzList'
+import {niceDate} from 'lib/strings/time'
+import {colors, s} from 'lib/styles'
+import {isWeb} from 'platform/detection'
+import {FeedSourceCard} from '../feeds/FeedSourceCard'
import {Post} from '../post/Post'
+import {ImageHorzList} from '../util/images/ImageHorzList'
import {Link, TextLink} from '../util/Link'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useAnimatedValue} from 'lib/hooks/useAnimatedValue'
import {formatCount} from '../util/numeric/format'
-import {makeProfileLink} from 'lib/routes/links'
+import {Text} from '../util/text/Text'
import {TimeElapsed} from '../util/TimeElapsed'
-import {isWeb} from 'platform/detection'
-import {Trans, msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-import {FeedSourceCard} from '../feeds/FeedSourceCard'
+import {PreviewableUserAvatar, UserAvatar} from '../util/UserAvatar'
+import {UserPreviewLink} from '../util/UserPreviewLink'
const MAX_AUTHORS = 5
@@ -54,7 +56,8 @@ interface Author {
handle: string
displayName?: string
avatar?: string
- moderation: ProfileModeration
+ moderation: ModerationDecision
+ associated?: AppBskyActorDefs.ProfileAssociated
}
let FeedItem = ({
@@ -100,6 +103,7 @@ let FeedItem = ({
displayName: item.notification.author.displayName,
avatar: item.notification.author.avatar,
moderation: moderateProfile(item.notification.author, moderationOpts),
+ associated: item.notification.author.associated,
},
...(item.additional?.map(({author}) => {
return {
@@ -109,6 +113,7 @@ let FeedItem = ({
displayName: author.displayName,
avatar: author.avatar,
moderation: moderateProfile(author, moderationOpts),
+ associated: author.associated,
}
}) || []),
]
@@ -182,7 +187,6 @@ let FeedItem = ({
testID={`feedItem-by-${item.notification.author.handle}`}
style={[
styles.outer,
- pal.view,
pal.border,
item.notification.isRead
? undefined
@@ -228,6 +232,7 @@ let FeedItem = ({
text={sanitizeDisplayName(
authors[0].displayName || authors[0].handle,
)}
+ disableMismatchWarning
/>
{authors.length > 1 ? (
<>
@@ -336,7 +341,8 @@ function CondensedAuthorsList({
did={authors[0].did}
handle={authors[0].handle}
avatar={authors[0].avatar}
- moderation={authors[0].moderation.avatar}
+ moderation={authors[0].moderation.ui('avatar')}
+ type={authors[0].associated?.labeler ? 'labeler' : 'user'}
/>
)
@@ -354,7 +360,8 @@ function CondensedAuthorsList({
))}
@@ -412,7 +419,8 @@ function ExpandedAuthorsList({
diff --git a/src/view/com/pager/FeedsTabBar.tsx b/src/view/com/pager/FeedsTabBar.tsx
deleted file mode 100644
index aa0ba7b242..0000000000
--- a/src/view/com/pager/FeedsTabBar.tsx
+++ /dev/null
@@ -1 +0,0 @@
-export * from './FeedsTabBarMobile'
diff --git a/src/view/com/pager/FeedsTabBar.web.tsx b/src/view/com/pager/FeedsTabBar.web.tsx
deleted file mode 100644
index 9fe03b7e9e..0000000000
--- a/src/view/com/pager/FeedsTabBar.web.tsx
+++ /dev/null
@@ -1,155 +0,0 @@
-import React from 'react'
-import {View, StyleSheet} from 'react-native'
-import Animated from 'react-native-reanimated'
-import {TabBar} from 'view/com/pager/TabBar'
-import {RenderTabBarFnProps} from 'view/com/pager/Pager'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {FeedsTabBar as FeedsTabBarMobile} from './FeedsTabBarMobile'
-import {useMinimalShellMode} from 'lib/hooks/useMinimalShellMode'
-import {useShellLayout} from '#/state/shell/shell-layout'
-import {usePinnedFeedsInfos} from '#/state/queries/feed'
-import {useSession} from '#/state/session'
-import {TextLink} from '#/view/com/util/Link'
-import {CenteredView} from '../util/Views'
-import {isWeb} from 'platform/detection'
-import {useNavigation} from '@react-navigation/native'
-import {NavigationProp} from 'lib/routes/types'
-
-export function FeedsTabBar(
- props: RenderTabBarFnProps & {testID?: string; onPressSelected: () => void},
-) {
- const {isMobile, isTablet} = useWebMediaQueries()
- const {hasSession} = useSession()
-
- if (isMobile) {
- return
- } else if (isTablet) {
- if (hasSession) {
- return
- } else {
- return
- }
- } else {
- return null
- }
-}
-
-function FeedsTabBarPublic() {
- const pal = usePalette('default')
- const {isSandbox} = useSession()
-
- return (
-
-
-
- {isSandbox ? 'SANDBOX' : 'Bluesky'}{' '}
- {/*hasNew && (
-
- )*/}
- >
- }
- // onPress={emitSoftReset}
- />
-
-
- )
-}
-
-function FeedsTabBarTablet(
- props: RenderTabBarFnProps & {testID?: string; onPressSelected: () => void},
-) {
- const {feeds, hasPinnedCustom} = usePinnedFeedsInfos()
- const pal = usePalette('default')
- const {hasSession} = useSession()
- const navigation = useNavigation()
- const {headerMinimalShellTransform} = useMinimalShellMode()
- const {headerHeight} = useShellLayout()
-
- const items = React.useMemo(() => {
- if (!hasSession) return []
-
- const pinnedNames = feeds.map(f => f.displayName)
-
- if (!hasPinnedCustom) {
- return pinnedNames.concat('Feeds ✨')
- }
- return pinnedNames
- }, [hasSession, hasPinnedCustom, feeds])
-
- const onPressDiscoverFeeds = React.useCallback(() => {
- if (isWeb) {
- navigation.navigate('Feeds')
- } else {
- navigation.navigate('FeedsTab')
- navigation.popToTop()
- }
- }, [navigation])
-
- const onSelect = React.useCallback(
- (index: number) => {
- if (hasSession && !hasPinnedCustom && index === items.length - 1) {
- onPressDiscoverFeeds()
- } else if (props.onSelect) {
- props.onSelect(index)
- }
- },
- [items.length, onPressDiscoverFeeds, props, hasSession, hasPinnedCustom],
- )
-
- return (
- // @ts-ignore the type signature for transform wrong here, translateX and translateY need to be in separate objects -prf
- {
- headerHeight.value = e.nativeEvent.layout.height
- }}>
-
-
- )
-}
-
-const styles = StyleSheet.create({
- tabBar: {
- // @ts-ignore Web only
- position: 'sticky',
- zIndex: 1,
- // @ts-ignore Web only -prf
- left: 'calc(50% - 300px)',
- width: 600,
- top: 0,
- flexDirection: 'row',
- alignItems: 'center',
- borderLeftWidth: 1,
- borderRightWidth: 1,
- },
-})
diff --git a/src/view/com/pager/FixedTouchableHighlight.tsx b/src/view/com/pager/FixedTouchableHighlight.tsx
deleted file mode 100644
index d071969757..0000000000
--- a/src/view/com/pager/FixedTouchableHighlight.tsx
+++ /dev/null
@@ -1,42 +0,0 @@
-// FixedTouchableHighlight.tsx
-import React, {ComponentProps, useRef} from 'react'
-import {GestureResponderEvent, TouchableHighlight} from 'react-native'
-
-type Position = {pageX: number; pageY: number}
-
-export default function FixedTouchableHighlight({
- onPress,
- onPressIn,
- ...props
-}: ComponentProps) {
- const _touchActivatePositionRef = useRef(null)
-
- function _onPressIn(e: GestureResponderEvent) {
- const {pageX, pageY} = e.nativeEvent
-
- _touchActivatePositionRef.current = {
- pageX,
- pageY,
- }
-
- onPressIn?.(e)
- }
-
- function _onPress(e: GestureResponderEvent) {
- const {pageX, pageY} = e.nativeEvent
-
- const absX = Math.abs(_touchActivatePositionRef.current?.pageX! - pageX)
- const absY = Math.abs(_touchActivatePositionRef.current?.pageY! - pageY)
-
- const dragged = absX > 2 || absY > 2
- if (!dragged) {
- onPress?.(e)
- }
- }
-
- return (
-
- {props.children}
-
- )
-}
diff --git a/src/view/com/pager/Pager.tsx b/src/view/com/pager/Pager.tsx
index 06ec2e4503..26070fb880 100644
--- a/src/view/com/pager/Pager.tsx
+++ b/src/view/com/pager/Pager.tsx
@@ -1,17 +1,22 @@
import React, {forwardRef} from 'react'
import {Animated, View} from 'react-native'
import PagerView, {
- PagerViewOnPageSelectedEvent,
PagerViewOnPageScrollEvent,
+ PagerViewOnPageSelectedEvent,
PageScrollStateChangedNativeEvent,
} from 'react-native-pager-view'
+
+import {LogEvents} from '#/lib/statsig/events'
import {s} from 'lib/styles'
export type PageSelectedEvent = PagerViewOnPageSelectedEvent
const AnimatedPagerView = Animated.createAnimatedComponent(PagerView)
export interface PagerRef {
- setPage: (index: number) => void
+ setPage: (
+ index: number,
+ reason: LogEvents['home:feedDisplayed']['reason'],
+ ) => void
}
export interface RenderTabBarFnProps {
@@ -25,7 +30,10 @@ interface Props {
initialPage?: number
renderTabBar: RenderTabBarFn
onPageSelected?: (index: number) => void
- onPageSelecting?: (index: number) => void
+ onPageSelecting?: (
+ index: number,
+ reason: LogEvents['home:feedDisplayed']['reason'],
+ ) => void
onPageScrollStateChanged?: (
scrollState: 'idle' | 'dragging' | 'settling',
) => void
@@ -51,7 +59,13 @@ export const Pager = forwardRef>(
const pagerView = React.useRef(null)
React.useImperativeHandle(ref, () => ({
- setPage: (index: number) => pagerView.current?.setPage(index),
+ setPage: (
+ index: number,
+ reason: LogEvents['home:feedDisplayed']['reason'],
+ ) => {
+ pagerView.current?.setPage(index)
+ onPageSelecting?.(index, reason)
+ },
}))
const onPageSelectedInner = React.useCallback(
@@ -79,14 +93,14 @@ export const Pager = forwardRef>(
// -prf
if (scrollState.current === 'settling') {
if (lastDirection.current === -1 && offset < lastOffset.current) {
- onPageSelecting?.(position)
+ onPageSelecting?.(position, 'pager-swipe')
setSelectedPage(position)
lastDirection.current = 0
} else if (
lastDirection.current === 1 &&
offset > lastOffset.current
) {
- onPageSelecting?.(position + 1)
+ onPageSelecting?.(position + 1, 'pager-swipe')
setSelectedPage(position + 1)
lastDirection.current = 0
}
@@ -113,7 +127,7 @@ export const Pager = forwardRef>(
const onTabBarSelect = React.useCallback(
(index: number) => {
pagerView.current?.setPage(index)
- onPageSelecting?.(index)
+ onPageSelecting?.(index, 'tabbar-click')
},
[pagerView, onPageSelecting],
)
diff --git a/src/view/com/pager/Pager.web.tsx b/src/view/com/pager/Pager.web.tsx
index 42982ef7f8..abba12b2cc 100644
--- a/src/view/com/pager/Pager.web.tsx
+++ b/src/view/com/pager/Pager.web.tsx
@@ -1,6 +1,8 @@
import React from 'react'
-import {flushSync} from 'react-dom'
import {View} from 'react-native'
+import {flushSync} from 'react-dom'
+
+import {LogEvents} from '#/lib/statsig/events'
import {s} from 'lib/styles'
export interface RenderTabBarFnProps {
@@ -14,7 +16,10 @@ interface Props {
initialPage?: number
renderTabBar: RenderTabBarFn
onPageSelected?: (index: number) => void
- onPageSelecting?: (index: number) => void
+ onPageSelecting?: (
+ index: number,
+ reason: LogEvents['home:feedDisplayed']['reason'],
+ ) => void
}
export const Pager = React.forwardRef(function PagerImpl(
{
@@ -31,11 +36,16 @@ export const Pager = React.forwardRef(function PagerImpl(
const anchorRef = React.useRef(null)
React.useImperativeHandle(ref, () => ({
- setPage: (index: number) => onTabBarSelect(index),
+ setPage: (
+ index: number,
+ reason: LogEvents['home:feedDisplayed']['reason'],
+ ) => {
+ onTabBarSelect(index, reason)
+ },
}))
const onTabBarSelect = React.useCallback(
- (index: number) => {
+ (index: number, reason: LogEvents['home:feedDisplayed']['reason']) => {
const scrollY = window.scrollY
// We want to determine if the tabbar is already "sticking" at the top (in which
// case we should preserve and restore scroll), or if it is somewhere below in the
@@ -54,7 +64,7 @@ export const Pager = React.forwardRef(function PagerImpl(
flushSync(() => {
setSelectedPage(index)
onPageSelected?.(index)
- onPageSelecting?.(index)
+ onPageSelecting?.(index, reason)
})
if (isSticking) {
const restoredScrollY = scrollYs.current[index]
@@ -73,7 +83,7 @@ export const Pager = React.forwardRef(function PagerImpl(
{renderTabBar({
selectedPage,
tabBarAnchor: ,
- onSelect: onTabBarSelect,
+ onSelect: e => onTabBarSelect(e, 'tabbar-click'),
})}
{React.Children.map(children, (child, i) => (
diff --git a/src/view/com/pager/PagerWithHeader.tsx b/src/view/com/pager/PagerWithHeader.tsx
index 938c1e7e84..97e2db71ca 100644
--- a/src/view/com/pager/PagerWithHeader.tsx
+++ b/src/view/com/pager/PagerWithHeader.tsx
@@ -1,26 +1,27 @@
import * as React from 'react'
import {
LayoutChangeEvent,
+ NativeScrollEvent,
ScrollView,
StyleSheet,
View,
- NativeScrollEvent,
} from 'react-native'
import Animated, {
- useAnimatedStyle,
- useSharedValue,
+ AnimatedRef,
runOnJS,
runOnUI,
scrollTo,
- useAnimatedRef,
- AnimatedRef,
SharedValue,
+ useAnimatedRef,
+ useAnimatedStyle,
+ useSharedValue,
} from 'react-native-reanimated'
-import {Pager, PagerRef, RenderTabBarFnProps} from 'view/com/pager/Pager'
-import {TabBar} from './TabBar'
+
import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback'
-import {ListMethods} from '../util/List'
import {ScrollProvider} from '#/lib/ScrollContext'
+import {Pager, PagerRef, RenderTabBarFnProps} from 'view/com/pager/Pager'
+import {ListMethods} from '../util/List'
+import {TabBar} from './TabBar'
export interface PagerWithHeaderChildParams {
headerHeight: number
@@ -233,36 +234,29 @@ let PagerTabBar = ({
},
],
}))
- const pendingHeaderHeight = React.useRef(null)
+ const headerRef = React.useRef(null)
return (
- {
- if (isHeaderReady) {
- onHeaderOnlyLayout(e.nativeEvent.layout.height)
- pendingHeaderHeight.current = null
- } else {
- // Stash it away for when `isHeaderReady` turns `true` later.
- pendingHeaderHeight.current = e.nativeEvent.layout.height
- }
- }}>
+
{renderHeader?.()}
{
- // When `isHeaderReady` turns `true`, we want to send the parent layout.
- // However, if that didn't lead to a layout change, parent `onLayout` wouldn't get called again.
- // We're conditionally rendering an empty view so that we can send the last measurement.
+ // It wouldn't be enough to place `onLayout` on the parent node because
+ // this would risk measuring before `isHeaderReady` has turned `true`.
+ // Instead, we'll render a brand node conditionally and get fresh layout.
isHeaderReady && (
{
- // We're assuming the parent `onLayout` already ran (parent -> child ordering).
- if (pendingHeaderHeight.current !== null) {
- onHeaderOnlyLayout(pendingHeaderHeight.current)
- pendingHeaderHeight.current = null
- }
+ // @ts-ignore
+ headerRef.current?.measure(
+ (_x: number, _y: number, _width: number, height: number) => {
+ onHeaderOnlyLayout(height)
+ },
+ )
}}
/>
)
diff --git a/src/view/com/pager/TabBar.tsx b/src/view/com/pager/TabBar.tsx
index dadcfcebd9..e8731284f7 100644
--- a/src/view/com/pager/TabBar.tsx
+++ b/src/view/com/pager/TabBar.tsx
@@ -1,10 +1,11 @@
-import React, {useRef, useMemo, useEffect, useState, useCallback} from 'react'
-import {StyleSheet, View, ScrollView, LayoutChangeEvent} from 'react-native'
-import {Text} from '../util/text/Text'
-import {PressableWithHover} from '../util/PressableWithHover'
+import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react'
+import {LayoutChangeEvent, ScrollView, StyleSheet, View} from 'react-native'
+
+import {isNative} from '#/platform/detection'
import {usePalette} from 'lib/hooks/usePalette'
import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {isWeb} from 'platform/detection'
+import {PressableWithHover} from '../util/PressableWithHover'
+import {Text} from '../util/text/Text'
import {DraggableScrollView} from './DraggableScrollView'
export interface TabBarProps {
@@ -16,6 +17,10 @@ export interface TabBarProps {
onPressSelected?: (index: number) => void
}
+// How much of the previous/next item we're showing
+// to give the user a hint there's more to scroll.
+const OFFSCREEN_ITEM_WIDTH = 20
+
export function TabBar({
testID,
selectedPage,
@@ -26,19 +31,68 @@ export function TabBar({
}: TabBarProps) {
const pal = usePalette('default')
const scrollElRef = useRef(null)
+ const itemRefs = useRef>([])
const [itemXs, setItemXs] = useState([])
const indicatorStyle = useMemo(
() => ({borderBottomColor: indicatorColor || pal.colors.link}),
[indicatorColor, pal],
)
const {isDesktop, isTablet} = useWebMediaQueries()
+ const styles = isDesktop || isTablet ? desktopStyles : mobileStyles
- // scrolls to the selected item when the page changes
useEffect(() => {
- scrollElRef.current?.scrollTo({
- x: itemXs[selectedPage] || 0,
- })
- }, [scrollElRef, itemXs, selectedPage])
+ if (isNative) {
+ // On native, the primary interaction is swiping.
+ // We adjust the scroll little by little on every tab change.
+ // Scroll into view but keep the end of the previous item visible.
+ let x = itemXs[selectedPage] || 0
+ x = Math.max(0, x - OFFSCREEN_ITEM_WIDTH)
+ scrollElRef.current?.scrollTo({x})
+ } else {
+ // On the web, the primary interaction is tapping.
+ // Scrolling under tap feels disorienting so only adjust the scroll offset
+ // when tapping on an item out of view--and we adjust by almost an entire page.
+ const parent = scrollElRef?.current?.getScrollableNode?.()
+ if (!parent) {
+ return
+ }
+ const parentRect = parent.getBoundingClientRect()
+ if (!parentRect) {
+ return
+ }
+ const {
+ left: parentLeft,
+ right: parentRight,
+ width: parentWidth,
+ } = parentRect
+ const child = itemRefs.current[selectedPage]
+ if (!child) {
+ return
+ }
+ const childRect = child.getBoundingClientRect?.()
+ if (!childRect) {
+ return
+ }
+ const {left: childLeft, right: childRight, width: childWidth} = childRect
+ let dx = 0
+ if (childRight >= parentRight) {
+ dx += childRight - parentRight
+ dx += parentWidth - childWidth - OFFSCREEN_ITEM_WIDTH
+ } else if (childLeft <= parentLeft) {
+ dx -= parentLeft - childLeft
+ dx -= parentWidth - childWidth - OFFSCREEN_ITEM_WIDTH
+ }
+ let x = parent.scrollLeft + dx
+ x = Math.max(0, x)
+ x = Math.min(x, parent.scrollWidth - parentWidth)
+ if (dx !== 0) {
+ parent.scroll({
+ left: x,
+ behavior: 'smooth',
+ })
+ }
+ }
+ }, [scrollElRef, itemXs, selectedPage, styles])
const onPressItem = useCallback(
(index: number) => {
@@ -63,8 +117,6 @@ export function TabBar({
[],
)
- const styles = isDesktop || isTablet ? desktopStyles : mobileStyles
-
return (
(itemRefs.current[i] = node)}
onLayout={e => onItemLayout(e, i)}
- style={[styles.item, selected && indicatorStyle]}
+ style={styles.item}
hoverStyle={pal.viewLight}
onPress={() => onPressItem(i)}>
-
- {item}
-
+
+
+ {item}
+
+
)
})}
+
)
}
@@ -103,18 +159,25 @@ const desktopStyles = StyleSheet.create({
width: 598,
},
contentContainer: {
- columnGap: 8,
- marginLeft: 14,
- paddingRight: 14,
+ paddingHorizontal: 0,
backgroundColor: 'transparent',
},
item: {
paddingTop: 14,
+ paddingHorizontal: 14,
+ justifyContent: 'center',
+ },
+ itemInner: {
paddingBottom: 12,
- paddingHorizontal: 10,
borderBottomWidth: 3,
borderBottomColor: 'transparent',
- justifyContent: 'center',
+ },
+ outerBottomBorder: {
+ position: 'absolute',
+ left: 0,
+ right: 0,
+ bottom: -1,
+ borderBottomWidth: 1,
},
})
@@ -123,17 +186,24 @@ const mobileStyles = StyleSheet.create({
flexDirection: 'row',
},
contentContainer: {
- columnGap: isWeb ? 0 : 20,
- marginLeft: isWeb ? 0 : 18,
- paddingRight: isWeb ? 0 : 36,
backgroundColor: 'transparent',
+ paddingHorizontal: 8,
},
item: {
paddingTop: 10,
+ paddingHorizontal: 10,
+ justifyContent: 'center',
+ },
+ itemInner: {
paddingBottom: 10,
- paddingHorizontal: isWeb ? 8 : 0,
borderBottomWidth: 3,
borderBottomColor: 'transparent',
- justifyContent: 'center',
+ },
+ outerBottomBorder: {
+ position: 'absolute',
+ left: 0,
+ right: 0,
+ bottom: -1,
+ borderBottomWidth: 1,
},
})
diff --git a/src/view/com/post-thread/PostLikedBy.tsx b/src/view/com/post-thread/PostLikedBy.tsx
index 55463dc137..ba88eca002 100644
--- a/src/view/com/post-thread/PostLikedBy.tsx
+++ b/src/view/com/post-thread/PostLikedBy.tsx
@@ -1,15 +1,16 @@
import React, {useCallback, useMemo, useState} from 'react'
import {ActivityIndicator, StyleSheet, View} from 'react-native'
import {AppBskyFeedGetLikes as GetLikes} from '@atproto/api'
-import {CenteredView} from '../util/Views'
-import {List} from '../util/List'
-import {ErrorMessage} from '../util/error/ErrorMessage'
-import {ProfileCardWithFollowBtn} from '../profile/ProfileCard'
+
+import {cleanError} from '#/lib/strings/errors'
import {logger} from '#/logger'
-import {LoadingScreen} from '../util/LoadingScreen'
+import {useLikedByQuery} from '#/state/queries/post-liked-by'
import {useResolveUriQuery} from '#/state/queries/resolve-uri'
-import {usePostLikedByQuery} from '#/state/queries/post-liked-by'
-import {cleanError} from '#/lib/strings/errors'
+import {ProfileCardWithFollowBtn} from '../profile/ProfileCard'
+import {ErrorMessage} from '../util/error/ErrorMessage'
+import {List} from '../util/List'
+import {LoadingScreen} from '../util/LoadingScreen'
+import {CenteredView} from '../util/Views'
export function PostLikedBy({uri}: {uri: string}) {
const [isPTRing, setIsPTRing] = useState(false)
@@ -28,7 +29,7 @@ export function PostLikedBy({uri}: {uri: string}) {
isError,
error,
refetch,
- } = usePostLikedByQuery(resolvedUri?.uri)
+ } = useLikedByQuery(resolvedUri?.uri)
const likes = useMemo(() => {
if (data?.pages) {
return data.pages.flatMap(page => page.likes)
diff --git a/src/view/com/post-thread/PostThread.tsx b/src/view/com/post-thread/PostThread.tsx
index 6c026d6cb3..f4bf3b1ac8 100644
--- a/src/view/com/post-thread/PostThread.tsx
+++ b/src/view/com/post-thread/PostThread.tsx
@@ -1,59 +1,50 @@
import React, {useEffect, useRef} from 'react'
-import {
- ActivityIndicator,
- Pressable,
- StyleSheet,
- TouchableOpacity,
- View,
-} from 'react-native'
+import {StyleSheet, useWindowDimensions, View} from 'react-native'
import {AppBskyFeedDefs} from '@atproto/api'
-import {CenteredView} from '../util/Views'
-import {LoadingScreen} from '../util/LoadingScreen'
-import {List, ListMethods} from '../util/List'
-import {
- FontAwesomeIcon,
- FontAwesomeIconStyle,
-} from '@fortawesome/react-native-fontawesome'
-import {PostThreadItem} from './PostThreadItem'
-import {ComposePrompt} from '../composer/Prompt'
-import {ViewHeader} from '../util/ViewHeader'
-import {ErrorMessage} from '../util/error/ErrorMessage'
-import {Text} from '../util/text/Text'
-import {s} from 'lib/styles'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useSetTitle} from 'lib/hooks/useSetTitle'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped'
+import {isAndroid, isNative, isWeb} from '#/platform/detection'
import {
+ sortThread,
+ ThreadBlocked,
ThreadNode,
- ThreadPost,
ThreadNotFound,
- ThreadBlocked,
+ ThreadPost,
usePostThreadQuery,
- sortThread,
} from '#/state/queries/post-thread'
-import {useNavigation} from '@react-navigation/native'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {NavigationProp} from 'lib/routes/types'
-import {sanitizeDisplayName} from 'lib/strings/display-names'
-import {cleanError} from '#/lib/strings/errors'
-import {Trans, msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
import {
- UsePreferencesQueryResponse,
useModerationOpts,
usePreferencesQuery,
} from '#/state/queries/preferences'
import {useSession} from '#/state/session'
-import {isAndroid, isNative} from '#/platform/detection'
-import {logger} from '#/logger'
-import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped'
+import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
+import {usePalette} from 'lib/hooks/usePalette'
+import {useSetTitle} from 'lib/hooks/useSetTitle'
+import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import {sanitizeDisplayName} from 'lib/strings/display-names'
+import {cleanError} from 'lib/strings/errors'
+import {ListFooter, ListMaybePlaceholder} from '#/components/Lists'
+import {ComposePrompt} from '../composer/Prompt'
+import {List, ListMethods} from '../util/List'
+import {Text} from '../util/text/Text'
+import {ViewHeader} from '../util/ViewHeader'
+import {PostThreadItem} from './PostThreadItem'
-const MAINTAIN_VISIBLE_CONTENT_POSITION = {minIndexForVisible: 1}
+// FlatList maintainVisibleContentPosition breaks if too many items
+// are prepended. This seems to be an optimal number based on *shrug*.
+const PARENTS_CHUNK_SIZE = 15
+
+const MAINTAIN_VISIBLE_CONTENT_POSITION = {
+ // We don't insert any elements before the root row while loading.
+ // So the row we want to use as the scroll anchor is the first row.
+ minIndexForVisible: 0,
+}
const TOP_COMPONENT = {_reactKey: '__top_component__'}
const REPLY_PROMPT = {_reactKey: '__reply__'}
-const CHILD_SPINNER = {_reactKey: '__child_spinner__'}
const LOAD_MORE = {_reactKey: '__load_more__'}
-const BOTTOM_COMPONENT = {_reactKey: '__bottom_component__'}
type YieldedItem = ThreadPost | ThreadBlocked | ThreadNotFound
type RowItem =
@@ -61,9 +52,17 @@ type RowItem =
// TODO: TS doesn't actually enforce it's one of these, it only enforces matching shape.
| typeof TOP_COMPONENT
| typeof REPLY_PROMPT
- | typeof CHILD_SPINNER
| typeof LOAD_MORE
- | typeof BOTTOM_COMPONENT
+
+type ThreadSkeletonParts = {
+ parents: YieldedItem[]
+ highlightedPost: ThreadNode
+ replies: YieldedItem[]
+}
+
+const keyExtractor = (item: RowItem) => {
+ return item._reactKey
+}
export function PostThread({
uri,
@@ -72,17 +71,30 @@ export function PostThread({
}: {
uri: string | undefined
onCanReply: (canReply: boolean) => void
- onPressReply: () => void
+ onPressReply: () => unknown
}) {
+ const {hasSession} = useSession()
+ const {_} = useLingui()
+ const pal = usePalette('default')
+ const {isMobile, isTabletOrMobile} = useWebMediaQueries()
+ const initialNumToRender = useInitialNumToRender()
+ const {height: windowHeight} = useWindowDimensions()
+
+ const {data: preferences} = usePreferencesQuery()
const {
- isLoading,
- isError,
- error,
+ isFetching,
+ isError: isThreadError,
+ error: threadError,
refetch,
data: thread,
} = usePostThreadQuery(uri)
- const {data: preferences} = usePreferencesQuery()
+ const treeView = React.useMemo(
+ () =>
+ !!preferences?.threadViewPrefs?.lab_treeViewEnabled &&
+ hasBranchingReplies(thread),
+ [preferences?.threadViewPrefs, thread],
+ )
const rootPost = thread?.type === 'post' ? thread.post : undefined
const rootPostRecord = thread?.type === 'post' ? thread.record : undefined
@@ -92,14 +104,23 @@ export function PostThread({
rootPost && moderationOpts
? moderatePost(rootPost, moderationOpts)
: undefined
-
- const cause = mod?.content.cause
-
- return cause
- ? cause.type === 'label' && cause.labelDef.id === '!no-unauthenticated'
- : false
+ return !!mod
+ ?.ui('contentList')
+ .blurs.find(
+ cause =>
+ cause.type === 'label' &&
+ cause.labelDef.identifier === '!no-unauthenticated',
+ )
}, [rootPost, moderationOpts])
+ // Values used for proper rendering of parents
+ const ref = useRef(null)
+ const highlightedPostRef = useRef(null)
+ const [maxParents, setMaxParents] = React.useState(
+ isWeb ? Infinity : PARENTS_CHUNK_SIZE,
+ )
+ const [maxReplies, setMaxReplies] = React.useState(50)
+
useSetTitle(
rootPost && !isNoPwi
? `${sanitizeDisplayName(
@@ -107,156 +128,161 @@ export function PostThread({
)}: "${rootPostRecord!.text}"`
: '',
)
- useEffect(() => {
- if (rootPost) {
- onCanReply(!rootPost.viewer?.replyDisabled)
- }
- }, [rootPost, onCanReply])
- if (isError || AppBskyFeedDefs.isNotFoundPost(thread)) {
- return (
-
+ // On native, this is going to start out `true`. We'll toggle it to `false` after the initial render if flushed.
+ // This ensures that the first render contains no parents--even if they are already available in the cache.
+ // We need to delay showing them so that we can use maintainVisibleContentPosition to keep the main post on screen.
+ // On the web this is not necessary because we can synchronously adjust the scroll in onContentSizeChange instead.
+ const [deferParents, setDeferParents] = React.useState(isNative)
+
+ const skeleton = React.useMemo(() => {
+ const threadViewPrefs = preferences?.threadViewPrefs
+ if (!threadViewPrefs || !thread) return null
+
+ return createThreadSkeleton(
+ sortThread(thread, threadViewPrefs),
+ hasSession,
+ treeView,
)
- }
- if (AppBskyFeedDefs.isBlockedPost(thread)) {
- return
- }
- if (!thread || isLoading || !preferences) {
- return
- }
- return (
-
- )
-}
+ }, [thread, preferences?.threadViewPrefs, hasSession, treeView])
-function PostThreadLoaded({
- thread,
- threadViewPrefs,
- onRefresh,
- onPressReply,
-}: {
- thread: ThreadNode
- threadViewPrefs: UsePreferencesQueryResponse['threadViewPrefs']
- onRefresh: () => void
- onPressReply: () => void
-}) {
- const {hasSession} = useSession()
- const {_} = useLingui()
- const pal = usePalette('default')
- const {isMobile, isTabletOrMobile} = useWebMediaQueries()
- const ref = useRef(null)
- const highlightedPostRef = useRef(null)
- const needsScrollAdjustment = useRef(
- !isNative || // web always uses scroll adjustment
- (thread.type === 'post' && !thread.ctx.isParentLoading), // native only does it when not loading from placeholder
- )
- const [maxVisible, setMaxVisible] = React.useState(100)
- const [isPTRing, setIsPTRing] = React.useState(false)
- const treeView = React.useMemo(
- () => !!threadViewPrefs.lab_treeViewEnabled && hasBranchingReplies(thread),
- [threadViewPrefs, thread],
- )
+ const error = React.useMemo(() => {
+ if (AppBskyFeedDefs.isNotFoundPost(thread)) {
+ return {
+ title: _(msg`Post not found`),
+ message: _(msg`The post may have been deleted.`),
+ }
+ } else if (skeleton?.highlightedPost.type === 'blocked') {
+ return {
+ title: _(msg`Post hidden`),
+ message: _(
+ msg`You have blocked the author or you have been blocked by the author.`,
+ ),
+ }
+ } else if (threadError?.message.startsWith('Post not found')) {
+ return {
+ title: _(msg`Post not found`),
+ message: _(msg`The post may have been deleted.`),
+ }
+ } else if (isThreadError) {
+ return {
+ message: threadError ? cleanError(threadError) : undefined,
+ }
+ }
+
+ return null
+ }, [thread, skeleton?.highlightedPost, isThreadError, _, threadError])
+
+ useEffect(() => {
+ if (error) {
+ onCanReply(false)
+ } else if (rootPost) {
+ onCanReply(!rootPost.viewer?.replyDisabled)
+ }
+ }, [rootPost, onCanReply, error])
// construct content
const posts = React.useMemo(() => {
- const root = sortThread(thread, threadViewPrefs)
+ if (!skeleton) return []
+
+ const {parents, highlightedPost, replies} = skeleton
let arr: RowItem[] = []
- if (root.type === 'post') {
- if (!root.ctx.isParentLoading) {
+ if (highlightedPost.type === 'post') {
+ const isRoot =
+ !highlightedPost.parent && !highlightedPost.ctx.isParentLoading
+ if (isRoot) {
+ // No parents to load.
arr.push(TOP_COMPONENT)
- for (const parent of flattenThreadParents(root, hasSession)) {
- arr.push(parent)
+ } else {
+ if (highlightedPost.ctx.isParentLoading || deferParents) {
+ // We're loading parents of the highlighted post.
+ // In this case, we don't render anything above the post.
+ // If you add something here, you'll need to update both
+ // maintainVisibleContentPosition and onContentSizeChange
+ // to "hold onto" the correct row instead of the first one.
+ } else {
+ // Everything is loaded
+ let startIndex = Math.max(0, parents.length - maxParents)
+ if (startIndex === 0) {
+ arr.push(TOP_COMPONENT)
+ } else {
+ // When progressively revealing parents, rendering a placeholder
+ // here will cause scrolling jumps. Don't add it unless you test it.
+ // QT'ing this thread is a great way to test all the scrolling hacks:
+ // https://bsky.app/profile/www.mozzius.dev/post/3kjqhblh6qk2o
+ }
+ for (let i = startIndex; i < parents.length; i++) {
+ arr.push(parents[i])
+ }
}
}
- arr.push(root)
- if (!root.post.viewer?.replyDisabled) {
+ arr.push(highlightedPost)
+ if (!highlightedPost.post.viewer?.replyDisabled) {
arr.push(REPLY_PROMPT)
}
- if (root.ctx.isChildLoading) {
- arr.push(CHILD_SPINNER)
- } else {
- for (const reply of flattenThreadReplies(root, hasSession, treeView)) {
- arr.push(reply)
+ for (let i = 0; i < replies.length; i++) {
+ arr.push(replies[i])
+ if (i === maxReplies) {
+ break
}
- arr.push(BOTTOM_COMPONENT)
}
}
- if (arr.length > maxVisible) {
- arr = arr.slice(0, maxVisible).concat([LOAD_MORE])
- }
return arr
- }, [thread, treeView, maxVisible, threadViewPrefs, hasSession])
-
- /**
- * NOTE
- * Scroll positioning
- *
- * This callback is run if needsScrollAdjustment.current == true, which is...
- * - On web: always
- * - On native: when the placeholder cache is not being used
- *
- * It then only runs when viewing a reply, and the goal is to scroll the
- * reply into view.
- *
- * On native, if the placeholder cache is being used then maintainVisibleContentPosition
- * is a more effective solution, so we use that. Otherwise, typically we're loading from
- * the react-query cache, so we just need to immediately scroll down to the post.
- *
- * On desktop, maintainVisibleContentPosition isn't supported so we just always use
- * this technique.
- *
- * -prf
- */
- const onContentSizeChange = React.useCallback(() => {
+ }, [skeleton, deferParents, maxParents, maxReplies])
+
+ // This is only used on the web to keep the post in view when its parents load.
+ // On native, we rely on `maintainVisibleContentPosition` instead.
+ const didAdjustScrollWeb = useRef(false)
+ const onContentSizeChangeWeb = React.useCallback(() => {
// only run once
- if (!needsScrollAdjustment.current) {
+ if (didAdjustScrollWeb.current) {
return
}
-
// wait for loading to finish
- if (thread.type === 'post' && !!thread.parent) {
+ if (thread?.type === 'post' && !!thread.parent) {
function onMeasure(pageY: number) {
ref.current?.scrollToOffset({
animated: false,
offset: pageY,
})
}
- if (isNative) {
- highlightedPostRef.current?.measure(
- (_x, _y, _width, _height, _pageX, pageY) => {
- onMeasure(pageY)
- },
- )
- } else {
- // Measure synchronously to avoid a layout jump.
- const domNode = highlightedPostRef.current
- if (domNode) {
- const pageY = (domNode as any as Element).getBoundingClientRect().top
- onMeasure(pageY)
- }
+ // Measure synchronously to avoid a layout jump.
+ const domNode = highlightedPostRef.current
+ if (domNode) {
+ const pageY = (domNode as any as Element).getBoundingClientRect().top
+ onMeasure(pageY)
}
- needsScrollAdjustment.current = false
+ didAdjustScrollWeb.current = true
}
}, [thread])
- const onPTR = React.useCallback(async () => {
- setIsPTRing(true)
- try {
- await onRefresh()
- } catch (err) {
- logger.error('Failed to refresh posts thread', {message: err})
+ // On native, we reveal parents in chunks. Although they're all already
+ // loaded and FlatList already has its own virtualization, unfortunately FlatList
+ // has a bug that causes the content to jump around if too many items are getting
+ // prepended at once. It also jumps around if items get prepended during scroll.
+ // To work around this, we prepend rows after scroll bumps against the top and rests.
+ const needsBumpMaxParents = React.useRef(false)
+ const onStartReached = React.useCallback(() => {
+ if (skeleton?.parents && maxParents < skeleton.parents.length) {
+ needsBumpMaxParents.current = true
+ }
+ }, [maxParents, skeleton?.parents])
+ const bumpMaxParentsIfNeeded = React.useCallback(() => {
+ if (!isNative) {
+ return
}
- setIsPTRing(false)
- }, [setIsPTRing, onRefresh])
+ if (needsBumpMaxParents.current) {
+ needsBumpMaxParents.current = false
+ setMaxParents(n => n + PARENTS_CHUNK_SIZE)
+ }
+ }, [])
+ const onMomentumScrollEnd = bumpMaxParentsIfNeeded
+ const onScrollToTop = bumpMaxParentsIfNeeded
+
+ const onEndReached = React.useCallback(() => {
+ if (isFetching || posts.length < maxReplies) return
+ setMaxReplies(prev => prev + 50)
+ }, [isFetching, maxReplies, posts.length])
const renderItem = React.useCallback(
({item, index}: {item: RowItem; index: number}) => {
@@ -288,46 +314,6 @@ function PostThreadLoaded({
)
- } else if (item === LOAD_MORE) {
- return (
- setMaxVisible(n => n + 50)}
- style={[pal.border, pal.view, styles.itemContainer]}
- accessibilityLabel={_(msg`Load more posts`)}
- accessibilityHint="">
-
-
- Load more posts
-
-
-
- )
- } else if (item === BOTTOM_COMPONENT) {
- // HACK
- // due to some complexities with how flatlist works, this is the easiest way
- // I could find to get a border positioned directly under the last item
- // -prf
- return (
-
- )
- } else if (item === CHILD_SPINNER) {
- return (
-
-
-
- )
} else if (isThreadPost(item)) {
const prev = isThreadPost(posts[index - 1])
? (posts[index - 1] as ThreadPost)
@@ -335,9 +321,14 @@ function PostThreadLoaded({
const next = isThreadPost(posts[index - 1])
? (posts[index - 1] as ThreadPost)
: undefined
+ const hasUnrevealedParents =
+ index === 0 &&
+ skeleton?.parents &&
+ maxParents < skeleton.parents.length
return (
+ ref={item.ctx.isHighlightedPost ? highlightedPostRef : undefined}
+ onLayout={deferParents ? () => setDeferParents(false) : undefined}>
)
@@ -360,143 +353,70 @@ function PostThreadLoaded({
[
hasSession,
isTabletOrMobile,
+ _,
isMobile,
onPressReply,
pal.border,
pal.viewLight,
pal.textLight,
- pal.view,
- pal.text,
- pal.colors.border,
posts,
- onRefresh,
+ skeleton?.parents,
+ maxParents,
+ deferParents,
treeView,
- _,
+ refetch,
],
)
+ if (error || !thread) {
+ return (
+
+ )
+ }
+
return (
item._reactKey}
- renderItem={renderItem}
- refreshing={isPTRing}
- onRefresh={onPTR}
- onContentSizeChange={onContentSizeChange}
- style={s.hContentRegion}
// @ts-ignore our .web version only -prf
desktopFixedHeight
removeClippedSubviews={isAndroid ? false : undefined}
+ ListFooterComponent={
+
+ }
+ initialNumToRender={initialNumToRender}
+ windowSize={11}
/>
)
}
-function PostThreadBlocked() {
- const {_} = useLingui()
- const pal = usePalette('default')
- const navigation = useNavigation()
-
- const onPressBack = React.useCallback(() => {
- if (navigation.canGoBack()) {
- navigation.goBack()
- } else {
- navigation.navigate('Home')
- }
- }, [navigation])
-
- return (
-
-
-
- Post hidden
-
-
-
- You have blocked the author or you have been blocked by the author.
-
-
-
-
-
- Back
-
-
-
-
- )
-}
-
-function PostThreadError({
- onRefresh,
- notFound,
- error,
-}: {
- onRefresh: () => void
- notFound: boolean
- error: Error | null
-}) {
- const {_} = useLingui()
- const pal = usePalette('default')
- const navigation = useNavigation()
-
- const onPressBack = React.useCallback(() => {
- if (navigation.canGoBack()) {
- navigation.goBack()
- } else {
- navigation.navigate('Home')
- }
- }, [navigation])
-
- if (notFound) {
- return (
-
-
-
- Post not found
-
-
- The post may have been deleted.
-
-
-
-
- Back
-
-
-
-
- )
- }
- return (
-
-
-
- )
-}
-
function isThreadPost(v: unknown): v is ThreadPost {
return !!v && typeof v === 'object' && 'type' in v && v.type === 'post'
}
@@ -509,6 +429,20 @@ function isThreadBlocked(v: unknown): v is ThreadBlocked {
return !!v && typeof v === 'object' && 'type' in v && v.type === 'blocked'
}
+function createThreadSkeleton(
+ node: ThreadNode,
+ hasSession: boolean,
+ treeView: boolean,
+): ThreadSkeletonParts | null {
+ if (!node) return null
+
+ return {
+ parents: Array.from(flattenThreadParents(node, hasSession)),
+ highlightedPost: node,
+ replies: Array.from(flattenThreadReplies(node, hasSession, treeView)),
+ }
+}
+
function* flattenThreadParents(
node: ThreadNode,
hasSession: boolean,
@@ -558,7 +492,10 @@ function hasPwiOptOut(node: ThreadPost) {
return !!node.post.author.labels?.find(l => l.val === '!no-unauthenticated')
}
-function hasBranchingReplies(node: ThreadNode) {
+function hasBranchingReplies(node?: ThreadNode) {
+ if (!node) {
+ return false
+ }
if (node.type !== 'post') {
return false
}
@@ -572,20 +509,9 @@ function hasBranchingReplies(node: ThreadNode) {
}
const styles = StyleSheet.create({
- notFoundContainer: {
- margin: 10,
- paddingHorizontal: 18,
- paddingVertical: 14,
- borderRadius: 6,
- },
itemContainer: {
borderTopWidth: 1,
paddingHorizontal: 18,
paddingVertical: 18,
},
- childSpinner: {
- borderTopWidth: 1,
- paddingTop: 40,
- paddingBottom: 200,
- },
})
diff --git a/src/view/com/post-thread/PostThreadFollowBtn.tsx b/src/view/com/post-thread/PostThreadFollowBtn.tsx
index e5b747cc9a..8b297121eb 100644
--- a/src/view/com/post-thread/PostThreadFollowBtn.tsx
+++ b/src/view/com/post-thread/PostThreadFollowBtn.tsx
@@ -1,24 +1,25 @@
import React from 'react'
import {StyleSheet, TouchableOpacity, View} from 'react-native'
-import {useNavigation} from '@react-navigation/native'
import {AppBskyActorDefs} from '@atproto/api'
+import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
-import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {useNavigation} from '@react-navigation/native'
+import {useGate} from '#/lib/statsig/statsig'
import {logger} from '#/logger'
-import {Text} from 'view/com/util/text/Text'
-import * as Toast from 'view/com/util/Toast'
-import {s} from 'lib/styles'
+import {track} from 'lib/analytics/analytics'
import {usePalette} from 'lib/hooks/usePalette'
import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import {s} from 'lib/styles'
import {Shadow, useProfileShadow} from 'state/cache/profile-shadow'
-import {track} from 'lib/analytics/analytics'
import {
useProfileFollowMutationQueue,
useProfileQuery,
} from 'state/queries/profile'
import {useRequireAuth} from 'state/session'
+import {Text} from 'view/com/util/text/Text'
+import * as Toast from 'view/com/util/Toast'
export function PostThreadFollowBtn({did}: {did: string}) {
const {data: profile, isLoading} = useProfileQuery({did})
@@ -42,10 +43,15 @@ function PostThreadFollowBtnLoaded({
const {isTabletOrDesktop} = useWebMediaQueries()
const profile: Shadow =
useProfileShadow(profileUnshadowed)
- const [queueFollow, queueUnfollow] = useProfileFollowMutationQueue(profile)
+ const [queueFollow, queueUnfollow] = useProfileFollowMutationQueue(
+ profile,
+ 'PostThreadItem',
+ )
const requireAuth = useRequireAuth()
+ const showFollowBackLabel = useGate('show_follow_back_label')
const isFollowing = !!profile.viewer?.following
+ const isFollowedBy = !!profile.viewer?.followedBy
const [wasFollowing, setWasFollowing] = React.useState(isFollowing)
// This prevents the button from disappearing as soon as we follow.
@@ -133,7 +139,15 @@ function PostThreadFollowBtnLoaded({
type="button"
style={[!isFollowing ? palInverted.text : pal.text, s.bold]}
numberOfLines={1}>
- {!isFollowing ? Follow : Following}
+ {!isFollowing ? (
+ showFollowBackLabel && isFollowedBy ? (
+ Follow Back
+ ) : (
+ Follow
+ )
+ ) : (
+ Following
+ )}
diff --git a/src/view/com/post-thread/PostThreadItem.tsx b/src/view/com/post-thread/PostThreadItem.tsx
index 826d0d1617..785b41eaa6 100644
--- a/src/view/com/post-thread/PostThreadItem.tsx
+++ b/src/view/com/post-thread/PostThreadItem.tsx
@@ -1,49 +1,51 @@
import React, {memo, useMemo} from 'react'
import {StyleSheet, View} from 'react-native'
import {
- AtUri,
AppBskyFeedDefs,
AppBskyFeedPost,
+ AtUri,
+ ModerationDecision,
RichText as RichTextAPI,
- PostModeration,
} from '@atproto/api'
-import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped'
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import {PostThreadFollowBtn} from 'view/com/post-thread/PostThreadFollowBtn'
-import {Link, TextLink} from '../util/Link'
-import {RichText} from '../util/text/RichText'
-import {Text} from '../util/text/Text'
-import {PreviewableUserAvatar} from '../util/UserAvatar'
-import {s} from 'lib/styles'
-import {niceDate} from 'lib/strings/time'
-import {sanitizeDisplayName} from 'lib/strings/display-names'
-import {sanitizeHandle} from 'lib/strings/handles'
-import {countLines, pluralize} from 'lib/strings/helpers'
-import {isEmbedByEmbedder} from 'lib/embeds'
-import {getTranslatorLink, isPostInLanguage} from '../../../locale/helpers'
-import {PostMeta} from '../util/PostMeta'
-import {PostEmbeds} from '../util/post-embeds'
-import {PostCtrls} from '../util/post-ctrls/PostCtrls'
-import {PostHider} from '../util/moderation/PostHider'
-import {ContentHider} from '../util/moderation/ContentHider'
-import {PostAlerts} from '../util/moderation/PostAlerts'
-import {PostSandboxWarning} from '../util/PostSandboxWarning'
-import {ErrorMessage} from '../util/error/ErrorMessage'
-import {usePalette} from 'lib/hooks/usePalette'
-import {formatCount} from '../util/numeric/format'
-import {makeProfileLink} from 'lib/routes/links'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {MAX_POST_LINES} from 'lib/constants'
-import {Trans, msg} from '@lingui/macro'
+import {msg, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
+
+import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped'
+import {POST_TOMBSTONE, Shadow, usePostShadow} from '#/state/cache/post-shadow'
import {useLanguagePrefs} from '#/state/preferences'
-import {useComposerControls} from '#/state/shell/composer'
-import {useModerationOpts} from '#/state/queries/preferences'
import {useOpenLink} from '#/state/preferences/in-app-browser'
-import {Shadow, usePostShadow, POST_TOMBSTONE} from '#/state/cache/post-shadow'
import {ThreadPost} from '#/state/queries/post-thread'
+import {useModerationOpts} from '#/state/queries/preferences'
+import {useComposerControls} from '#/state/shell/composer'
+import {MAX_POST_LINES} from 'lib/constants'
+import {usePalette} from 'lib/hooks/usePalette'
+import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import {makeProfileLink} from 'lib/routes/links'
+import {sanitizeDisplayName} from 'lib/strings/display-names'
+import {sanitizeHandle} from 'lib/strings/handles'
+import {countLines, pluralize} from 'lib/strings/helpers'
+import {niceDate} from 'lib/strings/time'
+import {s} from 'lib/styles'
import {useSession} from 'state/session'
+import {PostThreadFollowBtn} from 'view/com/post-thread/PostThreadFollowBtn'
+import {atoms as a} from '#/alf'
+import {RichText} from '#/components/RichText'
+import {ContentHider} from '../../../components/moderation/ContentHider'
+import {LabelsOnMyPost} from '../../../components/moderation/LabelsOnMe'
+import {PostAlerts} from '../../../components/moderation/PostAlerts'
+import {PostHider} from '../../../components/moderation/PostHider'
+import {getTranslatorLink, isPostInLanguage} from '../../../locale/helpers'
import {WhoCanReply} from '../threadgate/WhoCanReply'
+import {ErrorMessage} from '../util/error/ErrorMessage'
+import {Link, TextLink} from '../util/Link'
+import {LoadingPlaceholder} from '../util/LoadingPlaceholder'
+import {formatCount} from '../util/numeric/format'
+import {PostCtrls} from '../util/post-ctrls/PostCtrls'
+import {PostEmbeds} from '../util/post-embeds'
+import {PostMeta} from '../util/PostMeta'
+import {Text} from '../util/text/Text'
+import {PreviewableUserAvatar} from '../util/UserAvatar'
export function PostThreadItem({
post,
@@ -93,6 +95,8 @@ export function PostThreadItem({
if (richText && moderation) {
return (
record: AppBskyFeedPost.Record
richText: RichTextAPI
- moderation: PostModeration
+ moderation: ModerationDecision
treeView: boolean
depth: number
prevPost: ThreadPost | undefined
@@ -164,8 +168,6 @@ let PostThreadItemLoaded = ({
() => countLines(richText?.text) >= MAX_POST_LINES,
)
const {currentAccount} = useSession()
- const hasEngagement = post.likeCount || post.repostCount
-
const rootUri = record.reply?.root?.uri || post.uri
const postHref = React.useMemo(() => {
const urip = new AtUri(post.uri)
@@ -174,7 +176,6 @@ let PostThreadItemLoaded = ({
const itemTitle = _(msg`Post by ${post.author.handle}`)
const authorHref = makeProfileLink(post.author)
const authorTitle = post.author.handle
- const isAuthorMuted = post.author.viewer?.muted
const likesHref = React.useMemo(() => {
const urip = new AtUri(post.uri)
return makeProfileLink(post.author, 'post', urip.rkey, 'liked-by')
@@ -205,11 +206,7 @@ let PostThreadItemLoaded = ({
uri: post.uri,
cid: post.cid,
text: record.text,
- author: {
- handle: post.author.handle,
- displayName: post.author.displayName,
- avatar: post.author.avatar,
- },
+ author: post.author,
embed: post.embed,
moderation,
},
@@ -248,7 +245,6 @@ let PostThreadItemLoaded = ({
testID={`postThreadItem-by-${post.author.handle}`}
style={[styles.outer, styles.outerHighlighted, pal.border, pal.view]}
accessible={false}>
-
@@ -271,35 +268,12 @@ let PostThreadItemLoaded = ({
{sanitizeDisplayName(
post.author.displayName ||
sanitizeHandle(post.author.handle),
+ moderation.ui('displayName'),
)}
- {isAuthorMuted && (
-
-
-
- Muted
-
-
- )}
{sanitizeHandle(post.author.handle, '@')}
@@ -312,15 +286,16 @@ let PostThreadItemLoaded = ({
)}
+
{richText?.text ? (
) : undefined}
{post.embed && (
-
-
-
+
+
+
)}
- {hasEngagement ? (
+ {post.repostCount !== 0 || post.likeCount !== 0 ? (
+ // Show this section unless we're *sure* it has no engagement.
- {post.repostCount ? (
+ {post.repostCount == null && post.likeCount == null && (
+ // If we're still loading and not sure, assume this post has engagement.
+ // This lets us avoid a layout shift for the common case (embedded post with likes/reposts).
+ // TODO: embeds should include metrics to avoid us having to guess.
+
+ )}
+ {post.repostCount != null && post.repostCount !== 0 ? (
- ) : (
- <>>
- )}
- {post.likeCount ? (
+ ) : null}
+ {post.likeCount != null && post.likeCount !== 0 ? (
- ) : (
- <>>
- )}
+ ) : null}
- ) : (
- <>>
- )}
+ ) : null}
@@ -431,15 +399,13 @@ let PostThreadItemLoaded = ({
testID={`postThreadItem-by-${post.author.handle}`}
href={postHref}
style={[pal.view]}
- moderation={moderation.content}
+ modui={moderation.ui('contentList')}
iconSize={isThreadedChild ? 26 : 38}
iconStyles={
isThreadedChild
? {marginRight: 4}
: {marginLeft: 2, marginRight: 2}
}>
-
-
{showChildReplyLine && (
@@ -492,7 +459,7 @@ let PostThreadItemLoaded = ({
styles.replyLine,
{
flexGrow: 1,
- backgroundColor: pal.colors.border,
+ backgroundColor: pal.colors.replyLine,
marginTop: 4,
},
]}
@@ -509,28 +476,30 @@ let PostThreadItemLoaded = ({
}>
+
{richText?.text ? (
) : undefined}
@@ -543,24 +512,16 @@ let PostThreadItemLoaded = ({
/>
) : undefined}
{post.embed && (
-
-
-
+
+
+
)}
@@ -578,7 +539,7 @@ let PostThreadItemLoaded = ({
title={itemTitle}
noFeedback>
- More
+ More
record: AppBskyFeedPost.Record
richText: RichTextAPI
- moderation: PostModeration
+ moderation: ModerationDecision
showReplyLine?: boolean
style?: StyleProp
}) {
@@ -116,11 +119,7 @@ function PostInner({
uri: post.uri,
cid: post.cid,
text: record.text,
- author: {
- handle: post.author.handle,
- displayName: post.author.displayName,
- avatar: post.author.avatar,
- },
+ author: post.author,
embed: post.embed,
moderation,
},
@@ -132,7 +131,7 @@ function PostInner({
}, [setLimitLines])
return (
-
+
{showReplyLine && }
@@ -141,12 +140,14 @@ function PostInner({
did={post.author.did}
handle={post.author.handle}
avatar={post.author.avatar}
- moderation={moderation.avatar}
+ moderation={moderation.ui('avatar')}
+ type={post.author.associated?.labeler ? 'labeler' : 'user'}
/>
)}
+
-
+
{richText.text ? (
) : undefined}
@@ -201,17 +206,7 @@ function PostInner({
/>
) : undefined}
{post.embed ? (
-
-
-
+
) : null}
diff --git a/src/view/com/posts/Feed.tsx b/src/view/com/posts/Feed.tsx
index 54d8aa2240..fb67d35c5c 100644
--- a/src/view/com/posts/Feed.tsx
+++ b/src/view/com/posts/Feed.tsx
@@ -8,30 +8,33 @@ import {
View,
ViewStyle,
} from 'react-native'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
import {useQueryClient} from '@tanstack/react-query'
-import {List, ListRef} from '../util/List'
-import {PostFeedLoadingPlaceholder} from '../util/LoadingPlaceholder'
-import {FeedErrorMessage} from './FeedErrorMessage'
-import {FeedSlice} from './FeedSlice'
-import {LoadMoreRetryBtn} from '../util/LoadMoreRetryBtn'
-import {useAnalytics} from 'lib/analytics/analytics'
-import {useTheme} from 'lib/ThemeContext'
+
+import {FALLBACK_MARKER_POST} from '#/lib/api/feed/home'
+import {logEvent} from '#/lib/statsig/statsig'
import {logger} from '#/logger'
+import {isWeb} from '#/platform/detection'
+import {listenPostCreated} from '#/state/events'
+import {STALE} from '#/state/queries'
import {
- RQKEY,
FeedDescriptor,
FeedParams,
- usePostFeedQuery,
pollLatest,
+ RQKEY,
+ usePostFeedQuery,
} from '#/state/queries/post-feed'
-import {isWeb} from '#/platform/detection'
-import {listenPostCreated} from '#/state/events'
import {useSession} from '#/state/session'
-import {STALE} from '#/state/queries'
-import {msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
+import {useAnalytics} from 'lib/analytics/analytics'
+import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
+import {useTheme} from 'lib/ThemeContext'
+import {List, ListRef} from '../util/List'
+import {PostFeedLoadingPlaceholder} from '../util/LoadingPlaceholder'
+import {LoadMoreRetryBtn} from '../util/LoadMoreRetryBtn'
import {DiscoverFallbackHeader} from './DiscoverFallbackHeader'
-import {FALLBACK_MARKER_POST} from '#/lib/api/feed/home'
+import {FeedErrorMessage} from './FeedErrorMessage'
+import {FeedSlice} from './FeedSlice'
const LOADING_ITEM = {_reactKey: '__loading__'}
const EMPTY_FEED_ITEM = {_reactKey: '__empty__'}
@@ -84,9 +87,11 @@ let Feed = ({
const {_} = useLingui()
const queryClient = useQueryClient()
const {currentAccount} = useSession()
+ const initialNumToRender = useInitialNumToRender()
const [isPTRing, setIsPTRing] = React.useState(false)
const checkForNewRef = React.useRef<(() => void) | null>(null)
const lastFetchRef = React.useRef(Date.now())
+ const feedType = feed.split('|')[0]
const opts = React.useMemo(
() => ({enabled, ignoreFilterFor}),
@@ -211,6 +216,11 @@ let Feed = ({
const onRefresh = React.useCallback(async () => {
track('Feed:onRefresh')
+ logEvent('feed:refresh', {
+ feedType: feedType,
+ feedUrl: feed,
+ reason: 'pull-to-refresh',
+ })
setIsPTRing(true)
try {
await refetch()
@@ -219,18 +229,32 @@ let Feed = ({
logger.error('Failed to refresh posts feed', {message: err})
}
setIsPTRing(false)
- }, [refetch, track, setIsPTRing, onHasNew])
+ }, [refetch, track, setIsPTRing, onHasNew, feed, feedType])
const onEndReached = React.useCallback(async () => {
if (isFetching || !hasNextPage || isError) return
+ logEvent('feed:endReached', {
+ feedType: feedType,
+ feedUrl: feed,
+ itemCount: feedItems.length,
+ })
track('Feed:onEndReached')
try {
await fetchNextPage()
} catch (err) {
logger.error('Failed to load more posts', {message: err})
}
- }, [isFetching, hasNextPage, isError, fetchNextPage, track])
+ }, [
+ isFetching,
+ hasNextPage,
+ isError,
+ fetchNextPage,
+ track,
+ feed,
+ feedType,
+ feedItems.length,
+ ])
const onPressTryAgain = React.useCallback(() => {
refetch()
@@ -327,6 +351,8 @@ let Feed = ({
desktopFixedHeight={
desktopFixedHeightOffset ? desktopFixedHeightOffset : true
}
+ initialNumToRender={initialNumToRender}
+ windowSize={11}
/>
)
diff --git a/src/view/com/posts/FeedErrorMessage.tsx b/src/view/com/posts/FeedErrorMessage.tsx
index 6d99c32f18..12c34664b5 100644
--- a/src/view/com/posts/FeedErrorMessage.tsx
+++ b/src/view/com/posts/FeedErrorMessage.tsx
@@ -1,21 +1,22 @@
import React from 'react'
import {View} from 'react-native'
import {AppBskyFeedGetAuthorFeed, AtUri} from '@atproto/api'
-import {Text} from '../util/text/Text'
-import {Button} from '../util/forms/Button'
-import * as Toast from '../util/Toast'
-import {ErrorMessage} from '../util/error/ErrorMessage'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useNavigation} from '@react-navigation/native'
-import {NavigationProp} from 'lib/routes/types'
-import {logger} from '#/logger'
-import {useModalControls} from '#/state/modals'
import {msg as msgLingui, Trans} from '@lingui/macro'
import {useLingui} from '@lingui/react'
-import {FeedDescriptor} from '#/state/queries/post-feed'
-import {EmptyState} from '../util/EmptyState'
+import {useNavigation} from '@react-navigation/native'
+
import {cleanError} from '#/lib/strings/errors'
+import {logger} from '#/logger'
+import {FeedDescriptor} from '#/state/queries/post-feed'
import {useRemoveFeedMutation} from '#/state/queries/preferences'
+import {usePalette} from 'lib/hooks/usePalette'
+import {NavigationProp} from 'lib/routes/types'
+import * as Prompt from '#/components/Prompt'
+import {EmptyState} from '../util/EmptyState'
+import {ErrorMessage} from '../util/error/ErrorMessage'
+import {Button} from '../util/forms/Button'
+import {Text} from '../util/text/Text'
+import * as Toast from '../util/Toast'
export enum KnownError {
Block = 'Block',
@@ -46,7 +47,7 @@ export function FeedErrorMessage({
if (
typeof knownError !== 'undefined' &&
knownError !== KnownError.Unknown &&
- feedDesc.startsWith('feedgen')
+ (feedDesc.startsWith('feedgen') || knownError === KnownError.FeedNSFPublic)
) {
return (
{
navigation.navigate('Profile', {name: ownerDid})
}, [navigation, ownerDid])
+ const onPressRemoveFeed = React.useCallback(() => {
+ removePromptControl.open()
+ }, [removePromptControl])
+
const onRemoveFeed = React.useCallback(async () => {
- openModal({
- name: 'confirm',
- title: _l(msgLingui`Remove feed`),
- message: _l(msgLingui`Remove this feed from your saved feeds?`),
- async onPressConfirm() {
- try {
- await removeFeed({uri})
- } catch (err) {
- Toast.show(
- _l(
- msgLingui`There was an an issue removing this feed. Please check your internet connection and try again.`,
- ),
- )
- logger.error('Failed to remove feed', {message: err})
- }
- },
- onPressCancel() {
- closeModal()
- },
- })
- }, [openModal, closeModal, uri, removeFeed, _l])
+ try {
+ await removeFeed({uri})
+ } catch (err) {
+ Toast.show(
+ _l(
+ msgLingui`There was an an issue removing this feed. Please check your internet connection and try again.`,
+ ),
+ )
+ logger.error('Failed to remove feed', {message: err})
+ }
+ }, [uri, removeFeed, _l])
const cta = React.useMemo(() => {
switch (knownError) {
@@ -179,27 +174,38 @@ function FeedgenErrorMessage({
}, [knownError, onViewProfile, onRemoveFeed, _l])
return (
-
- {msg}
+ <>
+
+ {msg}
- {rawError?.message && (
-
- Message from server: {rawError.message}
-
- )}
+ {rawError?.message && (
+
+ Message from server: {rawError.message}
+
+ )}
- {cta}
-
+ {cta}
+
+
+
+ >
)
}
@@ -235,6 +241,9 @@ function detectKnownError(
if (typeof error !== 'string') {
error = error.toString()
}
+ if (error.includes(KnownError.FeedNSFPublic)) {
+ return KnownError.FeedNSFPublic
+ }
if (!feedDesc.startsWith('feedgen')) {
return KnownError.Unknown
}
@@ -258,8 +267,5 @@ function detectKnownError(
if (error.includes('feed provided an invalid response')) {
return KnownError.FeedgenBadResponse
}
- if (error.includes(KnownError.FeedNSFPublic)) {
- return KnownError.FeedNSFPublic
- }
return KnownError.FeedgenUnknown
}
diff --git a/src/view/com/posts/FeedItem.tsx b/src/view/com/posts/FeedItem.tsx
index 920409ec6f..71d295bde1 100644
--- a/src/view/com/posts/FeedItem.tsx
+++ b/src/view/com/posts/FeedItem.tsx
@@ -4,39 +4,39 @@ import {
AppBskyFeedDefs,
AppBskyFeedPost,
AtUri,
- PostModeration,
+ ModerationDecision,
RichText as RichTextAPI,
} from '@atproto/api'
import {
FontAwesomeIcon,
FontAwesomeIconStyle,
} from '@fortawesome/react-native-fontawesome'
-import {ReasonFeedSource, isReasonFeedSource} from 'lib/api/feed/types'
-import {Link, TextLinkOnWebOnly, TextLink} from '../util/Link'
-import {Text} from '../util/text/Text'
-import {UserInfoText} from '../util/UserInfoText'
-import {PostMeta} from '../util/PostMeta'
-import {PostCtrls} from '../util/post-ctrls/PostCtrls'
-import {PostEmbeds} from '../util/post-embeds'
-import {ContentHider} from '../util/moderation/ContentHider'
-import {PostAlerts} from '../util/moderation/PostAlerts'
-import {RichText} from '../util/text/RichText'
-import {PostSandboxWarning} from '../util/PostSandboxWarning'
-import {PreviewableUserAvatar} from '../util/UserAvatar'
-import {s} from 'lib/styles'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {POST_TOMBSTONE, Shadow, usePostShadow} from '#/state/cache/post-shadow'
+import {useComposerControls} from '#/state/shell/composer'
+import {isReasonFeedSource, ReasonFeedSource} from 'lib/api/feed/types'
+import {MAX_POST_LINES} from 'lib/constants'
import {usePalette} from 'lib/hooks/usePalette'
+import {makeProfileLink} from 'lib/routes/links'
import {sanitizeDisplayName} from 'lib/strings/display-names'
import {sanitizeHandle} from 'lib/strings/handles'
-import {makeProfileLink} from 'lib/routes/links'
-import {isEmbedByEmbedder} from 'lib/embeds'
-import {MAX_POST_LINES} from 'lib/constants'
import {countLines} from 'lib/strings/helpers'
-import {useComposerControls} from '#/state/shell/composer'
-import {Shadow, usePostShadow, POST_TOMBSTONE} from '#/state/cache/post-shadow'
+import {s} from 'lib/styles'
+import {atoms as a} from '#/alf'
+import {ContentHider} from '#/components/moderation/ContentHider'
+import {RichText} from '#/components/RichText'
+import {LabelsOnMyPost} from '../../../components/moderation/LabelsOnMe'
+import {PostAlerts} from '../../../components/moderation/PostAlerts'
import {FeedNameText} from '../util/FeedInfoText'
-import {useSession} from '#/state/session'
-import {Trans, msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
+import {Link, TextLink, TextLinkOnWebOnly} from '../util/Link'
+import {PostCtrls} from '../util/post-ctrls/PostCtrls'
+import {PostEmbeds} from '../util/post-embeds'
+import {PostMeta} from '../util/PostMeta'
+import {Text} from '../util/text/Text'
+import {PreviewableUserAvatar} from '../util/UserAvatar'
+import {UserInfoText} from '../util/UserInfoText'
export function FeedItem({
post,
@@ -50,7 +50,7 @@ export function FeedItem({
post: AppBskyFeedDefs.PostView
record: AppBskyFeedPost.Record
reason: AppBskyFeedDefs.ReasonRepost | ReasonFeedSource | undefined
- moderation: PostModeration
+ moderation: ModerationDecision
isThreadChild?: boolean
isThreadLastChild?: boolean
isThreadParent?: boolean
@@ -70,6 +70,8 @@ export function FeedItem({
if (richText && moderation) {
return (
{
const urip = new AtUri(post.uri)
return makeProfileLink(post.author, 'post', urip.rkey)
}, [post.uri, post.author])
- const isModeratedPost =
- moderation.decisions.post.cause?.type === 'label' &&
- moderation.decisions.post.cause.label.src !== currentAccount?.did
const replyAuthorDid = useMemo(() => {
if (!record?.reply) {
@@ -129,11 +127,7 @@ let FeedItemInner = ({
uri: post.uri,
cid: post.cid,
text: record.text || '',
- author: {
- handle: post.author.handle,
- displayName: post.author.displayName,
- avatar: post.author.avatar,
- },
+ author: post.author,
embed: post.embed,
moderation,
},
@@ -142,12 +136,11 @@ let FeedItemInner = ({
const outerStyles = [
styles.outer,
- pal.view,
{
borderColor: pal.colors.border,
paddingBottom:
isThreadLastChild || (!isThreadChild && !isThreadParent)
- ? 6
+ ? 8
: undefined,
},
isThreadChild ? styles.outerSmallTop : undefined,
@@ -160,8 +153,6 @@ let FeedItemInner = ({
href={href}
noFeedback
accessible={false}>
-
-
{isThreadChild && (
@@ -230,6 +221,7 @@ let FeedItemInner = ({
numberOfLines={1}
text={sanitizeDisplayName(
reason.by.displayName || sanitizeHandle(reason.by.handle),
+ moderation.ui('displayName'),
)}
href={makeProfileLink(reason.by)}
/>
@@ -247,7 +239,8 @@ let FeedItemInner = ({
did={post.author.did}
handle={post.author.handle}
avatar={post.author.avatar}
- moderation={moderation.avatar}
+ moderation={moderation.ui('avatar')}
+ type={post.author.associated?.labeler ? 'labeler' : 'user'}
/>
{isThreadParent && (
)}
+
@@ -324,7 +317,7 @@ let PostContent = ({
postEmbed,
postAuthor,
}: {
- moderation: PostModeration
+ moderation: ModerationDecision
richText: RichTextAPI
postEmbed: AppBskyFeedDefs.PostView['embed']
postAuthor: AppBskyFeedDefs.PostView['author']
@@ -342,19 +335,19 @@ let PostContent = ({
return (
-
+
{richText.text ? (
) : undefined}
@@ -367,19 +360,9 @@ let PostContent = ({
/>
) : undefined}
{postEmbed ? (
-
-
-
+
+
+
) : null}
)
diff --git a/src/view/com/posts/FeedSlice.tsx b/src/view/com/posts/FeedSlice.tsx
index 84edee4a11..5f9c923a57 100644
--- a/src/view/com/posts/FeedSlice.tsx
+++ b/src/view/com/posts/FeedSlice.tsx
@@ -1,14 +1,15 @@
import React, {memo} from 'react'
import {StyleSheet, View} from 'react-native'
-import {FeedPostSlice} from '#/state/queries/post-feed'
+import Svg, {Circle, Line} from 'react-native-svg'
import {AtUri} from '@atproto/api'
+import {Trans} from '@lingui/macro'
+
+import {FeedPostSlice} from '#/state/queries/post-feed'
+import {usePalette} from 'lib/hooks/usePalette'
+import {makeProfileLink} from 'lib/routes/links'
import {Link} from '../util/Link'
import {Text} from '../util/text/Text'
-import Svg, {Circle, Line} from 'react-native-svg'
import {FeedItem} from './FeedItem'
-import {usePalette} from 'lib/hooks/usePalette'
-import {makeProfileLink} from 'lib/routes/links'
-import {Trans} from '@lingui/macro'
let FeedSlice = ({slice}: {slice: FeedPostSlice}): React.ReactNode => {
if (slice.isThread && slice.items.length > 3) {
@@ -78,11 +79,7 @@ function ViewFullThread({slice}: {slice: FeedPostSlice}) {
}, [slice.rootUri])
return (
-
+
@@ -119,17 +120,17 @@ export function ProfileCard({
)
}
-function ProfileCardPills({
+export function ProfileCardPills({
followedBy,
moderation,
}: {
followedBy: boolean
- moderation: ProfileModeration
+ moderation: ModerationDecision
}) {
const pal = usePalette('default')
- const causes = getProfileModerationCauses(moderation)
- if (!followedBy && !causes.length) {
+ const modui = moderation.ui('profileList')
+ if (!followedBy && !modui.inform && !modui.alert) {
return null
}
@@ -142,19 +143,41 @@ function ProfileCardPills({
)}
- {causes.map(cause => {
- const desc = describeModerationCause(cause, 'account')
- return (
-
-
- {cause?.type === 'label' ? '⚠' : ''}
- {desc.name}
-
-
- )
- })}
+ {modui.alerts.map(alert => (
+
+ ))}
+ {modui.informs.map(inform => (
+
+ ))}
+
+ )
+}
+
+function ProfileCardPillModerationCause({
+ cause,
+ severity,
+}: {
+ cause: ModerationCause
+ severity: 'alert' | 'inform'
+}) {
+ const pal = usePalette('default')
+ const {name} = useModerationCauseDescription(cause)
+ return (
+
+
+ {severity === 'alert' ? '⚠ ' : ''}
+ {name}
+
)
}
@@ -177,7 +200,7 @@ function FollowersList({
f,
mod: moderateProfile(f, moderationOpts),
}))
- .filter(({mod}) => !mod.account.filter)
+ .filter(({mod}) => !mod.ui('profileList').filter)
}, [followers, moderationOpts])
if (!followersWithMods?.length) {
@@ -199,7 +222,12 @@ function FollowersList({
{followersWithMods.slice(0, 3).map(({f, mod}) => (
-
+
))}
@@ -212,11 +240,13 @@ export function ProfileCardWithFollowBtn({
noBg,
noBorder,
followers,
+ onPress,
}: {
profile: AppBskyActorDefs.ProfileViewBasic
noBg?: boolean
noBorder?: boolean
followers?: AppBskyActorDefs.ProfileView[] | undefined
+ onPress?: () => void
}) {
const {currentAccount} = useSession()
const isMe = profile.did === currentAccount?.did
@@ -230,8 +260,11 @@ export function ProfileCardWithFollowBtn({
renderButton={
isMe
? undefined
- : profileShadow =>
+ : profileShadow => (
+
+ )
}
+ onPress={onPress}
/>
)
}
diff --git a/src/view/com/profile/ProfileFollowers.tsx b/src/view/com/profile/ProfileFollowers.tsx
index 411ae6c176..94ca33e6e1 100644
--- a/src/view/com/profile/ProfileFollowers.tsx
+++ b/src/view/com/profile/ProfileFollowers.tsx
@@ -1,39 +1,59 @@
import React from 'react'
-import {ActivityIndicator, StyleSheet, View} from 'react-native'
import {AppBskyActorDefs as ActorDefs} from '@atproto/api'
-import {CenteredView} from '../util/Views'
-import {LoadingScreen} from '../util/LoadingScreen'
-import {List} from '../util/List'
-import {ErrorMessage} from '../util/error/ErrorMessage'
-import {ProfileCardWithFollowBtn} from './ProfileCard'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {cleanError} from '#/lib/strings/errors'
+import {logger} from '#/logger'
import {useProfileFollowersQuery} from '#/state/queries/profile-followers'
import {useResolveDidQuery} from '#/state/queries/resolve-uri'
-import {logger} from '#/logger'
-import {cleanError} from '#/lib/strings/errors'
+import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
+import {useSession} from 'state/session'
+import {
+ ListFooter,
+ ListHeaderDesktop,
+ ListMaybePlaceholder,
+} from '#/components/Lists'
+import {List} from '../util/List'
+import {ProfileCardWithFollowBtn} from './ProfileCard'
+
+function renderItem({item}: {item: ActorDefs.ProfileViewBasic}) {
+ return
+}
+
+function keyExtractor(item: ActorDefs.ProfileViewBasic) {
+ return item.did
+}
export function ProfileFollowers({name}: {name: string}) {
+ const {_} = useLingui()
+ const initialNumToRender = useInitialNumToRender()
+ const {currentAccount} = useSession()
+
const [isPTRing, setIsPTRing] = React.useState(false)
const {
data: resolvedDid,
+ isLoading: isDidLoading,
error: resolveError,
- isFetching: isFetchingDid,
} = useResolveDidQuery(name)
const {
data,
- isFetching,
- isFetched,
+ isLoading: isFollowersLoading,
isFetchingNextPage,
hasNextPage,
fetchNextPage,
- isError,
error,
refetch,
} = useProfileFollowersQuery(resolvedDid)
+ const isError = !!resolveError || !!error
+ const isMe = resolvedDid === currentAccount?.did
+
const followers = React.useMemo(() => {
if (data?.pages) {
return data.pages.flatMap(page => page.followers)
}
+ return []
}, [data])
const onRefresh = React.useCallback(async () => {
@@ -46,66 +66,53 @@ export function ProfileFollowers({name}: {name: string}) {
setIsPTRing(false)
}, [refetch, setIsPTRing])
- const onEndReached = async () => {
- if (isFetching || !hasNextPage || isError) return
+ const onEndReached = React.useCallback(async () => {
+ if (isFetchingNextPage || !hasNextPage || !!error) return
try {
await fetchNextPage()
} catch (err) {
logger.error('Failed to load more followers', {message: err})
}
- }
-
- const renderItem = React.useCallback(
- ({item}: {item: ActorDefs.ProfileViewBasic}) => (
-
- ),
- [],
- )
-
- if (isFetchingDid || !isFetched) {
- return
- }
+ }, [isFetchingNextPage, hasNextPage, error, fetchNextPage])
- // error
- // =
- if (resolveError || isError) {
+ if (followers.length < 1) {
return (
-
-
-
+
)
}
- // loaded
- // =
return (
item.did}
+ renderItem={renderItem}
+ keyExtractor={keyExtractor}
refreshing={isPTRing}
onRefresh={onRefresh}
onEndReached={onEndReached}
- renderItem={renderItem}
- initialNumToRender={15}
- // FIXME(dan)
- // eslint-disable-next-line react/no-unstable-nested-components
- ListFooterComponent={() => (
-
- {(isFetching || isFetchingNextPage) && }
-
- )}
+ onEndReachedThreshold={4}
+ ListHeaderComponent={}
+ ListFooterComponent={
+
+ }
// @ts-ignore our .web version only -prf
desktopFixedHeight
+ initialNumToRender={initialNumToRender}
+ windowSize={11}
/>
)
}
-
-const styles = StyleSheet.create({
- footer: {
- height: 200,
- paddingTop: 20,
- },
-})
diff --git a/src/view/com/profile/ProfileFollows.tsx b/src/view/com/profile/ProfileFollows.tsx
index bd4af10810..9b447c955a 100644
--- a/src/view/com/profile/ProfileFollows.tsx
+++ b/src/view/com/profile/ProfileFollows.tsx
@@ -1,39 +1,59 @@
import React from 'react'
-import {ActivityIndicator, StyleSheet, View} from 'react-native'
import {AppBskyActorDefs as ActorDefs} from '@atproto/api'
-import {CenteredView} from '../util/Views'
-import {LoadingScreen} from '../util/LoadingScreen'
-import {List} from '../util/List'
-import {ErrorMessage} from '../util/error/ErrorMessage'
-import {ProfileCardWithFollowBtn} from './ProfileCard'
+import {msg} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {cleanError} from '#/lib/strings/errors'
+import {logger} from '#/logger'
import {useProfileFollowsQuery} from '#/state/queries/profile-follows'
import {useResolveDidQuery} from '#/state/queries/resolve-uri'
-import {logger} from '#/logger'
-import {cleanError} from '#/lib/strings/errors'
+import {useInitialNumToRender} from 'lib/hooks/useInitialNumToRender'
+import {useSession} from 'state/session'
+import {
+ ListFooter,
+ ListHeaderDesktop,
+ ListMaybePlaceholder,
+} from '#/components/Lists'
+import {List} from '../util/List'
+import {ProfileCardWithFollowBtn} from './ProfileCard'
+
+function renderItem({item}: {item: ActorDefs.ProfileViewBasic}) {
+ return
+}
+
+function keyExtractor(item: ActorDefs.ProfileViewBasic) {
+ return item.did
+}
export function ProfileFollows({name}: {name: string}) {
+ const {_} = useLingui()
+ const initialNumToRender = useInitialNumToRender()
+ const {currentAccount} = useSession()
+
const [isPTRing, setIsPTRing] = React.useState(false)
const {
data: resolvedDid,
+ isLoading: isDidLoading,
error: resolveError,
- isFetching: isFetchingDid,
} = useResolveDidQuery(name)
const {
data,
- isFetching,
- isFetched,
+ isLoading: isFollowsLoading,
isFetchingNextPage,
hasNextPage,
fetchNextPage,
- isError,
error,
refetch,
} = useProfileFollowsQuery(resolvedDid)
+ const isError = !!resolveError || !!error
+ const isMe = resolvedDid === currentAccount?.did
+
const follows = React.useMemo(() => {
if (data?.pages) {
return data.pages.flatMap(page => page.follows)
}
+ return []
}, [data])
const onRefresh = React.useCallback(async () => {
@@ -46,66 +66,53 @@ export function ProfileFollows({name}: {name: string}) {
setIsPTRing(false)
}, [refetch, setIsPTRing])
- const onEndReached = async () => {
- if (isFetching || !hasNextPage || isError) return
+ const onEndReached = React.useCallback(async () => {
+ if (isFetchingNextPage || !hasNextPage || !!error) return
try {
await fetchNextPage()
} catch (err) {
logger.error('Failed to load more follows', {error: err})
}
- }
-
- const renderItem = React.useCallback(
- ({item}: {item: ActorDefs.ProfileViewBasic}) => (
-
- ),
- [],
- )
-
- if (isFetchingDid || !isFetched) {
- return
- }
+ }, [error, fetchNextPage, hasNextPage, isFetchingNextPage])
- // error
- // =
- if (resolveError || isError) {
+ if (follows.length < 1) {
return (
-
-
-
+
)
}
- // loaded
- // =
return (
item.did}
+ renderItem={renderItem}
+ keyExtractor={keyExtractor}
refreshing={isPTRing}
onRefresh={onRefresh}
onEndReached={onEndReached}
- renderItem={renderItem}
- initialNumToRender={15}
- // FIXME(dan)
- // eslint-disable-next-line react/no-unstable-nested-components
- ListFooterComponent={() => (
-
- {(isFetching || isFetchingNextPage) && }
-
- )}
+ onEndReachedThreshold={4}
+ ListHeaderComponent={}
+ ListFooterComponent={
+
+ }
// @ts-ignore our .web version only -prf
desktopFixedHeight
+ initialNumToRender={initialNumToRender}
+ windowSize={11}
/>
)
}
-
-const styles = StyleSheet.create({
- footer: {
- height: 200,
- paddingTop: 20,
- },
-})
diff --git a/src/view/com/profile/ProfileHeader.tsx b/src/view/com/profile/ProfileHeader.tsx
deleted file mode 100644
index 8fd50fad6c..0000000000
--- a/src/view/com/profile/ProfileHeader.tsx
+++ /dev/null
@@ -1,784 +0,0 @@
-import React, {memo, useMemo} from 'react'
-import {
- StyleSheet,
- TouchableOpacity,
- TouchableWithoutFeedback,
- View,
-} from 'react-native'
-import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import {useNavigation} from '@react-navigation/native'
-import {useQueryClient} from '@tanstack/react-query'
-import {
- AppBskyActorDefs,
- ModerationOpts,
- moderateProfile,
- RichText as RichTextAPI,
-} from '@atproto/api'
-import {Trans, msg} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-import {NavigationProp} from 'lib/routes/types'
-import {isNative, isWeb} from 'platform/detection'
-import {BlurView} from '../util/BlurView'
-import * as Toast from '../util/Toast'
-import {LoadingPlaceholder} from '../util/LoadingPlaceholder'
-import {Text} from '../util/text/Text'
-import {ThemedText} from '../util/text/ThemedText'
-import {RichText} from '../util/text/RichText'
-import {UserAvatar} from '../util/UserAvatar'
-import {UserBanner} from '../util/UserBanner'
-import {ProfileHeaderAlerts} from '../util/moderation/ProfileHeaderAlerts'
-import {formatCount} from '../util/numeric/format'
-import {NativeDropdown, DropdownItem} from '../util/forms/NativeDropdown'
-import {Link} from '../util/Link'
-import {ProfileHeaderSuggestedFollows} from './ProfileHeaderSuggestedFollows'
-import {useModalControls} from '#/state/modals'
-import {useLightboxControls, ProfileImageLightbox} from '#/state/lightbox'
-import {
- RQKEY as profileQueryKey,
- useProfileMuteMutationQueue,
- useProfileBlockMutationQueue,
- useProfileFollowMutationQueue,
-} from '#/state/queries/profile'
-import {usePalette} from 'lib/hooks/usePalette'
-import {useAnalytics} from 'lib/analytics/analytics'
-import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
-import {BACK_HITSLOP} from 'lib/constants'
-import {isInvalidHandle, sanitizeHandle} from 'lib/strings/handles'
-import {makeProfileLink} from 'lib/routes/links'
-import {pluralize} from 'lib/strings/helpers'
-import {toShareUrl} from 'lib/strings/url-helpers'
-import {sanitizeDisplayName} from 'lib/strings/display-names'
-import {shareUrl} from 'lib/sharing'
-import {s, colors} from 'lib/styles'
-import {logger} from '#/logger'
-import {useSession} from '#/state/session'
-import {Shadow} from '#/state/cache/types'
-import {useRequireAuth} from '#/state/session'
-import {LabelInfo} from '../util/moderation/LabelInfo'
-import {useProfileShadow} from 'state/cache/profile-shadow'
-
-let ProfileHeaderLoading = (_props: {}): React.ReactNode => {
- const pal = usePalette('default')
- return (
-
-
-
-
-
-
-
-
-
-
-
- )
-}
-ProfileHeaderLoading = memo(ProfileHeaderLoading)
-export {ProfileHeaderLoading}
-
-interface Props {
- profile: AppBskyActorDefs.ProfileViewDetailed
- descriptionRT: RichTextAPI | null
- moderationOpts: ModerationOpts
- hideBackButton?: boolean
- isPlaceholderProfile?: boolean
-}
-
-let ProfileHeader = ({
- profile: profileUnshadowed,
- descriptionRT,
- moderationOpts,
- hideBackButton = false,
- isPlaceholderProfile,
-}: Props): React.ReactNode => {
- const profile: Shadow =
- useProfileShadow(profileUnshadowed)
- const pal = usePalette('default')
- const palInverted = usePalette('inverted')
- const {currentAccount, hasSession} = useSession()
- const requireAuth = useRequireAuth()
- const {_} = useLingui()
- const {openModal} = useModalControls()
- const {openLightbox} = useLightboxControls()
- const navigation = useNavigation()
- const {track} = useAnalytics()
- const invalidHandle = isInvalidHandle(profile.handle)
- const {isDesktop} = useWebMediaQueries()
- const [showSuggestedFollows, setShowSuggestedFollows] = React.useState(false)
- const [queueFollow, queueUnfollow] = useProfileFollowMutationQueue(profile)
- const [queueMute, queueUnmute] = useProfileMuteMutationQueue(profile)
- const [queueBlock, queueUnblock] = useProfileBlockMutationQueue(profile)
- const queryClient = useQueryClient()
- const moderation = useMemo(
- () => moderateProfile(profile, moderationOpts),
- [profile, moderationOpts],
- )
-
- const invalidateProfileQuery = React.useCallback(() => {
- queryClient.invalidateQueries({
- queryKey: profileQueryKey(profile.did),
- })
- }, [queryClient, profile.did])
-
- const onPressBack = React.useCallback(() => {
- if (navigation.canGoBack()) {
- navigation.goBack()
- } else {
- navigation.navigate('Home')
- }
- }, [navigation])
-
- const onPressAvi = React.useCallback(() => {
- if (
- profile.avatar &&
- !(moderation.avatar.blur && moderation.avatar.noOverride)
- ) {
- openLightbox(new ProfileImageLightbox(profile))
- }
- }, [openLightbox, profile, moderation])
-
- const onPressFollow = () => {
- requireAuth(async () => {
- try {
- track('ProfileHeader:FollowButtonClicked')
- await queueFollow()
- Toast.show(
- _(
- msg`Following ${sanitizeDisplayName(
- profile.displayName || profile.handle,
- )}`,
- ),
- )
- } catch (e: any) {
- if (e?.name !== 'AbortError') {
- logger.error('Failed to follow', {message: String(e)})
- Toast.show(_(msg`There was an issue! ${e.toString()}`))
- }
- }
- })
- }
-
- const onPressUnfollow = () => {
- requireAuth(async () => {
- try {
- track('ProfileHeader:UnfollowButtonClicked')
- await queueUnfollow()
- Toast.show(
- _(
- msg`No longer following ${sanitizeDisplayName(
- profile.displayName || profile.handle,
- )}`,
- ),
- )
- } catch (e: any) {
- if (e?.name !== 'AbortError') {
- logger.error('Failed to unfollow', {message: String(e)})
- Toast.show(_(msg`There was an issue! ${e.toString()}`))
- }
- }
- })
- }
-
- const onPressEditProfile = React.useCallback(() => {
- track('ProfileHeader:EditProfileButtonClicked')
- openModal({
- name: 'edit-profile',
- profile,
- })
- }, [track, openModal, profile])
-
- const onPressShare = React.useCallback(() => {
- track('ProfileHeader:ShareButtonClicked')
- shareUrl(toShareUrl(makeProfileLink(profile)))
- }, [track, profile])
-
- const onPressAddRemoveLists = React.useCallback(() => {
- track('ProfileHeader:AddToListsButtonClicked')
- openModal({
- name: 'user-add-remove-lists',
- subject: profile.did,
- handle: profile.handle,
- displayName: profile.displayName || profile.handle,
- onAdd: invalidateProfileQuery,
- onRemove: invalidateProfileQuery,
- })
- }, [track, profile, openModal, invalidateProfileQuery])
-
- const onPressMuteAccount = React.useCallback(async () => {
- track('ProfileHeader:MuteAccountButtonClicked')
- try {
- await queueMute()
- Toast.show(_(msg`Account muted`))
- } catch (e: any) {
- if (e?.name !== 'AbortError') {
- logger.error('Failed to mute account', {message: e})
- Toast.show(_(msg`There was an issue! ${e.toString()}`))
- }
- }
- }, [track, queueMute, _])
-
- const onPressUnmuteAccount = React.useCallback(async () => {
- track('ProfileHeader:UnmuteAccountButtonClicked')
- try {
- await queueUnmute()
- Toast.show(_(msg`Account unmuted`))
- } catch (e: any) {
- if (e?.name !== 'AbortError') {
- logger.error('Failed to unmute account', {message: e})
- Toast.show(_(msg`There was an issue! ${e.toString()}`))
- }
- }
- }, [track, queueUnmute, _])
-
- const onPressBlockAccount = React.useCallback(async () => {
- track('ProfileHeader:BlockAccountButtonClicked')
- openModal({
- name: 'confirm',
- title: _(msg`Block Account`),
- message: _(
- msg`Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you.`,
- ),
- onPressConfirm: async () => {
- try {
- await queueBlock()
- Toast.show(_(msg`Account blocked`))
- } catch (e: any) {
- if (e?.name !== 'AbortError') {
- logger.error('Failed to block account', {message: e})
- Toast.show(_(msg`There was an issue! ${e.toString()}`))
- }
- }
- },
- })
- }, [track, queueBlock, openModal, _])
-
- const onPressUnblockAccount = React.useCallback(async () => {
- track('ProfileHeader:UnblockAccountButtonClicked')
- openModal({
- name: 'confirm',
- title: _(msg`Unblock Account`),
- message: _(
- msg`The account will be able to interact with you after unblocking.`,
- ),
- onPressConfirm: async () => {
- try {
- await queueUnblock()
- Toast.show(_(msg`Account unblocked`))
- } catch (e: any) {
- if (e?.name !== 'AbortError') {
- logger.error('Failed to unblock account', {message: e})
- Toast.show(_(msg`There was an issue! ${e.toString()}`))
- }
- }
- },
- })
- }, [track, queueUnblock, openModal, _])
-
- const onPressReportAccount = React.useCallback(() => {
- track('ProfileHeader:ReportAccountButtonClicked')
- openModal({
- name: 'report',
- did: profile.did,
- })
- }, [track, openModal, profile])
-
- const isMe = React.useMemo(
- () => currentAccount?.did === profile.did,
- [currentAccount, profile],
- )
- const dropdownItems: DropdownItem[] = React.useMemo(() => {
- let items: DropdownItem[] = [
- {
- testID: 'profileHeaderDropdownShareBtn',
- label: isWeb ? _(msg`Copy link to profile`) : _(msg`Share`),
- onPress: onPressShare,
- icon: {
- ios: {
- name: 'square.and.arrow.up',
- },
- android: 'ic_menu_share',
- web: 'share',
- },
- },
- ]
- if (hasSession) {
- items.push({label: 'separator'})
- items.push({
- testID: 'profileHeaderDropdownListAddRemoveBtn',
- label: _(msg`Add to Lists`),
- onPress: onPressAddRemoveLists,
- icon: {
- ios: {
- name: 'list.bullet',
- },
- android: 'ic_menu_add',
- web: 'list',
- },
- })
- if (!isMe) {
- if (!profile.viewer?.blocking) {
- if (!profile.viewer?.mutedByList) {
- items.push({
- testID: 'profileHeaderDropdownMuteBtn',
- label: profile.viewer?.muted
- ? _(msg`Unmute Account`)
- : _(msg`Mute Account`),
- onPress: profile.viewer?.muted
- ? onPressUnmuteAccount
- : onPressMuteAccount,
- icon: {
- ios: {
- name: 'speaker.slash',
- },
- android: 'ic_lock_silent_mode',
- web: 'comment-slash',
- },
- })
- }
- }
- if (!profile.viewer?.blockingByList) {
- items.push({
- testID: 'profileHeaderDropdownBlockBtn',
- label: profile.viewer?.blocking
- ? _(msg`Unblock Account`)
- : _(msg`Block Account`),
- onPress: profile.viewer?.blocking
- ? onPressUnblockAccount
- : onPressBlockAccount,
- icon: {
- ios: {
- name: 'person.fill.xmark',
- },
- android: 'ic_menu_close_clear_cancel',
- web: 'user-slash',
- },
- })
- }
- items.push({
- testID: 'profileHeaderDropdownReportBtn',
- label: _(msg`Report Account`),
- onPress: onPressReportAccount,
- icon: {
- ios: {
- name: 'exclamationmark.triangle',
- },
- android: 'ic_menu_report_image',
- web: 'circle-exclamation',
- },
- })
- }
- }
- return items
- }, [
- isMe,
- hasSession,
- profile.viewer?.muted,
- profile.viewer?.mutedByList,
- profile.viewer?.blocking,
- profile.viewer?.blockingByList,
- onPressShare,
- onPressUnmuteAccount,
- onPressMuteAccount,
- onPressUnblockAccount,
- onPressBlockAccount,
- onPressReportAccount,
- onPressAddRemoveLists,
- _,
- ])
-
- const blockHide =
- !isMe && (profile.viewer?.blocking || profile.viewer?.blockedBy)
- const following = formatCount(profile.followsCount || 0)
- const followers = formatCount(profile.followersCount || 0)
- const pluralizedFollowers = pluralize(profile.followersCount || 0, 'follower')
-
- return (
-
-
- {isPlaceholderProfile ? (
-
- ) : (
-
- )}
-
-
-
- {isMe ? (
-
-
- Edit Profile
-
-
- ) : profile.viewer?.blocking ? (
- profile.viewer?.blockingByList ? null : (
-
-
- Unblock
-
-
- )
- ) : !profile.viewer?.blockedBy ? (
- <>
- {hasSession && (
- setShowSuggestedFollows(!showSuggestedFollows)}
- style={[
- styles.btn,
- styles.mainBtn,
- pal.btn,
- {
- paddingHorizontal: 10,
- backgroundColor: showSuggestedFollows
- ? pal.colors.text
- : pal.colors.backgroundLight,
- },
- ]}
- accessibilityRole="button"
- accessibilityLabel={_(
- msg`Show follows similar to ${profile.handle}`,
- )}
- accessibilityHint={_(
- msg`Shows a list of users similar to this user.`,
- )}>
-
-
- )}
-
- {profile.viewer?.following ? (
-
-
-
- Following
-
-
- ) : (
-
-
-
- Follow
-
-
- )}
- >
- ) : null}
- {dropdownItems?.length ? (
-
-
-
-
-
- ) : undefined}
-
-
-
- {sanitizeDisplayName(
- profile.displayName || sanitizeHandle(profile.handle),
- moderation.profile,
- )}
-
-
-
- {profile.viewer?.followedBy && !blockHide ? (
-
-
- Follows you
-
-
- ) : undefined}
-
- {invalidHandle ? _(msg`⚠Invalid Handle`) : `@${profile.handle}`}
-
-
- {!isPlaceholderProfile && !blockHide && (
- <>
-
-
- track(`ProfileHeader:FollowersButtonClicked`, {
- handle: profile.handle,
- })
- }
- asAnchor
- accessibilityLabel={`${followers} ${pluralizedFollowers}`}
- accessibilityHint={_(msg`Opens followers list`)}>
-
- {followers}{' '}
-
-
- {pluralizedFollowers}
-
-
-
- track(`ProfileHeader:FollowsButtonClicked`, {
- handle: profile.handle,
- })
- }
- asAnchor
- accessibilityLabel={_(msg`${following} following`)}
- accessibilityHint={_(msg`Opens following list`)}>
-
-
- {following}{' '}
-
-
- following
-
-
-
-
- {formatCount(profile.postsCount || 0)}{' '}
-
- {pluralize(profile.postsCount || 0, 'post')}
-
-
-
- {descriptionRT && !moderation.profile.blur ? (
-
-
-
- ) : undefined}
- >
- )}
-
- {isMe && (
-
- )}
-
-
- {showSuggestedFollows && (
- {
- if (showSuggestedFollows) {
- setShowSuggestedFollows(false)
- } else {
- track('ProfileHeader:SuggestedFollowsOpened')
- setShowSuggestedFollows(true)
- }
- }}
- />
- )}
-
- {!isDesktop && !hideBackButton && (
-
-
-
-
-
-
-
- )}
-
-
-
-
-
-
- )
-}
-ProfileHeader = memo(ProfileHeader)
-export {ProfileHeader}
-
-const styles = StyleSheet.create({
- banner: {
- width: '100%',
- height: 120,
- },
- backBtnWrapper: {
- position: 'absolute',
- top: 10,
- left: 10,
- width: 30,
- height: 30,
- overflow: 'hidden',
- borderRadius: 15,
- // @ts-ignore web only
- cursor: 'pointer',
- },
- backBtn: {
- width: 30,
- height: 30,
- borderRadius: 15,
- alignItems: 'center',
- justifyContent: 'center',
- },
- avi: {
- position: 'absolute',
- top: 110,
- left: 10,
- width: 84,
- height: 84,
- borderRadius: 42,
- borderWidth: 2,
- },
- content: {
- paddingTop: 8,
- paddingHorizontal: 14,
- paddingBottom: 4,
- },
-
- buttonsLine: {
- flexDirection: 'row',
- marginLeft: 'auto',
- marginBottom: 12,
- },
- primaryBtn: {
- backgroundColor: colors.blue3,
- paddingHorizontal: 24,
- paddingVertical: 6,
- },
- mainBtn: {
- paddingHorizontal: 24,
- },
- secondaryBtn: {
- paddingHorizontal: 14,
- },
- btn: {
- flexDirection: 'row',
- alignItems: 'center',
- justifyContent: 'center',
- paddingVertical: 7,
- borderRadius: 50,
- marginLeft: 6,
- },
- title: {lineHeight: 38},
-
- // Word wrapping appears fine on
- // mobile but overflows on desktop
- handle: isNative
- ? {}
- : {
- // @ts-ignore web only -prf
- wordBreak: 'break-all',
- },
- invalidHandle: {
- borderWidth: 1,
- borderRadius: 4,
- paddingHorizontal: 4,
- },
-
- handleLine: {
- flexDirection: 'row',
- marginBottom: 8,
- },
-
- metricsLine: {
- flexDirection: 'row',
- marginBottom: 8,
- },
-
- description: {
- marginBottom: 8,
- },
-
- detailLine: {
- flexDirection: 'row',
- alignItems: 'center',
- marginBottom: 5,
- },
-
- pill: {
- borderRadius: 4,
- paddingHorizontal: 6,
- paddingVertical: 2,
- },
-
- br40: {borderRadius: 40},
- br50: {borderRadius: 50},
-})
diff --git a/src/view/com/profile/ProfileHeaderSuggestedFollows.tsx b/src/view/com/profile/ProfileHeaderSuggestedFollows.tsx
index 6edc61fcf8..24de63cd44 100644
--- a/src/view/com/profile/ProfileHeaderSuggestedFollows.tsx
+++ b/src/view/com/profile/ProfileHeaderSuggestedFollows.tsx
@@ -1,27 +1,28 @@
import React from 'react'
-import {View, StyleSheet, Pressable, ScrollView} from 'react-native'
+import {Pressable, ScrollView, StyleSheet, View} from 'react-native'
import {AppBskyActorDefs, moderateProfile} from '@atproto/api'
import {
FontAwesomeIcon,
FontAwesomeIconStyle,
} from '@fortawesome/react-native-fontawesome'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
-import * as Toast from '../util/Toast'
+import {useProfileShadow} from '#/state/cache/profile-shadow'
+import {useModerationOpts} from '#/state/queries/preferences'
+import {useProfileFollowMutationQueue} from '#/state/queries/profile'
+import {useSuggestedFollowsByActorQuery} from '#/state/queries/suggested-follows'
+import {useAnalytics} from 'lib/analytics/analytics'
import {usePalette} from 'lib/hooks/usePalette'
-import {Text} from 'view/com/util/text/Text'
-import {UserAvatar} from 'view/com/util/UserAvatar'
-import {Button} from 'view/com/util/forms/Button'
+import {makeProfileLink} from 'lib/routes/links'
import {sanitizeDisplayName} from 'lib/strings/display-names'
import {sanitizeHandle} from 'lib/strings/handles'
-import {makeProfileLink} from 'lib/routes/links'
-import {Link} from 'view/com/util/Link'
-import {useAnalytics} from 'lib/analytics/analytics'
import {isWeb} from 'platform/detection'
-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 {Button} from 'view/com/util/forms/Button'
+import {Link} from 'view/com/util/Link'
+import {Text} from 'view/com/util/text/Text'
+import {UserAvatar} from 'view/com/util/UserAvatar'
+import * as Toast from '../util/Toast'
const OUTER_PADDING = 10
const INNER_PADDING = 14
@@ -98,9 +99,11 @@ export function ProfileHeaderSuggestedFollows({
>
) : data ? (
- data.suggestions.map(profile => (
-
- ))
+ data.suggestions
+ .filter(s => (s.associated?.labeler ? false : true))
+ .map(profile => (
+
+ ))
) : (
)}
@@ -168,9 +171,13 @@ function SuggestedFollow({
}) {
const {track} = useAnalytics()
const pal = usePalette('default')
+ const {_} = useLingui()
const moderationOpts = useModerationOpts()
const profile = useProfileShadow(profileUnshadowed)
- const [queueFollow, queueUnfollow] = useProfileFollowMutationQueue(profile)
+ const [queueFollow, queueUnfollow] = useProfileFollowMutationQueue(
+ profile,
+ 'ProfileHeaderSuggestedFollows',
+ )
const onPressFollow = React.useCallback(async () => {
try {
@@ -178,20 +185,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
@@ -214,7 +221,7 @@ function SuggestedFollow({
@@ -224,7 +231,7 @@ function SuggestedFollow({
numberOfLines={1}>
{sanitizeDisplayName(
profile.displayName || sanitizeHandle(profile.handle),
- moderation.profile,
+ moderation.ui('displayName'),
)}
- )
- }
- return null
-}
-
-const styles = StyleSheet.create({
- container: {
- position: 'absolute',
- top: 6,
- right: 10,
- },
- text: {
- fontWeight: 'bold',
- opacity: 0.07,
- },
-})
diff --git a/src/view/com/util/UserAvatar.tsx b/src/view/com/util/UserAvatar.tsx
index f673db1ee1..34e0c6b880 100644
--- a/src/view/com/util/UserAvatar.tsx
+++ b/src/view/com/util/UserAvatar.tsx
@@ -1,24 +1,32 @@
import React, {memo, useMemo} from 'react'
-import {Image, StyleSheet, View} from 'react-native'
-import Svg, {Circle, Rect, Path} from 'react-native-svg'
-import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
-import {HighPriorityImage} from 'view/com/util/images/Image'
+import {Image, StyleSheet, TouchableOpacity, View} from 'react-native'
+import {Image as RNImage} from 'react-native-image-crop-picker'
+import Svg, {Circle, Path, Rect} from 'react-native-svg'
import {ModerationUI} from '@atproto/api'
-import {openCamera, openCropper, openPicker} from '../../../lib/media/picker'
+import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+import {msg, Trans} from '@lingui/macro'
+import {useLingui} from '@lingui/react'
+
+import {usePalette} from 'lib/hooks/usePalette'
import {
- usePhotoLibraryPermission,
useCameraPermission,
+ usePhotoLibraryPermission,
} from 'lib/hooks/usePermissions'
import {colors} from 'lib/styles'
-import {usePalette} from 'lib/hooks/usePalette'
-import {isWeb, isAndroid} from 'platform/detection'
-import {Image as RNImage} from 'react-native-image-crop-picker'
+import {isAndroid, isNative, isWeb} from 'platform/detection'
+import {HighPriorityImage} from 'view/com/util/images/Image'
+import {tokens, useTheme} from '#/alf'
+import {
+ Camera_Filled_Stroke2_Corner0_Rounded as CameraFilled,
+ Camera_Stroke2_Corner0_Rounded as Camera,
+} from '#/components/icons/Camera'
+import {StreamingLive_Stroke2_Corner0_Rounded as Library} from '#/components/icons/StreamingLive'
+import {Trash_Stroke2_Corner0_Rounded as Trash} from '#/components/icons/Trash'
+import * as Menu from '#/components/Menu'
+import {openCamera, openCropper, openPicker} from '../../../lib/media/picker'
import {UserPreviewLink} from './UserPreviewLink'
-import {DropdownItem, NativeDropdown} from './forms/NativeDropdown'
-import {useLingui} from '@lingui/react'
-import {msg} from '@lingui/macro'
-export type UserAvatarType = 'user' | 'algo' | 'list'
+export type UserAvatarType = 'user' | 'algo' | 'list' | 'labeler'
interface BaseUserAvatarProps {
type?: UserAvatarType
@@ -93,6 +101,33 @@ let DefaultAvatar = ({
)
}
+ if (type === 'labeler') {
+ return (
+
+ )
+ }
return (