Bluesky app fork with some witchin' additions 💫

Pre-fill alt text with 10-million card post (#5389)

* Pre-fill alt text with 10-million card post (#5377)

* Clean up type

* Tweak alt copy

* Add pt translation, fix typo

---------

Co-authored-by: Calvin <clavin@users.noreply.github.com>

authored by

Eric Bailey
Calvin
and committed by
GitHub
2745cba3 8f98d6b1

+168 -88
+41 -16
src/components/dialogs/nuxs/TenMillion/index.tsx
··· 197 197 const isLoadingData = isProfileLoading || !moderation || !profile 198 198 const isLoadingImage = !uri 199 199 200 + const displayName = React.useMemo(() => { 201 + if (!profile || !moderation) return '' 202 + return sanitizeDisplayName( 203 + profile.displayName || sanitizeHandle(profile.handle), 204 + moderation.ui('displayName'), 205 + ) 206 + }, [profile, moderation]) 207 + const handle = React.useMemo(() => { 208 + if (!profile) return '' 209 + return sanitizeHandle(profile.handle, '@') 210 + }, [profile]) 211 + const joinedDate = React.useMemo(() => { 212 + if (!profile || !profile.createdAt) return '' 213 + const date = i18n.date(profile.createdAt, { 214 + month: 'short', 215 + day: 'numeric', 216 + year: 'numeric', 217 + }) 218 + return date 219 + }, [i18n, profile]) 220 + 200 221 const error: string = React.useMemo(() => { 201 222 if (profileError) { 202 223 return _( ··· 235 256 msg`Bluesky now has over 10 million users, and I was #${i18n.number( 236 257 userNumber, 237 258 )}!`, 238 - ), // TODO 259 + ), 239 260 imageUris: [ 240 261 { 241 262 uri, 242 263 width: WIDTH, 243 264 height: HEIGHT, 265 + altText: _( 266 + msg`A virtual certificate with text "Celebrating 10M users on Bluesky, #${i18n.number( 267 + userNumber, 268 + )}, ${displayName} ${handle}, joined on ${joinedDate}"`, 269 + ), 244 270 }, 245 271 ], 246 272 }) 247 273 }, 1e3) 248 274 }) 249 275 } 250 - }, [_, i18n, control, openComposer, uri, userNumber]) 276 + }, [ 277 + _, 278 + i18n, 279 + control, 280 + openComposer, 281 + uri, 282 + userNumber, 283 + displayName, 284 + handle, 285 + joinedDate, 286 + ]) 251 287 const onNativeShare = React.useCallback(() => { 252 288 if (uri) { 253 289 control.close(() => { ··· 490 526 a.leading_tight, 491 527 {maxWidth: '60%'}, 492 528 ]}> 493 - {sanitizeDisplayName( 494 - profile.displayName || 495 - sanitizeHandle(profile.handle), 496 - moderation.ui('displayName'), 497 - )} 529 + {displayName} 498 530 </Text> 499 531 <View 500 532 style={[a.flex_row, a.justify_between, a.gap_4xl]}> ··· 508 540 a.leading_snug, 509 541 lightTheme.atoms.text_contrast_medium, 510 542 ]}> 511 - {sanitizeHandle(profile.handle, '@')} 543 + {handle} 512 544 </Text> 513 545 514 546 {profile.createdAt && ( ··· 524 556 a.text_right, 525 557 lightTheme.atoms.text_contrast_low, 526 558 ]}> 527 - <Trans> 528 - Joined{' '} 529 - {i18n.date(profile.createdAt, { 530 - month: 'short', 531 - day: 'numeric', 532 - year: 'numeric', 533 - })} 534 - </Trans> 559 + <Trans>Joined on {joinedDate}</Trans> 535 560 </Text> 536 561 )} 537 562 </View>
+1 -1
src/locale/locales/ca/messages.po
··· 75 75 76 76 #: src/components/KnownFollowers.tsx:179 77 77 #~ msgid "{0, plural, one {and # other} other {and # others}}" 78 - #~ msgstr "{0, plural, one {i # altre} other {i # altres}" 78 + #~ msgstr "{0, plural, one {i # altre} other {i # altres}}" 79 79 80 80 #: src/components/ProfileHoverCard/index.web.tsx:398 81 81 #: src/screens/Profile/Header/Metrics.tsx:23
+101 -57
src/locale/locales/pt-BR/messages.po
··· 127 127 msgid "{0} joined this week" 128 128 msgstr "{0} entrou esta semana" 129 129 130 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:637 130 + #: src/view/com/util/post-embeds/VideoEmbedInner/web-controls/Scrubber.tsx:195 131 131 msgid "{0} of {1}" 132 132 msgstr "{0} de {1}" 133 133 ··· 343 343 #~ msgid "A help tooltip" 344 344 #~ msgstr "Uma sugestão de ajuda" 345 345 346 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:266 347 + msgid "A virtual certificate with text \"Celebrating 10M users on Bluesky, #{0}, {displayName} {handle}, joined on {joinedDate}\"" 348 + msgstr "Um certificado virtual com o texto \"Comemorando 10 milhões de usuários no Bluesky, #{0}, {displayName} {handle}, ingressou em {joinedDate}\"" 349 + 346 350 #: src/view/com/util/ViewHeader.tsx:92 347 351 #: src/view/screens/Search/Search.tsx:684 348 352 msgid "Access navigation links and settings" 349 353 msgstr "Acessar links de navegação e configurações" 350 354 351 - #: src/view/com/home/HomeHeaderLayoutMobile.tsx:56 355 + #: src/view/com/home/HomeHeaderLayoutMobile.tsx:103 352 356 msgid "Access profile and other navigation links" 353 357 msgstr "Acessar perfil e outros links de navegação" 354 358 ··· 640 644 #~ msgid "An error occured" 641 645 #~ msgstr "Tivemos um problema" 642 646 643 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:413 647 + #: src/view/com/util/post-embeds/VideoEmbedInner/web-controls/VideoControls.tsx:416 644 648 msgid "An error occurred" 645 649 msgstr "Ocorreu um erro" 646 650 ··· 660 664 msgid "An error occurred while loading the video. Please try again." 661 665 msgstr "Ocorreu um erro ao carregar o vídeo. Tente novamente." 662 666 663 - #: src/components/dialogs/nuxs/TenMillion/index.tsx:250 667 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:315 664 668 msgid "An error occurred while saving the image!" 665 669 msgstr "Ocorreu um erro ao salvar a imagem!" 666 670 ··· 990 994 msgid "Bluesky is better with friends!" 991 995 msgstr "Bluesky é melhor com amigos!" 992 996 997 + #: src/components/dialogs/nuxs/TenMillion/Trigger.tsx:43 998 + #: src/components/dialogs/nuxs/TenMillion/Trigger.tsx:59 999 + msgid "Bluesky is celebrating 10 million users!" 1000 + msgstr "" 1001 + 993 1002 #: src/view/com/auth/onboarding/WelcomeDesktop.tsx:80 994 1003 #: src/view/com/auth/onboarding/WelcomeMobile.tsx:82 995 1004 #~ msgid "Bluesky is flexible." ··· 1005 1014 #~ msgid "Bluesky is public." 1006 1015 #~ msgstr "Bluesky é público." 1007 1016 1008 - #: src/components/dialogs/nuxs/TenMillion/index.tsx:206 1017 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:256 1009 1018 msgid "Bluesky now has over 10 million users, and I was #{0}!" 1010 1019 msgstr "O Bluesky agora tem mais de 10 milhões de usuários, e eu fui o #{0}!" 1011 1020 ··· 1030 1039 msgid "Books" 1031 1040 msgstr "Livros" 1032 1041 1033 - #: src/components/dialogs/nuxs/TenMillion/index.tsx:614 1042 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:677 1034 1043 msgid "Brag a little!" 1035 1044 msgstr "Gabe-se um pouco!" 1036 1045 ··· 1100 1109 msgstr "Só pode conter letras, números, espaços, riscas e subtraços. Deve ter pelo menos 4 caracteres, mas não mais de 32 caracteres." 1101 1110 1102 1111 #: src/components/Menu/index.tsx:235 1103 - #: src/components/Prompt.tsx:122 1104 1112 #: src/components/Prompt.tsx:124 1113 + #: src/components/Prompt.tsx:126 1105 1114 #: src/components/TagMenu/index.tsx:282 1106 1115 #: src/screens/Deactivated.tsx:161 1107 1116 #: src/view/com/composer/Composer.tsx:594 ··· 1181 1190 msgid "Captions & alt text" 1182 1191 msgstr "Legendas e texto alt" 1183 1192 1184 - #: src/components/dialogs/nuxs/TenMillion/index.tsx:368 1193 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:434 1185 1194 msgid "Celebrating {0} users" 1186 1195 msgstr "Comemorando {0} usuários" 1187 1196 ··· 1532 1541 msgid "Configured in <0>moderation settings</0>." 1533 1542 msgstr "Configure no <0>painel de moderação</0>." 1534 1543 1535 - #: src/components/Prompt.tsx:165 1536 - #: src/components/Prompt.tsx:168 1544 + #: src/components/Prompt.tsx:167 1545 + #: src/components/Prompt.tsx:170 1537 1546 #: src/view/com/modals/SelfLabel.tsx:155 1538 1547 #: src/view/com/modals/VerifyEmail.tsx:239 1539 1548 #: src/view/com/modals/VerifyEmail.tsx:241 ··· 2050 2059 #~ msgid "Disable haptics" 2051 2060 #~ msgstr "Desabilitar feedback tátil" 2052 2061 2053 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:379 2062 + #: src/view/com/util/post-embeds/VideoEmbedInner/web-controls/VideoControls.tsx:382 2054 2063 msgid "Disable subtitles" 2055 2064 msgstr "Desativar legendas" 2056 2065 ··· 2186 2195 msgid "Download CAR file" 2187 2196 msgstr "Baixar arquivo CAR" 2188 2197 2189 - #: src/components/dialogs/nuxs/TenMillion/index.tsx:622 2198 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:686 2190 2199 msgid "Download image" 2191 2200 msgstr "Baixar imagem" 2192 2201 ··· 2433 2442 msgid "Enable priority notifications" 2434 2443 msgstr "Habilitar notificações prioritárias" 2435 2444 2436 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:380 2445 + #: src/view/com/util/post-embeds/VideoEmbedInner/web-controls/VideoControls.tsx:383 2437 2446 msgid "Enable subtitles" 2438 2447 msgstr "Habilitar legendas" 2439 2448 ··· 2565 2574 msgid "Excludes users you follow" 2566 2575 msgstr "Excluir usuário que você segue" 2567 2576 2568 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:397 2577 + #: src/view/com/util/post-embeds/VideoEmbedInner/web-controls/VideoControls.tsx:400 2569 2578 msgid "Exit fullscreen" 2570 2579 msgstr "Sair da tela cheia" 2571 2580 ··· 2912 2921 msgid "Follow all" 2913 2922 msgstr "Siga todos" 2914 2923 2915 - #: src/view/com/profile/FollowButton.tsx:79 2916 - msgctxt "action" 2924 + #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:223 2925 + #: src/view/com/post-thread/PostThreadFollowBtn.tsx:142 2917 2926 msgid "Follow Back" 2918 2927 msgstr "Seguir De Volta" 2919 2928 2920 - #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:223 2921 - #: src/view/com/post-thread/PostThreadFollowBtn.tsx:142 2929 + #: src/view/com/profile/FollowButton.tsx:79 2930 + msgctxt "action" 2922 2931 msgid "Follow Back" 2923 2932 msgstr "Seguir De Volta" 2924 2933 ··· 3075 3084 msgid "From <0/>" 3076 3085 msgstr "Por <0/>" 3077 3086 3078 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:398 3087 + #: src/view/com/util/post-embeds/VideoEmbedInner/web-controls/VideoControls.tsx:401 3079 3088 msgid "Fullscreen" 3080 3089 msgstr "Tela cheia" 3081 3090 ··· 3419 3428 msgid "Image alt text" 3420 3429 msgstr "Texto alternativo da imagem" 3421 3430 3422 - #: src/components/dialogs/nuxs/TenMillion/index.tsx:247 3431 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:312 3423 3432 #: src/components/StarterPack/ShareDialog.tsx:76 3424 3433 msgid "Image saved to your camera roll!" 3425 3434 msgstr "Imagem salva no rolo da câmera!" ··· 3566 3575 msgstr "Participe da conversa" 3567 3576 3568 3577 #: src/components/dialogs/nuxs/TenMillion/index.tsx:492 3569 - msgid "Joined {0}" 3570 - msgstr "Juntou-se {0}" 3578 + #~ msgid "Joined {0}" 3579 + #~ msgstr "Juntou-se {0}" 3580 + 3581 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:559 3582 + msgid "Joined on {joinedDate}" 3583 + msgstr "" 3571 3584 3572 3585 #: src/screens/Onboarding/index.tsx:21 3573 3586 #: src/screens/Onboarding/state.ts:89 ··· 4074 4087 msgid "Mute" 4075 4088 msgstr "Silenciar" 4076 4089 4077 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx:166 4078 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:389 4090 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx:157 4091 + #: src/view/com/util/post-embeds/VideoEmbedInner/web-controls/VolumeControl.tsx:94 4079 4092 msgctxt "video" 4080 4093 msgid "Mute" 4081 4094 msgstr "Silenciar" ··· 4387 4400 msgid "No feeds found. Try searching for something else." 4388 4401 msgstr "Nenhum feed encontrado. Tente pesquisar por outra coisa." 4389 4402 4403 + #: src/components/LikedByList.tsx:78 4404 + #: src/view/com/post-thread/PostLikedBy.tsx:85 4405 + msgid "No likes yet" 4406 + msgstr "" 4407 + 4390 4408 #: src/components/ProfileCard.tsx:336 4391 4409 #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:116 4392 4410 msgid "No longer following {0}" ··· 4423 4441 msgid "No posts yet." 4424 4442 msgstr "Nenhuma postagem ainda." 4425 4443 4444 + #: src/view/com/post-thread/PostQuotes.tsx:106 4445 + msgid "No quotes yet" 4446 + msgstr "" 4447 + 4448 + #: src/view/com/post-thread/PostRepostedBy.tsx:78 4449 + msgid "No reposts yet" 4450 + msgstr "" 4451 + 4426 4452 #: src/view/com/composer/text-input/mobile/Autocomplete.tsx:101 4427 4453 #: src/view/com/composer/text-input/web/Autocomplete.tsx:195 4428 4454 msgid "No result" ··· 4469 4495 #~ msgid "Nobody can reply" 4470 4496 #~ msgstr "Ninguém pode responder" 4471 4497 4472 - #: src/components/LikedByList.tsx:79 4498 + #: src/components/LikedByList.tsx:80 4473 4499 #: src/components/LikesDialog.tsx:99 4500 + #: src/view/com/post-thread/PostLikedBy.tsx:87 4474 4501 msgid "Nobody has liked this yet. Maybe you should be the first!" 4475 4502 msgstr "Ninguém curtiu isso ainda. Você pode ser o primeiro!" 4476 4503 4504 + #: src/view/com/post-thread/PostQuotes.tsx:108 4505 + msgid "Nobody has quoted this yet. Maybe you should be the first!" 4506 + msgstr "" 4507 + 4508 + #: src/view/com/post-thread/PostRepostedBy.tsx:80 4509 + msgid "Nobody has reposted this yet. Maybe you should be the first!" 4510 + msgstr "" 4511 + 4477 4512 #: src/screens/StarterPack/Wizard/StepProfiles.tsx:103 4478 4513 msgid "Nobody was found. Try searching for someone else." 4479 4514 msgstr "Ninguém foi encontrado. Tente procurar por outra pessoa." ··· 4576 4611 msgid "Oh no! Something went wrong." 4577 4612 msgstr "Opa! Algo deu errado." 4578 4613 4579 - #: src/components/dialogs/nuxs/TenMillion/index.tsx:175 4614 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:224 4580 4615 msgid "Oh no! We weren't able to generate an image for you to share. Rest assured, we're glad you're here 🦋" 4581 4616 msgstr "Ah, não! Não conseguimos gerar uma imagem para você compartilhar. Fique tranquilo, estamos felizes que você esteja aqui 🦋" 4582 4617 ··· 4624 4659 msgid "Only contains letters, numbers, and hyphens" 4625 4660 msgstr "Contém apenas letras, números e hífens" 4626 4661 4627 - #: src/view/com/composer/videos/SubtitleFilePicker.tsx:39 4662 + #: src/view/com/composer/videos/SubtitleFilePicker.tsx:40 4628 4663 msgid "Only WebVTT (.vtt) files are supported" 4629 4664 msgstr "Somente arquivos WebVTT (.vtt) são suportados" 4630 4665 ··· 4680 4715 msgid "Open muted words and tags settings" 4681 4716 msgstr "Abrir opções de palavras/tags silenciadas" 4682 4717 4683 - #: src/view/com/home/HomeHeaderLayoutMobile.tsx:54 4718 + #: src/view/com/home/HomeHeaderLayoutMobile.tsx:101 4684 4719 msgid "Open navigation" 4685 4720 msgstr "Abrir navegação" 4686 4721 ··· 4924 4959 msgstr "Senha atualizada!" 4925 4960 4926 4961 #: src/view/com/util/post-embeds/GifEmbed.tsx:46 4927 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx:150 4928 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:366 4962 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx:141 4963 + #: src/view/com/util/post-embeds/VideoEmbedInner/web-controls/VideoControls.tsx:369 4929 4964 msgid "Pause" 4930 4965 msgstr "Pausar" 4931 4966 4932 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:319 4967 + #: src/view/com/util/post-embeds/VideoEmbedInner/web-controls/VideoControls.tsx:320 4933 4968 msgid "Pause video" 4934 4969 msgstr "Pausar vídeo" 4935 4970 ··· 4989 5024 msgstr "Fixado em seus feeds" 4990 5025 4991 5026 #: src/view/com/util/post-embeds/GifEmbed.tsx:46 4992 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx:150 4993 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:367 5027 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx:141 5028 + #: src/view/com/util/post-embeds/VideoEmbedInner/web-controls/VideoControls.tsx:370 4994 5029 msgid "Play" 4995 5030 msgstr "Tocar" 4996 5031 ··· 5008 5043 msgstr "Tocar ou pausar o GIF" 5009 5044 5010 5045 #: src/view/com/util/post-embeds/VideoEmbed.tsx:110 5011 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:320 5046 + #: src/view/com/util/post-embeds/VideoEmbedInner/web-controls/VideoControls.tsx:321 5012 5047 msgid "Play video" 5013 5048 msgstr "Reproduzir vídeo" 5014 5049 ··· 6076 6111 #~ msgid "See what's next" 6077 6112 #~ msgstr "Veja o que vem por aí" 6078 6113 6079 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:631 6114 + #: src/view/com/util/post-embeds/VideoEmbedInner/web-controls/Scrubber.tsx:189 6080 6115 msgid "Seek slider" 6081 6116 msgstr "Controle deslizante de busca" 6082 6117 ··· 6136 6171 #~ msgid "Select some accounts below to follow" 6137 6172 #~ msgstr "Selecione algumas contas para seguir" 6138 6173 6139 - #: src/view/com/composer/videos/SubtitleFilePicker.tsx:65 6174 + #: src/view/com/composer/videos/SubtitleFilePicker.tsx:66 6140 6175 msgid "Select subtitle file (.vtt)" 6141 6176 msgstr "Selecione o arquivo de legenda (.vtt)" 6142 6177 ··· 6344 6379 msgid "Sexually Suggestive" 6345 6380 msgstr "Sexualmente Sugestivo" 6346 6381 6347 - #: src/components/dialogs/nuxs/TenMillion/index.tsx:644 6382 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:708 6348 6383 #: src/components/StarterPack/QrCodeDialog.tsx:177 6349 6384 #: src/screens/StarterPack/StarterPackScreen.tsx:411 6350 6385 #: src/screens/StarterPack/StarterPackScreen.tsx:582 ··· 6381 6416 msgid "Share feed" 6382 6417 msgstr "Compartilhar feed" 6383 6418 6384 - #: src/components/dialogs/nuxs/TenMillion/index.tsx:621 6419 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:685 6385 6420 msgid "Share image externally" 6386 6421 msgstr "Compartilhar imagem externamente" 6387 6422 6388 - #: src/components/dialogs/nuxs/TenMillion/index.tsx:639 6423 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:703 6389 6424 msgid "Share image in post" 6390 6425 msgstr "Compartilhe a imagem na postagem" 6391 6426 ··· 6894 6929 msgid "Tap to dismiss" 6895 6930 msgstr "Toque para dispensar" 6896 6931 6897 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx:145 6932 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx:136 6898 6933 msgid "Tap to enter full screen" 6899 6934 msgstr "Toque para entrar em tela cheia" 6900 6935 6901 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx:151 6936 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx:142 6902 6937 msgid "Tap to play or pause" 6903 6938 msgstr "Toque para reproduzir ou pausar" 6904 6939 6905 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx:164 6940 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx:159 6906 6941 msgid "Tap to toggle sound" 6907 6942 msgstr "Toque para alternar o som" 6908 6943 ··· 6936 6971 msgid "Tell us a little more" 6937 6972 msgstr "Conte-nos um pouco mais" 6938 6973 6939 - #: src/components/dialogs/nuxs/TenMillion/index.tsx:518 6974 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:578 6940 6975 msgid "Ten Million" 6941 6976 msgstr "Dez milhões" 6942 6977 ··· 6977 7012 msgid "Thank you. Your report has been sent." 6978 7013 msgstr "Obrigado. Sua denúncia foi enviada." 6979 7014 6980 - #: src/components/dialogs/nuxs/TenMillion/index.tsx:593 7015 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:654 6981 7016 msgid "Thanks for being one of our first 10 million users." 6982 7017 msgstr "Obrigado por ser um dos nossos primeiros 10 milhões de usuários." 6983 7018 ··· 7002 7037 msgid "That starter pack could not be found." 7003 7038 msgstr "Esse pacote inicial não pôde ser encontrado." 7004 7039 7005 - #: src/view/com/post-thread/PostQuotes.tsx:127 7040 + #: src/view/com/post-thread/PostQuotes.tsx:133 7006 7041 msgid "That's all, folks!" 7007 7042 msgstr "É isso, pessoal!" 7008 7043 ··· 7457 7492 msgid "To disable the email 2FA method, please verify your access to the email address." 7458 7493 msgstr "Para desabilitar o 2FA via e-mail, por favor verifique seu acesso a este endereço de e-mail." 7459 7494 7495 + #: src/components/dialogs/nuxs/TenMillion/Trigger.tsx:69 7496 + msgid "To learn more, <0>check out our post.</0>" 7497 + msgstr "" 7498 + 7460 7499 #: src/components/dms/ReportConversationPrompt.tsx:20 7461 7500 msgid "To report a conversation, please report one of its messages via the conversation screen. This lets our moderators understand the context of your issue." 7462 7501 msgstr "Para denunciar uma conversa, por favor, denuncie uma das mensagens individualmente. Isso vai permitir a análise da situação pelos nossos moderadores." ··· 7469 7508 msgid "To whom would you like to send this report?" 7470 7509 msgstr "Para quem você gostaria de enviar esta denúncia?" 7471 7510 7472 - #: src/components/dialogs/nuxs/TenMillion/index.tsx:597 7511 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:658 7512 + #: src/components/dialogs/nuxs/TenMillion/Trigger.tsx:63 7473 7513 msgid "Together, we're rebuilding the social internet. We're glad you're here." 7474 7514 msgstr "Juntos, estamos reconstruindo a internet social. Estamos felizes que você esteja aqui." 7475 7515 ··· 7613 7653 msgid "Unmute" 7614 7654 msgstr "Dessilenciar" 7615 7655 7616 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx:165 7617 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:388 7656 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx:156 7657 + #: src/view/com/util/post-embeds/VideoEmbedInner/web-controls/VolumeControl.tsx:93 7618 7658 msgctxt "video" 7619 7659 msgid "Unmute" 7620 7660 msgstr "Ativar o áudio" ··· 7645 7685 msgid "Unmute thread" 7646 7686 msgstr "Dessilenciar thread" 7647 7687 7648 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:317 7688 + #: src/view/com/util/post-embeds/VideoEmbedInner/web-controls/VideoControls.tsx:318 7649 7689 msgid "Unmute video" 7650 7690 msgstr "Ativar o áudio do vídeo" 7651 7691 7652 7692 #: src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx:168 7653 - msgid "Unmuted" 7654 - msgstr "Áudio ativado" 7693 + #~ msgid "Unmuted" 7694 + #~ msgstr "Áudio ativado" 7655 7695 7656 7696 #: src/view/screens/ProfileFeed.tsx:292 7657 7697 #: src/view/screens/ProfileList.tsx:673 ··· 7927 7967 msgid "Version {appVersion} {bundleInfo}" 7928 7968 msgstr "Versão {appVersion} {bundleInfo}" 7929 7969 7930 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx:93 7931 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx:144 7970 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx:84 7971 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx:135 7932 7972 msgid "Video" 7933 7973 msgstr "Vídeo" 7934 7974 ··· 7949 7989 msgid "Video settings" 7950 7990 msgstr "Configurações de vídeo" 7951 7991 7952 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx:93 7992 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx:84 7953 7993 msgid "Video: {0}" 7954 7994 msgstr "Vídeo: {0}" 7955 7995 ··· 7999 8039 msgid "View information about these labels" 8000 8040 msgstr "Ver informações sobre estes rótulos" 8001 8041 8042 + #: src/components/dialogs/nuxs/TenMillion/Trigger.tsx:72 8043 + msgid "View our post" 8044 + msgstr "" 8045 + 8002 8046 #: src/components/ProfileHoverCard/index.web.tsx:418 8003 8047 #: src/components/ProfileHoverCard/index.web.tsx:436 8004 8048 #: src/components/ProfileHoverCard/index.web.tsx:463 ··· 8023 8067 msgid "View your blocked accounts" 8024 8068 msgstr "Veja suas contas bloqueadas" 8025 8069 8026 - #: src/view/com/home/HomeHeaderLayout.web.tsx:79 8027 - #: src/view/com/home/HomeHeaderLayoutMobile.tsx:86 8070 + #: src/view/com/home/HomeHeaderLayout.web.tsx:132 8071 + #: src/view/com/home/HomeHeaderLayoutMobile.tsx:143 8028 8072 msgid "View your feeds and explore more" 8029 8073 msgstr "Veja seus feeds e explore mais" 8030 8074 ··· 8497 8541 msgid "You must grant access to your photo library to save a QR code" 8498 8542 msgstr "Você deve conceder acesso à sua biblioteca de fotos para salvar o QR code." 8499 8543 8500 - #: src/components/dialogs/nuxs/TenMillion/index.tsx:237 8544 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:302 8501 8545 #: src/components/StarterPack/ShareDialog.tsx:68 8502 8546 msgid "You must grant access to your photo library to save the image." 8503 8547 msgstr "Você deve conceder acesso à sua biblioteca de fotos para salvar a imagem."
+7 -7
src/state/models/media/gallery.ts
··· 1 1 import {makeAutoObservable, runInAction} from 'mobx' 2 - import {ImageModel} from './image' 3 - import {Image as RNImage} from 'react-native-image-crop-picker' 4 - import {openPicker} from 'lib/media/picker' 2 + 5 3 import {getImageDim} from 'lib/media/manip' 4 + import {openPicker} from 'lib/media/picker' 5 + import {ImageInitOptions, ImageModel} from './image' 6 6 7 7 interface InitialImageUri { 8 8 uri: string 9 9 width: number 10 10 height: number 11 + altText?: string 11 12 } 12 13 13 14 export class GalleryModel { 14 15 images: ImageModel[] = [] 15 16 16 - constructor(uris?: {uri: string; width: number; height: number}[]) { 17 + constructor(uris?: InitialImageUri[]) { 17 18 makeAutoObservable(this) 18 19 19 20 if (uris) { ··· 33 34 return this.images.some(image => image.altText.trim() === '') 34 35 } 35 36 36 - *add(image_: Omit<RNImage, 'size'>) { 37 + *add(image_: ImageInitOptions) { 37 38 if (this.size >= 4) { 38 39 return 39 40 } ··· 59 60 path: uri, 60 61 height, 61 62 width, 62 - mime: 'image/jpeg', 63 63 } 64 64 65 65 runInAction(() => { ··· 100 100 async addFromUris(uris: InitialImageUri[]) { 101 101 for (const uriObj of uris) { 102 102 this.add({ 103 - mime: 'image/jpeg', 104 103 height: uriObj.height, 105 104 width: uriObj.width, 106 105 path: uriObj.uri, 106 + altText: uriObj.altText, 107 107 }) 108 108 } 109 109 }
+17 -6
src/state/models/media/image.ts
··· 1 1 import {Image as RNImage} from 'react-native-image-crop-picker' 2 - import {makeAutoObservable, runInAction} from 'mobx' 3 - import {POST_IMG_MAX} from 'lib/constants' 4 2 import * as ImageManipulator from 'expo-image-manipulator' 5 - import {getDataUriSize} from 'lib/media/util' 6 - import {openCropper} from 'lib/media/picker' 7 3 import {ActionCrop, FlipType, SaveFormat} from 'expo-image-manipulator' 4 + import {makeAutoObservable, runInAction} from 'mobx' 8 5 import {Position} from 'react-avatar-editor' 6 + 7 + import {logger} from '#/logger' 8 + import {POST_IMG_MAX} from 'lib/constants' 9 + import {openCropper} from 'lib/media/picker' 9 10 import {Dimensions} from 'lib/media/types' 11 + import {getDataUriSize} from 'lib/media/util' 10 12 import {isIOS} from 'platform/detection' 11 - import {logger} from '#/logger' 12 13 13 14 export interface ImageManipulationAttributes { 14 15 aspectRatio?: '4:3' | '1:1' | '3:4' | 'None' ··· 19 20 flipVertical?: boolean 20 21 } 21 22 23 + export interface ImageInitOptions { 24 + path: string 25 + width: number 26 + height: number 27 + altText?: string 28 + } 29 + 22 30 const MAX_IMAGE_SIZE_IN_BYTES = 976560 23 31 24 32 export class ImageModel implements Omit<RNImage, 'size'> { ··· 41 49 } 42 50 prevAttributes: ImageManipulationAttributes = {} 43 51 44 - constructor(image: Omit<RNImage, 'size'>) { 52 + constructor(image: ImageInitOptions) { 45 53 makeAutoObservable(this) 46 54 47 55 this.path = image.path 48 56 this.width = image.width 49 57 this.height = image.height 58 + if (image.altText !== undefined) { 59 + this.setAltText(image.altText) 60 + } 50 61 } 51 62 52 63 setRatio(aspectRatio: ImageManipulationAttributes['aspectRatio']) {
+1 -1
src/state/shell/composer/index.tsx
··· 36 36 mention?: string // handle of user to mention 37 37 openEmojiPicker?: (pos: DOMRect | undefined) => void 38 38 text?: string 39 - imageUris?: {uri: string; width: number; height: number}[] 39 + imageUris?: {uri: string; width: number; height: number; altText?: string}[] 40 40 } 41 41 42 42 type StateContext = ComposerOpts | undefined