@proulr/rosetta 0.1.38 → 0.1.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,30 +4,16 @@
4
4
 
5
5
  ## Fluxo
6
6
 
7
- 1. Altere o código da lib.
8
- 2. **Suba a versão** em `package.json` (ex.: `0.1.1` → `0.1.2`).
9
- 3. Rode `npm install` se mudou dependências (atualiza `package-lock.json`).
10
- 4. Commit, merge e push em `main`.
11
- 5. O workflow `.github/workflows/publish-npm.yml` roda typecheck e publica se a versão ainda não existir no npm.
7
+ 1. Altere o código da lib (JSON em `src/locales/…`).
8
+ 2. Commit em `main` — o pre-commit (`locale:generate` → validate → bump patch via `proulr-bump-and-sync-deps.mjs`) sobe a versão.
9
+ 3. Push em `main`.
10
+ 4. O workflow `.github/workflows/publish-npm.yml` roda typecheck e publica se a versão ainda não existir no npm.
12
11
 
13
12
  Se a versão já estiver publicada, o job **pula** o publish (CI verde, sem erro).
14
13
 
15
14
  ## Autenticação no npm
16
15
 
17
- ### Bootstrap (1ª publicação do pacote)
18
-
19
- OIDC/Trusted Publishing **só funciona depois que o pacote existe** no npm. Igual ao bootstrap de contract/core:
20
-
21
- 1. Crie um token **Automation** em https://www.npmjs.com/settings/~/tokens (ou reutilize o dos outros `@proulr/*`)
22
- 2. No GitHub:
23
-
24
- ```bash
25
- gh secret set NPM_TOKEN -R saviorbp/proulr-rosetta
26
- ```
27
-
28
- 3. Push / re-run do workflow → cria `@proulr/rosetta` no registry
29
-
30
- ### Trusted Publishing (depois do bootstrap — modo steady-state)
16
+ Steady-state: **Trusted Publishing (OIDC)** — igual a `@proulr/sdui-components` / `bff-core`.
31
17
 
32
18
  1. https://www.npmjs.com/package/@proulr/rosetta → **Settings** → **Trusted Publisher** → **GitHub Actions**
33
19
  2. Preencha:
@@ -39,16 +25,36 @@ gh secret set NPM_TOKEN -R saviorbp/proulr-rosetta
39
25
  | Workflow filename | `publish-npm.yml` |
40
26
  | Environment | *(vazio)* |
41
27
 
42
- O workflow já tem `id-token: write`. Com Trusted Publisher configurado, o publish usa OIDC (o `NPM_TOKEN` fica só como fallback).
28
+ O workflow já tem `id-token: write` e limpa o `NODE_AUTH_TOKEN` dummy do `setup-node` para o OIDC funcionar.
43
29
 
44
30
  **Repositório privado no GitHub:** sem `--provenance`.
45
31
 
32
+ ### Fallback — Automation token
33
+
34
+ Se o Trusted Publisher ainda não estiver configurado (E404 no publish), o job tenta `secrets.NPM_TOKEN`:
35
+
36
+ ```bash
37
+ # Token tipo Automation (não Publish) com write no scope @proulr
38
+ gh secret set NPM_TOKEN -R saviorbp/proulr-rosetta
39
+ ```
40
+
46
41
  ## Consumidores (app / BFFs)
47
42
 
48
43
  Dependência do registry (não `file:`):
49
44
 
50
45
  ```json
51
- "@proulr/rosetta": "^0.1.2"
46
+ "@proulr/rosetta": "^0.1.47"
52
47
  ```
53
48
 
