From 5e7c8526246ad568d1567f76e02978a145fc0021 Mon Sep 17 00:00:00 2001 From: codytseng Date: Sun, 2 Mar 2025 23:02:59 +0800 Subject: [PATCH] feat: add support for pt-BR and pt-PT --- src/i18n/index.ts | 9 +- src/i18n/locales/{pt.ts => pt-BR.ts} | 0 src/i18n/locales/pt-PT.ts | 212 +++++++++++++++++++++ src/pages/secondary/SettingsPage/index.tsx | 4 +- 4 files changed, 220 insertions(+), 5 deletions(-) rename src/i18n/locales/{pt.ts => pt-BR.ts} (100%) create mode 100644 src/i18n/locales/pt-PT.ts diff --git a/src/i18n/index.ts b/src/i18n/index.ts index 09d14797..2b1557a7 100644 --- a/src/i18n/index.ts +++ b/src/i18n/index.ts @@ -9,7 +9,8 @@ import es from './locales/es' import fr from './locales/fr' import ja from './locales/ja' import pl from './locales/pl' -import pt from './locales/pt' +import pt_BR from './locales/pt-BR' +import pt_PT from './locales/pt-PT' import ru from './locales/ru' import zh from './locales/zh' @@ -22,7 +23,8 @@ const languages = { de: { resource: de, name: 'Deutsch' }, ja: { resource: ja, name: '日本語' }, ru: { resource: ru, name: 'Русский' }, - pt: { resource: pt, name: 'Português' }, + 'pt-BR': { resource: pt_BR, name: 'Português (Brasil)' }, + 'pt-PT': { resource: pt_PT, name: 'Português (Portugal)' }, ar: { resource: ar, name: 'العربية' } } as const @@ -65,7 +67,8 @@ i18n.services.formatter?.add('date', (timestamp, lng) => { return dayjs(timestamp).format('DD.MM.YYYY') case 'es': case 'fr': - case 'pt': + case 'pt-BR': + case 'pt-PT': case 'ar': return dayjs(timestamp).format('DD/MM/YYYY') default: diff --git a/src/i18n/locales/pt.ts b/src/i18n/locales/pt-BR.ts similarity index 100% rename from src/i18n/locales/pt.ts rename to src/i18n/locales/pt-BR.ts diff --git a/src/i18n/locales/pt-PT.ts b/src/i18n/locales/pt-PT.ts new file mode 100644 index 00000000..b48b1c8c --- /dev/null +++ b/src/i18n/locales/pt-PT.ts @@ -0,0 +1,212 @@ +export default { + translation: { + // NOTE: The translations below were generated by ChatGPT and have not yet been verified. + 'Welcome! 🥳': 'Bem-vindo! 🥳', + About: 'Sobre', + 'New Note': 'Nova Nota', + Post: 'Postar', + Home: 'Início', + 'Relay settings': 'Configurações de Relé', + Settings: 'Configurações', + SidebarRelays: 'Relés', + Refresh: 'Atualizar', + Profile: 'Perfil', + Logout: 'Sair', + Following: 'Seguindo', + followings: 'seguidos', + reposted: 'repostado', + 'just now': 'agora mesmo', + 'n minutes ago': '{{n}} minutos atrás', + 'n m': '{{n}}m', + 'n hours ago': '{{n}} horas atrás', + 'n h': '{{n}}h', + 'n days ago': '{{n}} dias atrás', + 'n d': '{{n}}d', + date: '{{timestamp, date}}', + Follow: 'Seguir', + Unfollow: 'Deixar de Seguir', + 'Follow failed': 'Falha ao Seguir', + 'Unfollow failed': 'Falha ao Deixar de Seguir', + 'show new notes': 'mostrar novas notas', + 'loading...': 'carregando...', + 'no more notes': 'não há mais notas', + 'reply to': 'responder a', + reply: 'responder', + Reply: 'Responder', + 'load more older replies': 'carregar mais respostas antigas', + 'Write something...': 'Escreva algo...', + Cancel: 'Cancelar', + Mentions: 'Menções', + 'Failed to post': 'Falha ao postar', + 'Post successful': 'Postagem bem-sucedida', + 'Your post has been published': 'Sua postagem foi publicada', + Repost: 'Repostar', + Quote: 'Citar', + 'Copy event ID': 'Copiar ID do evento', + 'Copy user ID': 'Copiar ID do usuário', + 'View raw event': 'Ver evento bruto', + Like: 'Curtir', + 'switch to light theme': 'alternar para tema claro', + 'switch to dark theme': 'alternar para tema escuro', + 'switch to system theme': 'alternar para tema do sistema', + Note: 'Nota', + note: 'nota', + "username's following": 'seguindo de {{username}}', + "username's used relays": 'relés usados por {{username}}', + "username's muted": '{{username}} silenciado', + Login: 'Entrar', + 'Follows you': 'Segue você', + 'Relay Settings': 'Configurações de Relé', + 'Relay set name': 'Nome do conjunto de relé', + 'Add a new relay set': 'Adicionar um novo conjunto de relé', + Add: 'Adicionar', + 'n relays': '{{n}} relés', + Rename: 'Renomear', + 'Copy share link': 'Copiar link de compartilhamento', + Delete: 'Excluir', + 'Relay already exists': 'Relé já existe', + 'invalid relay URL': 'URL de relé inválida', + 'Add a new relay': 'Adicionar um novo relé', + back: 'voltar', + 'Lost in the void': 'Perdido no vazio', + 'Carry me home': 'Me leve para casa', + 'no replies': 'sem respostas', + 'Reply to': 'Responder a', + Search: 'Pesquisar', + 'The relays you are connected to do not support search': + 'Os relés aos quais você está conectado não suportam pesquisa', + 'supports search': 'suporta pesquisa', + 'Show more...': 'Mostrar mais...', + 'All users': 'Todos os usuários', + 'Display replies': 'Exibir respostas', + Notes: 'Notas', + Replies: 'Respostas', + Notifications: 'Notificações', + 'no more notifications': 'não há mais notificações', + 'Using private key login is insecure. It is recommended to use a browser extension for login, such as alby, nostr-keyx or nos2x.': + 'Usar login com chave privada é inseguro. Recomenda-se utilizar uma extensão do navegador, como alby, nostr-keyx ou nos2x.', + 'Login with Browser Extension': 'Entrar com Extensão do Navegador', + 'Login with Bunker': 'Entrar com Bunker', + 'Login with Private Key': 'Entrar com Chave Privada', + 'reload notes': 'recarregar notas', + 'Logged in Accounts': 'Contas Conectadas', + 'Add an Account': 'Adicionar uma Conta', + 'More options': 'Mais opções', + 'Add client tag': 'Adicionar tag de cliente', + 'Show others this was sent via Jumble': 'Mostrar aos outros que isso foi enviado via Jumble', + 'Are you sure you want to logout?': 'Tem certeza de que deseja sair?', + 'relay sets': 'conjuntos de relé', + edit: 'editar', + Languages: 'Idiomas', + Theme: 'Tema', + System: 'Sistema', + Light: 'Claro', + Dark: 'Escuro', + Temporary: 'Temporário', + 'Choose a relay set': 'Escolha um conjunto de relé', + 'Switch account': 'Trocar de Conta', + Pictures: 'Imagens', + 'Picture note': 'Nota de Imagem', + 'A special note for picture-first clients like Olas': + 'Uma nota especial para clientes que priorizam imagens, como Olas', + 'Picture note requires images': 'Nota de imagem requer imagens', + Relays: 'Relés', + image: 'imagem', + 'Normal Note': 'Nota Normal', + 'Picture Note': 'Nota de Imagem', + 'R & W': 'Leitura & Escrita', + Read: 'Ler', + Write: 'Escrever', + 'Push to relays': 'Enviar para relés', + 'Push Successful': 'Envio Bem-sucedido', + 'Successfully pushed relay sets to relays': 'Conjuntos de relé enviados com sucesso', + 'Pull from relays': 'Receber de relés', + 'Select the relay sets you want to pull': 'Selecione os conjuntos de relé que deseja receber', + 'No relay sets found': 'Nenhum conjunto de relé encontrado', + 'Pull n relay sets': 'Receber {{n}} conjuntos de relé', + Pull: 'Receber', + 'Select all': 'Selecionar todos', + 'Relay Sets': 'Conjuntos de relé', + 'Read & Write Relays': 'Relés de Leitura & Escrita', + 'read relays description': + 'Relés de leitura são usados para buscar eventos sobre você. Outros usuários publicarão os eventos que deseja ver nesses relés.', + 'write relays description': + 'Relés de escrita são usados para publicar seus eventos. Outros usuários buscarão seus eventos nesses relés.', + 'read & write relays notice': + 'O número de servidores de leitura e escrita deve ser mantido entre 2 e 4, idealmente.', + "Don't have an account yet?": 'Não tem uma conta ainda?', + 'or simply generate a private key': 'ou simplesmente gere uma chave privada', + 'This is a private key. Do not share it with anyone. Keep it safe and secure. You will not be able to recover it if you lose it.': + 'Esta é uma chave privada. Não a compartilhe com ninguém. Mantenha-a segura, pois não poderá recuperá-la se perdê-la.', + Edit: 'Editar', + Save: 'Salvar', + 'Display Name': 'Nome de Exibição', + Bio: 'Biografia', + 'Nostr Address (NIP-05)': 'Endereço Nostr (NIP-05)', + 'Invalid NIP-05 address': 'Endereço NIP-05 inválido', + 'Copy private key': 'Copiar chave privada', + 'Enter the password to decrypt your ncryptsec': + 'Digite a senha para descriptografar seu ncryptsec', + Back: 'Voltar', + 'optional: encrypt nsec': 'opcional: criptografar nsec', + password: 'senha', + 'Sign up': 'Registrar-se', + 'Save to': 'Salvar em', + 'Enter a name for the new relay set': 'Digite um nome para o novo conjunto de relé', + 'Save to a new relay set': 'Salvar em um novo conjunto de relé', + Mute: 'Silenciar', + Muted: 'Silenciado', + Unmute: 'Ativar som', + 'Mute user': 'Silenciar usuário', + 'Unmute user': 'Ativar som do usuário', + 'Append n relays': 'Adicionar {{n}} relés', + Append: 'Adicionar', + 'Select relays to append': 'Selecione os relés para adicionar', + 'calculating...': 'calculando...', + 'Calculate optimal read relays': 'Calcular relés de leitura ideais', + 'Login to set': 'Entrar no conjunto', + 'Please login to view following feed': 'Por favor, faça login para ver o feed de seguidores', + 'Send only to r': 'Enviar apenas para {{r}}', + 'Send only to these relays': 'Enviar apenas para estes relés', + Explore: 'Explorar', + 'Search relays': 'Pesquisar relés', + relayInfoBadgeAuth: 'Auth', + relayInfoBadgeSearch: 'Pesquisar', + relayInfoBadgePayment: 'Pagamento', + Operator: 'Operador', + Contact: 'Contato', + Software: 'Software', + Version: 'Versão', + 'Random Relays': 'Relés Aleatórios', + randomRelaysRefresh: 'Atualizar', + 'Explore more': 'Explorar mais', + 'Payment page': 'Página de Pagamento', + 'Supported NIPs': 'NIPs Suportados', + 'Open in a': 'Abrir em {{a}}', + 'Cannot handle event of kind k': 'Não é possível lidar com o evento do tipo {{k}}', + 'Sorry! The note cannot be found 😔': 'Desculpe! A nota não pode ser encontrada 😔', + 'This user has been muted': 'Este usuário foi silenciado', + Wallet: 'Carteira', + Sats: 'Sats', + sats: 'sats', + 'Zap to': 'Zap para', + 'Zap n sats': 'Zap {{n}} sats', + zapComment: 'Comentário', + 'Default zap amount': 'Valor padrão do zap', + 'Default zap comment': 'Comentário padrão do zap', + 'Lightning Address (or LNURL)': 'Endereço Lightning (ou LNURL)', + 'Quick zap': 'Zap Rápido', + 'If enabled, you can zap with a single click': 'Se ativado, você pode enviar zap com um clique', + All: 'Tudo', + Reactions: 'Reações', + Zaps: 'Zaps', + 'Enjoying Jumble?': 'Gostando do Jumble?', + 'Your donation helps me maintain Jumble and make it better! 😊': + 'Sua doação me ajuda a manter o Jumble e torná-lo melhor! 😊', + 'Earlier notifications': 'Notificações anteriores', + 'Temporarily display this note': 'Exibir esta nota temporariamente', + buttonFollowing: 'Seguindo', + 'Are you sure you want to unfollow this user?': + 'Tem certeza de que deseja deixar de seguir este usuário?' + } +} diff --git a/src/pages/secondary/SettingsPage/index.tsx b/src/pages/secondary/SettingsPage/index.tsx index 21755bc6..6a1e3cc5 100644 --- a/src/pages/secondary/SettingsPage/index.tsx +++ b/src/pages/secondary/SettingsPage/index.tsx @@ -45,7 +45,7 @@ const SettingsPage = forwardRef(({ index }: { index?: number }, ref) => {
{t('Languages')}
- +