+
)
}
diff --git a/src/components/Typography.tsx b/src/components/Typography.tsx
index 64aa6d1a4f..b34f51018e 100644
--- a/src/components/Typography.tsx
+++ b/src/components/Typography.tsx
@@ -15,7 +15,7 @@ export function leading<
>(textSize: Size, leading: Leading) {
const size = textSize?.fontSize || atoms.text_md.fontSize
const lineHeight = leading?.lineHeight || atoms.leading_normal.lineHeight
- return size * lineHeight
+ return Math.round(size * lineHeight)
}
/**
@@ -32,7 +32,7 @@ function normalizeTextStyles(styles: TextStyle[]) {
if (s?.lineHeight) {
if (s.lineHeight <= 2) {
- s.lineHeight = fontSize * s.lineHeight
+ s.lineHeight = Math.round(fontSize * s.lineHeight)
}
} else {
s.lineHeight = fontSize
@@ -41,138 +41,42 @@ function normalizeTextStyles(styles: TextStyle[]) {
return s
}
+/**
+ * Our main text component. Use this most of the time.
+ */
export function Text({style, ...rest}: TextProps) {
const t = useTheme()
const s = normalizeTextStyles([atoms.text_sm, t.atoms.text, flatten(style)])
return
}
-export function H1({style, ...rest}: TextProps) {
- const t = useTheme()
- const attr =
- web({
- role: 'heading',
- 'aria-level': 1,
- }) || {}
- return (
-
- )
-}
-
-export function H2({style, ...rest}: TextProps) {
- const t = useTheme()
- const attr =
- web({
- role: 'heading',
- 'aria-level': 2,
- }) || {}
- return (
-
- )
-}
-
-export function H3({style, ...rest}: TextProps) {
- const t = useTheme()
- const attr =
- web({
- role: 'heading',
- 'aria-level': 3,
- }) || {}
- return (
-
- )
-}
-
-export function H4({style, ...rest}: TextProps) {
- const t = useTheme()
- const attr =
- web({
- role: 'heading',
- 'aria-level': 4,
- }) || {}
- return (
-
- )
-}
-
-export function H5({style, ...rest}: TextProps) {
- const t = useTheme()
- const attr =
- web({
- role: 'heading',
- 'aria-level': 5,
- }) || {}
- return (
-
- )
-}
-
-export function H6({style, ...rest}: TextProps) {
- const t = useTheme()
- const attr =
- web({
- role: 'heading',
- 'aria-level': 6,
- }) || {}
- 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 (
+
+ )
+ }
}
+/*
+ * Use semantic components when it's beneficial to the user or to a web scraper
+ */
+export const H1 = createHeadingElement({level: 1})
+export const H2 = createHeadingElement({level: 2})
+export const H3 = createHeadingElement({level: 3})
+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 =
diff --git a/src/components/forms/TextField.tsx b/src/components/forms/TextField.tsx
index e98c5ed9dd..3b6a8e879c 100644
--- a/src/components/forms/TextField.tsx
+++ b/src/components/forms/TextField.tsx
@@ -241,10 +241,15 @@ export function createInput(Component: typeof TextInput) {
export const Input = createInput(TextInput)
-export function Label({children}: React.PropsWithChildren<{}>) {
+export function Label({
+ nativeID,
+ children,
+}: React.PropsWithChildren<{nativeID?: string}>) {
const t = useTheme()
return (
-
+
{children}
)
@@ -318,7 +323,7 @@ export function Suffix({
a.z_20,
a.pr_sm,
a.text_md,
- t.atoms.text_contrast_400,
+ t.atoms.text_contrast_medium,
{
pointerEvents: 'none',
},
diff --git a/src/components/forms/Toggle.tsx b/src/components/forms/Toggle.tsx
index d3c0342467..9369423f20 100644
--- a/src/components/forms/Toggle.tsx
+++ b/src/components/forms/Toggle.tsx
@@ -347,7 +347,7 @@ export function Checkbox() {
a.align_center,
a.border,
a.rounded_xs,
- t.atoms.border_contrast,
+ t.atoms.border_contrast_high,
{
height: 20,
width: 20,
@@ -393,7 +393,7 @@ export function Switch() {
a.border,
a.rounded_full,
t.atoms.bg,
- t.atoms.border_contrast,
+ t.atoms.border_contrast_high,
{
height: 20,
width: 30,
@@ -445,7 +445,7 @@ export function Radio() {
a.align_center,
a.border,
a.rounded_full,
- t.atoms.border_contrast,
+ t.atoms.border_contrast_high,
{
height: 20,
width: 20,
diff --git a/src/components/forms/ToggleButton.tsx b/src/components/forms/ToggleButton.tsx
index 5cd51d794a..7e1bd70b99 100644
--- a/src/components/forms/ToggleButton.tsx
+++ b/src/components/forms/ToggleButton.tsx
@@ -8,7 +8,7 @@ import * as Toggle from '#/components/forms/Toggle'
export type ItemProps = Omit &
AccessibilityProps &
- React.PropsWithChildren<{}>
+ React.PropsWithChildren<{testID?: string}>
export type GroupProps = Omit & {
multiple?: boolean
@@ -25,7 +25,7 @@ export function Group({children, multiple, ...props}: GroupProps) {
a.border,
a.rounded_sm,
a.overflow_hidden,
- t.atoms.border,
+ t.atoms.border_contrast_low,
]}>
{children}
@@ -103,7 +103,7 @@ function ButtonInner({children}: React.PropsWithChildren<{}>) {
}),
a.px_sm,
t.atoms.bg,
- t.atoms.border,
+ t.atoms.border_contrast_low,
baseStyles,
activeStyles,
(state.hovered || state.focused || state.pressed) && hoverStyles,
@@ -113,7 +113,7 @@ function ButtonInner({children}: React.PropsWithChildren<{}>) {
style={[
a.text_center,
a.font_bold,
- t.atoms.text_contrast_500,
+ t.atoms.text_contrast_medium,
textStyles,
]}>
{children}
diff --git a/src/components/icons/ArrowOutOfBox.tsx b/src/components/icons/ArrowOutOfBox.tsx
new file mode 100644
index 0000000000..8b395016bd
--- /dev/null
+++ b/src/components/icons/ArrowOutOfBox.tsx
@@ -0,0 +1,5 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const ArrowOutOfBox_Stroke2_Corner0_Rounded = createSinglePathSVG({
+ path: 'M12.707 3.293a1 1 0 0 0-1.414 0l-4.5 4.5a1 1 0 0 0 1.414 1.414L11 6.414v8.836a1 1 0 1 0 2 0V6.414l2.793 2.793a1 1 0 1 0 1.414-1.414l-4.5-4.5ZM5 12.75a1 1 0 1 0-2 0V20a1 1 0 0 0 1 1h16a1 1 0 0 0 1-1v-7.25a1 1 0 1 0-2 0V19H5v-6.25Z',
+})
diff --git a/src/lib/country-codes.ts b/src/lib/country-codes.ts
index ae01528764..9c9da84cff 100644
--- a/src/lib/country-codes.ts
+++ b/src/lib/country-codes.ts
@@ -219,7 +219,7 @@ export const COUNTRY_CODES: CountryCodeMap[] = [
{code2: 'SE', name: 'Sweden (+46)'},
{code2: 'CH', name: 'Switzerland (+41)'},
{code2: 'SY', name: 'Syrian Arab Republic (+963)'},
- {code2: 'TW', name: 'Taiwan, Province of China (+886)'},
+ {code2: 'TW', name: 'Taiwan (+886)'},
{code2: 'TJ', name: 'Tajikistan (+992)'},
{code2: 'TZ', name: 'Tanzania, United Republic of (+255)'},
{code2: 'TH', name: 'Thailand (+66)'},
diff --git a/src/lib/styles.ts b/src/lib/styles.ts
index df9b49260b..263127440f 100644
--- a/src/lib/styles.ts
+++ b/src/lib/styles.ts
@@ -236,7 +236,7 @@ export function lh(
height: number,
): TextStyle {
return {
- lineHeight: (theme.typography[type].fontSize || 16) * height,
+ lineHeight: Math.round((theme.typography[type].fontSize || 16) * height),
}
}
diff --git a/src/locale/locales/de/messages.po b/src/locale/locales/de/messages.po
index f7eae089a1..f5bae98a93 100644
--- a/src/locale/locales/de/messages.po
+++ b/src/locale/locales/de/messages.po
@@ -2445,7 +2445,7 @@ msgstr "Hinweis: Bluesky ist ein offenes und öffentliches Netzwerk. Diese Einst
#: src/view/shell/Drawer.tsx:438
#: src/view/shell/Drawer.tsx:439
msgid "Notifications"
-msgstr "Benachrichtigungen"
+msgstr "Mitteilungen"
#: src/view/com/modals/SelfLabel.tsx:103
msgid "Nudity"
diff --git a/src/locale/locales/ja/messages.po b/src/locale/locales/ja/messages.po
index 8e93d9c0df..4637b9eaf7 100644
--- a/src/locale/locales/ja/messages.po
+++ b/src/locale/locales/ja/messages.po
@@ -9,8 +9,8 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-01-30 19:00+0900\n"
-"Last-Translator: dolciss\n"
-"Language-Team: Hima-Zinn, tkusano, dolciss, oboenikui, noritada\n"
+"Last-Translator: Hima-Zinn\n"
+"Language-Team: Hima-Zinn, tkusano, dolciss, oboenikui, noritada, middlingphys\n"
"Plural-Forms: \n"
#: src/view/com/modals/VerifyEmail.tsx:142
@@ -242,7 +242,7 @@ msgstr "高度な設定"
#: src/view/com/auth/login/ForgotPasswordForm.tsx:217
#: src/view/com/modals/ChangePassword.tsx:168
msgid "Already have a code?"
-msgstr ""
+msgstr "コードをすでに持っていますか?"
#: src/view/com/auth/login/ChooseAccountForm.tsx:98
msgid "Already signed in as @{0}"
@@ -280,7 +280,7 @@ msgstr "および"
#: src/screens/Onboarding/index.tsx:32
msgid "Animals"
-msgstr ""
+msgstr "動物"
#: src/view/screens/LanguageSettings.tsx:95
msgid "App Language"
@@ -334,7 +334,7 @@ msgstr "この判断に異議を申し立てる"
#: src/view/screens/Settings.tsx:460
msgid "Appearance"
-msgstr "外観"
+msgstr "背景"
#: src/view/screens/AppPasswords.tsx:224
msgid "Are you sure you want to delete the app password \"{name}\"?"
@@ -358,7 +358,7 @@ 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."
@@ -476,7 +476,7 @@ 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にお申し込みいただくと招待状をお送りします。"
+msgstr "Blueskyはより健全なコミュニティーを構築するために招待状を使用します。招待状をお持ちでない場合、Waitlistにお申し込みいただくと招待状をお送りします。"
#: src/view/screens/Moderation.tsx:226
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."
@@ -488,7 +488,7 @@ msgstr "Bluesky.Social"
#: src/screens/Onboarding/index.tsx:33
msgid "Books"
-msgstr ""
+msgstr "書籍"
#: src/view/screens/Settings.tsx:841
msgid "Build version {0} {1}"
@@ -616,11 +616,11 @@ msgstr "メールアドレスを変更"
#: src/view/screens/Settings.tsx:726
msgid "Change password"
-msgstr ""
+msgstr "パスワードを変更"
#: src/view/screens/Settings.tsx:735
msgid "Change Password"
-msgstr ""
+msgstr "パスワードを変更"
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:73
msgid "Change post language to {0}"
@@ -628,7 +628,7 @@ msgstr "投稿の言語を{0}に変更します"
#: src/view/screens/Settings.tsx:727
msgid "Change your Bluesky password"
-msgstr ""
+msgstr "Blueskyのパスワードを変更"
#: src/view/com/modals/ChangeEmail.tsx:109
msgid "Change Your Email"
@@ -682,7 +682,7 @@ msgstr "メインのフィードを選択"
#: src/view/com/auth/create/Step1.tsx:163
msgid "Choose your password"
-msgstr "パスワードを選択"
+msgstr "パスワードを入力"
#: src/view/screens/Settings.tsx:816
#: src/view/screens/Settings.tsx:817
@@ -713,12 +713,12 @@ msgstr "こちらをクリック"
#: src/screens/Onboarding/index.tsx:35
msgid "Climate"
-msgstr ""
+msgstr "気象"
#: src/view/com/modals/ChangePassword.tsx:265
#: src/view/com/modals/ChangePassword.tsx:268
msgid "Close"
-msgstr ""
+msgstr "閉じる"
#: src/components/Dialog/index.web.tsx:78
msgid "Close active dialog"
@@ -766,16 +766,16 @@ msgstr "指定した通知のユーザーリストを折りたたむ"
#: src/screens/Onboarding/index.tsx:41
msgid "Comedy"
-msgstr ""
+msgstr "コメディー"
#: src/screens/Onboarding/index.tsx:27
msgid "Comics"
-msgstr ""
+msgstr "漫画"
#: src/Navigation.tsx:228
#: src/view/screens/CommunityGuidelines.tsx:32
msgid "Community Guidelines"
-msgstr "コミュニティガイドライン"
+msgstr "コミュニティーガイドライン"
#: src/screens/Onboarding/StepFinished.tsx:148
msgid "Complete onboarding and start using your account"
@@ -898,7 +898,7 @@ 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
@@ -997,7 +997,7 @@ msgstr "サムネイル付きのカードを作成します。そのカードは
#: src/screens/Onboarding/index.tsx:29
msgid "Culture"
-msgstr ""
+msgstr "文化"
#: src/view/com/modals/ChangeHandle.tsx:389
#: src/view/com/modals/ServerInput.tsx:102
@@ -1006,7 +1006,7 @@ msgstr "カスタムドメイン"
#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
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."
@@ -1027,7 +1027,7 @@ msgstr "ダークモード"
#: src/view/screens/Settings.tsx:492
msgid "Dark Theme"
-msgstr ""
+msgstr "ダークテーマ"
#: src/Navigation.tsx:204
#~ msgid "Debug"
@@ -1065,7 +1065,7 @@ msgstr "マイアカウントを削除"
#: src/view/screens/Settings.tsx:755
msgid "Delete My Account…"
-msgstr ""
+msgstr "マイアカウントを削除…"
#: src/view/com/util/forms/PostDropdownBtn.tsx:228
msgid "Delete post"
@@ -1104,7 +1104,7 @@ msgstr "なにか言いたいことはあった?"
#: src/view/screens/Settings.tsx:498
msgid "Dim"
-msgstr ""
+msgstr "グレー"
#: src/view/com/composer/Composer.tsx:144
msgid "Discard"
@@ -1210,7 +1210,7 @@ msgstr "例:返信として広告を繰り返し送ってくるユーザー。
#: src/view/com/modals/InviteCodes.tsx:96
msgid "Each code works once. You'll receive more invite codes periodically."
-msgstr "それぞれのコードは一度ずつ動作します。定期的に招待コードをお送りします。"
+msgstr "それぞれのコードは一回限り有効です。定期的に追加の招待コードをお送りします。"
#: src/view/com/lists/ListMembers.tsx:149
msgctxt "action"
@@ -1266,7 +1266,7 @@ msgstr "あなたのプロフィールの説明を編集します"
#: src/screens/Onboarding/index.tsx:34
msgid "Education"
-msgstr ""
+msgstr "教育"
#: src/view/com/auth/create/Step1.tsx:143
#: src/view/com/auth/create/Step2.tsx:194
@@ -1342,7 +1342,7 @@ msgstr "確認コードを入力してください"
#: src/view/com/modals/ChangePassword.tsx:151
msgid "Enter the code you received to change your password."
-msgstr ""
+msgstr "パスワードを変更するために受け取ったコードを入力してください。"
#: src/view/com/modals/ChangeHandle.tsx:371
msgid "Enter the domain you want to use"
@@ -1535,7 +1535,7 @@ msgstr "ディスカッションスレッドを微調整します。"
#: src/screens/Onboarding/index.tsx:38
msgid "Fitness"
-msgstr ""
+msgstr "フィットネス"
#: src/screens/Onboarding/StepFinished.tsx:131
msgid "Flexible"
@@ -1623,7 +1623,7 @@ msgstr "あなたをフォロー"
#: src/screens/Onboarding/index.tsx:43
msgid "Food"
-msgstr ""
+msgstr "食べ物"
#: src/view/com/modals/DeleteAccount.tsx:111
msgid "For security reasons, we'll need to send a confirmation code to your email address."
@@ -1658,7 +1658,7 @@ msgstr "ギャラリー"
#: src/view/com/modals/VerifyEmail.tsx:189
#: src/view/com/modals/VerifyEmail.tsx:191
msgid "Get Started"
-msgstr "はじめに"
+msgstr "開始"
#: src/view/com/auth/LoggedOut.tsx:81
#: src/view/com/auth/LoggedOut.tsx:82
@@ -1825,11 +1825,11 @@ 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
msgid "If you want to change your password, we will send you a code to verify that this is your account."
-msgstr ""
+msgstr "パスワードを変更する場合は、あなたのアカウントであることを確認するためのコードをお送りします。"
#: src/view/com/util/images/Gallery.tsx:38
msgid "Image"
@@ -1969,7 +1969,7 @@ msgstr "Waitlistに参加"
#: src/screens/Onboarding/index.tsx:24
msgid "Journalism"
-msgstr ""
+msgstr "報道"
#: src/view/com/composer/select-language/SelectLangBtn.tsx:104
msgid "Language selection"
@@ -2272,7 +2272,7 @@ msgstr "モデレーションの設定"
#: src/view/com/modals/ModerationDetails.tsx:35
msgid "Moderator has chosen to set a general warning on the content."
-msgstr "モデレーターはその投稿に一般的な警告の設定を選択しました。"
+msgstr "モデレーターによりコンテンツに一般的な警告が設定されました。"
#: src/view/shell/desktop/Feeds.tsx:53
msgid "More feeds"
@@ -2364,7 +2364,7 @@ msgstr "名前は必須です"
#: src/screens/Onboarding/index.tsx:25
msgid "Nature"
-msgstr ""
+msgstr "自然"
#: src/view/com/auth/login/ForgotPasswordForm.tsx:186
#: src/view/com/auth/login/ForgotPasswordForm.tsx:215
@@ -2411,7 +2411,7 @@ msgstr "新しいパスワード"
#: src/view/com/modals/ChangePassword.tsx:215
msgid "New Password"
-msgstr ""
+msgstr "新しいパスワード"
#: src/view/com/feeds/FeedPage.tsx:201
msgctxt "action"
@@ -2446,7 +2446,7 @@ msgstr "新しい順に返信を表示"
#: src/screens/Onboarding/index.tsx:23
msgid "News"
-msgstr ""
+msgstr "ニュース"
#: src/view/com/auth/create/CreateAccount.tsx:161
#: src/view/com/auth/login/ForgotPasswordForm.tsx:178
@@ -2525,7 +2525,7 @@ 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."
@@ -2768,7 +2768,7 @@ msgstr "カメラへのアクセスが拒否されました。システムの設
#: src/screens/Onboarding/index.tsx:31
msgid "Pets"
-msgstr ""
+msgstr "ペット"
#: src/view/com/auth/create/Step2.tsx:183
msgid "Phone number"
@@ -2776,7 +2776,7 @@ msgstr "電話番号"
#: src/view/com/modals/SelfLabel.tsx:121
msgid "Pictures meant for adults."
-msgstr "成人向けの写真です。"
+msgstr "成人向けの画像です。"
#: src/view/screens/ProfileFeed.tsx:353
#: src/view/screens/ProfileList.tsx:580
@@ -2860,7 +2860,7 @@ msgstr "リンクカードがロードされるまでお待ちください"
#: src/screens/Onboarding/index.tsx:37
msgid "Politics"
-msgstr ""
+msgstr "政治"
#: src/view/com/modals/SelfLabel.tsx:111
msgid "Porn"
@@ -3187,7 +3187,7 @@ msgstr "コードをリクエスト"
#: src/view/com/modals/ChangePassword.tsx:239
#: src/view/com/modals/ChangePassword.tsx:241
msgid "Request Code"
-msgstr ""
+msgstr "コードをリクエスト"
#: src/view/screens/Settings.tsx:450
msgid "Require alt text before posting"
@@ -3204,7 +3204,7 @@ msgstr "コードをリセット"
#: src/view/com/modals/ChangePassword.tsx:190
msgid "Reset Code"
-msgstr ""
+msgstr "コードをリセット"
#: src/view/screens/Settings.tsx:806
msgid "Reset onboarding"
@@ -3312,7 +3312,7 @@ msgstr "{handle}へのハンドルの変更を保存"
#: src/screens/Onboarding/index.tsx:36
msgid "Science"
-msgstr ""
+msgstr "科学"
#: src/view/screens/ProfileList.tsx:854
msgid "Scroll to top"
@@ -3470,7 +3470,7 @@ msgstr "年齢を設定"
#: src/view/screens/Settings.tsx:482
msgid "Set color theme to dark"
-msgstr "カラーテーマをダークに設定します"
+msgstr "カラーテーマを暗いものに設定します"
#: src/view/screens/Settings.tsx:475
msgid "Set color theme to light"
@@ -3478,15 +3478,15 @@ msgstr "カラーテーマをライトに設定します"
#: src/view/screens/Settings.tsx:469
msgid "Set color theme to system setting"
-msgstr "システム設定のカラーテーマを使用するように設定します"
+msgstr "デバイスで設定したカラーテーマを使用するように設定します"
#: src/view/screens/Settings.tsx:508
msgid "Set dark theme to the dark theme"
-msgstr ""
+msgstr "ダークテーマをダークに設定します"
#: src/view/screens/Settings.tsx:501
msgid "Set dark theme to the dim theme"
-msgstr ""
+msgstr "ダークテーマを薄暗いものに設定します"
#: src/view/com/auth/login/SetNewPasswordForm.tsx:104
msgid "Set new password"
@@ -3717,7 +3717,7 @@ msgstr "サインアップ"
#: src/view/shell/NavSignupCard.tsx:42
msgid "Sign up or sign in to join the conversation"
-msgstr "登録またはログインして会話に参加"
+msgstr "サインアップまたはサインインして会話に参加"
#: src/view/com/util/moderation/ScreenHider.tsx:76
msgid "Sign-in Required"
@@ -3751,7 +3751,7 @@ msgstr "SMS認証"
#: 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."
@@ -3775,7 +3775,7 @@ msgstr "次の方法で同じ投稿への返信を並び替えます。"
#: src/screens/Onboarding/index.tsx:30
msgid "Sports"
-msgstr ""
+msgstr "スポーツ"
#: src/view/com/modals/crop-image/CropImage.web.tsx:122
msgid "Square"
@@ -3837,7 +3837,7 @@ msgstr "あなたへのおすすめ"
#: src/view/com/modals/SelfLabel.tsx:95
msgid "Suggestive"
-msgstr "提案"
+msgstr "きわどい"
#: src/Navigation.tsx:213
#: src/view/screens/Support.tsx:30
@@ -3881,7 +3881,7 @@ msgstr "タップして全体を表示"
#: src/screens/Onboarding/index.tsx:39
msgid "Tech"
-msgstr ""
+msgstr "テクノロジー"
#: src/view/shell/desktop/RightNav.tsx:93
msgid "Terms"
@@ -3905,7 +3905,7 @@ msgstr "このアカウントは、ブロック解除後にあなたとやり取
#: src/view/screens/CommunityGuidelines.tsx:36
msgid "The Community Guidelines have been moved to <0/>"
-msgstr "コミュニティガイドラインは<0/>に移動しました"
+msgstr "コミュニティーガイドラインは<0/>に移動しました"
#: src/view/screens/CopyrightPolicy.tsx:33
msgid "The Copyright Policy has been moved to <0/>"
@@ -4105,7 +4105,7 @@ msgstr "このユーザーは、あなたがブロックした<0/>リストに
#: src/view/com/modals/ModerationDetails.tsx:74
msgid "This user is included in the <0/> list which you have muted."
-msgstr ""
+msgstr "このユーザーは、あなたがミュートした<0/>リストに含まれています。"
#: src/view/com/modals/ModerationDetails.tsx:74
#~ msgid "This user is included the <0/> list which you have muted."
@@ -4113,7 +4113,7 @@ msgstr ""
#: src/view/com/modals/SelfLabel.tsx:137
msgid "This warning is only available for posts with media attached."
-msgstr "この警告は、メディアが接続されている投稿にのみ使用できます。"
+msgstr "この警告は、メディアが添付されている投稿にのみ使用できます。"
#: src/view/com/util/forms/PostDropdownBtn.tsx:192
msgid "This will hide this post from your feeds."
@@ -4368,7 +4368,7 @@ msgstr "メールアドレスを確認"
#: src/screens/Onboarding/index.tsx:42
msgid "Video Games"
-msgstr ""
+msgstr "ビデオゲーム"
#: src/view/com/profile/ProfileHeader.tsx:701
msgid "View {0}'s avatar"
@@ -4504,7 +4504,7 @@ msgstr "返信を書く"
#: src/screens/Onboarding/index.tsx:28
msgid "Writers"
-msgstr ""
+msgstr "ライター"
#: src/view/com/auth/create/Step2.tsx:263
msgid "XXXXXX"
@@ -4568,7 +4568,7 @@ msgstr "保存されたフィードがありません。"
#: src/view/com/post-thread/PostThread.tsx:406
msgid "You have blocked the author or you have been blocked by the author."
-msgstr "あなたが著者をブロックしているか、または著者によってあなたはブロックされています。"
+msgstr "あなたが投稿者をブロックしているか、または投稿者によってあなたはブロックされています。"
#: src/view/com/modals/ModerationDetails.tsx:56
msgid "You have blocked this user. You cannot view their content."
@@ -4579,7 +4579,7 @@ msgstr "あなたはこのユーザーをブロックしているため、コン
#: 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/view/com/modals/ModerationDetails.tsx:87
msgid "You have muted this user."
@@ -4676,7 +4676,7 @@ 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 "メールアドレスは更新されましたが、確認されていません。次のステップとして、新しいEメールを確認してください。"
+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."
@@ -4706,7 +4706,7 @@ msgstr "アプリパスワードを使用してログインすると、招待コ
#: src/view/com/modals/ChangePassword.tsx:155
msgid "Your password has been changed successfully!"
-msgstr ""
+msgstr "パスワードの変更が完了しました!"
#: src/view/com/composer/Composer.tsx:267
msgid "Your post has been published"
diff --git a/src/locale/locales/pt-BR/messages.po b/src/locale/locales/pt-BR/messages.po
index d31b45da52..4667ce2a9e 100644
--- a/src/locale/locales/pt-BR/messages.po
+++ b/src/locale/locales/pt-BR/messages.po
@@ -8,17 +8,11 @@ msgstr ""
"Language: pt-BR\n"
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2024-02-07 00:25\n"
+"PO-Revision-Date: 2024-02-08 19:59\n"
"Last-Translator: maisondasilva\n"
"Language-Team: maisondasilva, MightyLoggor, gildaswise, gleydson, faeriarum\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#~ msgid "- end of feed -"
-#~ msgstr "- fim do feed -"
-
-#~ msgid ". This warning is only available for posts with media attached."
-#~ msgstr ". Este aviso só aparece em posts com imagens."
-
#: src/view/com/modals/VerifyEmail.tsx:142
msgid "(no email)"
msgstr "(sem email)"
@@ -27,15 +21,6 @@ msgstr "(sem email)"
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/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 "Lista {0} {purposeLabel}"
-
#: src/view/com/profile/ProfileHeader.tsx:632
msgid "{following} following"
msgstr "{following} seguindo"
@@ -54,18 +39,10 @@ msgstr "{invitesAvailable} convite disponível"
msgid "{invitesAvailable} invite codes available"
msgstr "{invitesAvailable} convites disponíveis"
-#: src/view/screens/Search/Search.tsx:87
-#~ msgid "{message}"
-#~ msgstr "{message}"
-
#: src/view/shell/Drawer.tsx:443
msgid "{numUnreadNotifications} unread"
msgstr "{numUnreadNotifications} não lidas"
-#: src/Navigation.tsx:147
-#~ msgid "@{0}"
-#~ msgstr "@{0}"
-
#: src/view/com/threadgate/WhoCanReply.tsx:158
msgid "<0/> members"
msgstr "<0/> membros"
@@ -82,18 +59,6 @@ msgstr "<0>Escolha seus0><2>Feeds2><1>recomendados1>"
msgid "<0>Follow some0><1>Recommended1><2>Users2>"
msgstr "<0>Siga alguns0><2>Usuários2><1>recomendados1>"
-#: 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 "<0>Aqui está sua senha de aplicativo.0> Use-a com seu usuário para logar em outro aplicativo."
-
-#: 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 "<0>Nota: Esta opção pode não ser respeitada por aplicativos de terceiro que mostram conteúdo do Bluesky.0>"
-
-#: 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 "<0>Nota: Seu perfil e posts continuarão públicos. Aplicativos de terceiros que mostram conteúdo do Bluesky podem não respeitar esta opção."
-
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:21
msgid "<0>Welcome to0><1>Bluesky1>"
msgstr "<0>Bem-vindo ao0><1>Bluesky1>"
@@ -260,7 +225,7 @@ msgstr "Avançado"
#: src/view/com/auth/login/ForgotPasswordForm.tsx:217
#: src/view/com/modals/ChangePassword.tsx:168
msgid "Already have a code?"
-msgstr ""
+msgstr "Já tem um código?"
#: src/view/com/auth/login/ChooseAccountForm.tsx:98
msgid "Already signed in as @{0}"
@@ -338,10 +303,6 @@ msgstr "Contestar aviso de conteúdo"
msgid "Appeal Content Warning"
msgstr "Contestar aviso de conteúdo"
-#: src/view/com/modals/AppealLabel.tsx:65
-#~ msgid "Appeal Decision"
-#~ msgstr "Contestar Decisão"
-
#: src/view/com/util/moderation/LabelInfo.tsx:52
msgid "Appeal this decision"
msgstr "Contestar esta decisão"
@@ -354,10 +315,6 @@ msgstr "Contestar esta decisão."
msgid "Appearance"
msgstr "Aparência"
-#: 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 "Aplicativos que respeitam esta configuração, incluindo os aplicativos oficiais do Bluesky e o site, não mostrarão seu conteúdo para usuários deslogados."
-
#: src/view/screens/AppPasswords.tsx:224
msgid "Are you sure you want to delete the app password \"{name}\"?"
msgstr "Tem certeza de que deseja excluir a senha do aplicativo \"{name}\"?"
@@ -386,10 +343,6 @@ msgstr "Arte"
msgid "Artistic or non-erotic nudity."
msgstr "Nudez artística ou não erótica."
-#: src/view/screens/Moderation.tsx:189
-#~ msgid "Ask apps to limit the visibility of my account"
-#~ msgstr "Exigir visibilidade limitada da minha conta"
-
#: src/view/com/auth/create/CreateAccount.tsx:147
#: src/view/com/auth/login/ChooseAccountForm.tsx:151
#: src/view/com/auth/login/ForgotPasswordForm.tsx:170
@@ -589,10 +542,6 @@ msgstr "Cancelar"
msgid "Cancel account deletion"
msgstr "Cancelar exclusão da conta"
-#: src/view/com/modals/AltImage.tsx:123
-#~ msgid "Cancel add image alt text"
-#~ msgstr "Cancelar adição de texto alternativo da imagem"
-
#: src/view/com/modals/ChangeHandle.tsx:149
msgid "Cancel change handle"
msgstr "Cancelar alteração de usuário"
@@ -623,10 +572,6 @@ msgctxt "action"
msgid "Change"
msgstr "Alterar"
-#: src/view/screens/Settings.tsx:306
-#~ msgid "Change"
-#~ msgstr "Alterar"
-
#: src/view/screens/Settings.tsx:690
msgid "Change handle"
msgstr "Alterar usuário"
@@ -642,11 +587,11 @@ msgstr "Alterar meu email"
#: src/view/screens/Settings.tsx:726
msgid "Change password"
-msgstr ""
+msgstr "Alterar senha"
#: src/view/screens/Settings.tsx:735
msgid "Change Password"
-msgstr ""
+msgstr "Alterar Senha"
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:73
msgid "Change post language to {0}"
@@ -654,7 +599,7 @@ msgstr "Trocar idioma do post para {0}"
#: src/view/screens/Settings.tsx:727
msgid "Change your Bluesky password"
-msgstr ""
+msgstr "Alterar sua senha do Bluesky"
#: src/view/com/modals/ChangeEmail.tsx:109
msgid "Change Your Email"
@@ -698,10 +643,6 @@ msgstr "Escolha os algoritmos que geram seus feeds customizados."
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/view/com/auth/onboarding/RecommendedFeeds.tsx:65
-#~ msgid "Choose your"
-#~ msgstr "Escolha seu"
-
#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:103
#~ msgid "Choose your algorithmic feeds"
#~ msgstr "Escolha seus feeds algoritmicos"
@@ -748,7 +689,7 @@ msgstr "Clima e tempo"
#: src/view/com/modals/ChangePassword.tsx:265
#: src/view/com/modals/ChangePassword.tsx:268
msgid "Close"
-msgstr ""
+msgstr "Fechar"
#: src/components/Dialog/index.web.tsx:78
msgid "Close active dialog"
@@ -1036,7 +977,7 @@ msgstr "Domínio personalizado"
#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
msgid "Custom feeds built by the community bring you new experiences and help you find the content you love."
-msgstr ""
+msgstr "Feeds customizados feitos pela comunidade te proporcionam novas experiências e te ajudam a encontrar o conteúdo que você mais ama."
#: src/view/screens/PreferencesExternalEmbeds.tsx:55
msgid "Customize media from external sites."
@@ -1057,11 +998,7 @@ msgstr "Modo escuro"
#: src/view/screens/Settings.tsx:492
msgid "Dark Theme"
-msgstr ""
-
-#: src/Navigation.tsx:204
-#~ msgid "Debug"
-#~ msgstr "Depuração"
+msgstr "Modo Escuro"
#: src/view/screens/Debug.tsx:83
msgid "Debug panel"
@@ -1095,7 +1032,7 @@ msgstr "Excluir minha conta"
#: src/view/screens/Settings.tsx:755
msgid "Delete My Account…"
-msgstr ""
+msgstr "Excluir minha conta…"
#: src/view/com/util/forms/PostDropdownBtn.tsx:228
msgid "Delete post"
@@ -1120,10 +1057,6 @@ msgstr "Post excluído."
msgid "Description"
msgstr "Descrição"
-#: src/view/com/auth/create/Step1.tsx:96
-#~ msgid "Dev Server"
-#~ msgstr "Servidor de Desenvolvimento"
-
#: src/view/screens/Settings.tsx:760
msgid "Developer Tools"
msgstr "Ferramentas de Desenvolvedor"
@@ -1134,7 +1067,7 @@ msgstr "Você gostaria de dizer alguma coisa?"
#: src/view/screens/Settings.tsx:498
msgid "Dim"
-msgstr ""
+msgstr "Menos escuro"
#: src/view/com/composer/Composer.tsx:144
msgid "Discard"
@@ -1366,13 +1299,9 @@ msgstr "Insira um nome para esta Senha de Aplicativo"
msgid "Enter Confirmation Code"
msgstr "Insira o código de confirmação"
-#: src/view/com/auth/create/Step1.tsx:71
-#~ msgid "Enter the address of your provider:"
-#~ msgstr "Digite o endereço do seu provedor:"
-
#: src/view/com/modals/ChangePassword.tsx:151
msgid "Enter the code you received to change your password."
-msgstr ""
+msgstr "Digite o código recebido para alterar sua senha."
#: src/view/com/modals/ChangeHandle.tsx:371
msgid "Enter the domain you want to use"
@@ -1602,14 +1531,6 @@ msgstr "Seguir Todas"
msgid "Follow selected accounts and continue to the next step"
msgstr "Siga algumas contas e continue para o próximo passo"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:174
-#~ msgid "Follow selected accounts and continue to then next step"
-#~ msgstr "Siga algumas contas e continue para o próximo passo"
-
-#: src/view/com/auth/onboarding/RecommendedFollows.tsx:42
-#~ msgid "Follow some"
-#~ msgstr "Siga alguns"
-
#: 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 "Comece seguindo alguns usuários. Mais usuários podem ser recomendados com base em quem você acha interessante."
@@ -1634,10 +1555,6 @@ msgstr "seguiu você"
msgid "Followers"
msgstr "Seguidores"
-#: src/view/com/profile/ProfileHeader.tsx:624
-#~ msgid "following"
-#~ msgstr "seguindo"
-
#: src/view/com/profile/ProfileHeader.tsx:534
#: src/view/screens/ProfileFollows.tsx:25
msgid "Following"
@@ -1743,10 +1660,6 @@ msgstr "Ajuda"
msgid "Here are some accounts for you to follow"
msgstr "Aqui estão algumas contas para você seguir"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:132
-#~ msgid "Here are some accounts for your to follow"
-#~ msgstr "Aqui estão algumas contas para você seguir"
-
#: src/screens/Onboarding/StepTopicalFeeds.tsx:79
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."
@@ -1793,10 +1706,6 @@ msgstr "Ocultar lista de usuários"
msgid "Hides posts from {0} in your feed"
msgstr "Esconder posts de {0} no seu feed"
-#: 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 "Hmm, ocorreu algum problema ao entrar em contato com o servidor deste feed. Por favor, avise o criador do feed sobre este problema."
-
#: 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, ocorreu algum problema ao entrar em contato com o servidor deste feed. Por favor, avise o criador do feed sobre este problema."
@@ -1817,10 +1726,6 @@ 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/view/com/posts/FeedErrorMessage.tsx:87
-#~ msgid "Hmmm, 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:433
#: src/view/shell/bottom-bar/BottomBar.tsx:137
#: src/view/shell/desktop/LeftNav.tsx:306
@@ -1840,11 +1745,6 @@ msgstr "Preferências da Página Inicial"
msgid "Hosting provider"
msgstr "Provedor de hospedagem"
-#: src/view/com/auth/create/Step1.tsx:76
-#: src/view/com/auth/create/Step1.tsx:81
-#~ msgid "Hosting provider address"
-#~ msgstr "Endereço do provedor de hospedagem"
-
#: src/view/com/modals/InAppBrowserConsent.tsx:44
msgid "How should we open this link?"
msgstr "Como devemos abrir este link?"
@@ -1871,7 +1771,7 @@ msgstr "Se nenhum for selecionado, adequado para todas as idades."
#: src/view/com/modals/ChangePassword.tsx:146
msgid "If you want to change your password, we will send you a code to verify that this is your account."
-msgstr ""
+msgstr "Se você quiser alterar sua senha, enviaremos um código que para verificar sua identidade."
#: src/view/com/util/images/Gallery.tsx:38
msgid "Image"
@@ -1886,11 +1786,6 @@ msgstr "Texto alternativo da imagem"
msgid "Image options"
msgstr "Opções de imagem"
-#: src/view/com/search/Suggestions.tsx:104
-#: src/view/com/search/Suggestions.tsx:115
-#~ msgid "In Your Network"
-#~ msgstr "Na sua rede"
-
#: src/view/com/auth/login/SetNewPasswordForm.tsx:138
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"
@@ -1903,14 +1798,6 @@ msgstr "Insira o código de confirmação para excluir sua conta"
msgid "Input email for Bluesky account"
msgstr "Insira o e-mail para a sua conta do Bluesky"
-#: src/view/com/auth/create/Step2.tsx:109
-#~ msgid "Input email for Bluesky waitlist"
-#~ msgstr "Insira o e-mail para entrar na lista de espera do Bluesky"
-
-#: src/view/com/auth/create/Step1.tsx:80
-#~ msgid "Input hosting provider address"
-#~ msgstr "Insira o endereço do provedor de hospedagem"
-
#: src/view/com/auth/create/Step1.tsx:102
msgid "Input invite code to proceed"
msgstr "Insira o convite para continuar"
@@ -2124,14 +2011,6 @@ msgstr "Curtido por {likeCount} {0}"
msgid "liked your custom feed"
msgstr "curtiram seu feed"
-#: src/view/com/notifications/FeedItem.tsx:171
-#~ msgid "liked your custom feed '{0}'"
-#~ msgstr "curtiram seu feed '{0}'"
-
-#: src/view/com/notifications/FeedItem.tsx:171
-#~ msgid "liked your custom feed{0}"
-#~ msgstr "curtiu seu feed"
-
#: src/view/com/notifications/FeedItem.tsx:155
msgid "liked your post"
msgstr "curtiu seu post"
@@ -2144,14 +2023,6 @@ msgstr "Curtidas"
msgid "Likes on this post"
msgstr "Curtidas neste post"
-#: src/view/screens/Moderation.tsx:203
-#~ msgid "Limit the visibility of my account"
-#~ msgstr "Limitar a visibilidade do meu perfil"
-
-#: src/view/screens/Moderation.tsx:203
-#~ msgid "Limit the visibility of my account to logged-out users"
-#~ msgstr "Limitar a visibilidade do meu perfil para usuários deslogados"
-
#: src/Navigation.tsx:167
msgid "List"
msgstr "Lista"
@@ -2231,10 +2102,6 @@ msgstr "Registros"
msgid "Log out"
msgstr "Sair"
-#: src/view/screens/Moderation.tsx:134
-#~ msgid "Logged-out users"
-#~ msgstr "Visibilidade do seu perfil"
-
#: src/view/screens/Moderation.tsx:136
msgid "Logged-out visibility"
msgstr "Visibilidade do seu perfil"
@@ -2243,10 +2110,6 @@ msgstr "Visibilidade do seu perfil"
msgid "Login to account that is not listed"
msgstr "Fazer login em uma conta que não está listada"
-#: 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 "Parece que este feed só está disponível para usuários com uma conta do Bluesky. Por favor, cadastre-se ou entre para ver este feed!"
-
#: src/view/com/modals/LinkWarning.tsx:65
msgid "Make sure this is where you intend to go!"
msgstr "Certifique-se de onde está indo!"
@@ -2268,10 +2131,6 @@ msgstr "Usuários mencionados"
msgid "Menu"
msgstr "Menu"
-#: src/view/com/posts/FeedErrorMessage.tsx:194
-#~ msgid "Message from server"
-#~ msgstr "Mensagem do servidor"
-
#: src/view/com/posts/FeedErrorMessage.tsx:197
msgid "Message from server: {0}"
msgstr "Mensagem do servidor: {0}"
@@ -2388,10 +2247,6 @@ msgstr "Contas silenciadas não aparecem no seu feed ou nas suas notificações.
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/screens/Moderation.tsx:134
-#~ msgid "My Account"
-#~ msgstr "Minha Conta"
-
#: src/view/com/modals/BirthDateSettings.tsx:56
msgid "My Birthday"
msgstr "Meu Aniversário"
@@ -2466,7 +2321,7 @@ msgstr "Nova senha"
#: src/view/com/modals/ChangePassword.tsx:215
msgid "New Password"
-msgstr ""
+msgstr "Nova Senha"
#: src/view/com/feeds/FeedPage.tsx:201
msgctxt "action"
@@ -2487,10 +2342,6 @@ msgctxt "action"
msgid "New Post"
msgstr "Novo Post"
-#: src/view/shell/desktop/LeftNav.tsx:258
-#~ msgid "New Post"
-#~ msgstr "Novo Post"
-
#: src/view/com/modals/CreateOrEditList.tsx:247
msgid "New User List"
msgstr "Nova lista de usuários"
@@ -2555,11 +2406,6 @@ msgstr "Nenhum resultado"
msgid "No results found for \"{query}\""
msgstr "Nenhum resultado encontrado para \"{query}\""
-#: src/view/com/modals/ListAddUser.tsx:142
-#: src/view/shell/desktop/Search.tsx:112
-#~ msgid "No results found for {0}"
-#~ msgstr "Nenhum resultado encontrado para {0}"
-
#: src/view/com/modals/ListAddRemoveUsers.tsx:127
#: src/view/screens/Search/Search.tsx:280
#: src/view/screens/Search/Search.tsx:308
@@ -2574,10 +2420,6 @@ msgstr "Não, obrigado"
msgid "Nobody"
msgstr "Ninguém"
-#: src/view/com/modals/SelfLabel.tsx:136
-#~ msgid "Not Applicable"
-#~ msgstr "Não Aplicável"
-
#: src/view/com/modals/SelfLabel.tsx:135
msgid "Not Applicable."
msgstr "Não Aplicável."
@@ -2591,18 +2433,10 @@ msgstr "Não encontrado"
msgid "Not right now"
msgstr "Agora não"
-#: 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 "Nota: o Bluesky é uma rede aberta e pública. Habilitar esta configuração não tornará seu perfil privado nem impedirá os usuários logados de verem os seus posts. Esta configuração só limita a visibilidade dos posts nos apps oficiais do Bluesky; aplicativos de terceiros podem não respeitá-la e poderão mostrar seu conteúdo para usuários deslogados."
-
#: src/view/screens/Moderation.tsx:233
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."
-#: src/view/screens/Moderation.tsx:227
-#~ msgid "Note: Third-party apps that display Bluesky content may not respect this setting."
-#~ msgstr "Nota: Aplicativos de terceiros que mostram conteúdo do Bluesky podem não respeitar esta opção."
-
#: src/Navigation.tsx:448
#: src/view/screens/Notifications.tsx:120
#: src/view/screens/Notifications.tsx:144
@@ -2778,10 +2612,6 @@ msgstr "Opção {0} de {numItems}"
msgid "Or combine these options:"
msgstr "Ou combine estas opções:"
-#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:122
-#~ msgid "Or you can try our \"Discover\" algorithm:"
-#~ msgstr "Ou você pode tentar nosso algoritmo \"Discover\":"
-
#: src/view/com/auth/login/ChooseAccountForm.tsx:138
msgid "Other account"
msgstr "Outra conta"
@@ -2945,12 +2775,6 @@ msgctxt "description"
msgid "Post"
msgstr "Post"
-#: src/view/com/composer/Composer.tsx:346
-#: src/view/com/post-thread/PostThread.tsx:225
-#: src/view/screens/PostThread.tsx:80
-#~ msgid "Post"
-#~ msgstr "Post"
-
#: src/view/com/post-thread/PostThreadItem.tsx:177
msgid "Post by {0}"
msgstr "Post por {0}"
@@ -3071,10 +2895,6 @@ msgctxt "action"
msgid "Quote Post"
msgstr "Citar Post"
-#: src/view/com/modals/Repost.tsx:56
-#~ msgid "Quote Post"
-#~ msgstr "Citar Post"
-
#: src/view/screens/PreferencesThreads.tsx:86
msgid "Random (aka \"Poster's Roulette\")"
msgstr "Aleatório"
@@ -3083,11 +2903,6 @@ msgstr "Aleatório"
msgid "Ratios"
msgstr "Índices"
-#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:73
-#: src/view/com/auth/onboarding/RecommendedFollows.tsx:50
-#~ msgid "Recommended"
-#~ msgstr "Recomendados"
-
#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116
msgid "Recommended Feeds"
msgstr "Feeds Recomendados"
@@ -3220,10 +3035,6 @@ msgstr "Repostar"
msgid "Repost or quote post"
msgstr "Repostar ou citar um post"
-#: src/view/screens/PostRepostedBy.tsx:27
-#~ msgid "Reposted by"
-#~ msgstr "Repostado por"
-
#: src/view/screens/PostRepostedBy.tsx:27
msgid "Reposted By"
msgstr "Repostado Por"
@@ -3232,10 +3043,6 @@ msgstr "Repostado Por"
msgid "Reposted by {0}"
msgstr "Repostado por {0}"
-#: src/view/com/posts/FeedItem.tsx:206
-#~ msgid "Reposted by {0})"
-#~ msgstr "Repostado por {0})"
-
#: src/view/com/posts/FeedItem.tsx:224
msgid "Reposted by <0/>"
msgstr "Repostado por <0/>"
@@ -3260,11 +3067,7 @@ msgstr "Solicitar código"
#: src/view/com/modals/ChangePassword.tsx:239
#: src/view/com/modals/ChangePassword.tsx:241
msgid "Request Code"
-msgstr ""
-
-#: src/view/screens/Moderation.tsx:188
-#~ msgid "Request to limit the visibility of my account"
-#~ msgstr "Exigir limitação de visibilidade da minha conta"
+msgstr "Solicitar Código"
#: src/view/screens/Settings.tsx:450
msgid "Require alt text before posting"
@@ -3281,7 +3084,7 @@ msgstr "Código de redefinição"
#: src/view/com/modals/ChangePassword.tsx:190
msgid "Reset Code"
-msgstr ""
+msgstr "Código de Redefinição"
#: src/view/screens/Settings.tsx:806
msgid "Reset onboarding"
@@ -3332,10 +3135,6 @@ msgstr "Tenta a última ação, que deu erro"
msgid "Retry"
msgstr "Tente novamente"
-#: src/view/com/modals/ChangeHandle.tsx:169
-#~ msgid "Retry change handle"
-#~ msgstr "Tentar troca de usuário novamente"
-
#: src/view/com/auth/create/Step2.tsx:247
msgid "Retry."
msgstr "Tentar novamente."
@@ -3367,10 +3166,6 @@ msgstr "Salvar"
msgid "Save alt text"
msgstr "Salvar texto alternativo"
-#: src/view/com/modals/UserAddRemoveLists.tsx:212
-#~ msgid "Save changes"
-#~ msgstr "Salvar alterações"
-
#: src/view/com/modals/EditProfile.tsx:232
msgid "Save Changes"
msgstr "Salvar Alterações"
@@ -3425,10 +3220,6 @@ msgstr "Buscar"
msgid "Search for \"{query}\""
msgstr "Pesquisar por \"{query}\""
-#: src/view/screens/Search/Search.tsx:390
-#~ msgid "Search for posts and users."
-#~ msgstr "Buscar por posts e usuários."
-
#: src/view/com/auth/LoggedOut.tsx:104
#: src/view/com/auth/LoggedOut.tsx:105
#: src/view/com/modals/ListAddRemoveUsers.tsx:70
@@ -3526,10 +3317,6 @@ msgctxt "action"
msgid "Send Email"
msgstr "Enviar E-mail"
-#: src/view/com/modals/DeleteAccount.tsx:138
-#~ msgid "Send Email"
-#~ msgstr "Enviar Email"
-
#: src/view/shell/Drawer.tsx:298
#: src/view/shell/Drawer.tsx:319
msgid "Send feedback"
@@ -3567,11 +3354,11 @@ msgstr "Definir o tema para acompanhar o sistema"
#: src/view/screens/Settings.tsx:508
msgid "Set dark theme to the dark theme"
-msgstr ""
+msgstr "Definir o tema escuro para o padrão"
#: src/view/screens/Settings.tsx:501
msgid "Set dark theme to the dim theme"
-msgstr ""
+msgstr "Definir o tema escuro para a versão menos escura"
#: src/view/com/auth/login/SetNewPasswordForm.tsx:104
msgid "Set new password"
@@ -3617,10 +3404,6 @@ msgstr "Configura o e-mail para recuperação de senha"
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:143
-#~ msgid "Sets hosting provider to {label}"
-#~ msgstr "Configura o provedor de hospedagem para {label}"
-
#: src/view/com/auth/create/Step1.tsx:78
#: src/view/com/auth/login/LoginForm.tsx:148
msgid "Sets server for the Bluesky client"
@@ -3653,10 +3436,6 @@ msgstr "Compartilhar"
msgid "Share feed"
msgstr "Compartilhar feed"
-#: src/view/screens/ProfileFeed.tsx:276
-#~ msgid "Share link"
-#~ msgstr "Compartilhar link"
-
#: src/screens/Onboarding/StepModeration/ModerationOption.tsx:43
#: src/view/com/modals/ContentFilteringSettings.tsx:261
#: src/view/com/util/moderation/ContentHider.tsx:107
@@ -3882,10 +3661,6 @@ msgstr "Página de status"
msgid "Step {0} of {numSteps}"
msgstr "Passo {0} de {numSteps}"
-#: src/view/com/auth/create/StepHeader.tsx:15
-#~ msgid "Step {step} of 3"
-#~ msgstr "Passo {step} de 3"
-
#: src/view/screens/Settings.tsx:276
msgid "Storage cleared, you need to restart the app now."
msgstr "Armazenamento limpo, você precisa reiniciar o app agora."
@@ -3912,10 +3687,6 @@ msgstr "Increver-se no feed {0}"
msgid "Subscribe to this list"
msgstr "Inscreva-se nesta lista"
-#: src/view/com/lists/ListCard.tsx:101
-#~ msgid "Subscribed"
-#~ msgstr "Inscrito"
-
#: src/view/screens/Search/Search.tsx:373
msgid "Suggested Follows"
msgstr "Sugestões de Seguidores"
@@ -4016,10 +3787,6 @@ msgstr "A Política de Privacidade foi movida para <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 "O formulário de suporte foi movido. Se precisar de ajuda, <0/> ou visite {HELP_DESK_URL} para entrar em contato conosco."
-#: 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 "O formulário de suporte foi movido. Se precisar de ajuda, por favor <0/> ou visite {HELP_DESK_URL} para entrar em contato conosco."
-
#: src/view/screens/TermsOfService.tsx:33
msgid "The Terms of Service have been moved to"
msgstr "Os Termos de Serviço foram movidos para"
@@ -4114,14 +3881,6 @@ msgstr "Houve um problema com este número. Por favor, escolha um país e digite
msgid "These are popular accounts you might like:"
msgstr "Estas são contas populares que talvez você goste:"
-#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:138
-#~ msgid "These are popular accounts you might like."
-#~ msgstr "Estas são contas populares que talvez você goste."
-
-#: src/view/com/util/moderation/LabelInfo.tsx:45
-#~ msgid "This {0} has been labeled."
-#~ msgstr "Este {0} foi reportado."
-
#: src/view/com/util/moderation/ScreenHider.tsx:88
msgid "This {screenDescription} has been flagged:"
msgstr "Este {screenDescription} foi reportado:"
@@ -4164,10 +3923,6 @@ 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/auth/create/Step1.tsx:55
-#~ msgid "This is the service that keeps you online."
-#~ msgstr "Este é o serviço que o mantém online."
-
#: src/view/com/modals/LinkWarning.tsx:58
msgid "This link is taking you to the following website:"
msgstr "Este link está levando você ao seguinte site:"
@@ -4194,7 +3949,7 @@ 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 in the <0/> list which you have muted."
-msgstr ""
+msgstr "Este usuário está incluído na lista <0/>, que você silenciou."
#: src/view/com/modals/ModerationDetails.tsx:74
#~ msgid "This user is included the <0/> list which you have muted."
@@ -4240,10 +3995,6 @@ msgctxt "action"
msgid "Try again"
msgstr "Tentar novamente"
-#: src/view/com/util/error/ErrorScreen.tsx:73
-#~ msgid "Try again"
-#~ msgstr "Tente novamente"
-
#: src/view/screens/ProfileList.tsx:505
msgid "Un-block list"
msgstr "Desbloquear lista"
@@ -4426,10 +4177,6 @@ msgstr "Usuários"
msgid "users followed by <0/>"
msgstr "usuários seguidos por <0/>"
-#: src/view/com/threadgate/WhoCanReply.tsx:115
-#~ msgid "Users followed by <0/>"
-#~ msgstr "Usuários seguidos por <0/>"
-
#: src/view/com/modals/Threadgate.tsx:106
msgid "Users in \"{0}\""
msgstr "Usuários em \"{0}\""
@@ -4504,10 +4251,6 @@ msgstr "Estimamos que sua conta estará pronta em mais ou menos {estimatedTime}.
msgid "We hope you have a wonderful time. Remember, Bluesky is:"
msgstr "Esperamos que você se divirta. Lembre-se, o Bluesky é:"
-#: src/view/com/posts/DiscoverFallbackHeader.tsx:29
-#~ msgid "We ran out of posts from your follows. Here's the latest from"
-#~ msgstr "Não temos mais posts de quem você segue. Aqui estão os mais novos de"
-
#: src/view/com/posts/DiscoverFallbackHeader.tsx:29
msgid "We ran out of posts from your follows. Here's the latest from <0/>."
msgstr "Não temos mais posts de quem você segue. Aqui estão os mais novos de <0/>."
@@ -4540,14 +4283,6 @@ msgstr "Usaremos isto para customizar a sua experiência."
msgid "We're so excited to have you join us!"
msgstr "Estamos muito felizes em recebê-lo!"
-#: src/view/com/posts/FeedErrorMessage.tsx:99
-#~ msgid "We're sorry, but this content is not viewable without a Bluesky account."
-#~ msgstr "Desculpe, mas este conteúdo não é visível sem uma conta do Bluesky."
-
-#: 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 "Desculpe, mas este feed está recebendo muito tráfego e está temporariamente indisponível. Por favor, tente novamente mais tarde."
-
#: src/view/screens/ProfileList.tsx:85
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}."
@@ -4638,10 +4373,6 @@ msgstr "Você também pode descobrir novos feeds para seguir."
#~ msgid "You can also try our \"Discover\" algorithm:"
#~ msgstr "Você também pode tentar nosso algoritmo \"Discover\":"
-#: src/view/com/auth/create/Step1.tsx:106
-#~ msgid "You can change hosting providers at any time."
-#~ msgstr "Você pode alterar os provedores de hospedagem a qualquer momento."
-
#: src/screens/Onboarding/StepFollowingFeed.tsx:142
msgid "You can change these settings later."
msgstr "Você pode mudar estas configurações depois."
@@ -4680,7 +4411,7 @@ msgstr "Você bloqueou este usuário. Você não pode ver este conteúdo."
#: 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 "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."
@@ -4795,10 +4526,6 @@ msgstr "Seu identificador completo será"
msgid "Your full handle will be <0>@{0}0>"
msgstr "Seu usuário completo será <0>@{0}0>"
-#: src/view/com/auth/create/Step1.tsx:53
-#~ msgid "Your hosting provider"
-#~ msgstr "Seu provedor de hospedagem"
-
#: src/view/screens/Settings.tsx:430
#: src/view/shell/desktop/RightNav.tsx:137
#: src/view/shell/Drawer.tsx:660
@@ -4807,7 +4534,7 @@ msgstr "Seus códigos de convite estão ocultos quando conectado com uma Senha d
#: src/view/com/modals/ChangePassword.tsx:155
msgid "Your password has been changed successfully!"
-msgstr ""
+msgstr "Sua senha foi alterada com sucesso!"
#: src/view/com/composer/Composer.tsx:267
msgid "Your post has been published"
@@ -4824,18 +4551,6 @@ msgstr "Suas postagens, curtidas e bloqueios são públicos. Silenciamentos são
msgid "Your profile"
msgstr "Seu perfil"
-#: 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 "Seu perfil e conta não serão visíveis para pessoas utilizando o app Bluesky sem uma conta, ou para pessoas que têm conta mas estão deslogadas. Habilitar esta opção não torna a sua conta privada."
-
-#: 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 "Seu perfil e seu conteúdo não serão visíveis para pessoas utilizando o app Bluesky sem uma conta. Habilitar esta opção não torna a sua conta privada."
-
-#: 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 "Seu perfil e posts não serão visíveis para pessoas utilizando o app ou site do Bluesky sem uma conta logada."
-
#: src/view/com/composer/Composer.tsx:266
msgid "Your reply has been published"
msgstr "Sua resposta foi publicada"
diff --git a/src/locale/locales/zh-CN/messages.po b/src/locale/locales/zh-CN/messages.po
index 842d2c6c4f..4baee3179e 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-01 09:20+0800\n"
+"POT-Creation-Date: 2024-02-07 19:20+0800\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -9,8 +9,8 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: \n"
-"Last-Translator: Frudrax Cheng \n"
-"Language-Team: Frudrax Cheng, Simon Chan, U2FsdGVkX1\n"
+"Last-Translator: Mikan Harada \n"
+"Language-Team: Frudrax Cheng, Simon Chan, U2FsdGVkX1, Mikan Harada\n"
"Plural-Forms: \n"
#: src/view/com/modals/VerifyEmail.tsx:142
@@ -19,7 +19,7 @@ msgstr "(没有邮件)"
#: src/view/shell/desktop/RightNav.tsx:168
msgid "{0, plural, one {# invite code available} other {# invite codes available}}"
-msgstr "{0, plural, one {# 邀请码可用} other {# 邀请码可用}}"
+msgstr "{0, plural, one {# 条邀请码可用} other {# 条邀请码可用}}"
#: src/view/com/profile/ProfileHeader.tsx:632
msgid "{following} following"
@@ -32,12 +32,12 @@ msgstr "{invitesAvailable, plural, one {邀请码: # 可用} other {邀请码: #
#: src/view/screens/Settings.tsx:435
#: src/view/shell/Drawer.tsx:664
msgid "{invitesAvailable} invite code available"
-msgstr "{invitesAvailable} 邀请码可用"
+msgstr "{invitesAvailable} 条邀请码可用"
#: src/view/screens/Settings.tsx:437
#: src/view/shell/Drawer.tsx:666
msgid "{invitesAvailable} invite codes available"
-msgstr "{invitesAvailable} 邀请码可用"
+msgstr "{invitesAvailable} 条邀请码可用"
#: src/view/shell/Drawer.tsx:443
msgid "{numUnreadNotifications} unread"
@@ -65,7 +65,7 @@ msgstr "<0>欢迎来到0><1>Bluesky1>"
#: src/view/com/profile/ProfileHeader.tsx:597
msgid "⚠Invalid Handle"
-msgstr "⚠无效的昵称"
+msgstr "⚠无效的用户识别符"
#: src/view/com/util/moderation/LabelInfo.tsx:45
msgid "A content warning has been applied to this {0}."
@@ -101,15 +101,15 @@ msgstr "已屏蔽账户"
#: src/view/com/profile/ProfileHeader.tsx:260
msgid "Account muted"
-msgstr "已静音账户"
+msgstr "已隐藏账户"
#: src/view/com/modals/ModerationDetails.tsx:86
msgid "Account Muted"
-msgstr "已静音账户"
+msgstr "已隐藏账户"
#: src/view/com/modals/ModerationDetails.tsx:72
msgid "Account Muted by List"
-msgstr "账户已被列表静音"
+msgstr "账户已被列表隐藏"
#: src/view/com/util/AccountDropdownBtn.tsx:41
msgid "Account options"
@@ -125,7 +125,7 @@ msgstr "已取消屏蔽账户"
#: src/view/com/profile/ProfileHeader.tsx:273
msgid "Account unmuted"
-msgstr "已取消静音账户"
+msgstr "已取消隐藏账户"
#: src/view/com/auth/onboarding/RecommendedFeedsItem.tsx:150
#: src/view/com/modals/ListAddRemoveUsers.tsx:264
@@ -221,7 +221,7 @@ msgstr "详细设置"
#: src/view/com/auth/login/ForgotPasswordForm.tsx:217
#: src/view/com/modals/ChangePassword.tsx:168
msgid "Already have a code?"
-msgstr ""
+msgstr "已经有确认码了?"
#: src/view/com/auth/login/ChooseAccountForm.tsx:98
msgid "Already signed in as @{0}"
@@ -540,7 +540,7 @@ msgstr "撤销账户删除申请"
#: src/view/com/modals/ChangeHandle.tsx:149
msgid "Cancel change handle"
-msgstr "撤销修改昵称"
+msgstr "撤销修改用户识别符"
#: src/view/com/modals/crop-image/CropImage.web.tsx:134
msgid "Cancel image crop"
@@ -570,12 +570,12 @@ msgstr "更改"
#: src/view/screens/Settings.tsx:690
msgid "Change handle"
-msgstr "更改昵称"
+msgstr "更改用户识别符"
#: src/view/com/modals/ChangeHandle.tsx:161
#: src/view/screens/Settings.tsx:699
msgid "Change Handle"
-msgstr "更改昵称"
+msgstr "更改用户识别符"
#: src/view/com/modals/VerifyEmail.tsx:147
msgid "Change my email"
@@ -583,11 +583,11 @@ msgstr "更改我的邮箱地址"
#: src/view/screens/Settings.tsx:726
msgid "Change password"
-msgstr ""
+msgstr "更改密码"
#: src/view/screens/Settings.tsx:735
msgid "Change Password"
-msgstr ""
+msgstr "更改密码"
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:73
msgid "Change post language to {0}"
@@ -595,7 +595,7 @@ msgstr "更改帖子的发布语言至 {0}"
#: src/view/screens/Settings.tsx:727
msgid "Change your Bluesky password"
-msgstr ""
+msgstr "更改你的 Bluesky 密码"
#: src/view/com/modals/ChangeEmail.tsx:109
msgid "Change Your Email"
@@ -681,7 +681,7 @@ msgstr "气象"
#: src/view/com/modals/ChangePassword.tsx:265
#: src/view/com/modals/ChangePassword.tsx:268
msgid "Close"
-msgstr ""
+msgstr "关闭"
#: src/components/Dialog/index.web.tsx:78
msgid "Close active dialog"
@@ -969,7 +969,7 @@ msgstr "自定义域名"
#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:106
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."
@@ -982,15 +982,15 @@ msgstr "自定义外部站点的媒体。"
#: src/view/screens/Settings.tsx:479
#: src/view/screens/Settings.tsx:505
msgid "Dark"
-msgstr "暗色"
+msgstr "深黑"
#: src/view/screens/Debug.tsx:63
msgid "Dark mode"
-msgstr "暗色模式"
+msgstr "深色模式"
#: src/view/screens/Settings.tsx:492
msgid "Dark Theme"
-msgstr ""
+msgstr "深色模式"
#: src/view/screens/Debug.tsx:83
msgid "Debug panel"
@@ -1024,7 +1024,7 @@ msgstr "删除我的账户"
#: src/view/screens/Settings.tsx:755
msgid "Delete My Account…"
-msgstr ""
+msgstr "删除我的账户…"
#: src/view/com/util/forms/PostDropdownBtn.tsx:228
msgid "Delete post"
@@ -1059,7 +1059,7 @@ msgstr "有什么想说的吗?"
#: src/view/screens/Settings.tsx:498
msgid "Dim"
-msgstr ""
+msgstr "暗淡"
#: src/view/com/composer/Composer.tsx:144
msgid "Discard"
@@ -1137,7 +1137,7 @@ msgstr "拖放即可添加图片"
#: src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx:111
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/EditProfile.tsx:185
msgid "e.g. Alice Roberts"
@@ -1183,7 +1183,7 @@ msgstr "编辑列表详情"
#: src/view/com/modals/CreateOrEditList.tsx:250
msgid "Edit Moderation List"
-msgstr "编辑管理员列表"
+msgstr "编辑限制列表"
#: src/Navigation.tsx:243
#: src/view/screens/Feeds.tsx:403
@@ -1293,7 +1293,7 @@ msgstr "输入验证码"
#: src/view/com/modals/ChangePassword.tsx:151
msgid "Enter the code you received to change your password."
-msgstr ""
+msgstr "输入你收到的确认码以更改密码。"
#: src/view/com/modals/ChangeHandle.tsx:371
msgid "Enter the domain you want to use"
@@ -1342,7 +1342,7 @@ msgstr "所有人"
#: src/view/com/modals/ChangeHandle.tsx:150
msgid "Exits handle change process"
-msgstr "退出修改昵称流程"
+msgstr "退出修改用户识别符流程"
#: src/view/com/lightbox/Lightbox.web.tsx:120
msgid "Exits image view"
@@ -1388,7 +1388,7 @@ msgstr "外部媒体设置"
#: src/view/com/modals/AddAppPasswords.tsx:115
#: src/view/com/modals/AddAppPasswords.tsx:119
msgid "Failed to create app password."
-msgstr "无法创建 App 专用密码。"
+msgstr "创建 App 专用密码失败。"
#: src/view/com/modals/CreateOrEditList.tsx:206
msgid "Failed to create the list. Check your internet connection and try again."
@@ -1633,7 +1633,7 @@ msgstr "转到下一个"
#: src/view/com/modals/ChangeHandle.tsx:265
msgid "Handle"
-msgstr "昵称"
+msgstr "用户识别符"
#: src/view/com/auth/create/CreateAccount.tsx:197
msgid "Having trouble?"
@@ -1739,7 +1739,7 @@ msgstr "我们该如何打开此链接?"
#: src/view/com/modals/VerifyEmail.tsx:214
msgid "I have a code"
-msgstr "我有邀请码"
+msgstr "我有验证码"
#: src/view/com/modals/VerifyEmail.tsx:216
msgid "I have a confirmation code"
@@ -1759,7 +1759,7 @@ msgstr "若不勾选,则默认为全年龄向。"
#: src/view/com/modals/ChangePassword.tsx:146
msgid "If you want to change your password, we will send you a code to verify that this is your account."
-msgstr ""
+msgstr "如果你想要更改密码,我们将向你发送一个确认码以验证这是你的账户。"
#: src/view/com/util/images/Gallery.tsx:38
msgid "Image"
@@ -1828,7 +1828,7 @@ msgstr "输入你的密码"
#: src/view/com/auth/create/Step3.tsx:42
msgid "Input your user handle"
-msgstr "输入你的用户昵称"
+msgstr "输入你的用户识别符"
#: src/view/com/post-thread/PostThreadItem.tsx:231
msgid "Invalid or unsupported post record"
@@ -1845,7 +1845,7 @@ msgstr "邀请"
#: src/view/com/modals/InviteCodes.tsx:93
#: src/view/screens/Settings.tsx:399
msgid "Invite a Friend"
-msgstr "邀请一位朋友"
+msgstr "邀请朋友"
#: src/view/com/auth/create/Step1.tsx:92
#: src/view/com/auth/create/Step1.tsx:101
@@ -2033,7 +2033,7 @@ msgstr "列表已删除"
#: src/view/screens/ProfileList.tsx:282
msgid "List muted"
-msgstr "列表已静音"
+msgstr "列表已隐藏"
#: src/view/com/modals/CreateOrEditList.tsx:275
msgid "List Name"
@@ -2045,7 +2045,7 @@ msgstr "取消屏蔽列表"
#: src/view/screens/ProfileList.tsx:301
msgid "List unmuted"
-msgstr "取消静音列表"
+msgstr "取消隐藏列表"
#: src/Navigation.tsx:110
#: src/view/screens/Profile.tsx:176
@@ -2092,7 +2092,7 @@ msgstr "登出"
#: src/view/screens/Moderation.tsx:136
msgid "Logged-out visibility"
-msgstr "登出可见性"
+msgstr "未登录用户可见性"
#: src/view/com/auth/login/ChooseAccountForm.tsx:133
msgid "Login to account that is not listed"
@@ -2130,47 +2130,47 @@ msgstr "来自服务器的信息:{0}"
#: src/view/shell/Drawer.tsx:514
#: src/view/shell/Drawer.tsx:515
msgid "Moderation"
-msgstr "管理员"
+msgstr "限制"
#: src/view/com/lists/ListCard.tsx:92
#: src/view/com/modals/UserAddRemoveLists.tsx:206
msgid "Moderation list by {0}"
-msgstr "管理员列表由 {0} 创建"
+msgstr "限制列表由 {0} 创建"
#: src/view/screens/ProfileList.tsx:774
msgid "Moderation list by <0/>"
-msgstr "管理员列表由 0> 创建"
+msgstr "限制列表由 0> 创建"
#: src/view/com/lists/ListCard.tsx:90
#: src/view/com/modals/UserAddRemoveLists.tsx:204
#: src/view/screens/ProfileList.tsx:772
msgid "Moderation list by you"
-msgstr "管理员列表由你创建"
+msgstr "限制列表由你创建"
#: src/view/com/modals/CreateOrEditList.tsx:197
msgid "Moderation list created"
-msgstr "管理员列表已创建"
+msgstr "限制列表已创建"
#: src/view/com/modals/CreateOrEditList.tsx:183
msgid "Moderation list updated"
-msgstr "管理员列表已更新"
+msgstr "限制列表已更新"
#: src/view/screens/Moderation.tsx:95
msgid "Moderation lists"
-msgstr "管理员列表"
+msgstr "限制列表"
#: src/Navigation.tsx:120
#: src/view/screens/ModerationModlists.tsx:58
msgid "Moderation Lists"
-msgstr "管理员列表"
+msgstr "限制列表"
#: src/view/screens/Settings.tsx:613
msgid "Moderation settings"
-msgstr "管理员设置"
+msgstr "限制设置"
#: src/view/com/modals/ModerationDetails.tsx:35
msgid "Moderator has chosen to set a general warning on the content."
-msgstr "管理员选择对内容设置一般警告。"
+msgstr "限制选择对内容设置一般警告。"
#: src/view/shell/desktop/Feeds.tsx:53
msgid "More feeds"
@@ -2192,48 +2192,48 @@ msgstr "最多点赞优先"
#: src/view/com/profile/ProfileHeader.tsx:374
msgid "Mute Account"
-msgstr "静音账户"
+msgstr "隐藏账户"
#: src/view/screens/ProfileList.tsx:543
msgid "Mute accounts"
-msgstr "静音账户"
+msgstr "隐藏账户"
#: src/view/screens/ProfileList.tsx:490
msgid "Mute list"
-msgstr "静音列表"
+msgstr "隐藏列表"
#: src/view/screens/ProfileList.tsx:274
msgid "Mute these accounts?"
-msgstr "静音这些账户?"
+msgstr "隐藏这些账户?"
#: src/view/screens/ProfileList.tsx:278
msgid "Mute this List"
-msgstr "静音这个列表"
+msgstr "隐藏这个列表"
#: src/view/com/util/forms/PostDropdownBtn.tsx:171
msgid "Mute thread"
-msgstr "静音讨论串"
+msgstr "隐藏讨论串"
#: src/view/com/lists/ListCard.tsx:101
msgid "Muted"
-msgstr "已经印"
+msgstr "已隐藏"
#: src/view/screens/Moderation.tsx:109
msgid "Muted accounts"
-msgstr "已静音账户"
+msgstr "已隐藏账户"
#: src/Navigation.tsx:125
#: src/view/screens/ModerationMutedAccounts.tsx:107
msgid "Muted Accounts"
-msgstr "已静音账户"
+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 "已静音的账户将不会在你的通知或时间线中显示,被静音账户将不会收到通知。"
+msgstr "已隐藏的账户将不会在你的通知或时间线中显示,被隐藏账户将不会收到通知。"
#: src/view/screens/ProfileList.tsx:276
msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them."
-msgstr "被静音的账户将不会得知你已将他静音,已静音的账户将不会在你的通知或时间线中显示。"
+msgstr "被隐藏的账户将不会得知你已将他隐藏,已隐藏的账户将不会在你的通知或时间线中显示。"
#: src/view/com/modals/BirthDateSettings.tsx:56
msgid "My Birthday"
@@ -2293,15 +2293,15 @@ msgstr "永远不会失去对你的关注者或数据的访问。"
#: src/view/screens/Lists.tsx:76
msgctxt "action"
msgid "New"
-msgstr "新"
+msgstr "新建"
#: src/view/screens/ModerationModlists.tsx:78
msgid "New"
-msgstr "新"
+msgstr "新建"
#: src/view/com/modals/CreateOrEditList.tsx:252
msgid "New Moderation List"
-msgstr "新的管理员列表"
+msgstr "新的限制列表"
#: src/view/com/auth/login/SetNewPasswordForm.tsx:150
msgid "New password"
@@ -2309,7 +2309,7 @@ msgstr "新密码"
#: src/view/com/modals/ChangePassword.tsx:215
msgid "New Password"
-msgstr ""
+msgstr "新密码"
#: src/view/com/feeds/FeedPage.tsx:201
msgctxt "action"
@@ -2370,7 +2370,7 @@ msgstr "下一张图片"
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "No"
-msgstr "没有"
+msgstr "停用"
#: src/view/screens/ProfileFeed.tsx:584
#: src/view/screens/ProfileList.tsx:754
@@ -2398,7 +2398,7 @@ msgstr "未找到\"{query}\"的结果"
#: src/view/screens/Search/Search.tsx:280
#: src/view/screens/Search/Search.tsx:308
msgid "No results found for {query}"
-msgstr "未找到{query}的结果"
+msgstr "未找到 {query} 的结果"
#: src/view/com/modals/EmbedConsent.tsx:129
msgid "No thanks"
@@ -2480,7 +2480,7 @@ msgstr "打开"
#: src/view/com/composer/Composer.tsx:470
#: src/view/com/composer/Composer.tsx:471
msgid "Open emoji picker"
-msgstr "打开emoji选择器"
+msgstr "打开 emoji 选择器"
#: src/view/screens/Settings.tsx:706
msgid "Open links with in-app browser"
@@ -2558,7 +2558,7 @@ msgstr "打开使用自定义域名的模式"
#: src/view/screens/Settings.tsx:614
msgid "Opens moderation settings"
-msgstr "打开管理员设置"
+msgstr "打开限制设置"
#: src/view/com/auth/login/LoginForm.tsx:236
msgid "Opens password reset form"
@@ -2688,11 +2688,11 @@ msgstr "播放 GIF"
#: src/view/com/auth/create/state.ts:177
msgid "Please choose your handle."
-msgstr "请选择你的昵称。"
+msgstr "请设置你的用户识别符。"
#: src/view/com/auth/create/state.ts:160
msgid "Please choose your password."
-msgstr "请选择你的密码。"
+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."
@@ -2850,7 +2850,7 @@ msgstr "公开内容"
#: src/view/screens/ModerationModlists.tsx:61
msgid "Public, shareable lists of users to mute or block in bulk."
-msgstr "公开且可共享的批量静音或屏蔽列表。"
+msgstr "公开且可共享的批量隐藏或屏蔽列表。"
#: src/view/screens/Lists.tsx:61
msgid "Public, shareable lists which can drive feeds."
@@ -3050,7 +3050,7 @@ msgstr "请求码"
#: src/view/com/modals/ChangePassword.tsx:239
#: src/view/com/modals/ChangePassword.tsx:241
msgid "Request Code"
-msgstr ""
+msgstr "确认码"
#: src/view/screens/Settings.tsx:450
msgid "Require alt text before posting"
@@ -3067,7 +3067,7 @@ msgstr "重置码"
#: src/view/com/modals/ChangePassword.tsx:190
msgid "Reset Code"
-msgstr ""
+msgstr "重置代码"
#: src/view/screens/Settings.tsx:806
msgid "Reset onboarding"
@@ -3155,7 +3155,7 @@ msgstr "保存更改"
#: src/view/com/modals/ChangeHandle.tsx:170
msgid "Save handle change"
-msgstr "保存新的昵称"
+msgstr "保存新的用户识别符"
#: src/view/com/modals/crop-image/CropImage.web.tsx:144
msgid "Save image crop"
@@ -3171,7 +3171,7 @@ msgstr "保存个人资料中所做的变更"
#: src/view/com/modals/ChangeHandle.tsx:171
msgid "Saves handle change to {handle}"
-msgstr "保存昵称更改至 {handle}"
+msgstr "保存用户识别符更改至 {handle}"
#: src/screens/Onboarding/index.tsx:36
msgid "Science"
@@ -3321,7 +3321,7 @@ msgstr "设置年龄"
#: src/view/screens/Settings.tsx:482
msgid "Set color theme to dark"
-msgstr "设置主题为暗色模式"
+msgstr "设置主题为深色模式"
#: src/view/screens/Settings.tsx:475
msgid "Set color theme to light"
@@ -3333,11 +3333,11 @@ msgstr "设置主题跟随系统设置"
#: src/view/screens/Settings.tsx:508
msgid "Set dark theme to the dark theme"
-msgstr ""
+msgstr "设置深色模式至深黑"
#: src/view/screens/Settings.tsx:501
msgid "Set dark theme to the dim theme"
-msgstr ""
+msgstr "设置深色模式至暗淡"
#: src/view/com/auth/login/SetNewPasswordForm.tsx:104
msgid "Set new password"
@@ -3349,23 +3349,23 @@ msgstr "设置密码"
#: src/view/screens/PreferencesHomeFeed.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
msgid "Set this setting to \"No\" to hide all replies from your feed."
-msgstr "将此设置项设为\"否\"以隐藏来自订阅信息流的所有回复。"
+msgstr "停用此设置项以隐藏来自订阅信息流的所有回复。"
#: src/view/screens/PreferencesHomeFeed.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 "将此设置项设为\"是\"以在分层视图中显示回复。这是一个实验性功能。"
+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 "将此设置项设为\"是\"以在关注信息流中显示已保存信息流的样例。这是一个实验性功能。"
+msgstr "启用此设置项以在关注信息流中显示已保存信息流的样例。这是一个实验性功能。"
#: src/screens/Onboarding/Layout.tsx:50
msgid "Set up your account"
@@ -3846,7 +3846,7 @@ msgstr "出现问题了,请检查你的互联网连接并重试。"
#: src/view/com/util/ErrorBoundary.tsx:36
msgid "There was an unexpected issue in the application. Please let us know if this happened to you!"
-msgstr "\"应用发生意外错误,请联系我们进行错误反馈!"
+msgstr "应用发生意外错误,请联系我们进行错误反馈!"
#: src/screens/Deactivated.tsx:107
msgid "There's been a rush of new users to Bluesky! We'll activate your account as soon as we can."
@@ -3862,7 +3862,7 @@ msgstr "这里是一些受欢迎的账号,你可能会喜欢:"
#: src/view/com/util/moderation/ScreenHider.tsx:88
msgid "This {screenDescription} has been flagged:"
-msgstr "{screenDescription}\" 已被标记:"
+msgstr "这个 {screenDescription} 已被标记:"
#: src/view/com/util/moderation/ScreenHider.tsx:83
msgid "This account has requested that users sign in to view their profile."
@@ -3928,11 +3928,11 @@ msgstr "此用户包含在你已屏蔽的 <0/> 列表中。"
#: src/view/com/modals/ModerationDetails.tsx:74
msgid "This user is included in the <0/> list which you have muted."
-msgstr ""
+msgstr "此用户包含在你已隐藏的 <0/> 列表中。"
#: src/view/com/modals/ModerationDetails.tsx:74
#~ msgid "This user is included the <0/> list which you have muted."
-#~ msgstr "此用户包含在你已静音的 <0/> 列表中。"
+#~ msgstr "此用户包含在你已隐藏的 <0/> 列表中。"
#: src/view/com/modals/SelfLabel.tsx:137
msgid "This warning is only available for posts with media attached."
@@ -3980,7 +3980,7 @@ msgstr "取消屏蔽列表"
#: src/view/screens/ProfileList.tsx:490
msgid "Un-mute list"
-msgstr "取消静音列表"
+msgstr "取消隐藏列表"
#: src/view/com/auth/create/CreateAccount.tsx:66
#: src/view/com/auth/login/ForgotPasswordForm.tsx:87
@@ -4031,15 +4031,15 @@ msgstr "取消喜欢"
#: src/view/screens/ProfileList.tsx:596
msgid "Unmute"
-msgstr "取消静音"
+msgstr "取消隐藏"
#: src/view/com/profile/ProfileHeader.tsx:373
msgid "Unmute Account"
-msgstr "取消静音账户"
+msgstr "取消隐藏账户"
#: src/view/com/util/forms/PostDropdownBtn.tsx:171
msgid "Unmute thread"
-msgstr "取消静音讨论串"
+msgstr "取消隐藏讨论串"
#: src/view/screens/ProfileFeed.tsx:353
#: src/view/screens/ProfileList.tsx:580
@@ -4048,7 +4048,7 @@ msgstr "取消固定"
#: src/view/screens/ProfileList.tsx:473
msgid "Unpin moderation list"
-msgstr "取消固定管理员列表"
+msgstr "取消固定限制列表"
#: src/view/screens/ProfileFeed.tsx:345
msgid "Unsave"
@@ -4090,11 +4090,11 @@ msgstr "使用系统默认浏览器"
#: src/view/com/modals/AddAppPasswords.tsx:155
msgid "Use this to sign into the other app along with your handle."
-msgstr "使用这个和你的昵称一起登录其他应用。"
+msgstr "使用这个和你的用户识别符一起登录其他应用。"
#: src/view/com/modals/ServerInput.tsx:105
msgid "Use your domain as your Bluesky client service provider"
-msgstr "使用你的域名作为 Bluesky 客户服务提供商"
+msgstr "使用你的域名作为 Bluesky 客户端的服务提供方"
#: src/view/com/modals/InviteCodes.tsx:200
msgid "Used by:"
@@ -4114,7 +4114,7 @@ msgstr "用户屏蔽了你"
#: src/view/com/auth/create/Step3.tsx:41
msgid "User handle"
-msgstr "用户昵称"
+msgstr "用户识别符"
#: src/view/com/lists/ListCard.tsx:84
#: src/view/com/modals/UserAddRemoveLists.tsx:198
@@ -4220,7 +4220,7 @@ msgstr "警告"
#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:124
msgid "We also think you'll like \"For You\" by Skygaze:"
-msgstr "我们认为还你会喜欢 Skygaze 所维护的 \"For You\""
+msgstr "我们认为还你会喜欢 Skygaze 所维护的 \"For You\":"
#: src/screens/Deactivated.tsx:134
msgid "We estimate {estimatedTime} until your account is ready."
@@ -4236,7 +4236,7 @@ msgstr "我们已经看完了你关注的帖子。这是来自 <0/> 的最新消
#: src/screens/Onboarding/StepAlgoFeeds/index.tsx:119
msgid "We recommend our \"Discover\" feed:"
-msgstr "我们推荐我们的 \"Discover\" 信息流"
+msgstr "我们推荐我们的 \"Discover\" 信息流:"
#: 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."
@@ -4329,7 +4329,7 @@ msgstr "XXXXXX"
#: src/view/screens/PreferencesThreads.tsx:106
#: src/view/screens/PreferencesThreads.tsx:129
msgid "Yes"
-msgstr "是的"
+msgstr "启用"
#: src/screens/Deactivated.tsx:131
msgid "You are in line."
@@ -4378,11 +4378,11 @@ msgstr "你已屏蔽了此用户,你将无法查看他们发布的内容。"
#: 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/view/com/modals/ModerationDetails.tsx:87
msgid "You have muted this user."
-msgstr "你已静音这个用户。"
+msgstr "你已隐藏这个用户。"
#: src/view/com/feeds/ProfileFeedgens.tsx:136
msgid "You have no feeds."
@@ -4403,7 +4403,7 @@ msgstr "你尚未创建任何 App 专用密码,可以通过点击下面的按
#: 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 "你还没有静音任何账号。要静音账号,请转到其个人资料并在其账号上的菜单中选择 \"静音账号\"。"
+msgstr "你还没有隐藏任何账号。要隐藏账号,请转到其个人资料并在其账号上的菜单中选择 \"隐藏账号\"。"
#: src/view/com/modals/ContentFilteringSettings.tsx:170
msgid "You must be 18 or older to enable adult content."
@@ -4487,11 +4487,11 @@ msgstr "你的关注信息流为空!关注更多用户去看看他们发了什
#: src/view/com/auth/create/Step3.tsx:45
msgid "Your full handle will be"
-msgstr "你的完整昵称将修改为"
+msgstr "你的完整用户识别符将修改为"
#: src/view/com/modals/ChangeHandle.tsx:270
msgid "Your full handle will be <0>@{0}0>"
-msgstr "你的完整昵称将修改为 <0>@{0}0>"
+msgstr "你的完整用户识别符将修改为 <0>@{0}0>"
#: src/view/screens/Settings.tsx:430
#: src/view/shell/desktop/RightNav.tsx:137
@@ -4501,7 +4501,7 @@ msgstr "在使用 App 专用密码登录时,你的邀请码将被隐藏"
#: src/view/com/modals/ChangePassword.tsx:155
msgid "Your password has been changed successfully!"
-msgstr ""
+msgstr "你的密码已更改成功!"
#: src/view/com/composer/Composer.tsx:267
msgid "Your post has been published"
@@ -4511,7 +4511,7 @@ msgstr "你的帖子已发送"
#: src/view/com/auth/onboarding/WelcomeDesktop.tsx:59
#: src/view/com/auth/onboarding/WelcomeMobile.tsx:59
msgid "Your posts, likes, and blocks are public. Mutes are private."
-msgstr "你的帖子、点赞和屏蔽是公开可见的,而静音不可见。"
+msgstr "你的帖子、点赞和屏蔽是公开可见的,而隐藏不可见。"
#: src/view/com/modals/SwitchAccount.tsx:84
#: src/view/screens/Settings.tsx:125
@@ -4524,4 +4524,4 @@ msgstr "你的回复已发送"
#: src/view/com/auth/create/Step3.tsx:28
msgid "Your user handle"
-msgstr "你的用户昵称"
+msgstr "你的用户识别符"
diff --git a/src/screens/Deactivated.tsx b/src/screens/Deactivated.tsx
index 4a2ebf5899..f4c2014750 100644
--- a/src/screens/Deactivated.tsx
+++ b/src/screens/Deactivated.tsx
@@ -10,9 +10,8 @@ import {pluralize} from '#/lib/strings/helpers'
import {atoms as a, useTheme, useBreakpoints} from '#/alf'
import {Button, ButtonIcon, ButtonText} from '#/components/Button'
-import {Text} from '#/components/Typography'
+import {Text, P} from '#/components/Typography'
import {isWeb} from '#/platform/detection'
-import {H2, P} from '#/components/Typography'
import {ScrollView} from '#/view/com/util/Views'
import {Loader} from '#/components/Loader'
import {Logo} from '#/view/icons/Logo'
@@ -100,10 +99,10 @@ export function Deactivated() {
-
+ You're in line
-
-
+
+
There's been a rush of new users to Bluesky! We'll activate your
account as soon as we can.
diff --git a/src/screens/Onboarding/Layout.tsx b/src/screens/Onboarding/Layout.tsx
index b9683999f7..d887c08209 100644
--- a/src/screens/Onboarding/Layout.tsx
+++ b/src/screens/Onboarding/Layout.tsx
@@ -165,7 +165,7 @@ export function Layout({children}: React.PropsWithChildren<{}>) {
isWeb ? a.fixed : a.absolute,
{bottom: 0, left: 0, right: 0},
t.atoms.bg,
- t.atoms.border,
+ t.atoms.border_contrast_low,
a.border_t,
a.align_center,
gtMobile ? a.px_5xl : a.px_xl,
@@ -227,5 +227,7 @@ export function Description({
style,
}: React.PropsWithChildren) {
const t = useTheme()
- return
{children}
+ return (
+
{children}
+ )
}
diff --git a/src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx b/src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx
index c7f1e6e4d4..dec53d2edb 100644
--- a/src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx
+++ b/src/screens/Onboarding/StepAlgoFeeds/FeedCard.tsx
@@ -8,7 +8,7 @@ import {msg} from '@lingui/macro'
import {useTheme, atoms as a} from '#/alf'
import * as Toggle from '#/components/forms/Toggle'
import {useFeedSourceInfoQuery, FeedSourceInfo} from '#/state/queries/feed'
-import {Text, H3} from '#/components/Typography'
+import {Text} from '#/components/Typography'
import {RichText} from '#/components/RichText'
import {Check_Stroke2_Corner0_Rounded as Check} from '#/components/icons/Check'
@@ -94,14 +94,14 @@ function PrimaryFeedCardInner({
-
{feed.displayName}
-
+
-
{feed.displayName}
-
+
diff --git a/src/screens/Onboarding/StepAlgoFeeds/index.tsx b/src/screens/Onboarding/StepAlgoFeeds/index.tsx
index 7a87318e82..33e519207b 100644
--- a/src/screens/Onboarding/StepAlgoFeeds/index.tsx
+++ b/src/screens/Onboarding/StepAlgoFeeds/index.tsx
@@ -115,12 +115,22 @@ export function StepAlgoFeeds() {
onChange={setPrimaryFeedUris}
label={_(msg`Select your primary algorithmic feeds`)}>
+ style={[
+ a.text_md,
+ a.pt_4xl,
+ a.pb_md,
+ t.atoms.text_contrast_medium,
+ ]}>
We recommend our "Discover" feed:
+ style={[
+ a.text_md,
+ a.pt_4xl,
+ a.pb_lg,
+ t.atoms.text_contrast_medium,
+ ]}>
We also think you'll like "For You" by Skygaze:
@@ -131,7 +141,12 @@ export function StepAlgoFeeds() {
onChange={setSeconaryFeedUris}
label={_(msg`Select your secondary algorithmic feeds`)}>
+ style={[
+ a.text_md,
+ a.pt_4xl,
+ a.pb_lg,
+ t.atoms.text_contrast_medium,
+ ]}>
There are many feeds to try:
diff --git a/src/screens/Onboarding/StepFinished.tsx b/src/screens/Onboarding/StepFinished.tsx
index af73c6fc12..72d53658b7 100644
--- a/src/screens/Onboarding/StepFinished.tsx
+++ b/src/screens/Onboarding/StepFinished.tsx
@@ -101,7 +101,7 @@ export function StepFinished() {
Public
+ style={[t.atoms.text_contrast_medium, a.text_md, a.leading_snug]}>
Your posts, likes, and blocks are public. Mutes are private.
@@ -115,7 +115,7 @@ export function StepFinished() {
Open
+ style={[t.atoms.text_contrast_medium, a.text_md, a.leading_snug]}>
Never lose access to your followers or data.
@@ -131,7 +131,7 @@ export function StepFinished() {
Flexible
+ style={[t.atoms.text_contrast_medium, a.text_md, a.leading_snug]}>
Choose the algorithms that power your custom feeds.
diff --git a/src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx b/src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx
index 6b456de80e..b38b3df1ed 100644
--- a/src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx
+++ b/src/screens/Onboarding/StepModeration/AdultContentEnabledPref.tsx
@@ -96,7 +96,7 @@ export function AdultContentEnabledPref({
diff --git a/src/screens/Onboarding/StepModeration/ModerationOption.tsx b/src/screens/Onboarding/StepModeration/ModerationOption.tsx
index d216692d07..c61b520bab 100644
--- a/src/screens/Onboarding/StepModeration/ModerationOption.tsx
+++ b/src/screens/Onboarding/StepModeration/ModerationOption.tsx
@@ -57,7 +57,7 @@ export function ModerationOption({
entering={isMounted.current ? FadeIn : undefined}>
{groupInfo.title}
-
+
{groupInfo.subtitle}
diff --git a/src/screens/Onboarding/StepSuggestedAccounts/SuggestedAccountCard.tsx b/src/screens/Onboarding/StepSuggestedAccounts/SuggestedAccountCard.tsx
index bc707ce8fb..0670058920 100644
--- a/src/screens/Onboarding/StepSuggestedAccounts/SuggestedAccountCard.tsx
+++ b/src/screens/Onboarding/StepSuggestedAccounts/SuggestedAccountCard.tsx
@@ -95,7 +95,7 @@ export function SuggestedAccountCard({
{profile.displayName}
- {profile.handle}
+ {profile.handle}
@@ -124,7 +124,7 @@ export function SuggestedAccountCard({
borderTopWidth: 1,
},
a.w_full,
- t.name === 'light' ? t.atoms.border : t.atoms.border_contrast,
+ t.atoms.border_contrast_low,
ctx.selected && {
borderTopColor: t.palette.primary_200,
},
diff --git a/src/screens/Onboarding/StepSuggestedAccounts/index.tsx b/src/screens/Onboarding/StepSuggestedAccounts/index.tsx
index 965dae3347..3caa38d4f8 100644
--- a/src/screens/Onboarding/StepSuggestedAccounts/index.tsx
+++ b/src/screens/Onboarding/StepSuggestedAccounts/index.tsx
@@ -175,7 +175,11 @@ export function StepSuggestedAccounts() {
)}
onPress={handleContinue}>
- Follow All
+ {dids.length === 20 ? (
+ Follow All
+ ) : (
+ Follow
+ )}
diff --git a/src/state/cache/profile-shadow.ts b/src/state/cache/profile-shadow.ts
index 79a1f228ed..34fe5995d3 100644
--- a/src/state/cache/profile-shadow.ts
+++ b/src/state/cache/profile-shadow.ts
@@ -22,15 +22,15 @@ export interface ProfileShadow {
blockingUri: string | undefined
}
-type ProfileView =
- | AppBskyActorDefs.ProfileView
- | AppBskyActorDefs.ProfileViewBasic
- | AppBskyActorDefs.ProfileViewDetailed
-
-const shadows: WeakMap> = new WeakMap()
+const shadows: WeakMap<
+ AppBskyActorDefs.ProfileView,
+ Partial
+> = new WeakMap()
const emitter = new EventEmitter()
-export function useProfileShadow(profile: ProfileView): Shadow {
+export function useProfileShadow<
+ TProfileView extends AppBskyActorDefs.ProfileView,
+>(profile: TProfileView): Shadow {
const [shadow, setShadow] = useState(() => shadows.get(profile))
const [prevPost, setPrevPost] = useState(profile)
if (profile !== prevPost) {
@@ -70,10 +70,10 @@ export function updateProfileShadow(
})
}
-function mergeShadow(
- profile: ProfileView,
+function mergeShadow(
+ profile: TProfileView,
shadow: Partial,
-): Shadow {
+): Shadow {
return castAsShadow({
...profile,
viewer: {
@@ -89,7 +89,9 @@ function mergeShadow(
})
}
-function* findProfilesInCache(did: string): Generator {
+function* findProfilesInCache(
+ did: string,
+): Generator {
yield* findAllProfilesInListMembersQueryData(queryClient, did)
yield* findAllProfilesInMyBlockedAccountsQueryData(queryClient, did)
yield* findAllProfilesInMyMutedAccountsQueryData(queryClient, did)
diff --git a/src/state/modals/index.tsx b/src/state/modals/index.tsx
index e3a4ccd8c3..691add0050 100644
--- a/src/state/modals/index.tsx
+++ b/src/state/modals/index.tsx
@@ -26,17 +26,6 @@ export interface EditProfileModal {
onUpdate?: () => void
}
-export interface ProfilePreviewModal {
- name: 'profile-preview'
- did: string
-}
-
-export interface ServerInputModal {
- name: 'server-input'
- initialService: string
- onSelect: (url: string) => void
-}
-
export interface ModerationDetailsModal {
name: 'moderation-details'
context: 'account' | 'content'
@@ -202,7 +191,6 @@ export type Modal =
| ChangeHandleModal
| DeleteAccountModal
| EditProfileModal
- | ProfilePreviewModal
| BirthDateSettingsModal
| VerifyEmailModal
| ChangeEmailModal
@@ -228,7 +216,6 @@ export type Modal =
| AltTextImageModal
| CropImageModal
| EditImageModal
- | ServerInputModal
| RepostModal
| SelfLabelModal
| ThreadgateModal
diff --git a/src/state/persisted/legacy.ts b/src/state/persisted/legacy.ts
index cb4b5b1a98..cce080c84c 100644
--- a/src/state/persisted/legacy.ts
+++ b/src/state/persisted/legacy.ts
@@ -112,6 +112,7 @@ export function transform(legacy: Partial): Schema {
hiddenPosts: defaults.hiddenPosts,
externalEmbeds: defaults.externalEmbeds,
lastSelectedHomeFeed: defaults.lastSelectedHomeFeed,
+ pdsAddressHistory: defaults.pdsAddressHistory,
}
}
diff --git a/src/state/persisted/schema.ts b/src/state/persisted/schema.ts
index 6771ee6e4f..0aefaa4744 100644
--- a/src/state/persisted/schema.ts
+++ b/src/state/persisted/schema.ts
@@ -57,6 +57,7 @@ export const schema = z.object({
hiddenPosts: z.array(z.string()).optional(), // should move to server
useInAppBrowser: z.boolean().optional(),
lastSelectedHomeFeed: z.string().optional(),
+ pdsAddressHistory: z.array(z.string()).optional(),
})
export type Schema = z.infer
@@ -91,4 +92,5 @@ export const defaults: Schema = {
hiddenPosts: [],
useInAppBrowser: undefined,
lastSelectedHomeFeed: undefined,
+ pdsAddressHistory: [],
}
diff --git a/src/state/queries/notifications/util.ts b/src/state/queries/notifications/util.ts
index 1c85d2b6d2..626d3e9118 100644
--- a/src/state/queries/notifications/util.ts
+++ b/src/state/queries/notifications/util.ts
@@ -12,7 +12,7 @@ import {moderatePost_wrapped as moderatePost} from '#/lib/moderatePost_wrapped'
import chunk from 'lodash.chunk'
import {QueryClient} from '@tanstack/react-query'
import {getAgent} from '../../session'
-import {precacheProfile as precacheResolvedUri} from '../resolve-uri'
+import {precacheProfile} from '../profile'
import {NotificationType, FeedNotification, FeedPage} from './types'
const GROUPABLE_REASONS = ['like', 'repost', 'follow']
@@ -59,7 +59,7 @@ export async function fetchPage({
if (notif.subjectUri) {
notif.subject = subjects.get(notif.subjectUri)
if (notif.subject) {
- precacheResolvedUri(queryClient, notif.subject.author) // precache the handle->did resolution
+ precacheProfile(queryClient, notif.subject.author)
}
}
}
diff --git a/src/state/queries/post-feed.ts b/src/state/queries/post-feed.ts
index b422fa8fe5..3200090897 100644
--- a/src/state/queries/post-feed.ts
+++ b/src/state/queries/post-feed.ts
@@ -21,7 +21,7 @@ import {MergeFeedAPI} from 'lib/api/feed/merge'
import {HomeFeedAPI} from '#/lib/api/feed/home'
import {logger} from '#/logger'
import {STALE} from '#/state/queries'
-import {precacheFeedPosts as precacheResolvedUris} from './resolve-uri'
+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'
@@ -138,7 +138,7 @@ export function usePostFeedQuery(
}
const res = await api.fetch({cursor, limit: PAGE_SIZE})
- precacheResolvedUris(queryClient, res.feed) // precache the handle->did resolution
+ precacheFeedPostProfiles(queryClient, res.feed)
/*
* If this is a public view, we need to check if posts fail moderation.
diff --git a/src/state/queries/post-thread.ts b/src/state/queries/post-thread.ts
index abb0fea111..ba42431639 100644
--- a/src/state/queries/post-thread.ts
+++ b/src/state/queries/post-thread.ts
@@ -10,7 +10,7 @@ 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 {precacheThreadPosts as precacheResolvedUris} from './resolve-uri'
+import {precacheThreadPostProfiles} from './profile'
import {getEmbeddedPost} from './util'
export const RQKEY = (uri: string) => ['post-thread', uri]
@@ -71,7 +71,7 @@ export function usePostThreadQuery(uri: string | undefined) {
const res = await getAgent().getPostThread({uri: uri!})
if (res.success) {
const nodes = responseToThreadNodes(res.data.thread)
- precacheResolvedUris(queryClient, nodes) // precache the handle->did resolution
+ precacheThreadPostProfiles(queryClient, nodes)
return nodes
}
return {type: 'unknown', uri: uri!}
diff --git a/src/state/queries/profile.ts b/src/state/queries/profile.ts
index affb8295c6..e81ea0f3f0 100644
--- a/src/state/queries/profile.ts
+++ b/src/state/queries/profile.ts
@@ -4,6 +4,9 @@ import {
AppBskyActorDefs,
AppBskyActorProfile,
AppBskyActorGetProfile,
+ AppBskyFeedDefs,
+ AppBskyEmbedRecord,
+ AppBskyEmbedRecordWithMedia,
} from '@atproto/api'
import {
useQuery,
@@ -23,9 +26,14 @@ import {RQKEY as RQKEY_MY_MUTED} from './my-muted-accounts'
import {RQKEY as RQKEY_MY_BLOCKED} from './my-blocked-accounts'
import {STALE} from '#/state/queries'
import {track} from '#/lib/analytics/analytics'
+import {ThreadNode} from './post-thread'
export const RQKEY = (did: string) => ['profile', did]
export const profilesQueryKey = (handles: string[]) => ['profiles', handles]
+export const profileBasicQueryKey = (didOrHandle: string) => [
+ 'profileBasic',
+ didOrHandle,
+]
export function useProfileQuery({
did,
@@ -34,18 +42,26 @@ export function useProfileQuery({
did: string | undefined
staleTime?: number
}) {
- return useQuery({
+ const queryClient = useQueryClient()
+ return useQuery({
// WARNING
// this staleTime is load-bearing
// if you remove it, the UI infinite-loops
// -prf
staleTime,
refetchOnWindowFocus: true,
- queryKey: RQKEY(did || ''),
+ queryKey: RQKEY(did ?? ''),
queryFn: async () => {
- const res = await getAgent().getProfile({actor: did || ''})
+ const res = await getAgent().getProfile({actor: did ?? ''})
return res.data
},
+ placeholderData: () => {
+ if (!did) return
+
+ return queryClient.getQueryData(
+ profileBasicQueryKey(did),
+ )
+ },
enabled: !!did,
})
}
@@ -405,6 +421,64 @@ function useProfileUnblockMutation() {
})
}
+export function precacheProfile(
+ queryClient: QueryClient,
+ profile: AppBskyActorDefs.ProfileViewBasic,
+) {
+ queryClient.setQueryData(profileBasicQueryKey(profile.handle), profile)
+ queryClient.setQueryData(profileBasicQueryKey(profile.did), profile)
+}
+
+export function precacheFeedPostProfiles(
+ queryClient: QueryClient,
+ posts: AppBskyFeedDefs.FeedViewPost[],
+) {
+ for (const post of posts) {
+ // Save the author of the post every time
+ precacheProfile(queryClient, post.post.author)
+ precachePostEmbedProfile(queryClient, post.post.embed)
+
+ // Cache parent author and embeds
+ const parent = post.reply?.parent
+ if (AppBskyFeedDefs.isPostView(parent)) {
+ precacheProfile(queryClient, parent.author)
+ precachePostEmbedProfile(queryClient, parent.embed)
+ }
+ }
+}
+
+function precachePostEmbedProfile(
+ queryClient: QueryClient,
+ embed: AppBskyFeedDefs.PostView['embed'],
+) {
+ if (AppBskyEmbedRecord.isView(embed)) {
+ if (AppBskyEmbedRecord.isViewRecord(embed.record)) {
+ precacheProfile(queryClient, embed.record.author)
+ }
+ } else if (AppBskyEmbedRecordWithMedia.isView(embed)) {
+ if (AppBskyEmbedRecord.isViewRecord(embed.record.record)) {
+ precacheProfile(queryClient, embed.record.record.author)
+ }
+ }
+}
+
+export function precacheThreadPostProfiles(
+ queryClient: QueryClient,
+ node: ThreadNode,
+) {
+ if (node.type === 'post') {
+ precacheProfile(queryClient, node.post.author)
+ if (node.parent) {
+ precacheThreadPostProfiles(queryClient, node.parent)
+ }
+ if (node.replies?.length) {
+ for (const reply of node.replies) {
+ precacheThreadPostProfiles(queryClient, reply)
+ }
+ }
+ }
+}
+
async function whenAppViewReady(
actor: string,
fn: (res: AppBskyActorGetProfile.Response) => boolean,
diff --git a/src/state/queries/resolve-uri.ts b/src/state/queries/resolve-uri.ts
index a75998466e..95fc867ddf 100644
--- a/src/state/queries/resolve-uri.ts
+++ b/src/state/queries/resolve-uri.ts
@@ -1,9 +1,9 @@
-import {QueryClient, useQuery, UseQueryResult} from '@tanstack/react-query'
-import {AtUri, AppBskyActorDefs, AppBskyFeedDefs} 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 {ThreadNode} from './post-thread'
export const RQKEY = (didOrHandle: string) => ['resolved-did', didOrHandle]
@@ -22,55 +22,29 @@ export function useResolveUriQuery(uri: string | undefined): UriUseQueryResult {
}
export function useResolveDidQuery(didOrHandle: string | undefined) {
+ const queryClient = useQueryClient()
+
return useQuery({
staleTime: STALE.HOURS.ONE,
- queryKey: RQKEY(didOrHandle || ''),
- async queryFn() {
- if (!didOrHandle) {
- return ''
- }
- if (!didOrHandle.startsWith('did:')) {
- const res = await getAgent().resolveHandle({handle: didOrHandle})
- didOrHandle = res.data.did
- }
- return didOrHandle
+ queryKey: RQKEY(didOrHandle ?? ''),
+ queryFn: async () => {
+ if (!didOrHandle) return ''
+ // Just return the did if it's already one
+ if (didOrHandle.startsWith('did:')) return didOrHandle
+
+ const res = await getAgent().resolveHandle({handle: didOrHandle})
+ return res.data.did
+ },
+ initialData: () => {
+ // Return undefined if no did or handle
+ if (!didOrHandle) return
+
+ const profile =
+ queryClient.getQueryData(
+ RQKEY_PROFILE_BASIC(didOrHandle),
+ )
+ return profile?.did
},
enabled: !!didOrHandle,
})
}
-
-export function precacheProfile(
- queryClient: QueryClient,
- profile:
- | AppBskyActorDefs.ProfileView
- | AppBskyActorDefs.ProfileViewBasic
- | AppBskyActorDefs.ProfileViewDetailed,
-) {
- queryClient.setQueryData(RQKEY(profile.handle), profile.did)
-}
-
-export function precacheFeedPosts(
- queryClient: QueryClient,
- posts: AppBskyFeedDefs.FeedViewPost[],
-) {
- for (const post of posts) {
- precacheProfile(queryClient, post.post.author)
- }
-}
-
-export function precacheThreadPosts(
- queryClient: QueryClient,
- node: ThreadNode,
-) {
- if (node.type === 'post') {
- precacheProfile(queryClient, node.post.author)
- if (node.parent) {
- precacheThreadPosts(queryClient, node.parent)
- }
- if (node.replies?.length) {
- for (const reply of node.replies) {
- precacheThreadPosts(queryClient, reply)
- }
- }
- }
-}
diff --git a/src/state/shell/selected-feed.tsx b/src/state/shell/selected-feed.tsx
new file mode 100644
index 0000000000..a05d8661b4
--- /dev/null
+++ b/src/state/shell/selected-feed.tsx
@@ -0,0 +1,61 @@
+import React from 'react'
+import * as persisted from '#/state/persisted'
+import {isWeb} from '#/platform/detection'
+
+type StateContext = string
+type SetContext = (v: string) => void
+
+const stateContext = React.createContext('home')
+const setContext = React.createContext((_: string) => {})
+
+function getInitialFeed() {
+ if (isWeb) {
+ if (window.location.pathname === '/') {
+ const params = new URLSearchParams(window.location.search)
+ const feedFromUrl = params.get('feed')
+ if (feedFromUrl) {
+ // If explicitly booted from a link like /?feed=..., prefer that.
+ return feedFromUrl
+ }
+ }
+ const feedFromSession = sessionStorage.getItem('lastSelectedHomeFeed')
+ if (feedFromSession) {
+ // Fall back to a previously chosen feed for this browser tab.
+ return feedFromSession
+ }
+ }
+ 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 saveState = React.useCallback((feed: string) => {
+ setState(feed)
+ if (isWeb) {
+ try {
+ sessionStorage.setItem('lastSelectedHomeFeed', feed)
+ } catch {}
+ }
+ persisted.write('lastSelectedHomeFeed', feed)
+ }, [])
+
+ return (
+
+ {children}
+
+ )
+}
+
+export function useSelectedFeed() {
+ return React.useContext(stateContext)
+}
+
+export function useSetSelectedFeed() {
+ return React.useContext(setContext)
+}
diff --git a/src/view/com/auth/HomeLoggedOutCTA.tsx b/src/view/com/auth/HomeLoggedOutCTA.tsx
index 32b873ac67..f796d8baee 100644
--- a/src/view/com/auth/HomeLoggedOutCTA.tsx
+++ b/src/view/com/auth/HomeLoggedOutCTA.tsx
@@ -83,19 +83,19 @@ export function HomeLoggedOutCTA() {
diff --git a/src/view/com/auth/SplashScreen.web.tsx b/src/view/com/auth/SplashScreen.web.tsx
index d2b1a47e3a..8ef64099f0 100644
--- a/src/view/com/auth/SplashScreen.web.tsx
+++ b/src/view/com/auth/SplashScreen.web.tsx
@@ -102,17 +102,17 @@ function Footer({styles}: {styles: ReturnType}) {
return (
diff --git a/src/view/com/auth/create/Step1.tsx b/src/view/com/auth/create/Step1.tsx
index a2663da86e..94e03ff7a4 100644
--- a/src/view/com/auth/create/Step1.tsx
+++ b/src/view/com/auth/create/Step1.tsx
@@ -3,6 +3,7 @@ import {
ActivityIndicator,
Keyboard,
StyleSheet,
+ TouchableOpacity,
TouchableWithoutFeedback,
View,
} from 'react-native'
@@ -13,7 +14,6 @@ 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 {Policies} from './Policies'
import {ErrorMessage} from 'view/com/util/error/ErrorMessage'
import {isWeb} from 'platform/detection'
@@ -21,7 +21,14 @@ import {Trans, msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
import {useModalControls} from '#/state/modals'
import {logger} from '#/logger'
-import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
+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') {
@@ -43,16 +50,12 @@ export function Step1({
const pal = usePalette('default')
const {_} = useLingui()
const {openModal} = useModalControls()
+ const serverInputControl = useDialogControl()
const onPressSelectService = React.useCallback(() => {
- openModal({
- name: 'server-input',
- initialService: uiState.serviceUrl,
- onSelect: (url: string) =>
- uiDispatch({type: 'set-service-url', value: url}),
- })
+ serverInputControl.open()
Keyboard.dismiss()
- }, [uiDispatch, uiState.serviceUrl, openModal])
+ }, [serverInputControl])
const onPressWaitlist = React.useCallback(() => {
openModal({name: 'waitlist'})
@@ -64,23 +67,72 @@ export function Step1({
return (
-
-
-
+ uiDispatch({type: 'set-service-url', value: url})}
+ />
+
+
+
+
+ Hosting provider
+
+
+
+
+
+
+ {toNiceDomain(uiState.serviceUrl)}
+
+
+
+
+
+
-
+
{!uiState.serviceDescription ? (
diff --git a/src/view/com/auth/login/ForgotPasswordForm.tsx b/src/view/com/auth/login/ForgotPasswordForm.tsx
index 79399d85d7..322da2b8fd 100644
--- a/src/view/com/auth/login/ForgotPasswordForm.tsx
+++ b/src/view/com/auth/login/ForgotPasswordForm.tsx
@@ -1,6 +1,7 @@
import React, {useState, useEffect} from 'react'
import {
ActivityIndicator,
+ Keyboard,
TextInput,
TouchableOpacity,
View,
@@ -24,7 +25,9 @@ import {logger} from '#/logger'
import {Trans, msg} from '@lingui/macro'
import {useLingui} from '@lingui/react'
import {styles} from './styles'
-import {useModalControls} from '#/state/modals'
+import {useDialogControl} from '#/components/Dialog'
+
+import {ServerInputDialog} from '../server-input'
type ServiceDescription = ComAtprotoServerDescribeServer.OutputSchema
@@ -51,19 +54,16 @@ export const ForgotPasswordForm = ({
const [email, setEmail] = useState('')
const {screen} = useAnalytics()
const {_} = useLingui()
- const {openModal} = useModalControls()
+ const serverInputControl = useDialogControl()
useEffect(() => {
screen('Signin:ForgotPassword')
}, [screen])
- const onPressSelectService = () => {
- openModal({
- name: 'server-input',
- initialService: serviceUrl,
- onSelect: setServiceUrl,
- })
- }
+ const onPressSelectService = React.useCallback(() => {
+ serverInputControl.open()
+ Keyboard.dismiss()
+ }, [serverInputControl])
const onPressNext = async () => {
if (!EmailValidator.validate(email)) {
@@ -96,6 +96,10 @@ export const ForgotPasswordForm = ({
return (
<>
+ Reset password
diff --git a/src/view/com/auth/login/LoginForm.tsx b/src/view/com/auth/login/LoginForm.tsx
index 10608a54be..e480de7a4c 100644
--- a/src/view/com/auth/login/LoginForm.tsx
+++ b/src/view/com/auth/login/LoginForm.tsx
@@ -25,7 +25,9 @@ import {logger} from '#/logger'
import {Trans, msg} from '@lingui/macro'
import {styles} from './styles'
import {useLingui} from '@lingui/react'
-import {useModalControls} from '#/state/modals'
+import {useDialogControl} from '#/components/Dialog'
+
+import {ServerInputDialog} from '../server-input'
type ServiceDescription = ComAtprotoServerDescribeServer.OutputSchema
@@ -58,15 +60,11 @@ export const LoginForm = ({
const [password, setPassword] = useState('')
const passwordInputRef = useRef(null)
const {_} = useLingui()
- const {openModal} = useModalControls()
const {login} = useSessionApi()
+ const serverInputControl = useDialogControl()
const onPressSelectService = () => {
- openModal({
- name: 'server-input',
- initialService: serviceUrl,
- onSelect: setServiceUrl,
- })
+ serverInputControl.open()
Keyboard.dismiss()
track('Signin:PressedSelectService')
}
@@ -130,6 +128,11 @@ export const LoginForm = ({
const isReady = !!serviceDescription && !!identifier && !!password
return (
+
+
Sign into
diff --git a/src/view/com/auth/server-input/index.tsx b/src/view/com/auth/server-input/index.tsx
new file mode 100644
index 0000000000..a706219739
--- /dev/null
+++ b/src/view/com/auth/server-input/index.tsx
@@ -0,0 +1,173 @@
+import React from 'react'
+import {View} from 'react-native'
+import {useLingui} from '@lingui/react'
+import {Trans, msg} from '@lingui/macro'
+import {PROD_SERVICE} from 'lib/constants'
+import * as persisted from '#/state/persisted'
+
+import {atoms as a, useBreakpoints, useTheme} from '#/alf'
+import * as Dialog from '#/components/Dialog'
+import {Text, P} from '#/components/Typography'
+import {Button, ButtonText} from '#/components/Button'
+import * as ToggleButton from '#/components/forms/ToggleButton'
+import * as TextField from '#/components/forms/TextField'
+import {Globe_Stroke2_Corner0_Rounded as Globe} from '#/components/icons/Globe'
+
+export function ServerInputDialog({
+ control,
+ onSelect,
+}: {
+ control: Dialog.DialogOuterProps['control']
+ onSelect: (url: string) => void
+}) {
+ const {_} = useLingui()
+ const t = useTheme()
+ const {gtMobile} = useBreakpoints()
+ const [pdsAddressHistory, setPdsAddressHistory] = React.useState(
+ persisted.get('pdsAddressHistory') || [],
+ )
+ const [fixedOption, setFixedOption] = React.useState([PROD_SERVICE])
+ const [customAddress, setCustomAddress] = React.useState('')
+
+ const onClose = React.useCallback(() => {
+ let url
+ if (fixedOption[0] === 'custom') {
+ url = customAddress.trim().toLowerCase()
+ if (!url) {
+ return
+ }
+ } else {
+ url = fixedOption[0]
+ }
+ if (!url.startsWith('http://') && !url.startsWith('https://')) {
+ if (url === 'localhost' || url.startsWith('localhost:')) {
+ url = `http://${url}`
+ } else {
+ url = `https://${url}`
+ }
+ }
+
+ if (fixedOption[0] === 'custom') {
+ if (!pdsAddressHistory.includes(url)) {
+ const newHistory = [url, ...pdsAddressHistory.slice(0, 4)]
+ setPdsAddressHistory(newHistory)
+ persisted.write('pdsAddressHistory', newHistory)
+ }
+ }
+
+ onSelect(url)
+ }, [
+ fixedOption,
+ customAddress,
+ onSelect,
+ pdsAddressHistory,
+ setPdsAddressHistory,
+ ])
+
+ return (
+
+
+
+
+
+
+ Choose Service
+
+