54
- No commit do Rosetta, o pre-commit (`scripts/proulr-bump-and-sync-deps.mjs`) bumpa a versão e atualiza sozinho os `package.json` + `npm install` dos siblings.
49
+ ### Version sync (pre-commit)
50
+
51
+ 1. **Commit no Rosetta** → bump local + pending em `Projects/.proulr/pending-version-sync.json` (consumers **não** apontam ainda para a versão inédita).
52
+ 2. **CI publica** no npm.
53
+ 3. **Commit no app/BFF** → `proulr-pre-commit-tests.sh` chama `--sync` → atualiza `package.json` + lock para `^versão` já no registry.
54
+
55
+ Manual:
56
+
57
+ ```bash
58
+ cd ~/Projects/proulr-app
59
+ node ../scripts/proulr-bump-and-sync-deps.mjs --sync
60
+ ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proulr/rosetta",
3
- "version": "0.1.38",
3
+ "version": "0.1.47",
4
4
  "type": "module",
5
5
  "main": "./src/index.ts",
6
6
  "types": "./src/index.ts",
@@ -134,6 +134,11 @@ export const PT_BR_MESSAGES = {
134
134
  "alerts.repostSoon": "Repostar estará disponível em breve.",
135
135
  "alerts.repostThoughtsSoon": "Repostar pensamentos estará disponível em breve.",
136
136
  "alerts.revoke": "Revogar",
137
+ "alerts.rightNow.contentRequired": "Escreva um texto ou adicione uma foto para publicar.",
138
+ "alerts.rightNow.endFailed": "Não foi possível encerrar a sessão.",
139
+ "alerts.rightNow.postFailed": "Não foi possível publicar no Right Now.",
140
+ "alerts.rightNow.quotaExceeded": "Você usou todas as sessões Right Now desta semana.",
141
+ "alerts.rightNow.startFailed": "Não foi possível iniciar o Right Now. Tente novamente.",
137
142
  "alerts.saveFailed": "Não foi possível salvar.",
138
143
  "alerts.selectImageFail": "Não foi possível selecionar a imagem.",
139
144
  "alerts.selectMediaFail": "Não foi possível selecionar a mídia.",
@@ -596,6 +601,10 @@ export const PT_BR_MESSAGES = {
596
601
  "chat.report.sentBodyGroup": "Obrigado. Vamos analisar o grupo.",
597
602
  "chat.report.sentTitle": "Denúncia enviada",
598
603
  "chat.report.spam": "Spam",
604
+ "chat.safety.body": "Compare este código com a outra pessoa (fora do app). Se for igual, a conversa está protegida.\n\n{code}",
605
+ "chat.safety.title": "Código de segurança",
606
+ "chat.safety.unavailable": "Não foi possível montar o código de segurança neste dispositivo.",
607
+ "chat.safety.verify": "Verificar código de segurança",
599
608
  "chat.savedPhrases.empty": "Nenhuma frase salva ainda.",
600
609
  "chat.savedPhrases.errorLoad": "Não foi possível carregar suas frases salvas.",
601
610
  "chat.savedPhrases.errorRemove": "Não foi possível remover a frase.",
@@ -626,6 +635,7 @@ export const PT_BR_MESSAGES = {
626
635
  "chat.thread.fallbackName": "Conversa",
627
636
  "chat.thread.muteOff": "Notificações permitidas de novo.",
628
637
  "chat.thread.muteOn": "Notificações silenciadas desta pessoa.",
638
+ "chat.thread.peerKeyMissing": "Esta pessoa ainda não publicou a chave pública. Não é possível trocar mensagens cifradas ainda.",
629
639
  "chat.toast.done": "Pronto",
630
640
  "chat.viewOnce.delete": "Apagar",
631
641
  "chat.viewOnce.infoBody": "Fotos, vídeos e áudios de visualização única desaparecem da conversa depois que a pessoa abre o arquivo uma vez.",
@@ -731,6 +741,7 @@ export const PT_BR_MESSAGES = {
731
741
  "discover.empty.default": "Ninguém por perto ainda.",
732
742
  "discover.empty.online": "Ninguém online por perto agora.",
733
743
  "discover.empty.position": "Ninguém com posição \"{position}\" por perto. Atualize ou mude o filtro.",
744
+ "discover.empty.rightNow": "Ninguém no Right Now por perto agora.",
734
745
  "discover.empty.title": "Ninguém por perto",
735
746
  "discover.endRegion.body": "Você viu os perfis mais próximos. Ative o Caçar para explorar outras cidades sem mudar sua localização real.",
736
747
  "discover.endRegion.cta": "Caçar em outra região",
@@ -739,6 +750,22 @@ export const PT_BR_MESSAGES = {
739
750
  "discover.filter.creators": "Criadores",
740
751
  "discover.filter.online": "Online Agora",
741
752
  "discover.filter.position": "Posição",
753
+ "discover.filter.rightNow": "Right Now",
754
+ "discover.filters.age25to35": "25–35",
755
+ "discover.filters.ageOver35": "Mais de 35",
756
+ "discover.filters.ageUnder25": "Menos de 25",
757
+ "discover.filters.anyAge": "Qualquer idade",
758
+ "discover.filters.apply": "Aplicar",
759
+ "discover.filters.clearAll": "Limpar tudo",
760
+ "discover.filters.creators": "Criadores",
761
+ "discover.filters.onlineNow": "Online agora",
762
+ "discover.filters.rightNow": "Right Now",
763
+ "discover.filters.sectionAge": "Idade",
764
+ "discover.filters.sectionMedia": "Mídia",
765
+ "discover.filters.sectionPosition": "Posição",
766
+ "discover.filters.sectionStatus": "Status",
767
+ "discover.filters.title": "Filtros",
768
+ "discover.filters.withPhotos": "Com fotos",
742
769
  "discover.hideDistance.body": "Enquanto essa opção estiver ativa, você não verá o grid de pessoas próximas.",
743
770
  "discover.hideDistance.openSettings": "Abrir configurações",
744
771
  "discover.hideDistance.title": "Você ocultou sua distância",
@@ -747,6 +774,13 @@ export const PT_BR_MESSAGES = {
747
774
  "discover.hunt.changeRegion": "Mudar região",
748
775
  "discover.hunt.otherRegion": "outra região",
749
776
  "discover.hunt.useMyLocation": "Usar minha localização",
777
+ "discover.mapPin.ageYears": "{age} anos",
778
+ "discover.mapPin.approxHint": "Local aproximado",
779
+ "discover.mapPin.distanceKm": "{km} km",
780
+ "discover.mapPin.distanceM": "{m} m",
781
+ "discover.mapPin.flash": "Flash",
782
+ "discover.mapPin.messagePlaceholder": "Mensagem para {name}...",
783
+ "discover.mapPin.profile": "Ver perfil",
750
784
  "discover.position.all": "Todas as posições",
751
785
  "discover.position.ativo": "Ativo",
752
786
  "discover.position.passivo": "Passivo",
@@ -754,6 +788,35 @@ export const PT_BR_MESSAGES = {
754
788
  "discover.position.versatil": "Versátil",
755
789
  "discover.position.versatilAtivo": "Versátil-ativo",
756
790
  "discover.position.versatilPassivo": "Versátil-passivo",
791
+ "discover.rightNow.activate.body": "Deixe todo mundo saber que você quer encontrar alguém agora.",
792
+ "discover.rightNow.activate.gateBody": "Ative o Right Now para ver quem está por perto no mapa e nas publicações.",
793
+ "discover.rightNow.activate.hosting": "Recepcionando",
794
+ "discover.rightNow.activate.moodPlaceholder": "Do que você está a fim?",
795
+ "discover.rightNow.activate.readMore": "Saiba mais",
796
+ "discover.rightNow.activate.remainingSessions": "{count} sessões restantes esta semana",
797
+ "discover.rightNow.activate.start": "Iniciar",
798
+ "discover.rightNow.activate.startingSession": "Iniciando sua sessão no Right Now…",
799
+ "discover.rightNow.activate.title": "Iniciar uma sessão Right Now",
800
+ "discover.rightNow.badge": "Right Now",
801
+ "discover.rightNow.compose.addPhoto": "Adicionar foto",
802
+ "discover.rightNow.compose.captionPlaceholder": "Escreva uma descrição…",
803
+ "discover.rightNow.compose.close": "Fechar",
804
+ "discover.rightNow.compose.hint": "Publique só texto, só foto, ou os dois.",
805
+ "discover.rightNow.compose.post": "Publicar",
806
+ "discover.rightNow.compose.removePhoto": "Remover foto",
807
+ "discover.rightNow.compose.title": "Post Right Now",
808
+ "discover.rightNow.fab": "Right Now",
809
+ "discover.rightNow.fabActive": "Ao vivo",
810
+ "discover.rightNow.hub.emptyFeed": "Nenhum post no Right Now ainda. Seja o primeiro.",
811
+ "discover.rightNow.hub.emptyMap": "Ninguém ativo no mapa por perto.",
812
+ "discover.rightNow.hub.feed": "Publicações",
813
+ "discover.rightNow.hub.hosting": "Recepcionando",
814
+ "discover.rightNow.hub.map": "Mapa",
815
+ "discover.rightNow.hub.title": "Right Now",
816
+ "discover.rightNow.manage.end": "Encerrar sessão",
817
+ "discover.rightNow.manage.pending": "Ativo · falta {minutes}m",
818
+ "discover.rightNow.manage.title": "Right Now",
819
+ "discover.rightNow.quota.exhausted": "Você usou todas as sessões gratuitas desta semana.",
757
820
  "discover.subtitle.huntingIn": "Caçando em {label}",
758
821
  "discover.subtitle.huntingOther": "Caçando em outra região",
759
822
  "discover.subtitle.nearby": "Encontros por proximidade",
@@ -1310,23 +1373,38 @@ export const PT_BR_MESSAGES = {
1310
1373
  "profile.view.sendMessage": "Enviar mensagem",
1311
1374
  "profile.view.sendReaction": "Enviar reação",
1312
1375
  "profile.view.unmuted": "Notificações permitidas de novo.",
1313
- "random.ai.soon.hint": "Uma conversa com assistência de IA vai aparecer aqui.",
1376
+ "random.ai.cardSubtitle": "Conversa assistida quando você quiser praticar",
1377
+ "random.ai.cardTitle": "Chat com IA",
1378
+ "random.ai.soon.hint": "Uma conversa com assistência de IA está a caminho. Enquanto isso, experimente o chat aleatório com pessoas reais.",
1314
1379
  "random.ai.soon.title": "Chat com IA em breve",
1315
1380
  "random.chat.cta.cancel": "Sair da fila",
1316
- "random.chat.cta.join": "Entrar na fila",
1381
+ "random.chat.cta.join": "Entrar na fila agora",
1317
1382
  "random.chat.cta.open": "Abrir conversa",
1318
1383
  "random.chat.idle.hint": "Fale com alguém do acaso. Só mensagens e áudio — identidade só se os dois derem Match.",
1319
- "random.chat.idle.title": "Conversa aleatória",
1384
+ "random.chat.idle.title": "Chat aleatório",
1320
1385
  "random.chat.matched.hint": "A pessoa do outro lado não vê seu perfil. Combine o Match para se revelarem.",
1321
1386
  "random.chat.matched.title": "Você está conversando",
1322
1387
  "random.chat.waiting.hint": "Assim que outra pessoa entrar, a conversa começa. Sem fotos nem perfil até o Match.",
1323
1388
  "random.chat.waiting.title": "Procurando alguém…",
1324
1389
  "random.error.enqueue": "Não foi possível entrar na fila. Tente de novo.",
1325
1390
  "random.error.generic": "Algo deu errado. Tente de novo.",
1391
+ "random.hub.badgeSoon": "Em breve",
1392
+ "random.hub.bulletAudioBody": "Conversa leve, no ritmo noturno — sem câmera no chat.",
1393
+ "random.hub.bulletAudioTitle": "Texto + áudio",
1394
+ "random.hub.bulletMatchBody": "Gostou? Match. Não? Pula e encontra outra pessoa.",
1395
+ "random.hub.bulletMatchTitle": "Match ou próximo",
1396
+ "random.hub.bulletPrivacyBody": "Nada de foto, nome ou bio até o Match mútuo.",
1397
+ "random.hub.bulletPrivacyTitle": "Anônimo de verdade",
1398
+ "random.hub.ctaExploreSoon": "Ver o que vem",
1399
+ "random.hub.heroSubtitle": "Entre na fila, converse com texto e áudio. Sem foto nem perfil — até o Match dos dois.",
1400
+ "random.hub.heroTitle": "Conheça alguém do acaso",
1401
+ "random.hub.moreTitle": "Mais Randoms",
1402
+ "random.hub.privacyBanner": "Seu perfil fica oculto. Só se revelam se os dois derem Match.",
1326
1403
  "random.hub.title": "Randoms",
1327
1404
  "random.segment.ai": "Chat com IA",
1328
1405
  "random.segment.chat": "Chat aleatório",
1329
1406
  "random.segment.video": "Vídeo aleatório",
1407
+ "random.soon.back": "Voltar aos Randoms",
1330
1408
  "random.thread.anonymousName": "Alguém",
1331
1409
  "random.thread.match": "Match",
1332
1410
  "random.thread.matchPending": "Aguardando o Match da outra pessoa…",
@@ -1335,7 +1413,9 @@ export const PT_BR_MESSAGES = {
1335
1413
  "random.thread.skip": "Próximo",
1336
1414
  "random.thread.skipConfirmBody": "Você pode entrar na fila de novo e falar com outra pessoa.",
1337
1415
  "random.thread.skipConfirmTitle": "Encerrar conversa?",
1338
- "random.video.soon.hint": "Chamadas aleatórias vão aparecer aqui.",
1416
+ "random.video.cardSubtitle": "Chamada ao vivo com alguém do acaso",
1417
+ "random.video.cardTitle": "Vídeo aleatório",
1418
+ "random.video.soon.hint": "Estamos preparando chamadas aleatórias anônimas. Volte em breve — o chat de texto já está rolando.",
1339
1419
  "random.video.soon.title": "Vídeo aleatório em breve",
1340
1420
  "referral.creator.metric.clicks": "Cliques no link",
1341
1421
  "referral.creator.metric.converted": "Assinaturas",
@@ -2164,6 +2244,11 @@ export const EN_MESSAGES: FlatMessages = {
2164
2244
  "alerts.repostSoon": "Reposting will be available soon.",
2165
2245
  "alerts.repostThoughtsSoon": "Reposting thoughts will be available soon.",
2166
2246
  "alerts.revoke": "Revoke",
2247
+ "alerts.rightNow.contentRequired": "Add a caption or a photo to post.",
2248
+ "alerts.rightNow.endFailed": "Couldn’t end the session.",
2249
+ "alerts.rightNow.postFailed": "Couldn’t post to Right Now.",
2250
+ "alerts.rightNow.quotaExceeded": "You’ve used all Right Now sessions this week.",
2251
+ "alerts.rightNow.startFailed": "Couldn’t start Right Now. Try again.",
2167
2252
  "alerts.saveFailed": "Could not save.",
2168
2253
  "alerts.selectImageFail": "Couldn’t select the image.",
2169
2254
  "alerts.selectMediaFail": "Couldn’t select the media.",
@@ -2626,6 +2711,10 @@ export const EN_MESSAGES: FlatMessages = {
2626
2711
  "chat.report.sentBodyGroup": "Thanks. We'll review the group.",
2627
2712
  "chat.report.sentTitle": "Report sent",
2628
2713
  "chat.report.spam": "Spam",
2714
+ "chat.safety.body": "Compare this code with the other person (outside the app). If it matches, the chat is protected.\n\n{code}",
2715
+ "chat.safety.title": "Safety code",
2716
+ "chat.safety.unavailable": "Couldn't build a safety code on this device.",
2717
+ "chat.safety.verify": "Verify safety code",
2629
2718
  "chat.savedPhrases.empty": "No saved phrases yet.",
2630
2719
  "chat.savedPhrases.errorLoad": "Couldn't load your saved phrases.",
2631
2720
  "chat.savedPhrases.errorRemove": "Couldn't remove the phrase.",
@@ -2656,6 +2745,7 @@ export const EN_MESSAGES: FlatMessages = {
2656
2745
  "chat.thread.fallbackName": "Conversation",
2657
2746
  "chat.thread.muteOff": "Notifications are on again.",
2658
2747
  "chat.thread.muteOn": "Notifications muted for this person.",
2748
+ "chat.thread.peerKeyMissing": "This person hasn't published a public key yet. Encrypted messaging isn't available.",
2659
2749
  "chat.toast.done": "Done",
2660
2750
  "chat.viewOnce.delete": "Delete",
2661
2751
  "chat.viewOnce.infoBody": "View-once photos, videos, and audio disappear from the conversation after the person opens the file once.",
@@ -2761,6 +2851,7 @@ export const EN_MESSAGES: FlatMessages = {
2761
2851
  "discover.empty.default": "No one nearby yet.",
2762
2852
  "discover.empty.online": "No one online nearby right now.",
2763
2853
  "discover.empty.position": "No one with position \"{position}\" nearby. Refresh or change the filter.",
2854
+ "discover.empty.rightNow": "No one on Right Now nearby right now.",
2764
2855
  "discover.empty.title": "No one nearby",
2765
2856
  "discover.endRegion.body": "You’ve seen the closest profiles. Turn on Hunt to explore other cities without changing your real location.",
2766
2857
  "discover.endRegion.cta": "Hunt in another region",
@@ -2769,6 +2860,22 @@ export const EN_MESSAGES: FlatMessages = {
2769
2860
  "discover.filter.creators": "Creators",
2770
2861
  "discover.filter.online": "Online Now",
2771
2862
  "discover.filter.position": "Position",
2863
+ "discover.filter.rightNow": "Right Now",
2864
+ "discover.filters.age25to35": "25–35",
2865
+ "discover.filters.ageOver35": "Over 35",
2866
+ "discover.filters.ageUnder25": "Under 25",
2867
+ "discover.filters.anyAge": "Any age",
2868
+ "discover.filters.apply": "Apply",
2869
+ "discover.filters.clearAll": "Clear all",
2870
+ "discover.filters.creators": "Creators",
2871
+ "discover.filters.onlineNow": "Online now",
2872
+ "discover.filters.rightNow": "Right Now",
2873
+ "discover.filters.sectionAge": "Age",
2874
+ "discover.filters.sectionMedia": "Media",
2875
+ "discover.filters.sectionPosition": "Position",
2876
+ "discover.filters.sectionStatus": "Status",
2877
+ "discover.filters.title": "Filters",
2878
+ "discover.filters.withPhotos": "With photos",
2772
2879
  "discover.hideDistance.body": "While this is on, you won’t see the nearby people grid.",
2773
2880
  "discover.hideDistance.openSettings": "Open settings",
2774
2881
  "discover.hideDistance.title": "You hid your distance",
@@ -2777,6 +2884,13 @@ export const EN_MESSAGES: FlatMessages = {
2777
2884
  "discover.hunt.changeRegion": "Change region",
2778
2885
  "discover.hunt.otherRegion": "another region",
2779
2886
  "discover.hunt.useMyLocation": "Use my location",
2887
+ "discover.mapPin.ageYears": "{age} years old",
2888
+ "discover.mapPin.approxHint": "Approximate location",
2889
+ "discover.mapPin.distanceKm": "{km} km",
2890
+ "discover.mapPin.distanceM": "{m} m",
2891
+ "discover.mapPin.flash": "Flash",
2892
+ "discover.mapPin.messagePlaceholder": "Message {name}...",
2893
+ "discover.mapPin.profile": "View profile",
2780
2894
  "discover.position.all": "All positions",
2781
2895
  "discover.position.ativo": "Top",
2782
2896
  "discover.position.passivo": "Bottom",
@@ -2784,6 +2898,35 @@ export const EN_MESSAGES: FlatMessages = {
2784
2898
  "discover.position.versatil": "Versatile",
2785
2899
  "discover.position.versatilAtivo": "Versatile-top",
2786
2900
  "discover.position.versatilPassivo": "Versatile-bottom",
2901
+ "discover.rightNow.activate.body": "Let everyone know you want to meet someone now.",
2902
+ "discover.rightNow.activate.gateBody": "Turn on Right Now to see who’s nearby on the map and in posts.",
2903
+ "discover.rightNow.activate.hosting": "Hosting",
2904
+ "discover.rightNow.activate.moodPlaceholder": "What are you in the mood for?",
2905
+ "discover.rightNow.activate.readMore": "Read more",
2906
+ "discover.rightNow.activate.remainingSessions": "{count} sessions left this week",
2907
+ "discover.rightNow.activate.start": "Start",
2908
+ "discover.rightNow.activate.startingSession": "Starting your Right Now session…",
2909
+ "discover.rightNow.activate.title": "Start a Right Now session",
2910
+ "discover.rightNow.badge": "Right Now",
2911
+ "discover.rightNow.compose.addPhoto": "Add photo",
2912
+ "discover.rightNow.compose.captionPlaceholder": "Write a short description…",
2913
+ "discover.rightNow.compose.close": "Close",
2914
+ "discover.rightNow.compose.hint": "Post text only, a photo only, or both.",
2915
+ "discover.rightNow.compose.post": "Post",
2916
+ "discover.rightNow.compose.removePhoto": "Remove photo",
2917
+ "discover.rightNow.compose.title": "Right Now post",
2918
+ "discover.rightNow.fab": "Right Now",
2919
+ "discover.rightNow.fabActive": "Live",
2920
+ "discover.rightNow.hub.emptyFeed": "No Right Now posts yet. Be the first.",
2921
+ "discover.rightNow.hub.emptyMap": "No one active on the map nearby.",
2922
+ "discover.rightNow.hub.feed": "Posts",
2923
+ "discover.rightNow.hub.hosting": "Hosting",
2924
+ "discover.rightNow.hub.map": "Map",
2925
+ "discover.rightNow.hub.title": "Right Now",
2926
+ "discover.rightNow.manage.end": "End session",
2927
+ "discover.rightNow.manage.pending": "Active · {minutes}m left",
2928
+ "discover.rightNow.manage.title": "Right Now",
2929
+ "discover.rightNow.quota.exhausted": "You’ve used all free sessions this week.",
2787
2930
  "discover.subtitle.huntingIn": "Hunting in {label}",
2788
2931
  "discover.subtitle.huntingOther": "Hunting in another region",
2789
2932
  "discover.subtitle.nearby": "Nearby encounters",
@@ -3340,10 +3483,12 @@ export const EN_MESSAGES: FlatMessages = {
3340
3483
  "profile.view.sendMessage": "Send message",
3341
3484
  "profile.view.sendReaction": "Send reaction",
3342
3485
  "profile.view.unmuted": "Notifications allowed again.",
3343
- "random.ai.soon.hint": "An AI-assisted chat will show up here.",
3486
+ "random.ai.cardSubtitle": "Assisted chat when you want to practice",
3487
+ "random.ai.cardTitle": "AI chat",
3488
+ "random.ai.soon.hint": "An AI-assisted chat is on the way. Meanwhile, try random chat with real people.",
3344
3489
  "random.ai.soon.title": "AI chat coming soon",
3345
3490
  "random.chat.cta.cancel": "Leave queue",
3346
- "random.chat.cta.join": "Join the queue",
3491
+ "random.chat.cta.join": "Join the queue now",
3347
3492
  "random.chat.cta.open": "Open chat",
3348
3493
  "random.chat.idle.hint": "Talk to someone at random. Messages and audio only — identity only if you both Match.",
3349
3494
  "random.chat.idle.title": "Random chat",
@@ -3353,10 +3498,23 @@ export const EN_MESSAGES: FlatMessages = {
3353
3498
  "random.chat.waiting.title": "Looking for someone…",
3354
3499
  "random.error.enqueue": "Couldn't join the queue. Try again.",
3355
3500
  "random.error.generic": "Something went wrong. Try again.",
3501
+ "random.hub.badgeSoon": "Coming soon",
3502
+ "random.hub.bulletAudioBody": "Keep it light, night-owl pace — no camera in chat.",
3503
+ "random.hub.bulletAudioTitle": "Text + audio",
3504
+ "random.hub.bulletMatchBody": "Like them? Match. Not feeling it? Skip and meet someone else.",
3505
+ "random.hub.bulletMatchTitle": "Match or next",
3506
+ "random.hub.bulletPrivacyBody": "No photo, name, or bio until a mutual Match.",
3507
+ "random.hub.bulletPrivacyTitle": "Truly anonymous",
3508
+ "random.hub.ctaExploreSoon": "See what's next",
3509
+ "random.hub.heroSubtitle": "Join the queue, chat with text and audio. No photo or profile — until you both Match.",
3510
+ "random.hub.heroTitle": "Meet someone at random",
3511
+ "random.hub.moreTitle": "More Randoms",
3512
+ "random.hub.privacyBanner": "Your profile stays hidden. You only reveal if both of you Match.",
3356
3513
  "random.hub.title": "Randoms",
3357
3514
  "random.segment.ai": "AI chat",
3358
3515
  "random.segment.chat": "Random chat",
3359
3516
  "random.segment.video": "Random video",
3517
+ "random.soon.back": "Back to Randoms",
3360
3518
  "random.thread.anonymousName": "Someone",
3361
3519
  "random.thread.match": "Match",
3362
3520
  "random.thread.matchPending": "Waiting for their Match…",
@@ -3365,7 +3523,9 @@ export const EN_MESSAGES: FlatMessages = {
3365
3523
  "random.thread.skip": "Next",
3366
3524
  "random.thread.skipConfirmBody": "You can join the queue again and talk to someone else.",
3367
3525
  "random.thread.skipConfirmTitle": "End this chat?",
3368
- "random.video.soon.hint": "Random video calls will show up here.",
3526
+ "random.video.cardSubtitle": "Live call with someone at random",
3527
+ "random.video.cardTitle": "Random video",
3528
+ "random.video.soon.hint": "We're building anonymous random video calls. Check back soon — text chat is already live.",
3369
3529
  "random.video.soon.title": "Random video coming soon",
3370
3530
  "referral.creator.metric.clicks": "Link clicks",
3371
3531
  "referral.creator.metric.converted": "Subscriptions",
@@ -125,6 +125,11 @@
125
125
  "alerts.report.writeSummary": "Write a short summary of what happened.",
126
126
  "alerts.repost": "Repost",
127
127
  "alerts.repostSoon": "Reposting will be available soon.",
128
+ "alerts.rightNow.quotaExceeded": "You’ve used all Right Now sessions this week.",
129
+ "alerts.rightNow.startFailed": "Couldn’t start Right Now. Try again.",
130
+ "alerts.rightNow.endFailed": "Couldn’t end the session.",
131
+ "alerts.rightNow.postFailed": "Couldn’t post to Right Now.",
132
+ "alerts.rightNow.contentRequired": "Add a caption or a photo to post.",
128
133
  "alerts.repostThoughtsSoon": "Reposting thoughts will be available soon.",
129
134
  "alerts.revoke": "Revoke",
130
135
  "alerts.saveFailed": "Could not save.",
@@ -349,11 +349,16 @@
349
349
  "chat.story.replied": "You replied to the story",
350
350
  "chat.story.repliedPeer": "Replied to your story",
351
351
  "chat.storyReply.peerKeyUnavailable": "Recipient public key unavailable.",
352
+ "chat.safety.title": "Safety code",
353
+ "chat.safety.verify": "Verify safety code",
354
+ "chat.safety.body": "Compare this code with the other person (outside the app). If it matches, the chat is protected.\n\n{code}",
355
+ "chat.safety.unavailable": "Couldn't build a safety code on this device.",
352
356
  "chat.thread.decryptFailed": "[could not decrypt]",
353
357
  "chat.thread.fallbackGroup": "Group",
354
358
  "chat.thread.fallbackName": "Conversation",
355
359
  "chat.thread.muteOff": "Notifications are on again.",
356
360
  "chat.thread.muteOn": "Notifications muted for this person.",
361
+ "chat.thread.peerKeyMissing": "This person hasn't published a public key yet. Encrypted messaging isn't available.",
357
362
  "chat.toast.done": "Done",
358
363
  "chat.viewOnce.delete": "Delete",
359
364
  "chat.viewOnce.infoBody": "View-once photos, videos, and audio disappear from the conversation after the person opens the file once.",
@@ -11,6 +11,7 @@
11
11
  "discover.empty.default": "No one nearby yet.",
12
12
  "discover.empty.online": "No one online nearby right now.",
13
13
  "discover.empty.position": "No one with position \"{position}\" nearby. Refresh or change the filter.",
14
+ "discover.empty.rightNow": "No one on Right Now nearby right now.",
14
15
  "discover.empty.title": "No one nearby",
15
16
  "discover.endRegion.body": "You’ve seen the closest profiles. Turn on Hunt to explore other cities without changing your real location.",
16
17
  "discover.endRegion.cta": "Hunt in another region",
@@ -19,6 +20,58 @@
19
20
  "discover.filter.creators": "Creators",
20
21
  "discover.filter.online": "Online Now",
21
22
  "discover.filter.position": "Position",
23
+ "discover.filter.rightNow": "Right Now",
24
+ "discover.filters.title": "Filters",
25
+ "discover.filters.clearAll": "Clear all",
26
+ "discover.filters.apply": "Apply",
27
+ "discover.filters.sectionStatus": "Status",
28
+ "discover.filters.sectionMedia": "Media",
29
+ "discover.filters.sectionPosition": "Position",
30
+ "discover.filters.sectionAge": "Age",
31
+ "discover.filters.onlineNow": "Online now",
32
+ "discover.filters.withPhotos": "With photos",
33
+ "discover.filters.rightNow": "Right Now",
34
+ "discover.filters.creators": "Creators",
35
+ "discover.filters.ageUnder25": "Under 25",
36
+ "discover.filters.age25to35": "25–35",
37
+ "discover.filters.ageOver35": "Over 35",
38
+ "discover.filters.anyAge": "Any age",
39
+ "discover.mapPin.flash": "Flash",
40
+ "discover.mapPin.profile": "View profile",
41
+ "discover.mapPin.distanceKm": "{km} km",
42
+ "discover.mapPin.distanceM": "{m} m",
43
+ "discover.mapPin.ageYears": "{age} years old",
44
+ "discover.mapPin.approxHint": "Approximate location",
45
+ "discover.mapPin.messagePlaceholder": "Message {name}...",
46
+ "discover.rightNow.activate.body": "Let everyone know you want to meet someone now.",
47
+ "discover.rightNow.activate.gateBody": "Turn on Right Now to see who’s nearby on the map and in posts.",
48
+ "discover.rightNow.compose.addPhoto": "Add photo",
49
+ "discover.rightNow.compose.close": "Close",
50
+ "discover.rightNow.compose.hint": "Post text only, a photo only, or both.",
51
+ "discover.rightNow.compose.removePhoto": "Remove photo",
52
+ "discover.rightNow.activate.hosting": "Hosting",
53
+ "discover.rightNow.activate.moodPlaceholder": "What are you in the mood for?",
54
+ "discover.rightNow.activate.readMore": "Read more",
55
+ "discover.rightNow.activate.remainingSessions": "{count} sessions left this week",
56
+ "discover.rightNow.activate.start": "Start",
57
+ "discover.rightNow.activate.startingSession": "Starting your Right Now session…",
58
+ "discover.rightNow.activate.title": "Start a Right Now session",
59
+ "discover.rightNow.badge": "Right Now",
60
+ "discover.rightNow.compose.captionPlaceholder": "Write a short description…",
61
+ "discover.rightNow.compose.post": "Post",
62
+ "discover.rightNow.compose.title": "Right Now post",
63
+ "discover.rightNow.fab": "Right Now",
64
+ "discover.rightNow.fabActive": "Live",
65
+ "discover.rightNow.hub.emptyFeed": "No Right Now posts yet. Be the first.",
66
+ "discover.rightNow.hub.emptyMap": "No one active on the map nearby.",
67
+ "discover.rightNow.hub.feed": "Posts",
68
+ "discover.rightNow.hub.hosting": "Hosting",
69
+ "discover.rightNow.hub.map": "Map",
70
+ "discover.rightNow.hub.title": "Right Now",
71
+ "discover.rightNow.manage.end": "End session",
72
+ "discover.rightNow.manage.pending": "Active · {minutes}m left",
73
+ "discover.rightNow.manage.title": "Right Now",
74
+ "discover.rightNow.quota.exhausted": "You’ve used all free sessions this week.",
22
75
  "discover.hideDistance.body": "While this is on, you won’t see the nearby people grid.",
23
76
  "discover.hideDistance.openSettings": "Open settings",
24
77
  "discover.hideDistance.title": "You hid your distance",
@@ -1,9 +1,21 @@
1
1
  {
2
2
  "random.hub.title": "Randoms",
3
+ "random.hub.heroTitle": "Meet someone at random",
4
+ "random.hub.heroSubtitle": "Join the queue, chat with text and audio. No photo or profile — until you both Match.",
5
+ "random.hub.privacyBanner": "Your profile stays hidden. You only reveal if both of you Match.",
6
+ "random.hub.moreTitle": "More Randoms",
7
+ "random.hub.badgeSoon": "Coming soon",
8
+ "random.hub.ctaExploreSoon": "See what's next",
9
+ "random.hub.bulletPrivacyTitle": "Truly anonymous",
10
+ "random.hub.bulletPrivacyBody": "No photo, name, or bio until a mutual Match.",
11
+ "random.hub.bulletMatchTitle": "Match or next",
12
+ "random.hub.bulletMatchBody": "Like them? Match. Not feeling it? Skip and meet someone else.",
13
+ "random.hub.bulletAudioTitle": "Text + audio",
14
+ "random.hub.bulletAudioBody": "Keep it light, night-owl pace — no camera in chat.",
3
15
  "random.segment.chat": "Random chat",
4
16
  "random.segment.video": "Random video",
5
17
  "random.segment.ai": "AI chat",
6
- "random.chat.cta.join": "Join the queue",
18
+ "random.chat.cta.join": "Join the queue now",
7
19
  "random.chat.cta.cancel": "Leave queue",
8
20
  "random.chat.cta.open": "Open chat",
9
21
  "random.chat.waiting.title": "Looking for someone…",
@@ -12,10 +24,15 @@
12
24
  "random.chat.idle.hint": "Talk to someone at random. Messages and audio only — identity only if you both Match.",
13
25
  "random.chat.matched.title": "You're chatting",
14
26
  "random.chat.matched.hint": "The other person can't see your profile. Match together to reveal.",
27
+ "random.video.cardTitle": "Random video",
28
+ "random.video.cardSubtitle": "Live call with someone at random",
15
29
  "random.video.soon.title": "Random video coming soon",
16
- "random.video.soon.hint": "Random video calls will show up here.",
30
+ "random.video.soon.hint": "We're building anonymous random video calls. Check back soon — text chat is already live.",
31
+ "random.ai.cardTitle": "AI chat",
32
+ "random.ai.cardSubtitle": "Assisted chat when you want to practice",
17
33
  "random.ai.soon.title": "AI chat coming soon",
18
- "random.ai.soon.hint": "An AI-assisted chat will show up here.",
34
+ "random.ai.soon.hint": "An AI-assisted chat is on the way. Meanwhile, try random chat with real people.",
35
+ "random.soon.back": "Back to Randoms",
19
36
  "random.thread.anonymousName": "Someone",
20
37
  "random.thread.match": "Match",
21
38
  "random.thread.skip": "Next",
@@ -125,6 +125,11 @@
125
125
  "alerts.report.writeSummary": "Escreva um breve resumo do que aconteceu.",
126
126
  "alerts.repost": "Repost",
127
127
  "alerts.repostSoon": "Repostar estará disponível em breve.",
128
+ "alerts.rightNow.quotaExceeded": "Você usou todas as sessões Right Now desta semana.",
129
+ "alerts.rightNow.startFailed": "Não foi possível iniciar o Right Now. Tente novamente.",
130
+ "alerts.rightNow.endFailed": "Não foi possível encerrar a sessão.",
131
+ "alerts.rightNow.postFailed": "Não foi possível publicar no Right Now.",
132
+ "alerts.rightNow.contentRequired": "Escreva um texto ou adicione uma foto para publicar.",
128
133
  "alerts.repostThoughtsSoon": "Repostar pensamentos estará disponível em breve.",
129
134
  "alerts.revoke": "Revogar",
130
135
  "alerts.saveFailed": "Não foi possível salvar.",
@@ -349,11 +349,16 @@
349
349
  "chat.story.replied": "Você respondeu ao story",
350
350
  "chat.story.repliedPeer": "Respondeu ao seu story",
351
351
  "chat.storyReply.peerKeyUnavailable": "Chave pública do destinatário indisponível.",
352
+ "chat.safety.title": "Código de segurança",
353
+ "chat.safety.verify": "Verificar código de segurança",
354
+ "chat.safety.body": "Compare este código com a outra pessoa (fora do app). Se for igual, a conversa está protegida.\n\n{code}",
355
+ "chat.safety.unavailable": "Não foi possível montar o código de segurança neste dispositivo.",
352
356
  "chat.thread.decryptFailed": "[não foi possível decifrar]",
353
357
  "chat.thread.fallbackGroup": "Grupo",
354
358
  "chat.thread.fallbackName": "Conversa",
355
359
  "chat.thread.muteOff": "Notificações permitidas de novo.",
356
360
  "chat.thread.muteOn": "Notificações silenciadas desta pessoa.",
361
+ "chat.thread.peerKeyMissing": "Esta pessoa ainda não publicou a chave pública. Não é possível trocar mensagens cifradas ainda.",
357
362
  "chat.toast.done": "Pronto",
358
363
  "chat.viewOnce.delete": "Apagar",
359
364
  "chat.viewOnce.infoBody": "Fotos, vídeos e áudios de visualização única desaparecem da conversa depois que a pessoa abre o arquivo uma vez.",
@@ -11,6 +11,7 @@
11
11
  "discover.empty.default": "Ninguém por perto ainda.",
12
12
  "discover.empty.online": "Ninguém online por perto agora.",
13
13
  "discover.empty.position": "Ninguém com posição \"{position}\" por perto. Atualize ou mude o filtro.",
14
+ "discover.empty.rightNow": "Ninguém no Right Now por perto agora.",
14
15
  "discover.empty.title": "Ninguém por perto",
15
16
  "discover.endRegion.body": "Você viu os perfis mais próximos. Ative o Caçar para explorar outras cidades sem mudar sua localização real.",
16
17
  "discover.endRegion.cta": "Caçar em outra região",
@@ -19,6 +20,58 @@
19
20
  "discover.filter.creators": "Criadores",
20
21
  "discover.filter.online": "Online Agora",
21
22
  "discover.filter.position": "Posição",
23
+ "discover.filter.rightNow": "Right Now",
24
+ "discover.filters.title": "Filtros",
25
+ "discover.filters.clearAll": "Limpar tudo",
26
+ "discover.filters.apply": "Aplicar",
27
+ "discover.filters.sectionStatus": "Status",
28
+ "discover.filters.sectionMedia": "Mídia",
29
+ "discover.filters.sectionPosition": "Posição",
30
+ "discover.filters.sectionAge": "Idade",
31
+ "discover.filters.onlineNow": "Online agora",
32
+ "discover.filters.withPhotos": "Com fotos",
33
+ "discover.filters.rightNow": "Right Now",
34
+ "discover.filters.creators": "Criadores",
35
+ "discover.filters.ageUnder25": "Menos de 25",
36
+ "discover.filters.age25to35": "25–35",
37
+ "discover.filters.ageOver35": "Mais de 35",
38
+ "discover.filters.anyAge": "Qualquer idade",
39
+ "discover.mapPin.flash": "Flash",
40
+ "discover.mapPin.profile": "Ver perfil",
41
+ "discover.mapPin.distanceKm": "{km} km",
42
+ "discover.mapPin.distanceM": "{m} m",
43
+ "discover.mapPin.ageYears": "{age} anos",
44
+ "discover.mapPin.approxHint": "Local aproximado",
45
+ "discover.mapPin.messagePlaceholder": "Mensagem para {name}...",
46
+ "discover.rightNow.activate.body": "Deixe todo mundo saber que você quer encontrar alguém agora.",
47
+ "discover.rightNow.activate.gateBody": "Ative o Right Now para ver quem está por perto no mapa e nas publicações.",
48
+ "discover.rightNow.compose.addPhoto": "Adicionar foto",
49
+ "discover.rightNow.compose.close": "Fechar",
50
+ "discover.rightNow.compose.hint": "Publique só texto, só foto, ou os dois.",
51
+ "discover.rightNow.compose.removePhoto": "Remover foto",
52
+ "discover.rightNow.activate.hosting": "Recepcionando",
53
+ "discover.rightNow.activate.moodPlaceholder": "Do que você está a fim?",
54
+ "discover.rightNow.activate.readMore": "Saiba mais",
55
+ "discover.rightNow.activate.remainingSessions": "{count} sessões restantes esta semana",
56
+ "discover.rightNow.activate.start": "Iniciar",
57
+ "discover.rightNow.activate.startingSession": "Iniciando sua sessão no Right Now…",
58
+ "discover.rightNow.activate.title": "Iniciar uma sessão Right Now",
59
+ "discover.rightNow.badge": "Right Now",
60
+ "discover.rightNow.compose.captionPlaceholder": "Escreva uma descrição…",
61
+ "discover.rightNow.compose.post": "Publicar",
62
+ "discover.rightNow.compose.title": "Post Right Now",
63
+ "discover.rightNow.fab": "Right Now",
64
+ "discover.rightNow.fabActive": "Ao vivo",
65
+ "discover.rightNow.hub.emptyFeed": "Nenhum post no Right Now ainda. Seja o primeiro.",
66
+ "discover.rightNow.hub.emptyMap": "Ninguém ativo no mapa por perto.",
67
+ "discover.rightNow.hub.feed": "Publicações",
68
+ "discover.rightNow.hub.hosting": "Recepcionando",
69
+ "discover.rightNow.hub.map": "Mapa",
70
+ "discover.rightNow.hub.title": "Right Now",
71
+ "discover.rightNow.manage.end": "Encerrar sessão",
72
+ "discover.rightNow.manage.pending": "Ativo · falta {minutes}m",
73
+ "discover.rightNow.manage.title": "Right Now",
74
+ "discover.rightNow.quota.exhausted": "Você usou todas as sessões gratuitas desta semana.",
22
75
  "discover.hideDistance.body": "Enquanto essa opção estiver ativa, você não verá o grid de pessoas próximas.",
23
76
  "discover.hideDistance.openSettings": "Abrir configurações",
24
77
  "discover.hideDistance.title": "Você ocultou sua distância",
@@ -1,21 +1,38 @@
1
1
  {
2
2
  "random.hub.title": "Randoms",
3
+ "random.hub.heroTitle": "Conheça alguém do acaso",
4
+ "random.hub.heroSubtitle": "Entre na fila, converse com texto e áudio. Sem foto nem perfil — até o Match dos dois.",
5
+ "random.hub.privacyBanner": "Seu perfil fica oculto. Só se revelam se os dois derem Match.",
6
+ "random.hub.moreTitle": "Mais Randoms",
7
+ "random.hub.badgeSoon": "Em breve",
8
+ "random.hub.ctaExploreSoon": "Ver o que vem",
9
+ "random.hub.bulletPrivacyTitle": "Anônimo de verdade",
10
+ "random.hub.bulletPrivacyBody": "Nada de foto, nome ou bio até o Match mútuo.",
11
+ "random.hub.bulletMatchTitle": "Match ou próximo",
12
+ "random.hub.bulletMatchBody": "Gostou? Match. Não? Pula e encontra outra pessoa.",
13
+ "random.hub.bulletAudioTitle": "Texto + áudio",
14
+ "random.hub.bulletAudioBody": "Conversa leve, no ritmo noturno — sem câmera no chat.",
3
15
  "random.segment.chat": "Chat aleatório",
4
16
  "random.segment.video": "Vídeo aleatório",
5
17
  "random.segment.ai": "Chat com IA",
6
- "random.chat.cta.join": "Entrar na fila",
18
+ "random.chat.cta.join": "Entrar na fila agora",
7
19
  "random.chat.cta.cancel": "Sair da fila",
8
20
  "random.chat.cta.open": "Abrir conversa",
9
21
  "random.chat.waiting.title": "Procurando alguém…",
10
22
  "random.chat.waiting.hint": "Assim que outra pessoa entrar, a conversa começa. Sem fotos nem perfil até o Match.",
11
- "random.chat.idle.title": "Conversa aleatória",
23
+ "random.chat.idle.title": "Chat aleatório",
12
24
  "random.chat.idle.hint": "Fale com alguém do acaso. Só mensagens e áudio — identidade só se os dois derem Match.",
13
25
  "random.chat.matched.title": "Você está conversando",
14
26
  "random.chat.matched.hint": "A pessoa do outro lado não vê seu perfil. Combine o Match para se revelarem.",
27
+ "random.video.cardTitle": "Vídeo aleatório",
28
+ "random.video.cardSubtitle": "Chamada ao vivo com alguém do acaso",
15
29
  "random.video.soon.title": "Vídeo aleatório em breve",
16
- "random.video.soon.hint": "Chamadas aleatórias vão aparecer aqui.",
30
+ "random.video.soon.hint": "Estamos preparando chamadas aleatórias anônimas. Volte em breve — o chat de texto já está rolando.",
31
+ "random.ai.cardTitle": "Chat com IA",
32
+ "random.ai.cardSubtitle": "Conversa assistida quando você quiser praticar",
17
33
  "random.ai.soon.title": "Chat com IA em breve",
18
- "random.ai.soon.hint": "Uma conversa com assistência de IA vai aparecer aqui.",
34
+ "random.ai.soon.hint": "Uma conversa com assistência de IA está a caminho. Enquanto isso, experimente o chat aleatório com pessoas reais.",
35
+ "random.soon.back": "Voltar aos Randoms",
19
36
  "random.thread.anonymousName": "Alguém",
20
37
  "random.thread.match": "Match",
21
38
  "random.thread.skip": "Próximo",