notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

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:
Aassets/translations/pt-BR/main.ftl | 408+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mcrates/notedeck/src/i18n/manager.rs | 18+++++++++++++-----
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()),