@proulr/rosetta 0.1.2
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.
- package/README.md +49 -0
- package/docs/ROSETTA.md +247 -0
- package/docs/npm-publish-cicd.md +50 -0
- package/package.json +49 -0
- package/src/catalog.ts +42 -0
- package/src/domains.ts +18 -0
- package/src/generated/locale-messages.ts +925 -0
- package/src/index.ts +20 -0
- package/src/locale-types.ts +13 -0
- package/src/locales/en/alerts.json +40 -0
- package/src/locales/en/auth.json +46 -0
- package/src/locales/en/chat.json +22 -0
- package/src/locales/en/common.json +28 -0
- package/src/locales/en/discover.json +33 -0
- package/src/locales/en/flash.json +16 -0
- package/src/locales/en/hybrid.json +10 -0
- package/src/locales/en/profile.json +65 -0
- package/src/locales/en/shell.json +201 -0
- package/src/locales/en/social.json +12 -0
- package/src/locales/pt-BR/alerts.json +40 -0
- package/src/locales/pt-BR/auth.json +46 -0
- package/src/locales/pt-BR/chat.json +22 -0
- package/src/locales/pt-BR/common.json +28 -0
- package/src/locales/pt-BR/discover.json +33 -0
- package/src/locales/pt-BR/flash.json +16 -0
- package/src/locales/pt-BR/hybrid.json +10 -0
- package/src/locales/pt-BR/profile.json +65 -0
- package/src/locales/pt-BR/shell.json +201 -0
- package/src/locales/pt-BR/social.json +12 -0
- package/src/resolve-locale.ts +85 -0
- package/src/translate.ts +18 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"common.active": "Ativo",
|
|
3
|
+
"common.app": "App",
|
|
4
|
+
"common.attention": "Atenção",
|
|
5
|
+
"common.cancel": "Cancelar",
|
|
6
|
+
"common.chat": "Chat",
|
|
7
|
+
"common.chats": "Chats",
|
|
8
|
+
"common.confirm": "Confirmar",
|
|
9
|
+
"common.error": "Erro",
|
|
10
|
+
"common.flashes": "Flashes",
|
|
11
|
+
"common.general": "Geral",
|
|
12
|
+
"common.huntConnectDiscover": "Caçar · Conectar · Descobrir",
|
|
13
|
+
"common.id": "ID",
|
|
14
|
+
"common.media": "Mídia",
|
|
15
|
+
"common.notifications": "Notificações",
|
|
16
|
+
"common.ops": "Ops",
|
|
17
|
+
"common.options": "Opções",
|
|
18
|
+
"common.privacy": "Privacidade",
|
|
19
|
+
"common.save": "Salvar",
|
|
20
|
+
"common.saved": "Salvo",
|
|
21
|
+
"common.security": "Segurança",
|
|
22
|
+
"common.social": "Social",
|
|
23
|
+
"common.soon": "Em breve",
|
|
24
|
+
"common.support": "Suporte",
|
|
25
|
+
"common.tagline": "Proulr — Caçar · Conectar · Descobrir",
|
|
26
|
+
"common.tryAgain": "Tente novamente.",
|
|
27
|
+
"common.version": "Versão"
|
|
28
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"discover.browse.defaultLabel": "Região selecionada",
|
|
3
|
+
"discover.browse.subtitle": "Escolher região para caçar",
|
|
4
|
+
"discover.empty.creators": "Nenhum criador por perto agora.",
|
|
5
|
+
"discover.empty.default": "Ninguém por perto ainda.",
|
|
6
|
+
"discover.empty.online": "Ninguém online por perto agora.",
|
|
7
|
+
"discover.empty.position": "Ninguém com posição \"{position}\" por perto. Atualize ou mude o filtro.",
|
|
8
|
+
"discover.empty.title": "Ninguém por perto",
|
|
9
|
+
"discover.endRegion.body": "Você viu os perfis mais próximos. Ative o Caçar para explorar outras cidades sem mudar sua localização real.",
|
|
10
|
+
"discover.endRegion.cta": "Caçar em outra região",
|
|
11
|
+
"discover.endRegion.title": "Acabou a região por aqui",
|
|
12
|
+
"discover.filter.all": "Todos",
|
|
13
|
+
"discover.filter.creators": "Criadores",
|
|
14
|
+
"discover.filter.online": "Online Agora",
|
|
15
|
+
"discover.filter.position": "Posição",
|
|
16
|
+
"discover.hideDistance.body": "Enquanto essa opção estiver ativa, você não verá o grid de pessoas próximas.",
|
|
17
|
+
"discover.hideDistance.openSettings": "Abrir configurações",
|
|
18
|
+
"discover.hideDistance.title": "Você ocultou sua distância",
|
|
19
|
+
"discover.hunt.activeBody": "Você está vendo quem está em {region}. Ninguém de lá te vê — sua localização real não mudou.",
|
|
20
|
+
"discover.hunt.activeTitle": "Modo Caçar ativo",
|
|
21
|
+
"discover.hunt.changeRegion": "Mudar região",
|
|
22
|
+
"discover.hunt.otherRegion": "outra região",
|
|
23
|
+
"discover.hunt.useMyLocation": "Usar minha localização",
|
|
24
|
+
"discover.position.ativo": "Ativo",
|
|
25
|
+
"discover.position.passivo": "Passivo",
|
|
26
|
+
"discover.position.preferNot": "Prefiro não dizer",
|
|
27
|
+
"discover.position.versatil": "Versátil",
|
|
28
|
+
"discover.position.versatilAtivo": "Versátil-ativo",
|
|
29
|
+
"discover.position.versatilPassivo": "Versátil-passivo",
|
|
30
|
+
"discover.subtitle.huntingIn": "Caçando em {label}",
|
|
31
|
+
"discover.subtitle.huntingOther": "Caçando em outra região",
|
|
32
|
+
"discover.subtitle.nearby": "Encontros por proximidade"
|
|
33
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"flash.deprecated.subtitle": "Migrado para o chat-bff",
|
|
3
|
+
"flash.deprecated.title": "Flashes",
|
|
4
|
+
"flash.msg.chat": "quer conversar",
|
|
5
|
+
"flash.msg.eyes": "está de olho em você",
|
|
6
|
+
"flash.msg.fire": "achou você quente",
|
|
7
|
+
"flash.msg.flash": "te enviou um Flash",
|
|
8
|
+
"flash.msg.heart": "curtiu você",
|
|
9
|
+
"flash.msg.wave": "mandou um oi",
|
|
10
|
+
"flash.reaction.chat": "Conversar",
|
|
11
|
+
"flash.reaction.eyes": "Interesse",
|
|
12
|
+
"flash.reaction.fire": "Quente",
|
|
13
|
+
"flash.reaction.flash": "Flash",
|
|
14
|
+
"flash.reaction.heart": "Curti",
|
|
15
|
+
"flash.reaction.wave": "Oi"
|
|
16
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"report.harassment": "Assédio",
|
|
3
|
+
"report.harassment.hint": "Ameaças, humilhação ou comportamento abusivo",
|
|
4
|
+
"report.illegal": "Conteúdo ilegal",
|
|
5
|
+
"report.illegal.hint": "Material ilegal ou que viola a lei",
|
|
6
|
+
"report.other": "Outro",
|
|
7
|
+
"report.other.hint": "Outro motivo — descreva no resumo",
|
|
8
|
+
"report.spam": "Spam",
|
|
9
|
+
"report.spam.hint": "Propaganda, links suspeitos ou mensagens repetidas"
|
|
10
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"profile.albums.subtitle": "Coleções privadas de fotos e vídeos",
|
|
3
|
+
"profile.albums.title": "Meus álbuns",
|
|
4
|
+
"profile.completion.banner": "Complete seu perfil para aparecer mais",
|
|
5
|
+
"profile.completion.cta": "Completar perfil",
|
|
6
|
+
"profile.completion.gateLater": "Fazer depois e começar a usar",
|
|
7
|
+
"profile.completion.gateNow": "Completar agora",
|
|
8
|
+
"profile.completion.gateTitle": "Complete seu perfil para ter mais alcance",
|
|
9
|
+
"profile.completion.reminderBody": "Perfis completos aparecem mais no Caçar e recebem mais Flashes.",
|
|
10
|
+
"profile.completion.reminderTitle": "Complete seu perfil",
|
|
11
|
+
"profile.handle.invalidFormat": "O @ deve ter 3–30 caracteres (letras minúsculas, números e _).",
|
|
12
|
+
"profile.handle.rateLimited": "Você só pode trocar o @ a cada 30 dias.",
|
|
13
|
+
"profile.handle.reserved": "Esse @ é reservado e não pode ser usado.",
|
|
14
|
+
"profile.handle.taken": "Esse @ já está em uso por outra pessoa.",
|
|
15
|
+
"profile.onboarding.corpo.interstitial": "Vamos falar sobre relacionamento.",
|
|
16
|
+
"profile.onboarding.corpo.subtitle": "Altura, peso, etnia, porte e pelos.",
|
|
17
|
+
"profile.onboarding.corpo.title": "Seu corpo",
|
|
18
|
+
"profile.onboarding.fotos.interstitial": "Em seguida, conte o que você procura.",
|
|
19
|
+
"profile.onboarding.fotos.subtitle": "Adicione suas fotos. A primeira é a principal.",
|
|
20
|
+
"profile.onboarding.fotos.title": "Mostre quem você é",
|
|
21
|
+
"profile.onboarding.identidade.interstitial": "Agora vamos adicionar suas fotos.",
|
|
22
|
+
"profile.onboarding.identidade.subtitle": "Escolha seu nome e seu @.",
|
|
23
|
+
"profile.onboarding.identidade.title": "Como podemos te chamar?",
|
|
24
|
+
"profile.onboarding.interesses.interstitial": "Agora algumas informações de saúde.",
|
|
25
|
+
"profile.onboarding.interesses.subtitle": "Interesses, tags e comunidades.",
|
|
26
|
+
"profile.onboarding.interesses.title": "Interesses",
|
|
27
|
+
"profile.onboarding.link_viagem.interstitial": "Tudo pronto para começar a usar o Proulr!",
|
|
28
|
+
"profile.onboarding.link_viagem.subtitle": "Seu link externo e seus planos de viagem.",
|
|
29
|
+
"profile.onboarding.link_viagem.title": "Link e viagem",
|
|
30
|
+
"profile.onboarding.preferencias.interstitial": "Pronto! Vamos deixar seu perfil mais completo.",
|
|
31
|
+
"profile.onboarding.preferencias.subtitle": "Gênero, em busca de e posição.",
|
|
32
|
+
"profile.onboarding.preferencias.title": "O que você procura?",
|
|
33
|
+
"profile.onboarding.redes.interstitial": "Por último, link e modo viagem.",
|
|
34
|
+
"profile.onboarding.redes.subtitle": "Conecte seus perfis nas redes.",
|
|
35
|
+
"profile.onboarding.redes.title": "Redes sociais",
|
|
36
|
+
"profile.onboarding.relacionamento.interstitial": "Conte sobre seus interesses.",
|
|
37
|
+
"profile.onboarding.relacionamento.subtitle": "Status, parceria e onde gosta de se encontrar.",
|
|
38
|
+
"profile.onboarding.relacionamento.title": "Relacionamento",
|
|
39
|
+
"profile.onboarding.saude.interstitial": "Vamos adicionar suas redes sociais.",
|
|
40
|
+
"profile.onboarding.saude.subtitle": "HIV, precauções, vacinas e práticas.",
|
|
41
|
+
"profile.onboarding.saude.title": "Saúde",
|
|
42
|
+
"profile.onboarding.sobre.interstitial": "Agora algumas informações sobre o seu corpo.",
|
|
43
|
+
"profile.onboarding.sobre.subtitle": "Uma bio curta, o que você faz e onde mora.",
|
|
44
|
+
"profile.onboarding.sobre.title": "Sobre você",
|
|
45
|
+
"profile.photo.add": "Adicionar foto",
|
|
46
|
+
"profile.photo.addPromptBody": "Perfis com foto recebem muito mais Flashes.",
|
|
47
|
+
"profile.photo.addPromptTitle": "Que tal uma foto?",
|
|
48
|
+
"profile.photo.continueWithout": "Continuar sem foto",
|
|
49
|
+
"profile.photo.huntTitle": "Foto do Caçar",
|
|
50
|
+
"profile.photo.vibesTitle": "Foto do Vibes",
|
|
51
|
+
"profile.ui.customVibesHint": "O resto do perfil continua o mesmo nos dois modos.",
|
|
52
|
+
"profile.ui.customVibesToggle": "Usar foto e nome diferentes no Vibes",
|
|
53
|
+
"profile.ui.editTitle": "Editar perfil",
|
|
54
|
+
"profile.ui.handleLabel": "SEU @",
|
|
55
|
+
"profile.ui.modeHunt": "Modo Caçar",
|
|
56
|
+
"profile.ui.modeVibes": "Modo Vibes",
|
|
57
|
+
"profile.ui.myProfile": "Meu perfil",
|
|
58
|
+
"profile.ui.nameLabel": "SEU NOME",
|
|
59
|
+
"profile.ui.photosHint": "A primeira foto é a principal do seu perfil.",
|
|
60
|
+
"profile.ui.photosTitle": "Fotos",
|
|
61
|
+
"profile.ui.save": "Salvar perfil",
|
|
62
|
+
"profile.ui.vibesName": "NOME NO VIBES",
|
|
63
|
+
"profile.ui.vibesPhoto": "FOTO NO VIBES",
|
|
64
|
+
"profile.ui.vibesPhotoHint": "Aparece ao lado do seu @ nos posts do Vibes."
|
|
65
|
+
}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
{
|
|
2
|
+
"settings.appPreferences.subtitle": "Geral, chat, fotos e notificações",
|
|
3
|
+
"settings.appPreferences.title": "Preferências do app",
|
|
4
|
+
"settings.chat.noAutocomplete": "Sem sugestão automática",
|
|
5
|
+
"settings.chat.returnKeySends": "Tecla Retorno envia mensagem",
|
|
6
|
+
"settings.chat.savedPhrases": "Frases frequentes",
|
|
7
|
+
"settings.distanceUnits.title": "Unidades de distância",
|
|
8
|
+
"settings.language.navSubtitle": "Como exibir textos do app",
|
|
9
|
+
"settings.language.navTitle": "Idioma",
|
|
10
|
+
"settings.language.optionEn": "English",
|
|
11
|
+
"settings.language.optionPtBr": "Português (Brasil)",
|
|
12
|
+
"settings.language.optionSystem": "Sistema",
|
|
13
|
+
"settings.language.subtitle": "Textos do app",
|
|
14
|
+
"settings.language.title": "Idioma",
|
|
15
|
+
"settings.media.keepAwake": "Manter tela ligada",
|
|
16
|
+
"settings.media.uploadQuality": "Qualidade de upload",
|
|
17
|
+
"settings.notifications.adjustments": "Sons, vibração e categorias",
|
|
18
|
+
"settings.notifications.disablePush": "Desativar push",
|
|
19
|
+
"settings.notifications.navTitle": "Ajustes de notificações",
|
|
20
|
+
"settings.section.chat": "Bate-papo",
|
|
21
|
+
"settings.section.general": "Geral",
|
|
22
|
+
"settings.section.media": "Mídia e tela",
|
|
23
|
+
"settings.section.notifications": "Notificações",
|
|
24
|
+
"shell.about.build": "Build",
|
|
25
|
+
"shell.about.followIg": "Seguir no Instagram",
|
|
26
|
+
"shell.about.followX": "Seguir no X",
|
|
27
|
+
"shell.about.guidelines": "Diretrizes do perfil",
|
|
28
|
+
"shell.about.section.app": "App",
|
|
29
|
+
"shell.about.section.social": "Social",
|
|
30
|
+
"shell.about.section.terms": "Termos e políticas",
|
|
31
|
+
"shell.about.title": "Sobre",
|
|
32
|
+
"shell.consent.ads": "Publicidade personalizada",
|
|
33
|
+
"shell.consent.ads.hint": "Quando ativarmos ads, respeitaremos esta escolha",
|
|
34
|
+
"shell.consent.analytics": "Análise de uso",
|
|
35
|
+
"shell.consent.analytics.hint": "Ajuda a melhorar estabilidade e performance",
|
|
36
|
+
"shell.consent.banner": "Controle como o Proulr usa dados para anúncios e métricas. Não exibimos anúncios de terceiros no MVP, mas você pode ajustar preferências antecipadamente.",
|
|
37
|
+
"shell.consent.subtitle": "Preferências de privacidade e anúncios",
|
|
38
|
+
"shell.consent.title": "Central de consentimento",
|
|
39
|
+
"shell.deactivate.banner": "Precisa de ajuda antes de sair? Nossa equipe pode orientar sobre privacidade, bloqueios e recuperação de conta.",
|
|
40
|
+
"shell.deactivate.contactSupport": "Contatar suporte",
|
|
41
|
+
"shell.deactivate.contactSupport.hint": "Ajuda com conta, bloqueios e segurança",
|
|
42
|
+
"shell.deactivate.deleteAccount": "Excluir conta",
|
|
43
|
+
"shell.deactivate.deleteAccount.hint": "Desativa a conta e inicia a remoção dos dados",
|
|
44
|
+
"shell.deactivate.signOutDevice": "Sair deste aparelho",
|
|
45
|
+
"shell.deactivate.signOutDevice.hint": "Encerra apenas a sessão local",
|
|
46
|
+
"shell.deactivate.signOutNow": "Sair agora",
|
|
47
|
+
"shell.deactivate.subtitle": "Suporte, sair ou excluir",
|
|
48
|
+
"shell.deactivate.title": "Desativar conta",
|
|
49
|
+
"shell.dnd.clear": "Cancelar adiamento",
|
|
50
|
+
"shell.dnd.quietHours": "Horas de silêncio",
|
|
51
|
+
"shell.dnd.quietHours.hint": "Usa horário padrão 22:00–08:00",
|
|
52
|
+
"shell.dnd.quietHoursToggle": "Ativar horas de silêncio",
|
|
53
|
+
"shell.dnd.snooze": "Adiar",
|
|
54
|
+
"shell.dnd.snooze1h": "1 hora",
|
|
55
|
+
"shell.dnd.snooze8h": "8 horas",
|
|
56
|
+
"shell.dnd.subtitle": "Adiar ou silenciar por horário",
|
|
57
|
+
"shell.dnd.title": "Não perturbe",
|
|
58
|
+
"shell.dnd.untilTomorrow": "Até amanhã",
|
|
59
|
+
"shell.drawer.boost": "Boost",
|
|
60
|
+
"shell.drawer.communities": "Comunidades",
|
|
61
|
+
"shell.drawer.editProfile": "Editar perfil",
|
|
62
|
+
"shell.drawer.events": "Eventos",
|
|
63
|
+
"shell.drawer.hunt": "Caçar",
|
|
64
|
+
"shell.drawer.incognito": "Modo incógnito",
|
|
65
|
+
"shell.drawer.lists": "Listas",
|
|
66
|
+
"shell.drawer.menu": "Menu",
|
|
67
|
+
"shell.drawer.myAlbums": "Meus álbuns",
|
|
68
|
+
"shell.drawer.myProfile": "Meu perfil",
|
|
69
|
+
"shell.drawer.premium": "Premium",
|
|
70
|
+
"shell.drawer.rightNow": "Right Now",
|
|
71
|
+
"shell.drawer.safety": "Centro de segurança",
|
|
72
|
+
"shell.drawer.saved": "Itens salvos",
|
|
73
|
+
"shell.drawer.signOut": "Encerrar sessão",
|
|
74
|
+
"shell.language.en": "English",
|
|
75
|
+
"shell.language.en.hint": "App text in English",
|
|
76
|
+
"shell.language.ptBr": "Português (Brasil)",
|
|
77
|
+
"shell.language.ptBr.hint": "Textos em português do Brasil",
|
|
78
|
+
"shell.language.subtitle": "Idioma dos textos do app",
|
|
79
|
+
"shell.language.system": "Sistema",
|
|
80
|
+
"shell.language.system.hint": "Segue o idioma do aparelho",
|
|
81
|
+
"shell.language.title": "Idioma",
|
|
82
|
+
"shell.notif.appSounds": "Sons no app",
|
|
83
|
+
"shell.notif.appVibrations": "Vibrações no app",
|
|
84
|
+
"shell.notif.disablePush": "Desativar push global",
|
|
85
|
+
"shell.notif.dnd.subtitle": "Adiar ou silenciar por horário",
|
|
86
|
+
"shell.notif.inApp": "No app",
|
|
87
|
+
"shell.notif.inAppAlerts": "Alertas dentro do app",
|
|
88
|
+
"shell.notif.inAppAlerts.hint": "Toasts e banners enquanto o app está aberto",
|
|
89
|
+
"shell.notif.openSystem": "Abrir ajustes do sistema",
|
|
90
|
+
"shell.notif.openSystem.hint": "Permissão e canais de notificação do aparelho",
|
|
91
|
+
"shell.notif.pushProulr": "Push do Proulr",
|
|
92
|
+
"shell.notif.schedules": "Horários",
|
|
93
|
+
"shell.notif.subtitle": "Alertas push, sons e vibrações",
|
|
94
|
+
"shell.notif.systemMgmt": "Gestão do sistema",
|
|
95
|
+
"shell.notif.title": "Notificações",
|
|
96
|
+
"shell.prefs.distanceUnits": "Unidades de distância",
|
|
97
|
+
"shell.prefs.distanceUnits.hint": "Métrico, imperial ou sistema",
|
|
98
|
+
"shell.prefs.keepAwake": "Manter tela ligada",
|
|
99
|
+
"shell.prefs.noAutocorrect": "Desativar autocorreção",
|
|
100
|
+
"shell.prefs.notif.hint": "Push, sons e vibrações",
|
|
101
|
+
"shell.prefs.returnKeySends": "Enter envia mensagem",
|
|
102
|
+
"shell.prefs.savedPhrases": "Frases salvas",
|
|
103
|
+
"shell.prefs.savedPhrases.hint": "Atalhos no composer do chat",
|
|
104
|
+
"shell.prefs.subtitle": "Unidades, idioma, chat e mídia",
|
|
105
|
+
"shell.prefs.title": "Preferências",
|
|
106
|
+
"shell.prefs.uploadQuality": "Qualidade do upload",
|
|
107
|
+
"shell.privacy.appLock": "Bloqueio de início",
|
|
108
|
+
"shell.privacy.appLock.hint": "PIN ou biometria ao abrir o app",
|
|
109
|
+
"shell.privacy.disablePersonalization": "Desabilitar recomendações personalizadas",
|
|
110
|
+
"shell.privacy.discover": "Descobrir",
|
|
111
|
+
"shell.privacy.discreetIcon": "Ícone discreto",
|
|
112
|
+
"shell.privacy.discreetIcon.hint": "Alternar ícone na tela inicial",
|
|
113
|
+
"shell.privacy.dnd.subtitle": "Silenciar por horário ou adiar",
|
|
114
|
+
"shell.privacy.hideAge": "Ocultar idade",
|
|
115
|
+
"shell.privacy.hideDistance": "Ocultar distância",
|
|
116
|
+
"shell.privacy.hideDistance.hint": "Você some do grid e deixa de ver pessoas próximas",
|
|
117
|
+
"shell.privacy.hideFromDiscover": "Ocultar perfil da grade Global",
|
|
118
|
+
"shell.privacy.hideFromDiscover.hint": "Você deixa de aparecer no Descobrir",
|
|
119
|
+
"shell.privacy.hidePosition": "Ocultar posição",
|
|
120
|
+
"shell.privacy.hidePreview": "Ocultar prévia nas notificações",
|
|
121
|
+
"shell.privacy.hidePreview.hint": "Mostra alerta sem conteúdo da mensagem",
|
|
122
|
+
"shell.privacy.hideReadReceipts": "Ocultar confirmações de leitura",
|
|
123
|
+
"shell.privacy.hideTribes": "Ocultar tribos",
|
|
124
|
+
"shell.privacy.limitData": "Limitar dados",
|
|
125
|
+
"shell.privacy.limitPersonal": "Limitar detalhes pessoais",
|
|
126
|
+
"shell.privacy.notifAlerts": "Notificações e alertas",
|
|
127
|
+
"shell.privacy.sensitive": "Conteúdo sensível",
|
|
128
|
+
"shell.privacy.sensitiveFilter": "Filtro de conteúdo sensível",
|
|
129
|
+
"shell.privacy.sensitiveFilter.hint": "Oculta mídia explícita nas grades",
|
|
130
|
+
"shell.privacy.showHealth": "Mostrar status de saúde",
|
|
131
|
+
"shell.privacy.subtitle": "Controle o que outros veem e recebem",
|
|
132
|
+
"shell.privacy.title": "Privacidade",
|
|
133
|
+
"shell.privacy.travelIndicator": "Indicador de viagem",
|
|
134
|
+
"shell.privacy.visibility": "Visibilidade",
|
|
135
|
+
"shell.quality.adaptive": "Adaptativa",
|
|
136
|
+
"shell.quality.maximum": "Máxima",
|
|
137
|
+
"shell.quality.thumbnail": "Miniatura",
|
|
138
|
+
"shell.safety.blockReport.subtitle": "Como bloquear e reportar alguém",
|
|
139
|
+
"shell.safety.blockReport.title": "Bloqueio e denúncias",
|
|
140
|
+
"shell.safety.community.subtitle": "Regras de convivência no Proulr",
|
|
141
|
+
"shell.safety.communityGuidelines": "Diretrizes da comunidade",
|
|
142
|
+
"shell.safety.consent.subtitle": "Respeito e limites nas conversas",
|
|
143
|
+
"shell.safety.consent.title": "Consentimento",
|
|
144
|
+
"shell.safety.dataAccess.subtitle": "Exportação e privacidade (LGPD)",
|
|
145
|
+
"shell.safety.dataAccess.title": "Acessar seus dados",
|
|
146
|
+
"shell.safety.getHelp": "Obter ajuda",
|
|
147
|
+
"shell.safety.getHelp.hint": "Fale com o suporte",
|
|
148
|
+
"shell.safety.location.subtitle": "Como usamos sua posição",
|
|
149
|
+
"shell.safety.location.title": "Localização",
|
|
150
|
+
"shell.safety.meeting.subtitle": "Dicas para se encontrar com mais tranquilidade",
|
|
151
|
+
"shell.safety.meeting.title": "Segurança em encontros",
|
|
152
|
+
"shell.safety.privacySettings.subtitle": "Controle o que outros veem",
|
|
153
|
+
"shell.safety.privacySettings.title": "Configurações de privacidade",
|
|
154
|
+
"shell.safety.quickHelp": "Ajuda rápida",
|
|
155
|
+
"shell.safety.scams.subtitle": "Como identificar perfis suspeitos",
|
|
156
|
+
"shell.safety.scams.title": "Golpes e assédio",
|
|
157
|
+
"shell.safety.section.privacy": "Privacidade",
|
|
158
|
+
"shell.safety.section.safety": "Segurança",
|
|
159
|
+
"shell.safety.subtitle": "Guias, ajuda e privacidade",
|
|
160
|
+
"shell.safety.title": "Central de segurança",
|
|
161
|
+
"shell.settings.aboutProulr": "Sobre o Proulr",
|
|
162
|
+
"shell.settings.appIcon": "Ícone do app",
|
|
163
|
+
"shell.settings.appLock": "Bloqueio do app",
|
|
164
|
+
"shell.settings.blockedHidden": "Bloqueados e ocultos",
|
|
165
|
+
"shell.settings.deactivate": "Desativar conta",
|
|
166
|
+
"shell.settings.device": "Dispositivo",
|
|
167
|
+
"shell.settings.dnd": "Não perturbe",
|
|
168
|
+
"shell.settings.downloadData": "Baixar dados",
|
|
169
|
+
"shell.settings.editProfile": "Editar perfil",
|
|
170
|
+
"shell.settings.editProfile.subtitle": "Atualize suas informações",
|
|
171
|
+
"shell.settings.email": "E-mail",
|
|
172
|
+
"shell.settings.muted": "Silenciados",
|
|
173
|
+
"shell.settings.preferences": "Preferências",
|
|
174
|
+
"shell.settings.privacy": "Privacidade",
|
|
175
|
+
"shell.settings.privacyPolicy": "Política de Privacidade",
|
|
176
|
+
"shell.settings.push.message": "Ative para receber Flashes e mensagens na bandeja.",
|
|
177
|
+
"shell.settings.push.title": "Notificações push",
|
|
178
|
+
"shell.settings.safetyCenter": "Central de segurança",
|
|
179
|
+
"shell.settings.section.account": "Conta",
|
|
180
|
+
"shell.settings.sessions": "Sessões",
|
|
181
|
+
"shell.settings.signOut": "Sair",
|
|
182
|
+
"shell.settings.subscriptions": "Assinaturas",
|
|
183
|
+
"shell.settings.subscriptions.subtitle": "Planos e benefícios",
|
|
184
|
+
"shell.settings.support": "Suporte",
|
|
185
|
+
"shell.settings.terms": "Termos de Serviço",
|
|
186
|
+
"shell.settings.title": "Configurações",
|
|
187
|
+
"shell.settings.version": "Versão",
|
|
188
|
+
"shell.soon.feature": "{label} estará disponível em breve.",
|
|
189
|
+
"shell.tab.chat": "Chat",
|
|
190
|
+
"shell.tab.discover": "Caçar",
|
|
191
|
+
"shell.tab.vibes": "Vibes",
|
|
192
|
+
"shell.units.distance": "Distância",
|
|
193
|
+
"shell.units.imperial": "Imperial",
|
|
194
|
+
"shell.units.imperial.hint": "Milhas e pés",
|
|
195
|
+
"shell.units.metric": "Métrico",
|
|
196
|
+
"shell.units.metric.hint": "Quilômetros e centímetros",
|
|
197
|
+
"shell.units.subtitle": "Como exibir distâncias no app",
|
|
198
|
+
"shell.units.system": "Sistema",
|
|
199
|
+
"shell.units.system.hint": "Segue o idioma do aparelho",
|
|
200
|
+
"shell.units.title": "Unidades"
|
|
201
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"social.fab.photos": "Fotos",
|
|
3
|
+
"social.fab.publish": "Publicar",
|
|
4
|
+
"social.fab.story": "Story",
|
|
5
|
+
"social.feed.fab": "Criar no Feed",
|
|
6
|
+
"social.feed.subtitle": "Publicações da comunidade",
|
|
7
|
+
"social.feed.title": "Feed",
|
|
8
|
+
"social.saved.title": "Itens salvos",
|
|
9
|
+
"social.vibes.fab": "Criar no Vibes",
|
|
10
|
+
"social.vibes.subtitle": "O que a comunidade está dizendo",
|
|
11
|
+
"social.vibes.title": "Vibes"
|
|
12
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DEFAULT_PROULR_LOCALE,
|
|
3
|
+
PROULR_LOCALES,
|
|
4
|
+
type ProulrLocale,
|
|
5
|
+
type ProulrLocalePref,
|
|
6
|
+
} from './locale-types';
|
|
7
|
+
|
|
8
|
+
const PROULR_LOCALE_SET: ReadonlySet<string> = new Set(PROULR_LOCALES);
|
|
9
|
+
|
|
10
|
+
export function isProulrLocale(value: string | undefined | null): value is ProulrLocale {
|
|
11
|
+
return typeof value === 'string' && PROULR_LOCALE_SET.has(value);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function isProulrLocalePref(value: string | undefined | null): value is ProulrLocalePref {
|
|
15
|
+
return value === 'system' || isProulrLocale(value);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** Resolve from BFF/screen query (`locale` preferred, then `app_locale`). */
|
|
19
|
+
export function resolveLocaleFromQuery(
|
|
20
|
+
query: Record<string, string> | undefined | null,
|
|
21
|
+
): ProulrLocale {
|
|
22
|
+
if (!query) return DEFAULT_PROULR_LOCALE;
|
|
23
|
+
if (isProulrLocale(query.locale)) return query.locale;
|
|
24
|
+
if (isProulrLocale(query.app_locale)) return query.app_locale;
|
|
25
|
+
return DEFAULT_PROULR_LOCALE;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function resolveLocaleFromPref(
|
|
29
|
+
pref: ProulrLocalePref,
|
|
30
|
+
systemLocale: ProulrLocale,
|
|
31
|
+
): ProulrLocale {
|
|
32
|
+
if (pref === 'system') return systemLocale;
|
|
33
|
+
return pref;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Map BCP-47 / language tag from the device to a supported Proulr locale.
|
|
38
|
+
* Exact match first, then language-prefix match against `PROULR_LOCALES`.
|
|
39
|
+
*/
|
|
40
|
+
export function resolveLocaleFromSystemTag(languageTag: string | undefined | null): ProulrLocale {
|
|
41
|
+
const tag = (languageTag ?? 'pt-br').toLowerCase();
|
|
42
|
+
|
|
43
|
+
for (const locale of PROULR_LOCALES) {
|
|
44
|
+
if (locale.toLowerCase() === tag) return locale;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
let best: ProulrLocale | null = null;
|
|
48
|
+
let bestScore = -1;
|
|
49
|
+
for (const locale of PROULR_LOCALES) {
|
|
50
|
+
const lower = locale.toLowerCase();
|
|
51
|
+
const primary = lower.split('-')[0] ?? lower;
|
|
52
|
+
if (tag === primary || tag.startsWith(`${primary}-`) || lower.startsWith(`${tag}-`)) {
|
|
53
|
+
const score = lower.length;
|
|
54
|
+
if (score > bestScore) {
|
|
55
|
+
best = locale;
|
|
56
|
+
bestScore = score;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return best ?? DEFAULT_PROULR_LOCALE;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Pick the best supported locale from a list of BCP-47 tags
|
|
66
|
+
* (device locales, `navigator.languages`, Accept-Language, …).
|
|
67
|
+
*/
|
|
68
|
+
export function resolveLocaleFromSystemTags(
|
|
69
|
+
languageTags: Array<string | undefined | null>,
|
|
70
|
+
): ProulrLocale {
|
|
71
|
+
const tags = languageTags
|
|
72
|
+
.map((tag) => (typeof tag === 'string' ? tag.trim() : ''))
|
|
73
|
+
.filter(Boolean);
|
|
74
|
+
|
|
75
|
+
for (const tag of tags) {
|
|
76
|
+
const resolved = resolveLocaleFromSystemTag(tag);
|
|
77
|
+
// Accept non-default when the tag clearly matched a supported locale.
|
|
78
|
+
if (resolved !== DEFAULT_PROULR_LOCALE || tag.toLowerCase().startsWith('pt')) {
|
|
79
|
+
return resolved;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (tags[0]) return resolveLocaleFromSystemTag(tags[0]);
|
|
84
|
+
return DEFAULT_PROULR_LOCALE;
|
|
85
|
+
}
|
package/src/translate.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { getMessage, type ProulrMessageKey } from './catalog';
|
|
2
|
+
import { DEFAULT_PROULR_LOCALE, type ProulrLocale } from './locale-types';
|
|
3
|
+
|
|
4
|
+
export function t(key: ProulrMessageKey, locale: ProulrLocale = DEFAULT_PROULR_LOCALE): string {
|
|
5
|
+
return getMessage(key, locale);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function tFormat(
|
|
9
|
+
key: ProulrMessageKey,
|
|
10
|
+
locale: ProulrLocale,
|
|
11
|
+
vars: Record<string, string | number>,
|
|
12
|
+
): string {
|
|
13
|
+
let out = t(key, locale);
|
|
14
|
+
for (const [name, value] of Object.entries(vars)) {
|
|
15
|
+
out = out.split(`{${name}}`).join(String(value));
|
|
16
|
+
}
|
|
17
|
+
return out;
|
|
18
|
+
}
|