commit 39e932c6742c4b2e1c758090883b479545708ab0
parent 6919460d186bcca6d714d6083f3665354950bd82
Author: Terry Yiu <git@tyiu.xyz>
Date: Mon, 28 Jul 2025 16:37:51 -0400
Add Portuguese (Brazil) language and translations
Changelog-Added: Added Portuguese (Brazil) language and translations
Signed-off-by: Terry Yiu <git@tyiu.xyz>
Diffstat:
2 files changed, 421 insertions(+), 5 deletions(-)
diff --git a/assets/translations/pt-BR/main.ftl b/assets/translations/pt-BR/main.ftl
@@ -0,0 +1,408 @@
+# Main translation file for Notedeck
+# This file contains common UI strings used throughout the application
+# Auto-generated by extract_i18n.py - DO NOT EDIT MANUALLY
+
+
+# Regular strings
+
+# Profile about/bio field label
+About_00c0 = Sobre
+# Column title for account management
+Accounts_f018 = Contas
+# Button label to add a relay
+Add_269d = Transmitir
+# Label for add column button
+Add_47df = Adicionar coluna
+# Button label to add a different wallet
+Add_a_different_wallet_that_will_only_be_used_for_this_account_de8d = Adicionar outra carteira a ser usada apenas nesta conta
+# Error message for missing wallet
+Add_a_wallet_to_continue_d170 = Obrigatório adicionar carteira
+# Button label to add a new account
+Add_account_1cfc = Adicionar conta nova aqui
+# Column title for adding new account
+Add_Account_d06c = Adicionar nova conta
+# Column title for adding algorithm column
+Add_Algo_Column_0d75 = Adicionar coluna de algoritmo
+# Column title for adding new column
+Add_Column_c764 = Adicionar coluna
+# Column title for adding new deck
+Add_Deck_fabf = Adicionar aba
+# Column title for adding external notifications column
+Add_External_Notifications_Column_41ae = Adicionar coluna de notificações externas
+# Column title for adding hashtag column
+Add_Hashtag_Column_ebf4 = Adicionar coluna de #
+# Column title for adding last notes column
+Add_Last_Notes_Column_bbad = Adicionar última coluna de notas
+# Column title for adding notifications column
+Add_Notifications_Column_79f8 = Adicionar coluna de notificações
+# Button label to add a relay
+Add_relay_269d = Adicionar transmissão
+# Button label to add a wallet
+Add_Wallet_d1be = Adicionar carteira
+# Title for algorithmic feeds column
+Algo_2452 = Algoritmos
+# Description for algorithmic feeds column
+Algorithmic_feeds_to_aid_in_note_discovery_d344 = Algoritmos para pesquisar notas
+# Label for zap amount input field
+Amount_70f0 = Valor
+# Label for appearance settings section
+Appearance_4c7f = Aparência
+# Button to send message to Dave AI assistant
+Ask_b7f4 = Perguntar
+# Placeholder text for Dave AI input field
+Ask_dave_anything_33d1 = Perguntar ao Dave
+# Profile banner URL field label
+Banner_52ef = Destaque
+# Beta version label
+BETA_8e5d = Beta
+# Option in settings section to show the source client label at the bottom of the note
+Bottom_33c8 = Abaixo
+# Broadcast the note to all connected relays
+Broadcast_fe43 = Encaminhar
+# Broadcast the note only to local network relays
+Broadcast_Local_7e50 = Encaminhar especificamente
+# Button label to cancel an action
+Cancel_ed3b = Cancelar
+# Label for cancel clear cache, Storage settings section
+Cancel_fd8b = Cancelar
+# Label for clear cache button, Storage settings section
+Clear_cache_dccb = Limpar cache
+# Hover text for editable zap amount
+Click_to_edit_0414 = Editar valor
+# Column title for note composition
+Compose_Note_c094 = Compor nota
+# Label for configure relays, settings section
+Configure_relays_d156 = Configurar canais
+# Label for confirm clear cache, Storage settings section
+Confirm_9d9d = Confirmar
+# Button label to confirm an action
+Confirm_f8a6 = Confirmar
+# Status label for connected relay
+Connected_f8cc = Conectar
+# Status label for connecting relay
+Connecting_6b7e = Conectando...
+# Title for contact list column
+Contact_List_f85a = Lista de contatos
+# Column title for contact lists
+Contacts_7533 = Contatos
+# Column title for last notes per contact
+Contacts__last_notes_3f84 = Contatos (últimas notas)
+# Button label to copy logs
+Copy_a688 = Copiar
+# Button to copy media link to clipboard
+Copy_Link_dc7c = Copiar link
+# Copy the unique note identifier to clipboard
+Copy_Note_ID_6b45 = Copiar ID da nota
+# Copy the raw note data in JSON format to clipboard
+Copy_Note_JSON_9e4e = Copiar nota "JSON"
+# Copy the author's public key to clipboard
+Copy_Pubkey_9cc4 = Copiar chave pública
+# Copy the text content of the note to clipboard
+Copy_Text_f81c = Copiar texto
+# Relative time in days
+count_d_b9be = { $count }D
+# Relative time in hours
+count_h_3ecb = { $count }H
+# Relative time in minutes
+count_m_b41e = { $count }M
+# Relative time in months
+count_mo_7aba = { $count }Mes
+# Relative time in seconds
+count_s_aa26 = { $count }S
+# Relative time in weeks
+count_w_7468 = { $count }Sem
+# Relative time in years
+count_y_9408 = { $count }A
+# Button to create a new account
+Create_Account_6994 = Criar conta
+# Button label to create a new deck
+Create_Deck_16b7 = Criar aba
+# Column title for custom timelines
+Custom_a69e = Personalizar
+# Column title for zap amount customization
+Customize_Zap_Amount_cfc4 = Personalizar valor do ZAP
+# Column title for support page
+Damus_Support_27c0 = Ajuda
+# Label for Theme Dark, Appearance settings section
+Dark_85fe = Modo escuro
+# Label for deck name input field
+Deck_name_cd32 = Nome da aba
+# Label for decks section in side panel
+DECKS_1fad = ABAS
+# Label for default zap amount input
+Default_amount_per_zap_399d = Valor padrão de ZAP
+# Name of the default deck feed
+Default_Deck_fcca = Nome padrão de abas
+# Button label to delete a deck
+Delete_Deck_bb29 = Deletar aba
+# Tooltip for deleting a column
+Delete_this_column_8d5a = Deletar esta coluna
+# Button label to delete a wallet
+Delete_Wallet_d1d4 = Deletar carteira
+# Profile display name field label
+Display_name_f9d9 = Nome de exibição
+# Domain identification message
+domain___will_be_used_for_identification_b67e = "{ $domain }" será utilizado para identificação
+# Column title for editing deck
+Edit_Deck_4018 = Editar aba
+# Button label to edit a deck
+Edit_Deck_fd93 = Editar
+# Button label to edit user profile
+Edit_Profile_49e6 = Editar perfil
+# Column title for profile editing
+Edit_Profile_8ad4 = Editar perfil
+# Placeholder for hashtag input field
+Enter_the_desired_hashtags_here__for_multiple_space-separated_7a69 = Digite as # desejadas aqui (para múltiplos espaços separados)
+# Placeholder for relay input field
+Enter_the_relay_here_1c8b = Insira a retransmissão aqui
+# Hint text to prompt entering the user's public key.
+Enter_the_user_s_key__npub__hex__nip05__here_650c = Digite a chave do usuário (npub, hex, nip05) aqui...
+# Label for key input field. Key can be public key (npub), private key (nsec), or Nostr address (NIP-05).
+Enter_your_key_0fca = Sua chave aqui
+# Instructions for entering Nostr credentials
+Enter_your_public_key__npub___nostr_address__e_g___address____or_private_key__nsec___You_must_enter_your_private_key_to_be_able_to_post__reply__etc_48e9 = Insira sua chave pública (npub), endereço do Nostr (e.g. { $address }), ou chave privada (nsec). Você deve digitar sua chave privada para conseguir publicar, responder, etc.
+# Label for find user button
+Find_User_bd12 = Pesquisar usuário
+# Title for hashtags column
+Hashtags_f8e0 = #
+# Option in settings section to hide the source client label in note display
+Hide_281d = Ocultar
+# Title for Home column
+Home_8c19 = Início
+# Label for deck icon selection
+Icon_b0ab = Ícone
+# Label for Image cache size, Storage settings section
+Image_cache_size_3004 = Tamanho do cache de imagem:
+# Title for individual user column
+Individual_b776 = Individual
+# Error message for invalid zap amount
+Invalid_amount_6630 = Quantia inválida
+# Error message for invalid key input
+Invalid_key_4726 = Chave inválida
+# Error message for invalid Nostr Wallet Connect URI
+Invalid_NWC_URI_031b = NWC URI Inválido
+# Zap amount button for 100000 sats. Abbreviated because the button is too small to display the full amount.
+k_100K_686c = 100 mil
+# Zap amount button for 10000 sats. Abbreviated because the button is too small to display the full amount.
+k_10K_f7e6 = 10 mil
+# Zap amount button for 20000 sats. Abbreviated because the button is too small to display the full amount.
+k_20K_4977 = 20 mil
+# Zap amount button for 50000 sats. Abbreviated because the button is too small to display the full amount.
+k_50K_c2dc = 50 mil
+# Zap amount button for 5000 sats. Abbreviated because the button is too small to display the full amount.
+k_5K_f7e6 = 5 mil
+# Description for your notes column
+Keep_track_of_your_notes___replies_a334 = Acompanhe suas notas e respostas
+# Label for language, Appearance settings section
+Language_e264 = Idioma
+# Title for last note per user column
+Last_Note_per_User_17ad = Última Nota por Usuário
+# Label for Theme Light, Appearance settings section
+Light_7475 = Modo claro
+# Bitcoin Lightning network address field label
+Lightning_network_address__lud16_ea51 = Endereço de rede de eletrização (lud16)
+# Login page title
+Login_9eef = Entrar
+# Login button text
+Login_now___let_s_do_this_5630 = Entrar agora! Vamos nessa!
+# Text shown on blurred media from unfollowed users
+Media_from_someone_you_don_t_follow_5611 = Conteúdo de pessoas que você não segue
+# Tooltip for moving a column
+Moves_this_column_to_another_position_0d4b = Mover esta coluna
+# Title for the user's deck
+My_Deck_4ac5 = Minha aba
+# Label asking if the user is new to Nostr. Underneath this label is a button to create an account.
+New_to_Nostr_a2fd = Novo no Nostr?
+# NIP-05 identity field label
+Nostr_address__NIP-05_identity_74a2 = Endereço Nostr (Identidade NIP-05)
+# Default username when profile is not available
+nostrich_df29 = Nostrich
+# Status label for disconnected relay
+Not_Connected_6292 = Desconectado
+# Link text for note references
+note_cad6 = Nota
+# Beta product warning message
+Notedeck_is_a_beta_product__Expect_bugs_and_contact_us_when_you_run_into_issues_a671 = Notedeck é um produto beta. Espere erros e entre em contato conosco quando tiver problemas.
+# Filter label for notes only view
+Notes_03fb = Notas
+# Label for notes-only filter
+Notes_60d2 = Notas
+# Filter label for notes and replies view
+Notes___Replies_1ec2 = Notas e respostas
+# Label for notes and replies filter
+Notes___Replies_6e3b = Notas e respostas
+# Column title for notifications
+Notifications_d673 = Notificações
+# Title for notifications column
+Notifications_ef56 = Notificações
+# Relative time for very recent events (less than 3 seconds)
+now_2181 = Agora
+# Button label to open email client
+Open_Email_25e9 = Abrir E-mail
+# Instruction to open email client
+Open_your_default_email_client_to_get_help_from_the_Damus_team_68dc = Abra o seu cliente de e-mail padrão para obter ajuda do time Damus
+# Label for others settings section
+Others_7267 = Outros
+# Placeholder text for NWC URI input
+Paste_your_NWC_URI_here_b471 = Cole seu URI NWC aqui...
+# Error message for missing deck name
+Please_create_a_name_for_the_deck_38e7 = Por favor, crie um nome para a aba.
+# Error message for missing deck name and icon
+Please_create_a_name_for_the_deck_and_select_an_icon_0add = Por favor, crie um nome para a aba e selecione um ícone.
+# Error message for missing deck icon
+Please_select_an_icon_655b = Favor selecionar um ícone.
+# Button label to post a note
+Post_now_8a49 = Postar
+# Instruction for copying logs
+Press_the_button_below_to_copy_your_most_recent_logs_to_your_system_s_clipboard__Then_paste_it_into_your_email_322e = Clique abaixo para copiar seus registros mais recentes para a área de transferência do seu sistema. Em seguida, cole-os no seu E-mail.
+# Profile picture URL field label
+Profile_picture_81ff = Foto de perfil
+# Column title for quote composition
+Quote_475c = Citação
+# Error message when quote note cannot be found
+Quote_of_unknown_note_e4f0 = Citação de nota desconhecida
+# Label for read-only profile mode
+Read_only_82ff = Modo leitura
+# Column title for relay management
+Relays_9d89 = Canais
+# Label for relay list section
+Relays_ad5e = Canais
+# Column title for reply composition
+Reply_3bf1 = Responder
+# Hover text for reply button
+Reply_to_this_note_f5de = Responder esta nota
+# Error message when reply note cannot be found
+Reply_to_unknown_note_4401 = Responder nota desconhecida
+# Fallback template for replying to user
+replying_to__user_15ab = Respondendo { $user }
+# Template for replying to user in unknown thread
+replying_to__user__in_someone_s_thread_e148 = Respondendo { $user } no tópico de alguém
+# Template for replying to note in different user's thread
+replying_to__user__s__note__in__thread_user__s__thread_daa8 = Resposta { $user }de { $note } em { $thread_user }' { $thread }
+# Template for replying to user's note
+replying_to__user__s__note_ccba = Respondendo { $user }de { $note }
+# Template for replying to root thread
+replying_to__user__s__thread_444d = Respondendo { $user }de { $thread }
+# Fallback text when reply note is not found
+replying_to_a_note_e0bc = Respondendo nota
+# Hover text for repost button
+Repost_this_note_8e56 = Republicar nota
+# Label for reposted notes
+Reposted_61c8 = Publicada
+# Label for reset zoom level, Appearance settings section
+Reset_62d4 = Resetar
+# Heading for support section
+Running_into_a_bug_1796 = Precisa de ajuda?
+# Label for satoshis (Bitcoin unit) for custom zap amount input field
+SATS_45d7 = SATS
+# Unit label for satoshis (Bitcoin unit) for configuring default zap amount in wallet settings.
+sats_e5ec = sats
+# Button to save default zap amount
+Save_6f7c = Salvar
+# Button label to save profile changes
+Save_changes_00db = Salvo
+# Column title for search page
+Search_c573 = Pesquisar
+# Placeholder for search notes input field
+Search_notes_42a6 = Pesquisar notas...
+# Search in progress message
+Searching_for___query_5d18 = Pesquisando por '{ $query }'
+# Description for Home column
+See_notes_from_your_contacts_ac16 = Veja notas dos seus contatos
+# Description for universe column
+See_the_whole_nostr_universe_7694 = Veja todo o universo Nostr
+# Button label to send a zap
+Send_1ea4 = Enviar
+# Column title for app settings
+Settings_7a4f = Configurações
+# Label for Show source client, others settings section
+Show_source_client_9e31 = Mostrar cliente de origem
+# Description for last note per user column
+Show_the_last_note_for_each_user_from_a_list_50e7 = Mostrar a última nota para cada usuário de uma lista
+# Button label to sign out of account
+Sign_out_337b = Sair
+# Title for someone else's notes column
+Someone_else_s_Notes_7e5f = Notas de outra pessoa
+# Title for someone else's notifications column
+Someone_else_s_Notifications_82e6 = Notificações de outra pessoa
+# Description for contact list column
+Source_the_last_note_for_each_user_in_your_contact_list_e157 = Fonte da última nota para cada usuário em sua lista de contatos
+# Description for hashtags column
+Stay_up_to_date_with_a_certain_hashtag_88e3 = Mantenha-se atualizado com uma certa hashtag
+# Description for notifications column
+Stay_up_to_date_with_notifications_and_mentions_6f4e = Ficar atualizado com notificações e menções
+# Description for someone else's notes column
+Stay_up_to_date_with_someone_else_s_notes___replies_464c = Mantenha-se atualizado com as notas e respostas de alguém
+# Description for someone else's notifications column
+Stay_up_to_date_with_someone_else_s_notifications_and_mentions_3473 = Mantenha-se atualizado com as notificações e menções de alguém
+# Description for individual user column
+Stay_up_to_date_with_someone_s_notes___replies_aa78 = Mantenha-se atualizado com as notas e respostas de alguém
+# Description for your notifications column
+Stay_up_to_date_with_your_notifications_and_mentions_e73e = Mantenha-se atualizado com suas notificações e menções
+# Step 1 label in support instructions
+Step_1_8656 = Passo 1
+# Step 2 label in support instructions
+Step_2_d08d = Passo 2
+# Label for storage settings section
+Storage_ed65 = Armazenamento
+# Column title for subscribing to external user
+Subscribe_to_someone_else_s_notes_d1e9 = Inscrever-se em notas de outra pessoa
+# Column title for subscribing to individual user
+Subscribe_to_someone_s_notes_b3c8 = Inscrever-se nas notas de alguém
+# Hover text for dark mode toggle button
+Switch_to_dark_mode_4dec = Mudar para modo escuro
+# Hover text for light mode toggle button
+Switch_to_light_mode_72ce = Mudar para modo claro
+# Button text to load blurred media
+Tap_to_Load_4b05 = Toque para carregar
+# Message shown when Dave trial period has ended
+The_Dave_Nostr_AI_assistant_trial_has_ended_____Thanks_for_testing__Zap-enabled_Dave_coming_soon_c6c7 = O teste do assistente de IA Dave Nostr terminou :(. Obrigado por testar! Em breve teremos Dave habilitado para Zap
+# Label for theme, Appearance settings section
+Theme_4aac = Tema:
+# Column title for note thread view
+Thread_0f20 = Fio
+# Link text for thread references
+thread_ad1f = Fio
+# Option in settings section to show the source client label at the top of the note
+Top_6aeb = Topo
+# Title for universe column
+Universe_e01e = Universo
+# Column title for universe feed
+Universe_ffaa = Universo
+# Checkbox label for using wallet only for current account
+Use_this_wallet_for_the_current_account_only_61dc = Use esta carteira apenas para a conta atual
+# Username and domain identification message
+username___at___domain___will_be_used_for_identification_a4fd = d = "{ $username }" em "{ $domain }" será usado para identificação
+# Profile username field label
+Username_daa7 = Usuário
+# Label for view folder button, Storage settings section
+View_folder_9742 = Visualizar pasta:
+# Column title for wallet management
+Wallet_5e50 = Carteira
+# Hint for deck name input field
+We_recommend_short_names_083e = Recomendamos nomes pequenos
+# Profile website field label
+Website_7980 = Site
+# Placeholder for note input field
+Write_a_banger_note_here_bad2 = Escreva uma nota criativa aqui.
+# Placeholder text for key input field
+Your_key_here_81bd = Sua chave aqui...
+# Title for your notes column
+Your_Notes_f6db = Suas notas
+# Title for your notifications column
+Your_Notifications_080d = Suas notificações
+# Heading for zap (tip) action
+Zap_16b4 = Zap
+# Hover text for zap button
+Zap_this_note_42b2 = Zap esta nota
+# Label for zoom level, Appearance settings section
+Zoom_Level_29a8 = Nível de zoom:
+
+# Pluralized strings
+
+# Search results count
+Got__count__results_for___query_85fb =
+ { $count ->
+ [one] Obteve um resultado { $count } para '{ $query }'
+ *[other] Obteve { $count } resultados para '{ $query }'
+ }
diff --git a/crates/notedeck/src/i18n/manager.rs b/crates/notedeck/src/i18n/manager.rs
@@ -10,11 +10,12 @@ const EN_XA: LanguageIdentifier = langid!("en-XA");
const DE: LanguageIdentifier = langid!("de");
const ES_419: LanguageIdentifier = langid!("es-419");
const ES_ES: LanguageIdentifier = langid!("es-ES");
-const FR: LanguageIdentifier = langid!("FR");
-const TH: LanguageIdentifier = langid!("TH");
-const ZH_CN: LanguageIdentifier = langid!("ZH_CN");
-const ZH_TW: LanguageIdentifier = langid!("ZH_TW");
-const NUM_FTLS: usize = 9;
+const FR: LanguageIdentifier = langid!("fr");
+const PT_BR: LanguageIdentifier = langid!("pt-BR");
+const TH: LanguageIdentifier = langid!("th");
+const ZH_CN: LanguageIdentifier = langid!("zh-CN");
+const ZH_TW: LanguageIdentifier = langid!("zh-TW");
+const NUM_FTLS: usize = 10;
const EN_US_NATIVE_NAME: &str = "English (US)";
const EN_XA_NATIVE_NAME: &str = "Éñglísh (Pséúdólóçàlé)";
@@ -22,6 +23,7 @@ const DE_NATIVE_NAME: &str = "Deutsch";
const ES_419_NATIVE_NAME: &str = "Español (Latinoamérica)";
const ES_ES_NATIVE_NAME: &str = "Español (España)";
const FR_NATIVE_NAME: &str = "Français";
+const PT_BR_NATIVE_NAME: &str = "Português (Brasil)";
const TH_NATIVE_NAME: &str = "ภาษาไทย";
const ZH_CN_NATIVE_NAME: &str = "简体中文";
const ZH_TW_NATIVE_NAME: &str = "繁體中文";
@@ -57,6 +59,10 @@ const FTLS: [StaticBundle; NUM_FTLS] = [
ftl: include_str!("../../../../assets/translations/fr/main.ftl"),
},
StaticBundle {
+ identifier: PT_BR,
+ ftl: include_str!("../../../../assets/translations/pt-BR/main.ftl"),
+ },
+ StaticBundle {
identifier: TH,
ftl: include_str!("../../../../assets/translations/th/main.ftl"),
},
@@ -107,6 +113,7 @@ impl Default for Localization {
ES_419.clone(),
ES_ES.clone(),
FR.clone(),
+ PT_BR.clone(),
TH.clone(),
ZH_CN.clone(),
ZH_TW.clone(),
@@ -119,6 +126,7 @@ impl Default for Localization {
(ES_419, ES_419_NATIVE_NAME.to_owned()),
(ES_ES, ES_ES_NATIVE_NAME.to_owned()),
(FR, FR_NATIVE_NAME.to_owned()),
+ (PT_BR, PT_BR_NATIVE_NAME.to_owned()),
(TH, TH_NATIVE_NAME.to_owned()),
(ZH_CN, ZH_CN_NATIVE_NAME.to_owned()),
(ZH_TW, ZH_TW_NATIVE_NAME.to_owned()),