diff --git a/buzz/locale/ca_ES/LC_MESSAGES/buzz.po b/buzz/locale/ca_ES/LC_MESSAGES/buzz.po index 7f797f14..bf7db49b 100644 --- a/buzz/locale/ca_ES/LC_MESSAGES/buzz.po +++ b/buzz/locale/ca_ES/LC_MESSAGES/buzz.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: buzz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-11 20:21+0200\n" +"POT-Creation-Date: 2025-12-13 10:51+0200\n" "PO-Revision-Date: 2025-10-17 07:59+0200\n" "Last-Translator: Éric Duarte \n" "Language-Team: Catalan \n" @@ -29,7 +29,7 @@ msgstr "https://exemple.com/audio.mp3" #: buzz/widgets/preferences_dialog/preferences_dialog.py:69 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:251 #: buzz/widgets/transcriber/advanced_settings_dialog.py:97 -#: buzz/widgets/main_window.py:239 +#: buzz/widgets/main_window.py:226 msgid "Ok" msgstr "D’acord" @@ -37,7 +37,7 @@ msgstr "D’acord" #: buzz/widgets/preferences_dialog/preferences_dialog.py:70 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:252 #: buzz/widgets/model_download_progress_dialog.py:30 -#: buzz/widgets/main_window.py:240 +#: buzz/widgets/main_window.py:227 msgid "Cancel" msgstr "Cancel·lar" @@ -148,48 +148,53 @@ msgstr "Clau de l'API d'OpenAI" msgid "OpenAI base url" msgstr "URL base d'OpenAI" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:135 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:138 +#, fuzzy +msgid "OpenAI API model" +msgstr "Clau de l'API d'OpenAI" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 msgid "Default export file name" msgstr "Nom del fitxer d'exportació per defecte" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:141 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:153 msgid "Enable live recording transcription export" msgstr "Activa l'exportació de transcripcions en directe" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:159 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "Navega" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:166 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:178 msgid "Export folder" msgstr "Exporta la carpeta" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:177 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:189 msgid "Live recording mode" msgstr "Mode d'enregistrament en directe" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:183 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195 msgid "Use only CPU and disable GPU acceleration" msgstr "Utilitza només la CPU i desactiveu l'acceleració de la GPU" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:186 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198 msgid "Set this if larger models do not fit your GPU memory and Buzz crashes" msgstr "" "Establiu això si els models més grans no s'ajusten a la memòria de la GPU i " "Buzz es bloqueja" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:188 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 msgid "Disable GPU" msgstr "Desactiva la GPU" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:213 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 msgid "OpenAI API Key Test" msgstr "Prova de clau OpenAI API" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." @@ -197,11 +202,11 @@ msgstr "" "La vostra clau API és vàlida. Buzz utilitzarà aquesta clau per realitzar " "transcripcions de l'API de Whisper i traduccions de la IA." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:230 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242 msgid "Invalid API key" msgstr "Clau API no vàlida" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243 msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " "API key may cause errors." @@ -209,11 +214,11 @@ msgstr "" "L'API només admet caràcters base64 (A-Za-z0-9+/).-). Altres caràcters de la " "clau API poden causar errors." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:249 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264 msgid "Select Export Folder" msgstr "Selecciona la carpeta d'exportació" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:319 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -308,11 +313,11 @@ msgid "Download failed" msgstr "Descàrrega fallida" #: buzz/widgets/preferences_dialog/models_preferences_widget.py:275 -#: buzz/widgets/transcription_tasks_table_widget.py:665 -#: buzz/widgets/transcription_tasks_table_widget.py:735 -#: buzz/widgets/transcription_tasks_table_widget.py:766 -#: buzz/widgets/main_window.py:296 buzz/model_loader.py:539 -#: buzz/model_loader.py:553 +#: buzz/widgets/transcription_tasks_table_widget.py:704 +#: buzz/widgets/transcription_tasks_table_widget.py:774 +#: buzz/widgets/transcription_tasks_table_widget.py:805 +#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577 +#: buzz/model_loader.py:591 msgid "Error" msgstr "Error" @@ -439,7 +444,7 @@ msgstr "Obre una transcripció" msgid "Cancel Transcription" msgstr "Cancel·la la transcripció" -#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:228 +#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:215 #: buzz/settings/shortcut.py:38 msgid "Clear History" msgstr "Neteja l'historial" @@ -489,7 +494,7 @@ msgid "Date Added" msgstr "Data d'addició" #: buzz/widgets/transcription_tasks_table_widget.py:156 -#: buzz/widgets/transcription_tasks_table_widget.py:624 +#: buzz/widgets/transcription_tasks_table_widget.py:663 msgid "Notes" msgstr "" @@ -497,53 +502,53 @@ msgstr "" msgid "Reset Column Order" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:301 +#: buzz/widgets/transcription_tasks_table_widget.py:304 #, fuzzy msgid "Restart Transcription" msgstr "Cancel·la la transcripció" -#: buzz/widgets/transcription_tasks_table_widget.py:305 +#: buzz/widgets/transcription_tasks_table_widget.py:308 #, fuzzy msgid "Rename" msgstr "Vietnamita" -#: buzz/widgets/transcription_tasks_table_widget.py:308 +#: buzz/widgets/transcription_tasks_table_widget.py:311 msgid "Add/Edit Notes" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:597 +#: buzz/widgets/transcription_tasks_table_widget.py:636 #, fuzzy msgid "Rename Transcription" msgstr "Cancel·la la transcripció" -#: buzz/widgets/transcription_tasks_table_widget.py:598 +#: buzz/widgets/transcription_tasks_table_widget.py:637 msgid "Enter new name:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:625 +#: buzz/widgets/transcription_tasks_table_widget.py:664 msgid "Enter some relevant notes for this transcription:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:652 +#: buzz/widgets/transcription_tasks_table_widget.py:691 msgid "Cannot Restart" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:653 +#: buzz/widgets/transcription_tasks_table_widget.py:692 msgid "Only failed or canceled transcriptions can be restarted." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:666 +#: buzz/widgets/transcription_tasks_table_widget.py:705 #, fuzzy msgid "Failed to restart transcription: {}" msgstr "Cancel·la la transcripció" -#: buzz/widgets/transcription_tasks_table_widget.py:736 +#: buzz/widgets/transcription_tasks_table_widget.py:775 msgid "" "Could not restart transcription: model not available and could not be " "downloaded." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:767 +#: buzz/widgets/transcription_tasks_table_widget.py:806 msgid "Could not restart transcription: transcriber worker not found." msgstr "" @@ -694,36 +699,36 @@ msgstr "Desplaça't fins a l'actual" msgid "Scroll to the currently spoken text" msgstr "Desplaçar-se fins al text que es parla actualment" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892 msgid "1 of 100+ matches" msgstr "1 de més de 100 coincidències" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 msgid "1 of " msgstr "1 de " -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " matches" msgstr " coincidències" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:903 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900 msgid "No matches found" msgstr "No s'ha trobat cap coincidència" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973 msgid " of 100+ matches" msgstr " de més de 100 coincidències" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " of " msgstr " de " -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1375 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368 msgid "API Key Required" msgstr "Clau API necessària" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1376 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369 msgid "Please enter OpenAI API Key in preferences" msgstr "Introduïu la clau API d'OpenAI a les preferències" @@ -834,29 +839,6 @@ msgstr "Desa el fitxer" msgid "Text files" msgstr "Fitxers de text" -#: buzz/widgets/snap_notice.py:9 -msgid "Snap permission notice" -msgstr "Avís de permís d'ajust" - -#: buzz/widgets/snap_notice.py:13 -msgid "" -"Detected missing permissions, please check that snap permissions have been " -"granted" -msgstr "" -"S'han detectat permisos que manquen, comproveu que s'han concedit permisos " -"de captura" - -#: buzz/widgets/snap_notice.py:16 -msgid "" -"To enable necessary permissions run the following commands in the terminal" -msgstr "" -"Per habilitar els permisos necessaris, executeu les ordres següents al " -"terminal" - -#: buzz/widgets/snap_notice.py:27 -msgid "Close" -msgstr "Tanca" - #: buzz/widgets/model_download_progress_dialog.py:37 msgid "Downloading model" msgstr "Descarregant el model" @@ -889,7 +871,7 @@ msgstr "Ajuda" msgid "File" msgstr "Fitxer" -#: buzz/widgets/main_window.py:232 +#: buzz/widgets/main_window.py:219 msgid "" "Are you sure you want to delete the selected transcription(s)? This action " "cannot be undone." @@ -897,11 +879,11 @@ msgstr "" "Esteu segur que voleu suprimir les transcripcions seleccionades? Aquesta " "acció no es pot desfer." -#: buzz/widgets/main_window.py:260 +#: buzz/widgets/main_window.py:247 msgid "Select audio file" msgstr "Selecciona un fitxer d'àudio" -#: buzz/widgets/main_window.py:296 +#: buzz/widgets/main_window.py:283 msgid "Unable to save OpenAI API key to keyring" msgstr "No s'ha pogut desar la clau OpenAI API a l'anell de claus" @@ -1287,7 +1269,7 @@ msgstr "Sundanès" msgid "Cantonese" msgstr "Cantonès" -#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:572 +#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610 msgid "A connection error occurred" msgstr "S'ha produït un error de connexió" @@ -1380,6 +1362,25 @@ msgstr "Afegeix a sobre" msgid "Append and correct" msgstr "Afegeix i corregeix" +#~ msgid "Snap permission notice" +#~ msgstr "Avís de permís d'ajust" + +#~ msgid "" +#~ "Detected missing permissions, please check that snap permissions have " +#~ "been granted" +#~ msgstr "" +#~ "S'han detectat permisos que manquen, comproveu que s'han concedit " +#~ "permisos de captura" + +#~ msgid "" +#~ "To enable necessary permissions run the following commands in the terminal" +#~ msgstr "" +#~ "Per habilitar els permisos necessaris, executeu les ordres següents al " +#~ "terminal" + +#~ msgid "Close" +#~ msgstr "Tanca" + #~ msgid "Enter instructions for AI on how to translate..." #~ msgstr "Introduïu les instruccions per a la IA sobre com traduir..." diff --git a/buzz/locale/da_DK/LC_MESSAGES/buzz.po b/buzz/locale/da_DK/LC_MESSAGES/buzz.po index f1638540..8deb97db 100644 --- a/buzz/locale/da_DK/LC_MESSAGES/buzz.po +++ b/buzz/locale/da_DK/LC_MESSAGES/buzz.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-11 20:21+0200\n" +"POT-Creation-Date: 2025-12-13 10:51+0200\n" "PO-Revision-Date: \n" "Last-Translator: Ole Guldberg2 \n" "Language-Team: \n" @@ -26,7 +26,7 @@ msgstr "https://example.com/audio.mp3" #: buzz/widgets/preferences_dialog/preferences_dialog.py:69 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:251 #: buzz/widgets/transcriber/advanced_settings_dialog.py:97 -#: buzz/widgets/main_window.py:239 +#: buzz/widgets/main_window.py:226 msgid "Ok" msgstr "OK" @@ -34,7 +34,7 @@ msgstr "OK" #: buzz/widgets/preferences_dialog/preferences_dialog.py:70 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:252 #: buzz/widgets/model_download_progress_dialog.py:30 -#: buzz/widgets/main_window.py:240 +#: buzz/widgets/main_window.py:227 msgid "Cancel" msgstr "Afbryd" @@ -147,47 +147,52 @@ msgstr "OpenAI API-nøgle" msgid "OpenAI base url" msgstr "OpenAI base-URL" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:135 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:138 +#, fuzzy +msgid "OpenAI API model" +msgstr "OpenAI API-nøgle" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 msgid "Default export file name" msgstr "Standard eksport filnavn" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:141 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:153 msgid "Enable live recording transcription export" msgstr "Slå transkription af live optagelse eksport til" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:159 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "Gennemse" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:166 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:178 msgid "Export folder" msgstr "Eksportmappe" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:177 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:189 #, fuzzy msgid "Live recording mode" msgstr "Live optagelsesmode" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:183 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195 msgid "Use only CPU and disable GPU acceleration" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:186 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198 msgid "Set this if larger models do not fit your GPU memory and Buzz crashes" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:188 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 msgid "Disable GPU" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:213 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 msgid "OpenAI API Key Test" msgstr "OpenAI API Nøgle test" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." @@ -195,12 +200,12 @@ msgstr "" "Din API nøgle er gyldig. Buzz vil benytte nøglen til at anvende Whisper API " "transkription og AI oversættelser." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:230 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242 #, fuzzy msgid "Invalid API key" msgstr "Ugyldig API-nøgle" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243 msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " "API key may cause errors." @@ -208,11 +213,11 @@ msgstr "" "API supporterer kun base64 tegn (A-Za-z0-9+/=_-). Andre tegn i API-nøglen " "kan guve fejl. " -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:249 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264 msgid "Select Export Folder" msgstr "Vælg eksport-mappe" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:319 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -307,11 +312,11 @@ msgid "Download failed" msgstr "Download mislykkedes" #: buzz/widgets/preferences_dialog/models_preferences_widget.py:275 -#: buzz/widgets/transcription_tasks_table_widget.py:665 -#: buzz/widgets/transcription_tasks_table_widget.py:735 -#: buzz/widgets/transcription_tasks_table_widget.py:766 -#: buzz/widgets/main_window.py:296 buzz/model_loader.py:539 -#: buzz/model_loader.py:553 +#: buzz/widgets/transcription_tasks_table_widget.py:704 +#: buzz/widgets/transcription_tasks_table_widget.py:774 +#: buzz/widgets/transcription_tasks_table_widget.py:805 +#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577 +#: buzz/model_loader.py:591 msgid "Error" msgstr "Fejl" @@ -437,7 +442,7 @@ msgstr "Åben transkription" msgid "Cancel Transcription" msgstr "Afbryd transkription" -#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:228 +#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:215 #: buzz/settings/shortcut.py:38 msgid "Clear History" msgstr "Ryd historik" @@ -487,7 +492,7 @@ msgid "Date Added" msgstr "Dato for tilføjelse" #: buzz/widgets/transcription_tasks_table_widget.py:156 -#: buzz/widgets/transcription_tasks_table_widget.py:624 +#: buzz/widgets/transcription_tasks_table_widget.py:663 msgid "Notes" msgstr "" @@ -495,52 +500,52 @@ msgstr "" msgid "Reset Column Order" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:301 +#: buzz/widgets/transcription_tasks_table_widget.py:304 #, fuzzy msgid "Restart Transcription" msgstr "Afbryd transkription" -#: buzz/widgets/transcription_tasks_table_widget.py:305 +#: buzz/widgets/transcription_tasks_table_widget.py:308 msgid "Rename" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:308 +#: buzz/widgets/transcription_tasks_table_widget.py:311 msgid "Add/Edit Notes" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:597 +#: buzz/widgets/transcription_tasks_table_widget.py:636 #, fuzzy msgid "Rename Transcription" msgstr "Afbryd transkription" -#: buzz/widgets/transcription_tasks_table_widget.py:598 +#: buzz/widgets/transcription_tasks_table_widget.py:637 msgid "Enter new name:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:625 +#: buzz/widgets/transcription_tasks_table_widget.py:664 msgid "Enter some relevant notes for this transcription:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:652 +#: buzz/widgets/transcription_tasks_table_widget.py:691 msgid "Cannot Restart" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:653 +#: buzz/widgets/transcription_tasks_table_widget.py:692 msgid "Only failed or canceled transcriptions can be restarted." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:666 +#: buzz/widgets/transcription_tasks_table_widget.py:705 #, fuzzy msgid "Failed to restart transcription: {}" msgstr "Afbryd transkription" -#: buzz/widgets/transcription_tasks_table_widget.py:736 +#: buzz/widgets/transcription_tasks_table_widget.py:775 msgid "" "Could not restart transcription: model not available and could not be " "downloaded." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:767 +#: buzz/widgets/transcription_tasks_table_widget.py:806 msgid "Could not restart transcription: transcriber worker not found." msgstr "" @@ -688,36 +693,36 @@ msgstr "" msgid "Scroll to the currently spoken text" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892 msgid "1 of 100+ matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 msgid "1 of " msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:903 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900 msgid "No matches found" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973 msgid " of 100+ matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " of " msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1375 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368 msgid "API Key Required" msgstr "API-nøgle påkrævet" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1376 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369 msgid "Please enter OpenAI API Key in preferences" msgstr "Indtast venligst OpenAI API-nøgle i indstillinger" @@ -828,29 +833,6 @@ msgstr "Gem fil" msgid "Text files" msgstr "Tekst filer" -#: buzz/widgets/snap_notice.py:9 -msgid "Snap permission notice" -msgstr "Snap tilladelse notifikationer" - -#: buzz/widgets/snap_notice.py:13 -msgid "" -"Detected missing permissions, please check that snap permissions have been " -"granted" -msgstr "" -"Detekterede manglene tilladelser, tjek om venligst Snap tilladelserne er " -"givne" - -#: buzz/widgets/snap_notice.py:16 -msgid "" -"To enable necessary permissions run the following commands in the terminal" -msgstr "" -"For at give de nødvendige tilladelser kør den følgende kommando i et " -"terminalvindue" - -#: buzz/widgets/snap_notice.py:27 -msgid "Close" -msgstr "Luk" - #: buzz/widgets/model_download_progress_dialog.py:37 msgid "Downloading model" msgstr "Downloader model" @@ -883,7 +865,7 @@ msgstr "Hjælp" msgid "File" msgstr "Fil" -#: buzz/widgets/main_window.py:232 +#: buzz/widgets/main_window.py:219 msgid "" "Are you sure you want to delete the selected transcription(s)? This action " "cannot be undone." @@ -891,11 +873,11 @@ msgstr "" "Er du sikker på at du vil slette den valgte transkription? Denne handling " "kan ikke fortrydes." -#: buzz/widgets/main_window.py:260 +#: buzz/widgets/main_window.py:247 msgid "Select audio file" msgstr "Vælg audio-fil" -#: buzz/widgets/main_window.py:296 +#: buzz/widgets/main_window.py:283 msgid "Unable to save OpenAI API key to keyring" msgstr "Kan ikke gemme OpenAI API-nøgle i nøgleringen" @@ -1277,7 +1259,7 @@ msgstr "" msgid "Cantonese" msgstr "" -#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:572 +#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610 msgid "A connection error occurred" msgstr "Der er opstået en forbindelsesfejl" @@ -1371,5 +1353,24 @@ msgstr "Tilføj herover" msgid "Append and correct" msgstr "Tilføj og ret" +#~ msgid "Snap permission notice" +#~ msgstr "Snap tilladelse notifikationer" + +#~ msgid "" +#~ "Detected missing permissions, please check that snap permissions have " +#~ "been granted" +#~ msgstr "" +#~ "Detekterede manglene tilladelser, tjek om venligst Snap tilladelserne er " +#~ "givne" + +#~ msgid "" +#~ "To enable necessary permissions run the following commands in the terminal" +#~ msgstr "" +#~ "For at give de nødvendige tilladelser kør den følgende kommando i et " +#~ "terminalvindue" + +#~ msgid "Close" +#~ msgstr "Luk" + #~ msgid "Enter instructions for AI on how to translate..." #~ msgstr "Indtast instruktioner til AI om hvordan den skal oversætte..." diff --git a/buzz/locale/de_DE/LC_MESSAGES/buzz.po b/buzz/locale/de_DE/LC_MESSAGES/buzz.po index 574689a8..0352e5f9 100644 --- a/buzz/locale/de_DE/LC_MESSAGES/buzz.po +++ b/buzz/locale/de_DE/LC_MESSAGES/buzz.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-11 20:21+0200\n" +"POT-Creation-Date: 2025-12-13 10:51+0200\n" "PO-Revision-Date: 2025-03-05 14:41+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -28,7 +28,7 @@ msgstr "https://example.com/audio.mp3" #: buzz/widgets/preferences_dialog/preferences_dialog.py:69 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:251 #: buzz/widgets/transcriber/advanced_settings_dialog.py:97 -#: buzz/widgets/main_window.py:239 +#: buzz/widgets/main_window.py:226 msgid "Ok" msgstr "OK" @@ -36,7 +36,7 @@ msgstr "OK" #: buzz/widgets/preferences_dialog/preferences_dialog.py:70 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:252 #: buzz/widgets/model_download_progress_dialog.py:30 -#: buzz/widgets/main_window.py:240 +#: buzz/widgets/main_window.py:227 msgid "Cancel" msgstr "Abbrechen" @@ -148,46 +148,51 @@ msgstr "OpenAI-API-Schlüssel" msgid "OpenAI base url" msgstr "OpenAI-Basis-URL" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:135 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:138 +#, fuzzy +msgid "OpenAI API model" +msgstr "OpenAI-API-Schlüssel" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 msgid "Default export file name" msgstr "Standardname der Exportdatei" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:141 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:153 msgid "Enable live recording transcription export" msgstr "Export von Live-Aufnahmetranskriptionen aktivieren" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:159 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "Durchsuchen" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:166 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:178 msgid "Export folder" msgstr "Exportordner" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:177 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:189 msgid "Live recording mode" msgstr "Live-Aufnahmemodus" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:183 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195 msgid "Use only CPU and disable GPU acceleration" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:186 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198 msgid "Set this if larger models do not fit your GPU memory and Buzz crashes" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:188 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 msgid "Disable GPU" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:213 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 msgid "OpenAI API Key Test" msgstr "OpenAI-API-Schlüssel Test" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." @@ -195,11 +200,11 @@ msgstr "" "Ihr API-Schlüssel ist gültig. Buzz verwendet diesen Schlüssel, um Whisper-" "API-Transkriptionen und KI-Übersetzungen durchzuführen." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:230 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242 msgid "Invalid API key" msgstr "Ungültiger API-Schlüssel" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243 msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " "API key may cause errors." @@ -207,11 +212,11 @@ msgstr "" "Die API unterstützt nur Base64-Zeichen (A-Za-z0-9+/=_-). Andere Zeichen im " "API-Schlüssel können Fehler verursachen." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:249 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264 msgid "Select Export Folder" msgstr "Exportordner auswählen" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:319 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -307,11 +312,11 @@ msgid "Download failed" msgstr "Der Download ist fehlgeschlagen" #: buzz/widgets/preferences_dialog/models_preferences_widget.py:275 -#: buzz/widgets/transcription_tasks_table_widget.py:665 -#: buzz/widgets/transcription_tasks_table_widget.py:735 -#: buzz/widgets/transcription_tasks_table_widget.py:766 -#: buzz/widgets/main_window.py:296 buzz/model_loader.py:539 -#: buzz/model_loader.py:553 +#: buzz/widgets/transcription_tasks_table_widget.py:704 +#: buzz/widgets/transcription_tasks_table_widget.py:774 +#: buzz/widgets/transcription_tasks_table_widget.py:805 +#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577 +#: buzz/model_loader.py:591 msgid "Error" msgstr "Fehler" @@ -437,7 +442,7 @@ msgstr "Transkript öffnen" msgid "Cancel Transcription" msgstr "Transkription abbrechen" -#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:228 +#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:215 #: buzz/settings/shortcut.py:38 msgid "Clear History" msgstr "Verlauf löschen" @@ -487,7 +492,7 @@ msgid "Date Added" msgstr "Datum hinzugefügt" #: buzz/widgets/transcription_tasks_table_widget.py:156 -#: buzz/widgets/transcription_tasks_table_widget.py:624 +#: buzz/widgets/transcription_tasks_table_widget.py:663 msgid "Notes" msgstr "" @@ -495,53 +500,53 @@ msgstr "" msgid "Reset Column Order" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:301 +#: buzz/widgets/transcription_tasks_table_widget.py:304 #, fuzzy msgid "Restart Transcription" msgstr "Transkription abbrechen" -#: buzz/widgets/transcription_tasks_table_widget.py:305 +#: buzz/widgets/transcription_tasks_table_widget.py:308 #, fuzzy msgid "Rename" msgstr "Vietnamesisch" -#: buzz/widgets/transcription_tasks_table_widget.py:308 +#: buzz/widgets/transcription_tasks_table_widget.py:311 msgid "Add/Edit Notes" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:597 +#: buzz/widgets/transcription_tasks_table_widget.py:636 #, fuzzy msgid "Rename Transcription" msgstr "Transkription abbrechen" -#: buzz/widgets/transcription_tasks_table_widget.py:598 +#: buzz/widgets/transcription_tasks_table_widget.py:637 msgid "Enter new name:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:625 +#: buzz/widgets/transcription_tasks_table_widget.py:664 msgid "Enter some relevant notes for this transcription:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:652 +#: buzz/widgets/transcription_tasks_table_widget.py:691 msgid "Cannot Restart" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:653 +#: buzz/widgets/transcription_tasks_table_widget.py:692 msgid "Only failed or canceled transcriptions can be restarted." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:666 +#: buzz/widgets/transcription_tasks_table_widget.py:705 #, fuzzy msgid "Failed to restart transcription: {}" msgstr "Transkription abbrechen" -#: buzz/widgets/transcription_tasks_table_widget.py:736 +#: buzz/widgets/transcription_tasks_table_widget.py:775 msgid "" "Could not restart transcription: model not available and could not be " "downloaded." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:767 +#: buzz/widgets/transcription_tasks_table_widget.py:806 msgid "Could not restart transcription: transcriber worker not found." msgstr "" @@ -689,36 +694,36 @@ msgstr "" msgid "Scroll to the currently spoken text" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892 msgid "1 of 100+ matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 msgid "1 of " msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:903 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900 msgid "No matches found" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973 msgid " of 100+ matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " of " msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1375 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368 msgid "API Key Required" msgstr "API-Schlüssel erforderlich" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1376 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369 msgid "Please enter OpenAI API Key in preferences" msgstr "Bitte geben Sie den OpenAI-API-Schlüssel in den Einstellungen ein" @@ -829,29 +834,6 @@ msgstr "Datei speichern" msgid "Text files" msgstr "Textdateien" -#: buzz/widgets/snap_notice.py:9 -msgid "Snap permission notice" -msgstr "Snap-Berechtigungsmitteilung" - -#: buzz/widgets/snap_notice.py:13 -msgid "" -"Detected missing permissions, please check that snap permissions have been " -"granted" -msgstr "" -"Es wurden fehlende Berechtigungen festgestellt. Bitte überprüfen Sie, ob " -"Snap-Berechtigungen erteilt wurden" - -#: buzz/widgets/snap_notice.py:16 -msgid "" -"To enable necessary permissions run the following commands in the terminal" -msgstr "" -"Um die erforderlichen Berechtigungen zu aktivieren, führen Sie die folgenden " -"Befehle im Terminal aus" - -#: buzz/widgets/snap_notice.py:27 -msgid "Close" -msgstr "Schließen" - #: buzz/widgets/model_download_progress_dialog.py:37 msgid "Downloading model" msgstr "Modell wird heruntergeladen" @@ -884,7 +866,7 @@ msgstr "Hilfe" msgid "File" msgstr "Datei" -#: buzz/widgets/main_window.py:232 +#: buzz/widgets/main_window.py:219 msgid "" "Are you sure you want to delete the selected transcription(s)? This action " "cannot be undone." @@ -892,11 +874,11 @@ msgstr "" "Sind Sie sicher, dass Sie die ausgewählte(n) Transkription(en) löschen " "möchten? Diese Aktion kann nicht rückgängig gemacht werden." -#: buzz/widgets/main_window.py:260 +#: buzz/widgets/main_window.py:247 msgid "Select audio file" msgstr "Audiodatei auswählen" -#: buzz/widgets/main_window.py:296 +#: buzz/widgets/main_window.py:283 msgid "Unable to save OpenAI API key to keyring" msgstr "" "Der OpenAI-API-Schlüssel kann nicht im Schlüsselbund gespeichert werden" @@ -1279,7 +1261,7 @@ msgstr "Sundanesisch" msgid "Cantonese" msgstr "Kantonesisch" -#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:572 +#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610 msgid "A connection error occurred" msgstr "Ein Verbindungsfehler ist aufgetreten" @@ -1373,5 +1355,24 @@ msgstr "Oben anhängen" msgid "Append and correct" msgstr "Anhängen und korrigieren" +#~ msgid "Snap permission notice" +#~ msgstr "Snap-Berechtigungsmitteilung" + +#~ msgid "" +#~ "Detected missing permissions, please check that snap permissions have " +#~ "been granted" +#~ msgstr "" +#~ "Es wurden fehlende Berechtigungen festgestellt. Bitte überprüfen Sie, ob " +#~ "Snap-Berechtigungen erteilt wurden" + +#~ msgid "" +#~ "To enable necessary permissions run the following commands in the terminal" +#~ msgstr "" +#~ "Um die erforderlichen Berechtigungen zu aktivieren, führen Sie die " +#~ "folgenden Befehle im Terminal aus" + +#~ msgid "Close" +#~ msgstr "Schließen" + #~ msgid "Enter instructions for AI on how to translate..." #~ msgstr "Geben Sie Anweisungen für die KI zum Übersetzen ein..." diff --git a/buzz/locale/en_US/LC_MESSAGES/buzz.po b/buzz/locale/en_US/LC_MESSAGES/buzz.po index 4bc17730..64d9ac70 100644 --- a/buzz/locale/en_US/LC_MESSAGES/buzz.po +++ b/buzz/locale/en_US/LC_MESSAGES/buzz.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-11 20:21+0200\n" +"POT-Creation-Date: 2025-12-13 10:51+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -29,7 +29,7 @@ msgstr "" #: buzz/widgets/preferences_dialog/preferences_dialog.py:69 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:251 #: buzz/widgets/transcriber/advanced_settings_dialog.py:97 -#: buzz/widgets/main_window.py:239 +#: buzz/widgets/main_window.py:226 msgid "Ok" msgstr "" @@ -37,7 +37,7 @@ msgstr "" #: buzz/widgets/preferences_dialog/preferences_dialog.py:70 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:252 #: buzz/widgets/model_download_progress_dialog.py:30 -#: buzz/widgets/main_window.py:240 +#: buzz/widgets/main_window.py:227 msgid "Cancel" msgstr "" @@ -148,66 +148,70 @@ msgstr "" msgid "OpenAI base url" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:135 -msgid "Default export file name" -msgstr "" - -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:141 -msgid "Enable live recording transcription export" +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:138 +msgid "OpenAI API model" msgstr "" #: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 +msgid "Default export file name" +msgstr "" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:153 +msgid "Enable live recording transcription export" +msgstr "" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:159 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:166 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:178 msgid "Export folder" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:177 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:189 msgid "Live recording mode" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:183 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195 msgid "Use only CPU and disable GPU acceleration" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:186 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198 msgid "Set this if larger models do not fit your GPU memory and Buzz crashes" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:188 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 msgid "Disable GPU" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:213 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 msgid "OpenAI API Key Test" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:230 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242 msgid "Invalid API key" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243 msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " "API key may cause errors." msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:249 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264 msgid "Select Export Folder" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:319 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -299,11 +303,11 @@ msgid "Download failed" msgstr "" #: buzz/widgets/preferences_dialog/models_preferences_widget.py:275 -#: buzz/widgets/transcription_tasks_table_widget.py:665 -#: buzz/widgets/transcription_tasks_table_widget.py:735 -#: buzz/widgets/transcription_tasks_table_widget.py:766 -#: buzz/widgets/main_window.py:296 buzz/model_loader.py:539 -#: buzz/model_loader.py:553 +#: buzz/widgets/transcription_tasks_table_widget.py:704 +#: buzz/widgets/transcription_tasks_table_widget.py:774 +#: buzz/widgets/transcription_tasks_table_widget.py:805 +#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577 +#: buzz/model_loader.py:591 msgid "Error" msgstr "" @@ -427,7 +431,7 @@ msgstr "" msgid "Cancel Transcription" msgstr "" -#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:228 +#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:215 #: buzz/settings/shortcut.py:38 msgid "Clear History" msgstr "" @@ -477,7 +481,7 @@ msgid "Date Added" msgstr "" #: buzz/widgets/transcription_tasks_table_widget.py:156 -#: buzz/widgets/transcription_tasks_table_widget.py:624 +#: buzz/widgets/transcription_tasks_table_widget.py:663 msgid "Notes" msgstr "" @@ -485,49 +489,49 @@ msgstr "" msgid "Reset Column Order" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:301 +#: buzz/widgets/transcription_tasks_table_widget.py:304 msgid "Restart Transcription" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:305 +#: buzz/widgets/transcription_tasks_table_widget.py:308 msgid "Rename" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:308 +#: buzz/widgets/transcription_tasks_table_widget.py:311 msgid "Add/Edit Notes" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:597 +#: buzz/widgets/transcription_tasks_table_widget.py:636 msgid "Rename Transcription" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:598 +#: buzz/widgets/transcription_tasks_table_widget.py:637 msgid "Enter new name:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:625 +#: buzz/widgets/transcription_tasks_table_widget.py:664 msgid "Enter some relevant notes for this transcription:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:652 +#: buzz/widgets/transcription_tasks_table_widget.py:691 msgid "Cannot Restart" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:653 +#: buzz/widgets/transcription_tasks_table_widget.py:692 msgid "Only failed or canceled transcriptions can be restarted." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:666 +#: buzz/widgets/transcription_tasks_table_widget.py:705 msgid "Failed to restart transcription: {}" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:736 +#: buzz/widgets/transcription_tasks_table_widget.py:775 msgid "" "Could not restart transcription: model not available and could not be " "downloaded." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:767 +#: buzz/widgets/transcription_tasks_table_widget.py:806 msgid "Could not restart transcription: transcriber worker not found." msgstr "" @@ -673,36 +677,36 @@ msgstr "" msgid "Scroll to the currently spoken text" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892 msgid "1 of 100+ matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 msgid "1 of " msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:903 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900 msgid "No matches found" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973 msgid " of 100+ matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " of " msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1375 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368 msgid "API Key Required" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1376 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369 msgid "Please enter OpenAI API Key in preferences" msgstr "" @@ -811,25 +815,6 @@ msgstr "" msgid "Text files" msgstr "" -#: buzz/widgets/snap_notice.py:9 -msgid "Snap permission notice" -msgstr "" - -#: buzz/widgets/snap_notice.py:13 -msgid "" -"Detected missing permissions, please check that snap permissions have been " -"granted" -msgstr "" - -#: buzz/widgets/snap_notice.py:16 -msgid "" -"To enable necessary permissions run the following commands in the terminal" -msgstr "" - -#: buzz/widgets/snap_notice.py:27 -msgid "Close" -msgstr "" - #: buzz/widgets/model_download_progress_dialog.py:37 msgid "Downloading model" msgstr "" @@ -862,17 +847,17 @@ msgstr "" msgid "File" msgstr "" -#: buzz/widgets/main_window.py:232 +#: buzz/widgets/main_window.py:219 msgid "" "Are you sure you want to delete the selected transcription(s)? This action " "cannot be undone." msgstr "" -#: buzz/widgets/main_window.py:260 +#: buzz/widgets/main_window.py:247 msgid "Select audio file" msgstr "" -#: buzz/widgets/main_window.py:296 +#: buzz/widgets/main_window.py:283 msgid "Unable to save OpenAI API key to keyring" msgstr "" @@ -1253,7 +1238,7 @@ msgstr "" msgid "Cantonese" msgstr "" -#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:572 +#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610 msgid "A connection error occurred" msgstr "" diff --git a/buzz/locale/es_ES/LC_MESSAGES/buzz.po b/buzz/locale/es_ES/LC_MESSAGES/buzz.po index a8c0b3e4..2f039908 100644 --- a/buzz/locale/es_ES/LC_MESSAGES/buzz.po +++ b/buzz/locale/es_ES/LC_MESSAGES/buzz.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-11 20:21+0200\n" +"POT-Creation-Date: 2025-12-13 10:51+0200\n" "PO-Revision-Date: 2025-09-08 12:43+0200\n" "Last-Translator: Éric Duarte \n" "Language-Team: \n" @@ -29,7 +29,7 @@ msgstr "https://ejemplo.com/audio.mp3" #: buzz/widgets/preferences_dialog/preferences_dialog.py:69 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:251 #: buzz/widgets/transcriber/advanced_settings_dialog.py:97 -#: buzz/widgets/main_window.py:239 +#: buzz/widgets/main_window.py:226 msgid "Ok" msgstr "Ok" @@ -37,7 +37,7 @@ msgstr "Ok" #: buzz/widgets/preferences_dialog/preferences_dialog.py:70 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:252 #: buzz/widgets/model_download_progress_dialog.py:30 -#: buzz/widgets/main_window.py:240 +#: buzz/widgets/main_window.py:227 msgid "Cancel" msgstr "Cancelar" @@ -149,49 +149,54 @@ msgstr "Clave API de OpenAI" msgid "OpenAI base url" msgstr "URL base de OpenAI" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:135 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:138 +#, fuzzy +msgid "OpenAI API model" +msgstr "Clave API de OpenAI" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 msgid "Default export file name" msgstr "Nombre de archivo de exportación predeterminado" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:141 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:153 msgid "Enable live recording transcription export" msgstr "Habilitar la exportación de transcripción de grabación en vivo" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:159 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "Navegar" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:166 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:178 msgid "Export folder" msgstr "Carpeta de exportación" # automatic translation -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:177 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:189 msgid "Live recording mode" msgstr "Modo de grabación en directo" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:183 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195 msgid "Use only CPU and disable GPU acceleration" msgstr "Usa solo CPU y desactiva la aceleración de GPU" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:186 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198 msgid "Set this if larger models do not fit your GPU memory and Buzz crashes" msgstr "" "Configure esto si los modelos más grandes no se ajustan a la memoria de su " "GPU y Buzz se bloquea" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:188 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 msgid "Disable GPU" msgstr "Desactivar GPU" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:213 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 msgid "OpenAI API Key Test" msgstr "Prueba de la clave API de OpenAI" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." @@ -199,11 +204,11 @@ msgstr "" "Tu clave API es válida. Buzz usará esta clave para realizar transcripciones " "de la API de Whisper y traducciones de IA." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:230 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242 msgid "Invalid API key" msgstr "Clave API no válida" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243 msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " "API key may cause errors." @@ -211,11 +216,11 @@ msgstr "" "La API solo admite caracteres base64 (A-Za-z0-9+/=_-). Otros caracteres de " "la clave de API pueden causar errores." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:249 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264 msgid "Select Export Folder" msgstr "Seleccione Exportar carpeta" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:319 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -314,11 +319,11 @@ msgid "Download failed" msgstr "Descarga fallida" #: buzz/widgets/preferences_dialog/models_preferences_widget.py:275 -#: buzz/widgets/transcription_tasks_table_widget.py:665 -#: buzz/widgets/transcription_tasks_table_widget.py:735 -#: buzz/widgets/transcription_tasks_table_widget.py:766 -#: buzz/widgets/main_window.py:296 buzz/model_loader.py:539 -#: buzz/model_loader.py:553 +#: buzz/widgets/transcription_tasks_table_widget.py:704 +#: buzz/widgets/transcription_tasks_table_widget.py:774 +#: buzz/widgets/transcription_tasks_table_widget.py:805 +#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577 +#: buzz/model_loader.py:591 msgid "Error" msgstr "Error" @@ -463,7 +468,7 @@ msgid "Cancel Transcription" msgstr "Cancelar transcripción" # automatic translation -#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:228 +#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:215 #: buzz/settings/shortcut.py:38 msgid "Clear History" msgstr "Vaciar historial" @@ -516,7 +521,7 @@ msgid "Date Added" msgstr "Fecha de adición" #: buzz/widgets/transcription_tasks_table_widget.py:156 -#: buzz/widgets/transcription_tasks_table_widget.py:624 +#: buzz/widgets/transcription_tasks_table_widget.py:663 msgid "Notes" msgstr "" @@ -525,55 +530,55 @@ msgid "Reset Column Order" msgstr "" # automatic translation -#: buzz/widgets/transcription_tasks_table_widget.py:301 +#: buzz/widgets/transcription_tasks_table_widget.py:304 #, fuzzy msgid "Restart Transcription" msgstr "Cancelar transcripción" -#: buzz/widgets/transcription_tasks_table_widget.py:305 +#: buzz/widgets/transcription_tasks_table_widget.py:308 #, fuzzy msgid "Rename" msgstr "Vietnamita" -#: buzz/widgets/transcription_tasks_table_widget.py:308 +#: buzz/widgets/transcription_tasks_table_widget.py:311 msgid "Add/Edit Notes" msgstr "" # automatic translation -#: buzz/widgets/transcription_tasks_table_widget.py:597 +#: buzz/widgets/transcription_tasks_table_widget.py:636 #, fuzzy msgid "Rename Transcription" msgstr "Cancelar transcripción" -#: buzz/widgets/transcription_tasks_table_widget.py:598 +#: buzz/widgets/transcription_tasks_table_widget.py:637 msgid "Enter new name:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:625 +#: buzz/widgets/transcription_tasks_table_widget.py:664 msgid "Enter some relevant notes for this transcription:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:652 +#: buzz/widgets/transcription_tasks_table_widget.py:691 msgid "Cannot Restart" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:653 +#: buzz/widgets/transcription_tasks_table_widget.py:692 msgid "Only failed or canceled transcriptions can be restarted." msgstr "" # automatic translation -#: buzz/widgets/transcription_tasks_table_widget.py:666 +#: buzz/widgets/transcription_tasks_table_widget.py:705 #, fuzzy msgid "Failed to restart transcription: {}" msgstr "Cancelar transcripción" -#: buzz/widgets/transcription_tasks_table_widget.py:736 +#: buzz/widgets/transcription_tasks_table_widget.py:775 msgid "" "Could not restart transcription: model not available and could not be " "downloaded." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:767 +#: buzz/widgets/transcription_tasks_table_widget.py:806 msgid "Could not restart transcription: transcriber worker not found." msgstr "" @@ -735,36 +740,36 @@ msgstr "Desplácese hasta Actual" msgid "Scroll to the currently spoken text" msgstr "Desplazarse hasta el texto hablado actualmente" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892 msgid "1 of 100+ matches" msgstr "1 de 100+ coincidencias" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 msgid "1 of " msgstr "1 de " -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " matches" msgstr " coincidencias" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:903 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900 msgid "No matches found" msgstr "No se encontraron coincidencias" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973 msgid " of 100+ matches" msgstr " de 100+ coincidencias" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " of " msgstr " de " -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1375 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368 msgid "API Key Required" msgstr "Clave de API requerida" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1376 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369 msgid "Please enter OpenAI API Key in preferences" msgstr "Ingrese la clave API de OpenAI en las preferencias" @@ -878,29 +883,6 @@ msgstr "Guardar archivo" msgid "Text files" msgstr "Archivos de texto" -#: buzz/widgets/snap_notice.py:9 -msgid "Snap permission notice" -msgstr "Aviso de permiso Snap" - -#: buzz/widgets/snap_notice.py:13 -msgid "" -"Detected missing permissions, please check that snap permissions have been " -"granted" -msgstr "" -"Se ha detectado que faltan permisos, compruebe que se han concedido los " -"permisos snap" - -#: buzz/widgets/snap_notice.py:16 -msgid "" -"To enable necessary permissions run the following commands in the terminal" -msgstr "" -"Para habilitar los permisos necesarios ejecute los siguientes comandos en el " -"terminal" - -#: buzz/widgets/snap_notice.py:27 -msgid "Close" -msgstr "Cerrar" - #: buzz/widgets/model_download_progress_dialog.py:37 msgid "Downloading model" msgstr "Descargando modelo" @@ -939,7 +921,7 @@ msgid "File" msgstr "Archivo" # automatic translation -#: buzz/widgets/main_window.py:232 +#: buzz/widgets/main_window.py:219 msgid "" "Are you sure you want to delete the selected transcription(s)? This action " "cannot be undone." @@ -948,11 +930,11 @@ msgstr "" "no se puede deshacer." # automatic translation -#: buzz/widgets/main_window.py:260 +#: buzz/widgets/main_window.py:247 msgid "Select audio file" msgstr "Seleccionar archivo de audio" -#: buzz/widgets/main_window.py:296 +#: buzz/widgets/main_window.py:283 msgid "Unable to save OpenAI API key to keyring" msgstr "No se puede guardar la clave de la API de OpenAI en el llavero" @@ -1339,7 +1321,7 @@ msgstr "Sundanés" msgid "Cantonese" msgstr "Cantonés" -#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:572 +#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610 msgid "A connection error occurred" msgstr "Se ha producido un error de conexión" @@ -1439,6 +1421,25 @@ msgstr "Añadir arriba" msgid "Append and correct" msgstr "Añadir y corregir" +#~ msgid "Snap permission notice" +#~ msgstr "Aviso de permiso Snap" + +#~ msgid "" +#~ "Detected missing permissions, please check that snap permissions have " +#~ "been granted" +#~ msgstr "" +#~ "Se ha detectado que faltan permisos, compruebe que se han concedido los " +#~ "permisos snap" + +#~ msgid "" +#~ "To enable necessary permissions run the following commands in the terminal" +#~ msgstr "" +#~ "Para habilitar los permisos necesarios ejecute los siguientes comandos en " +#~ "el terminal" + +#~ msgid "Close" +#~ msgstr "Cerrar" + #~ msgid "Enter instructions for AI on how to translate..." #~ msgstr "Introduzca instrucciones para la IA sobre cómo traducir..." diff --git a/buzz/locale/it_IT/LC_MESSAGES/buzz.po b/buzz/locale/it_IT/LC_MESSAGES/buzz.po index d8c13272..7fd50c46 100644 --- a/buzz/locale/it_IT/LC_MESSAGES/buzz.po +++ b/buzz/locale/it_IT/LC_MESSAGES/buzz.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: buzz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-11 20:21+0200\n" +"POT-Creation-Date: 2025-12-13 10:51+0200\n" "PO-Revision-Date: 2025-11-09 20:22+0200\n" "Language-Team: (Italiano) Albano Battistella \n" "Language: it_IT\n" @@ -28,7 +28,7 @@ msgstr "https://esempio.com/audio.mp3" #: buzz/widgets/preferences_dialog/preferences_dialog.py:69 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:251 #: buzz/widgets/transcriber/advanced_settings_dialog.py:97 -#: buzz/widgets/main_window.py:239 +#: buzz/widgets/main_window.py:226 msgid "Ok" msgstr "Ok" @@ -36,7 +36,7 @@ msgstr "Ok" #: buzz/widgets/preferences_dialog/preferences_dialog.py:70 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:252 #: buzz/widgets/model_download_progress_dialog.py:30 -#: buzz/widgets/main_window.py:240 +#: buzz/widgets/main_window.py:227 msgid "Cancel" msgstr "Annulla" @@ -148,48 +148,53 @@ msgstr "Chiave API OpenAI" msgid "OpenAI base url" msgstr "URL di base di OpenAI" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:135 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:138 +#, fuzzy +msgid "OpenAI API model" +msgstr "Chiave API OpenAI" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 msgid "Default export file name" msgstr "Nome file di esportazione predefinito" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:141 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:153 msgid "Enable live recording transcription export" msgstr "Abilita l'esportazione della trascrizione della registrazione live" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:159 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "Sfoglia" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:166 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:178 msgid "Export folder" msgstr "Esporta cartella" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:177 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:189 msgid "Live recording mode" msgstr "Modalità di registrazione in diretta" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:183 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195 msgid "Use only CPU and disable GPU acceleration" msgstr "Utilizza solo la CPU e disattiva l'accelerazione GPU" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:186 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198 msgid "Set this if larger models do not fit your GPU memory and Buzz crashes" msgstr "" "Imposta questa opzione se i modelli più grandi non si adattano alla memoria " "della tua GPU e Buzz si blocca" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:188 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 msgid "Disable GPU" msgstr "Disabilita GPU" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:213 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 msgid "OpenAI API Key Test" msgstr "Test della chiave API OpenAI" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." @@ -197,11 +202,11 @@ msgstr "" "La tua chiave API è valida. Buzz utilizzerà questa chiave per eseguire le " "trascrizioni API Whisper e le traduzioni AI." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:230 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242 msgid "Invalid API key" msgstr "Chiave API non valida" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243 msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " "API key may cause errors." @@ -209,11 +214,11 @@ msgstr "" "L'API supporta solo caratteri base64 (A-Za-z0-9+/=). Altri caratteri nella " "chiave API potrebbero causare errori." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:249 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264 msgid "Select Export Folder" msgstr "Seleziona la cartella di esportazione" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:319 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -308,11 +313,11 @@ msgid "Download failed" msgstr "Download non riuscito" #: buzz/widgets/preferences_dialog/models_preferences_widget.py:275 -#: buzz/widgets/transcription_tasks_table_widget.py:665 -#: buzz/widgets/transcription_tasks_table_widget.py:735 -#: buzz/widgets/transcription_tasks_table_widget.py:766 -#: buzz/widgets/main_window.py:296 buzz/model_loader.py:539 -#: buzz/model_loader.py:553 +#: buzz/widgets/transcription_tasks_table_widget.py:704 +#: buzz/widgets/transcription_tasks_table_widget.py:774 +#: buzz/widgets/transcription_tasks_table_widget.py:805 +#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577 +#: buzz/model_loader.py:591 msgid "Error" msgstr "Errore" @@ -440,7 +445,7 @@ msgstr "Apri trascrizione" msgid "Cancel Transcription" msgstr "Annulla trascrizione" -#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:228 +#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:215 #: buzz/settings/shortcut.py:38 msgid "Clear History" msgstr "Elimina la cronologia" @@ -490,7 +495,7 @@ msgid "Date Added" msgstr "Data aggiunta" #: buzz/widgets/transcription_tasks_table_widget.py:156 -#: buzz/widgets/transcription_tasks_table_widget.py:624 +#: buzz/widgets/transcription_tasks_table_widget.py:663 msgid "Notes" msgstr "" @@ -498,53 +503,53 @@ msgstr "" msgid "Reset Column Order" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:301 +#: buzz/widgets/transcription_tasks_table_widget.py:304 #, fuzzy msgid "Restart Transcription" msgstr "Inizio trascrizione..." -#: buzz/widgets/transcription_tasks_table_widget.py:305 +#: buzz/widgets/transcription_tasks_table_widget.py:308 #, fuzzy msgid "Rename" msgstr "Vietnamita" -#: buzz/widgets/transcription_tasks_table_widget.py:308 +#: buzz/widgets/transcription_tasks_table_widget.py:311 msgid "Add/Edit Notes" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:597 +#: buzz/widgets/transcription_tasks_table_widget.py:636 #, fuzzy msgid "Rename Transcription" msgstr "Annulla trascrizione" -#: buzz/widgets/transcription_tasks_table_widget.py:598 +#: buzz/widgets/transcription_tasks_table_widget.py:637 msgid "Enter new name:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:625 +#: buzz/widgets/transcription_tasks_table_widget.py:664 msgid "Enter some relevant notes for this transcription:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:652 +#: buzz/widgets/transcription_tasks_table_widget.py:691 msgid "Cannot Restart" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:653 +#: buzz/widgets/transcription_tasks_table_widget.py:692 msgid "Only failed or canceled transcriptions can be restarted." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:666 +#: buzz/widgets/transcription_tasks_table_widget.py:705 #, fuzzy msgid "Failed to restart transcription: {}" msgstr "Inizio trascrizione..." -#: buzz/widgets/transcription_tasks_table_widget.py:736 +#: buzz/widgets/transcription_tasks_table_widget.py:775 msgid "" "Could not restart transcription: model not available and could not be " "downloaded." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:767 +#: buzz/widgets/transcription_tasks_table_widget.py:806 msgid "Could not restart transcription: transcriber worker not found." msgstr "" @@ -697,36 +702,36 @@ msgstr "Scorri fino al Corrente" msgid "Scroll to the currently spoken text" msgstr "Scorrere fino al testo attualmente pronunciato" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892 msgid "1 of 100+ matches" msgstr "1 di 100+ corrispondenze" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 msgid "1 of " msgstr "1 di" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " matches" msgstr "corrispondenze" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:903 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900 msgid "No matches found" msgstr "Nessuna corrispondenza trovata" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973 msgid " of 100+ matches" msgstr " di oltre 100 corrispondenze" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " of " msgstr " di " -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1375 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368 msgid "API Key Required" msgstr "Chiave API richiesta" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1376 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369 msgid "Please enter OpenAI API Key in preferences" msgstr "Inserisci la chiave API OpenAI nelle preferenze" @@ -837,29 +842,6 @@ msgstr "Salva file" msgid "Text files" msgstr "File di testo" -#: buzz/widgets/snap_notice.py:9 -msgid "Snap permission notice" -msgstr "Avviso di autorizzazione Snap" - -#: buzz/widgets/snap_notice.py:13 -msgid "" -"Detected missing permissions, please check that snap permissions have been " -"granted" -msgstr "" -"Rilevate autorizzazioni mancanti, verificare che le autorizzazioni snap " -"siano state concesse" - -#: buzz/widgets/snap_notice.py:16 -msgid "" -"To enable necessary permissions run the following commands in the terminal" -msgstr "" -"Per abilitare le autorizzazioni necessarie, eseguire i seguenti comandi nel " -"terminale" - -#: buzz/widgets/snap_notice.py:27 -msgid "Close" -msgstr "Chiudi" - #: buzz/widgets/model_download_progress_dialog.py:37 msgid "Downloading model" msgstr "Download del modello" @@ -892,7 +874,7 @@ msgstr "Aiuto" msgid "File" msgstr "File" -#: buzz/widgets/main_window.py:232 +#: buzz/widgets/main_window.py:219 msgid "" "Are you sure you want to delete the selected transcription(s)? This action " "cannot be undone." @@ -900,11 +882,11 @@ msgstr "" "Sei certo di voler eliminare le trascrizioni selezionate? Questa azione non " "può essere annullata." -#: buzz/widgets/main_window.py:260 +#: buzz/widgets/main_window.py:247 msgid "Select audio file" msgstr "Seleziona file audio" -#: buzz/widgets/main_window.py:296 +#: buzz/widgets/main_window.py:283 msgid "Unable to save OpenAI API key to keyring" msgstr "Impossibile salvare la chiave API OpenAI nel portachiavi" @@ -1289,7 +1271,7 @@ msgstr "Sundanese" msgid "Cantonese" msgstr "Cantonese" -#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:572 +#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610 msgid "A connection error occurred" msgstr "Si è verificato un errore di connessione" @@ -1381,6 +1363,25 @@ msgstr "Aggiungere sopra" msgid "Append and correct" msgstr "Aggiungere e correggere" +#~ msgid "Snap permission notice" +#~ msgstr "Avviso di autorizzazione Snap" + +#~ msgid "" +#~ "Detected missing permissions, please check that snap permissions have " +#~ "been granted" +#~ msgstr "" +#~ "Rilevate autorizzazioni mancanti, verificare che le autorizzazioni snap " +#~ "siano state concesse" + +#~ msgid "" +#~ "To enable necessary permissions run the following commands in the terminal" +#~ msgstr "" +#~ "Per abilitare le autorizzazioni necessarie, eseguire i seguenti comandi " +#~ "nel terminale" + +#~ msgid "Close" +#~ msgstr "Chiudi" + #~ msgid "Enter instructions for AI on how to translate..." #~ msgstr "Inserisci le istruzioni per l'IA su come tradurre..." diff --git a/buzz/locale/ja_JP/LC_MESSAGES/buzz.po b/buzz/locale/ja_JP/LC_MESSAGES/buzz.po index 82c7ef2c..f2bb2f90 100644 --- a/buzz/locale/ja_JP/LC_MESSAGES/buzz.po +++ b/buzz/locale/ja_JP/LC_MESSAGES/buzz.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-11 20:21+0200\n" +"POT-Creation-Date: 2025-12-13 10:51+0200\n" "PO-Revision-Date: \n" "Last-Translator: nunawa <71294849+nunawa@users.noreply.github.com>\n" "Language-Team: \n" @@ -24,7 +24,7 @@ msgstr "https://example.com/audio.mp3" #: buzz/widgets/preferences_dialog/preferences_dialog.py:69 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:251 #: buzz/widgets/transcriber/advanced_settings_dialog.py:97 -#: buzz/widgets/main_window.py:239 +#: buzz/widgets/main_window.py:226 msgid "Ok" msgstr "Ok" @@ -32,7 +32,7 @@ msgstr "Ok" #: buzz/widgets/preferences_dialog/preferences_dialog.py:70 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:252 #: buzz/widgets/model_download_progress_dialog.py:30 -#: buzz/widgets/main_window.py:240 +#: buzz/widgets/main_window.py:227 msgid "Cancel" msgstr "キャンセル" @@ -145,47 +145,52 @@ msgstr "OpenAI APIキー" msgid "OpenAI base url" msgstr "OpenAI ベースURL" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:135 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:138 +#, fuzzy +msgid "OpenAI API model" +msgstr "OpenAI APIキー" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 msgid "Default export file name" msgstr "デフォルトの出力ファイル名" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:141 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:153 msgid "Enable live recording transcription export" msgstr "ライブ録音書き起こしの出力を有効にする" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:159 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "参照" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:166 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:178 msgid "Export folder" msgstr "出力フォルダ" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:177 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:189 #, fuzzy msgid "Live recording mode" msgstr "ライブ録音" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:183 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195 msgid "Use only CPU and disable GPU acceleration" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:186 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198 msgid "Set this if larger models do not fit your GPU memory and Buzz crashes" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:188 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 msgid "Disable GPU" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:213 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 msgid "OpenAI API Key Test" msgstr "OpenAI APIキー テスト" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." @@ -193,22 +198,22 @@ msgstr "" "あなたのAPIキーは有効です。Buzzはこのキーを使ってWhisper APIの書き起こしとAI" "翻訳を行います。" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:230 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242 #, fuzzy msgid "Invalid API key" msgstr "OpenAI APIキー" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243 msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " "API key may cause errors." msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:249 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264 msgid "Select Export Folder" msgstr "出力フォルダを選択" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:319 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -303,11 +308,11 @@ msgid "Download failed" msgstr "ダウンロード失敗" #: buzz/widgets/preferences_dialog/models_preferences_widget.py:275 -#: buzz/widgets/transcription_tasks_table_widget.py:665 -#: buzz/widgets/transcription_tasks_table_widget.py:735 -#: buzz/widgets/transcription_tasks_table_widget.py:766 -#: buzz/widgets/main_window.py:296 buzz/model_loader.py:539 -#: buzz/model_loader.py:553 +#: buzz/widgets/transcription_tasks_table_widget.py:704 +#: buzz/widgets/transcription_tasks_table_widget.py:774 +#: buzz/widgets/transcription_tasks_table_widget.py:805 +#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577 +#: buzz/model_loader.py:591 msgid "Error" msgstr "エラー" @@ -433,7 +438,7 @@ msgstr "文字起こしを開く" msgid "Cancel Transcription" msgstr "文字起こしをキャンセルする" -#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:228 +#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:215 #: buzz/settings/shortcut.py:38 msgid "Clear History" msgstr "履歴を削除する" @@ -483,7 +488,7 @@ msgid "Date Added" msgstr "追加日" #: buzz/widgets/transcription_tasks_table_widget.py:156 -#: buzz/widgets/transcription_tasks_table_widget.py:624 +#: buzz/widgets/transcription_tasks_table_widget.py:663 msgid "Notes" msgstr "" @@ -491,52 +496,52 @@ msgstr "" msgid "Reset Column Order" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:301 +#: buzz/widgets/transcription_tasks_table_widget.py:304 #, fuzzy msgid "Restart Transcription" msgstr "文字起こしをキャンセルする" -#: buzz/widgets/transcription_tasks_table_widget.py:305 +#: buzz/widgets/transcription_tasks_table_widget.py:308 msgid "Rename" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:308 +#: buzz/widgets/transcription_tasks_table_widget.py:311 msgid "Add/Edit Notes" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:597 +#: buzz/widgets/transcription_tasks_table_widget.py:636 #, fuzzy msgid "Rename Transcription" msgstr "文字起こしをキャンセルする" -#: buzz/widgets/transcription_tasks_table_widget.py:598 +#: buzz/widgets/transcription_tasks_table_widget.py:637 msgid "Enter new name:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:625 +#: buzz/widgets/transcription_tasks_table_widget.py:664 msgid "Enter some relevant notes for this transcription:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:652 +#: buzz/widgets/transcription_tasks_table_widget.py:691 msgid "Cannot Restart" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:653 +#: buzz/widgets/transcription_tasks_table_widget.py:692 msgid "Only failed or canceled transcriptions can be restarted." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:666 +#: buzz/widgets/transcription_tasks_table_widget.py:705 #, fuzzy msgid "Failed to restart transcription: {}" msgstr "文字起こしをキャンセルする" -#: buzz/widgets/transcription_tasks_table_widget.py:736 +#: buzz/widgets/transcription_tasks_table_widget.py:775 msgid "" "Could not restart transcription: model not available and could not be " "downloaded." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:767 +#: buzz/widgets/transcription_tasks_table_widget.py:806 msgid "Could not restart transcription: transcriber worker not found." msgstr "" @@ -684,36 +689,36 @@ msgstr "" msgid "Scroll to the currently spoken text" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892 msgid "1 of 100+ matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 msgid "1 of " msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:903 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900 msgid "No matches found" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973 msgid " of 100+ matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " of " msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1375 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368 msgid "API Key Required" msgstr "APIキーが必要" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1376 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369 msgid "Please enter OpenAI API Key in preferences" msgstr "設定画面でOpenAI APIキーを入力してください" @@ -825,29 +830,6 @@ msgstr "ファイルを保存" msgid "Text files" msgstr "テキストファイル" -#: buzz/widgets/snap_notice.py:9 -msgid "Snap permission notice" -msgstr "Snap権限通知" - -#: buzz/widgets/snap_notice.py:13 -msgid "" -"Detected missing permissions, please check that snap permissions have been " -"granted" -msgstr "" -"不足している権限が検出されました。Snapパッケージに権限が付与されていることを" -"確認してください" - -#: buzz/widgets/snap_notice.py:16 -msgid "" -"To enable necessary permissions run the following commands in the terminal" -msgstr "" -"必要なパーミッションを有効にするには、ターミナルで以下のコマンドを実行してく" -"ださい" - -#: buzz/widgets/snap_notice.py:27 -msgid "Close" -msgstr "閉じる" - #: buzz/widgets/model_download_progress_dialog.py:37 msgid "Downloading model" msgstr "モデルをダウンロード中" @@ -880,17 +862,17 @@ msgstr "ヘルプ" msgid "File" msgstr "ファイル" -#: buzz/widgets/main_window.py:232 +#: buzz/widgets/main_window.py:219 msgid "" "Are you sure you want to delete the selected transcription(s)? This action " "cannot be undone." msgstr "本当に選択された文字起こしを削除しますか? この操作は元に戻せません。" -#: buzz/widgets/main_window.py:260 +#: buzz/widgets/main_window.py:247 msgid "Select audio file" msgstr "音声ファイルを選択" -#: buzz/widgets/main_window.py:296 +#: buzz/widgets/main_window.py:283 msgid "Unable to save OpenAI API key to keyring" msgstr "OpenAI API キーをkeyringに保存できません" @@ -1272,7 +1254,7 @@ msgstr "" msgid "Cantonese" msgstr "" -#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:572 +#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610 msgid "A connection error occurred" msgstr "接続エラーが発生しました" @@ -1366,6 +1348,25 @@ msgstr "" msgid "Append and correct" msgstr "" +#~ msgid "Snap permission notice" +#~ msgstr "Snap権限通知" + +#~ msgid "" +#~ "Detected missing permissions, please check that snap permissions have " +#~ "been granted" +#~ msgstr "" +#~ "不足している権限が検出されました。Snapパッケージに権限が付与されていること" +#~ "を確認してください" + +#~ msgid "" +#~ "To enable necessary permissions run the following commands in the terminal" +#~ msgstr "" +#~ "必要なパーミッションを有効にするには、ターミナルで以下のコマンドを実行して" +#~ "ください" + +#~ msgid "Close" +#~ msgstr "閉じる" + #~ msgid "Enter instructions for AI on how to translate..." #~ msgstr "AIのための翻訳方法の指示を入力..." diff --git a/buzz/locale/lv_LV/LC_MESSAGES/buzz.po b/buzz/locale/lv_LV/LC_MESSAGES/buzz.po index 1858a164..339e8152 100644 --- a/buzz/locale/lv_LV/LC_MESSAGES/buzz.po +++ b/buzz/locale/lv_LV/LC_MESSAGES/buzz.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-11 20:21+0200\n" -"PO-Revision-Date: 2025-12-11 20:23+0200\n" +"POT-Creation-Date: 2025-12-13 10:51+0200\n" +"PO-Revision-Date: 2025-12-13 10:52+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: lv_LV\n" @@ -29,7 +29,7 @@ msgstr "https://example.com/audio.mp3" #: buzz/widgets/preferences_dialog/preferences_dialog.py:69 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:251 #: buzz/widgets/transcriber/advanced_settings_dialog.py:97 -#: buzz/widgets/main_window.py:239 +#: buzz/widgets/main_window.py:226 msgid "Ok" msgstr "Labi" @@ -37,7 +37,7 @@ msgstr "Labi" #: buzz/widgets/preferences_dialog/preferences_dialog.py:70 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:252 #: buzz/widgets/model_download_progress_dialog.py:30 -#: buzz/widgets/main_window.py:240 +#: buzz/widgets/main_window.py:227 msgid "Cancel" msgstr "Atcelt" @@ -148,50 +148,54 @@ msgstr "OpenAI API atslēga" msgid "OpenAI base url" msgstr "OpenAI adrese" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:135 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:138 +msgid "OpenAI API model" +msgstr "OpenAI modelis" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 msgid "Default export file name" msgstr "Eksporta fails" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:141 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:153 msgid "Enable live recording transcription export" msgstr "Eksportēt dzīvā ieraksta transkriptus" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:159 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "Izvēlēties" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:166 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:178 msgid "Export folder" msgstr "Eksportēt mapē" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:177 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:189 msgid "Live recording mode" msgstr "" "Dzīvā ieraksta\n" "režīms" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:183 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195 msgid "Use only CPU and disable GPU acceleration" msgstr "Izmantot tikai CPU un deaktivēt GPU paātrināšanu" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:186 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198 msgid "Set this if larger models do not fit your GPU memory and Buzz crashes" msgstr "" "Aktivizējiet šo, ja lielāki modeļi neietilpst jūsu video kartes atmiņā un " "Buzz avarē" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:188 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 msgid "Disable GPU" msgstr "Deaktivēt GPU" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:213 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 msgid "OpenAI API Key Test" msgstr "OpenAI API atslēgas pārbaude" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." @@ -199,11 +203,11 @@ msgstr "" "Jūsu API atslēga ir derīga. Buzz izmantos to runas atpazīšanai ar Whisper " "API un tulkošanai." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:230 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242 msgid "Invalid API key" msgstr "Nederīga API atslēga" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243 msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " "API key may cause errors." @@ -211,11 +215,11 @@ msgstr "" "API atbalsta tikai base64 simbolus (A-Za-z0-9+/=_-). Citi simboli API " "atslēgā var radīt kļūdas." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:249 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264 msgid "Select Export Folder" msgstr "Izvēlieties mapi kurā eksportēt" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:319 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -310,11 +314,11 @@ msgid "Download failed" msgstr "Lejupielāde neizdevās" #: buzz/widgets/preferences_dialog/models_preferences_widget.py:275 -#: buzz/widgets/transcription_tasks_table_widget.py:665 -#: buzz/widgets/transcription_tasks_table_widget.py:735 -#: buzz/widgets/transcription_tasks_table_widget.py:766 -#: buzz/widgets/main_window.py:296 buzz/model_loader.py:539 -#: buzz/model_loader.py:553 +#: buzz/widgets/transcription_tasks_table_widget.py:704 +#: buzz/widgets/transcription_tasks_table_widget.py:774 +#: buzz/widgets/transcription_tasks_table_widget.py:805 +#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577 +#: buzz/model_loader.py:591 msgid "Error" msgstr "Kļūda" @@ -442,7 +446,7 @@ msgstr "Atvērt transkriptu" msgid "Cancel Transcription" msgstr "Atcelt atpazīšanu" -#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:228 +#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:215 #: buzz/settings/shortcut.py:38 msgid "Clear History" msgstr "Notīrīt vēsturi" @@ -492,7 +496,7 @@ msgid "Date Added" msgstr "Pievienots" #: buzz/widgets/transcription_tasks_table_widget.py:156 -#: buzz/widgets/transcription_tasks_table_widget.py:624 +#: buzz/widgets/transcription_tasks_table_widget.py:663 msgid "Notes" msgstr "Piezīmes" @@ -500,50 +504,50 @@ msgstr "Piezīmes" msgid "Reset Column Order" msgstr "Atjaunot kolonas" -#: buzz/widgets/transcription_tasks_table_widget.py:301 +#: buzz/widgets/transcription_tasks_table_widget.py:304 msgid "Restart Transcription" msgstr "Sāk atpazīšanu" -#: buzz/widgets/transcription_tasks_table_widget.py:305 +#: buzz/widgets/transcription_tasks_table_widget.py:308 msgid "Rename" msgstr "Pārddēvēt" -#: buzz/widgets/transcription_tasks_table_widget.py:308 +#: buzz/widgets/transcription_tasks_table_widget.py:311 msgid "Add/Edit Notes" msgstr "Rediģēt piezīmes" -#: buzz/widgets/transcription_tasks_table_widget.py:597 +#: buzz/widgets/transcription_tasks_table_widget.py:636 msgid "Rename Transcription" msgstr "Pārdēvēt" -#: buzz/widgets/transcription_tasks_table_widget.py:598 +#: buzz/widgets/transcription_tasks_table_widget.py:637 msgid "Enter new name:" msgstr "Ievadiet jauno nosaukumu šim atpazīšanas ierakstam:" -#: buzz/widgets/transcription_tasks_table_widget.py:625 +#: buzz/widgets/transcription_tasks_table_widget.py:664 msgid "Enter some relevant notes for this transcription:" msgstr "Ievadiet noderīgas piezīmēs par šo ierakstu:" -#: buzz/widgets/transcription_tasks_table_widget.py:652 +#: buzz/widgets/transcription_tasks_table_widget.py:691 msgid "Cannot Restart" msgstr "Neizdodas sākt" -#: buzz/widgets/transcription_tasks_table_widget.py:653 +#: buzz/widgets/transcription_tasks_table_widget.py:692 msgid "Only failed or canceled transcriptions can be restarted." msgstr "Atkārtoti sākt var tikai kļūdainus vai atceltus ierakstus." -#: buzz/widgets/transcription_tasks_table_widget.py:666 +#: buzz/widgets/transcription_tasks_table_widget.py:705 msgid "Failed to restart transcription: {}" msgstr "Neizdevās sākt atpazīšanu: {}" -#: buzz/widgets/transcription_tasks_table_widget.py:736 +#: buzz/widgets/transcription_tasks_table_widget.py:775 msgid "" "Could not restart transcription: model not available and could not be " "downloaded." msgstr "" "Neizdevās sākt atpazīšanu: modelis nav pieejams un to nevar lejupielādēt." -#: buzz/widgets/transcription_tasks_table_widget.py:767 +#: buzz/widgets/transcription_tasks_table_widget.py:806 msgid "Could not restart transcription: transcriber worker not found." msgstr "Neizdevās sākt atpazīšanu: Kļūda lietotnē, pārstartējiet." @@ -693,36 +697,36 @@ msgstr "Pāriet uz tekošo" msgid "Scroll to the currently spoken text" msgstr "Pāriet uz šobrīd atskaņojamo tesktu" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892 msgid "1 of 100+ matches" msgstr "1 no 100+ " -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 msgid "1 of " msgstr "1 no " -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " matches" msgstr " " -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:903 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900 msgid "No matches found" msgstr "Nekas nav atrasts" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973 msgid " of 100+ matches" msgstr " no 100+" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " of " msgstr " no " -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1375 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368 msgid "API Key Required" msgstr "API atslēgas kļūda" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1376 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369 msgid "Please enter OpenAI API Key in preferences" msgstr "Lūdzu ievadiet OpenAI API atslēgu iestatījumos" @@ -831,27 +835,6 @@ msgstr "Saglabāt failu" msgid "Text files" msgstr "Teksta faili" -#: buzz/widgets/snap_notice.py:9 -msgid "Snap permission notice" -msgstr "Snap atļauju piezīme" - -#: buzz/widgets/snap_notice.py:13 -msgid "" -"Detected missing permissions, please check that snap permissions have been " -"granted" -msgstr "" -"Ne visi nepieciešamie moduļi darbojas korekti, iespējams nav piešķirtas snap " -"atļaujas" - -#: buzz/widgets/snap_notice.py:16 -msgid "" -"To enable necessary permissions run the following commands in the terminal" -msgstr "Lai piešķirtu nepieciešamās atļaujas izpildiet šīs komandas" - -#: buzz/widgets/snap_notice.py:27 -msgid "Close" -msgstr "Aizvērt" - #: buzz/widgets/model_download_progress_dialog.py:37 msgid "Downloading model" msgstr "Lejupielādē modeli" @@ -884,7 +867,7 @@ msgstr "Palīdzība" msgid "File" msgstr "Fails" -#: buzz/widgets/main_window.py:232 +#: buzz/widgets/main_window.py:219 msgid "" "Are you sure you want to delete the selected transcription(s)? This action " "cannot be undone." @@ -892,11 +875,11 @@ msgstr "" "Vai tiešām vēlaties dzēst izvēlētos transkriptus? Šī ir neatgriezeniska " "darbība." -#: buzz/widgets/main_window.py:260 +#: buzz/widgets/main_window.py:247 msgid "Select audio file" msgstr "Izvēlieties audio failu" -#: buzz/widgets/main_window.py:296 +#: buzz/widgets/main_window.py:283 msgid "Unable to save OpenAI API key to keyring" msgstr "Neizdevās saglabāt OpenAI API atslēgu atslēgu saišķī" @@ -1282,7 +1265,7 @@ msgstr "Sundāņu" msgid "Cantonese" msgstr "Kantonas" -#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:572 +#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610 msgid "A connection error occurred" msgstr "Notika savienojuma kļūda" @@ -1374,6 +1357,23 @@ msgstr "Jaunie teikumi augšā" msgid "Append and correct" msgstr "Papildināt un labot esošo" +#~ msgid "Snap permission notice" +#~ msgstr "Snap atļauju piezīme" + +#~ msgid "" +#~ "Detected missing permissions, please check that snap permissions have " +#~ "been granted" +#~ msgstr "" +#~ "Ne visi nepieciešamie moduļi darbojas korekti, iespējams nav piešķirtas " +#~ "snap atļaujas" + +#~ msgid "" +#~ "To enable necessary permissions run the following commands in the terminal" +#~ msgstr "Lai piešķirtu nepieciešamās atļaujas izpildiet šīs komandas" + +#~ msgid "Close" +#~ msgstr "Aizvērt" + #~ msgid "Enter instructions for AI on how to translate..." #~ msgstr "Ievadiet tulkošanas norādes mākslīgajam intelektam..." diff --git a/buzz/locale/nl/LC_MESSAGES/buzz.po b/buzz/locale/nl/LC_MESSAGES/buzz.po index d895e113..a7b4d2f0 100644 --- a/buzz/locale/nl/LC_MESSAGES/buzz.po +++ b/buzz/locale/nl/LC_MESSAGES/buzz.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-11 20:21+0200\n" +"POT-Creation-Date: 2025-12-13 10:51+0200\n" "PO-Revision-Date: 2025-03-20 18:30+0100\n" "Last-Translator: Heimen Stoffels \n" "Language-Team: none\n" @@ -31,7 +31,7 @@ msgstr "https://voorbeeld.nl/audio.mp3" #: buzz/widgets/preferences_dialog/preferences_dialog.py:69 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:251 #: buzz/widgets/transcriber/advanced_settings_dialog.py:97 -#: buzz/widgets/main_window.py:239 +#: buzz/widgets/main_window.py:226 msgid "Ok" msgstr "Oké" @@ -39,7 +39,7 @@ msgstr "Oké" #: buzz/widgets/preferences_dialog/preferences_dialog.py:70 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:252 #: buzz/widgets/model_download_progress_dialog.py:30 -#: buzz/widgets/main_window.py:240 +#: buzz/widgets/main_window.py:227 msgid "Cancel" msgstr "Annuleren" @@ -151,46 +151,51 @@ msgstr "OpenAI-api-sleutel" msgid "OpenAI base url" msgstr "OpenAI-hoofd-url" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:135 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:138 +#, fuzzy +msgid "OpenAI API model" +msgstr "OpenAI-api-sleutel" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 msgid "Default export file name" msgstr "Standaardnaam van export" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:141 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:153 msgid "Enable live recording transcription export" msgstr "Transcripties van opnames onmiddelijk exporteren" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:159 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "Bladeren" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:166 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:178 msgid "Export folder" msgstr "Exportmap" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:177 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:189 msgid "Live recording mode" msgstr "Live-opnamemodus" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:183 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195 msgid "Use only CPU and disable GPU acceleration" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:186 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198 msgid "Set this if larger models do not fit your GPU memory and Buzz crashes" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:188 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 msgid "Disable GPU" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:213 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 msgid "OpenAI API Key Test" msgstr "OpenAI-api-sleuteltest" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." @@ -198,11 +203,11 @@ msgstr "" "De api-sleutel is geldig. Buzz zal deze sleutel gebruiken om transcripties " "en AI-vertalingen op te vragen bij Whisper." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:230 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242 msgid "Invalid API key" msgstr "Ongeldige api-sleutel" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243 msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " "API key may cause errors." @@ -210,11 +215,11 @@ msgstr "" "De api ondersteunt alleen base64-tekens (A–Za–z0–9+/=_-). Andere tekens " "kunnen problemen veroorzaken." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:249 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264 msgid "Select Export Folder" msgstr "Kies een exportmap" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:319 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -309,11 +314,11 @@ msgid "Download failed" msgstr "Het downloaden is mislukt" #: buzz/widgets/preferences_dialog/models_preferences_widget.py:275 -#: buzz/widgets/transcription_tasks_table_widget.py:665 -#: buzz/widgets/transcription_tasks_table_widget.py:735 -#: buzz/widgets/transcription_tasks_table_widget.py:766 -#: buzz/widgets/main_window.py:296 buzz/model_loader.py:539 -#: buzz/model_loader.py:553 +#: buzz/widgets/transcription_tasks_table_widget.py:704 +#: buzz/widgets/transcription_tasks_table_widget.py:774 +#: buzz/widgets/transcription_tasks_table_widget.py:805 +#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577 +#: buzz/model_loader.py:591 msgid "Error" msgstr "Foutmelding" @@ -439,7 +444,7 @@ msgstr "Transcriptie openen" msgid "Cancel Transcription" msgstr "Transcriptie wissen" -#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:228 +#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:215 #: buzz/settings/shortcut.py:38 msgid "Clear History" msgstr "Geschiedenis wissen" @@ -489,7 +494,7 @@ msgid "Date Added" msgstr "Toegevoegd op" #: buzz/widgets/transcription_tasks_table_widget.py:156 -#: buzz/widgets/transcription_tasks_table_widget.py:624 +#: buzz/widgets/transcription_tasks_table_widget.py:663 msgid "Notes" msgstr "" @@ -497,53 +502,53 @@ msgstr "" msgid "Reset Column Order" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:301 +#: buzz/widgets/transcription_tasks_table_widget.py:304 #, fuzzy msgid "Restart Transcription" msgstr "Transcriptie wissen" -#: buzz/widgets/transcription_tasks_table_widget.py:305 +#: buzz/widgets/transcription_tasks_table_widget.py:308 #, fuzzy msgid "Rename" msgstr "Vietnamees" -#: buzz/widgets/transcription_tasks_table_widget.py:308 +#: buzz/widgets/transcription_tasks_table_widget.py:311 msgid "Add/Edit Notes" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:597 +#: buzz/widgets/transcription_tasks_table_widget.py:636 #, fuzzy msgid "Rename Transcription" msgstr "Transcriptie wissen" -#: buzz/widgets/transcription_tasks_table_widget.py:598 +#: buzz/widgets/transcription_tasks_table_widget.py:637 msgid "Enter new name:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:625 +#: buzz/widgets/transcription_tasks_table_widget.py:664 msgid "Enter some relevant notes for this transcription:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:652 +#: buzz/widgets/transcription_tasks_table_widget.py:691 msgid "Cannot Restart" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:653 +#: buzz/widgets/transcription_tasks_table_widget.py:692 msgid "Only failed or canceled transcriptions can be restarted." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:666 +#: buzz/widgets/transcription_tasks_table_widget.py:705 #, fuzzy msgid "Failed to restart transcription: {}" msgstr "Transcriptie wissen" -#: buzz/widgets/transcription_tasks_table_widget.py:736 +#: buzz/widgets/transcription_tasks_table_widget.py:775 msgid "" "Could not restart transcription: model not available and could not be " "downloaded." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:767 +#: buzz/widgets/transcription_tasks_table_widget.py:806 msgid "Could not restart transcription: transcriber worker not found." msgstr "" @@ -689,36 +694,36 @@ msgstr "" msgid "Scroll to the currently spoken text" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892 msgid "1 of 100+ matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 msgid "1 of " msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:903 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900 msgid "No matches found" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973 msgid " of 100+ matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " of " msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1375 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368 msgid "API Key Required" msgstr "Api-sleutel vereist" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1376 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369 msgid "Please enter OpenAI API Key in preferences" msgstr "Voer de OpenAI-api-sleutel in in de instellingen" @@ -829,28 +834,6 @@ msgstr "Bestand opslaan" msgid "Text files" msgstr "Tekstbestanden" -#: buzz/widgets/snap_notice.py:9 -msgid "Snap permission notice" -msgstr "Snap-rechten" - -#: buzz/widgets/snap_notice.py:13 -msgid "" -"Detected missing permissions, please check that snap permissions have been " -"granted" -msgstr "" -"Er ontbreken toegangsrechten - controleer of ze daadwerkelijk allemaal zijn " -"toegekend" - -#: buzz/widgets/snap_notice.py:16 -msgid "" -"To enable necessary permissions run the following commands in the terminal" -msgstr "" -"De rechten kunnen met behulp van deze terminalopdrachten worden verleend" - -#: buzz/widgets/snap_notice.py:27 -msgid "Close" -msgstr "Sluiten" - #: buzz/widgets/model_download_progress_dialog.py:37 msgid "Downloading model" msgstr "Bezig met ophalen van model…" @@ -883,7 +866,7 @@ msgstr "Hulp" msgid "File" msgstr "Bestand" -#: buzz/widgets/main_window.py:232 +#: buzz/widgets/main_window.py:219 msgid "" "Are you sure you want to delete the selected transcription(s)? This action " "cannot be undone." @@ -891,11 +874,11 @@ msgstr "" "Weet u zeker dat u de gekozen transcriptie(s) wilt verwijderen? Deze actie " "is onomkeerbaar." -#: buzz/widgets/main_window.py:260 +#: buzz/widgets/main_window.py:247 msgid "Select audio file" msgstr "Kies een audiobestand" -#: buzz/widgets/main_window.py:296 +#: buzz/widgets/main_window.py:283 msgid "Unable to save OpenAI API key to keyring" msgstr "De OpenAI-api-sleutel kan niet worden bewaard in de sleutelbos" @@ -1277,7 +1260,7 @@ msgstr "Soedanees" msgid "Cantonese" msgstr "Kantonees" -#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:572 +#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610 msgid "A connection error occurred" msgstr "Er is een verbindingsfout opgetreden" @@ -1371,6 +1354,24 @@ msgstr "Bovenaan toevoegen" msgid "Append and correct" msgstr "Toevoegen en corrigeren" +#~ msgid "Snap permission notice" +#~ msgstr "Snap-rechten" + +#~ msgid "" +#~ "Detected missing permissions, please check that snap permissions have " +#~ "been granted" +#~ msgstr "" +#~ "Er ontbreken toegangsrechten - controleer of ze daadwerkelijk allemaal " +#~ "zijn toegekend" + +#~ msgid "" +#~ "To enable necessary permissions run the following commands in the terminal" +#~ msgstr "" +#~ "De rechten kunnen met behulp van deze terminalopdrachten worden verleend" + +#~ msgid "Close" +#~ msgstr "Sluiten" + #~ msgid "Enter instructions for AI on how to translate..." #~ msgstr "Voer vertaalinstructies in…" diff --git a/buzz/locale/pl_PL/LC_MESSAGES/buzz.po b/buzz/locale/pl_PL/LC_MESSAGES/buzz.po index 6df447cf..a1e36157 100644 --- a/buzz/locale/pl_PL/LC_MESSAGES/buzz.po +++ b/buzz/locale/pl_PL/LC_MESSAGES/buzz.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-11 20:21+0200\n" +"POT-Creation-Date: 2025-12-13 10:51+0200\n" "PO-Revision-Date: 2024-03-17 20:50+0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -29,7 +29,7 @@ msgstr "https://przyklad.pl/audio.mp3" #: buzz/widgets/preferences_dialog/preferences_dialog.py:69 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:251 #: buzz/widgets/transcriber/advanced_settings_dialog.py:97 -#: buzz/widgets/main_window.py:239 +#: buzz/widgets/main_window.py:226 msgid "Ok" msgstr "" @@ -37,7 +37,7 @@ msgstr "" #: buzz/widgets/preferences_dialog/preferences_dialog.py:70 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:252 #: buzz/widgets/model_download_progress_dialog.py:30 -#: buzz/widgets/main_window.py:240 +#: buzz/widgets/main_window.py:227 msgid "Cancel" msgstr "Anuluj" @@ -149,68 +149,73 @@ msgstr "" msgid "OpenAI base url" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:135 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:138 +#, fuzzy +msgid "OpenAI API model" +msgstr "Model:" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 msgid "Default export file name" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:141 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:153 msgid "Enable live recording transcription export" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:159 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:166 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:178 msgid "Export folder" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:177 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:189 #, fuzzy msgid "Live recording mode" msgstr "Nagrywanie na żywo" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:183 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195 msgid "Use only CPU and disable GPU acceleration" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:186 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198 msgid "Set this if larger models do not fit your GPU memory and Buzz crashes" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:188 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 msgid "Disable GPU" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:213 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 msgid "OpenAI API Key Test" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:230 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242 #, fuzzy msgid "Invalid API key" msgstr "Nieprawidłowy URL" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243 msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " "API key may cause errors." msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:249 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264 msgid "Select Export Folder" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:319 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -310,11 +315,11 @@ msgid "Download failed" msgstr "Pobrany" #: buzz/widgets/preferences_dialog/models_preferences_widget.py:275 -#: buzz/widgets/transcription_tasks_table_widget.py:665 -#: buzz/widgets/transcription_tasks_table_widget.py:735 -#: buzz/widgets/transcription_tasks_table_widget.py:766 -#: buzz/widgets/main_window.py:296 buzz/model_loader.py:539 -#: buzz/model_loader.py:553 +#: buzz/widgets/transcription_tasks_table_widget.py:704 +#: buzz/widgets/transcription_tasks_table_widget.py:774 +#: buzz/widgets/transcription_tasks_table_widget.py:805 +#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577 +#: buzz/model_loader.py:591 msgid "Error" msgstr "Błąd" @@ -441,7 +446,7 @@ msgstr "Otwórz transkrypt" msgid "Cancel Transcription" msgstr "Anuluj transkrypcję" -#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:228 +#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:215 #: buzz/settings/shortcut.py:38 msgid "Clear History" msgstr "Wyczyść historię" @@ -495,7 +500,7 @@ msgid "Date Added" msgstr "" #: buzz/widgets/transcription_tasks_table_widget.py:156 -#: buzz/widgets/transcription_tasks_table_widget.py:624 +#: buzz/widgets/transcription_tasks_table_widget.py:663 msgid "Notes" msgstr "" @@ -503,52 +508,52 @@ msgstr "" msgid "Reset Column Order" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:301 +#: buzz/widgets/transcription_tasks_table_widget.py:304 #, fuzzy msgid "Restart Transcription" msgstr "Anuluj transkrypcję" -#: buzz/widgets/transcription_tasks_table_widget.py:305 +#: buzz/widgets/transcription_tasks_table_widget.py:308 msgid "Rename" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:308 +#: buzz/widgets/transcription_tasks_table_widget.py:311 msgid "Add/Edit Notes" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:597 +#: buzz/widgets/transcription_tasks_table_widget.py:636 #, fuzzy msgid "Rename Transcription" msgstr "Anuluj transkrypcję" -#: buzz/widgets/transcription_tasks_table_widget.py:598 +#: buzz/widgets/transcription_tasks_table_widget.py:637 msgid "Enter new name:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:625 +#: buzz/widgets/transcription_tasks_table_widget.py:664 msgid "Enter some relevant notes for this transcription:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:652 +#: buzz/widgets/transcription_tasks_table_widget.py:691 msgid "Cannot Restart" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:653 +#: buzz/widgets/transcription_tasks_table_widget.py:692 msgid "Only failed or canceled transcriptions can be restarted." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:666 +#: buzz/widgets/transcription_tasks_table_widget.py:705 #, fuzzy msgid "Failed to restart transcription: {}" msgstr "Anuluj transkrypcję" -#: buzz/widgets/transcription_tasks_table_widget.py:736 +#: buzz/widgets/transcription_tasks_table_widget.py:775 msgid "" "Could not restart transcription: model not available and could not be " "downloaded." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:767 +#: buzz/widgets/transcription_tasks_table_widget.py:806 msgid "Could not restart transcription: transcriber worker not found." msgstr "" @@ -697,36 +702,36 @@ msgstr "" msgid "Scroll to the currently spoken text" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892 msgid "1 of 100+ matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 msgid "1 of " msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:903 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900 msgid "No matches found" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973 msgid " of 100+ matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " of " msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1375 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368 msgid "API Key Required" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1376 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369 msgid "Please enter OpenAI API Key in preferences" msgstr "" @@ -838,25 +843,6 @@ msgstr "Zapisz plik" msgid "Text files" msgstr "Pliki tekstowe" -#: buzz/widgets/snap_notice.py:9 -msgid "Snap permission notice" -msgstr "" - -#: buzz/widgets/snap_notice.py:13 -msgid "" -"Detected missing permissions, please check that snap permissions have been " -"granted" -msgstr "" - -#: buzz/widgets/snap_notice.py:16 -msgid "" -"To enable necessary permissions run the following commands in the terminal" -msgstr "" - -#: buzz/widgets/snap_notice.py:27 -msgid "Close" -msgstr "" - #: buzz/widgets/model_download_progress_dialog.py:37 #, fuzzy msgid "Downloading model" @@ -892,7 +878,7 @@ msgstr "Pomoc" msgid "File" msgstr "Plik" -#: buzz/widgets/main_window.py:232 +#: buzz/widgets/main_window.py:219 msgid "" "Are you sure you want to delete the selected transcription(s)? This action " "cannot be undone." @@ -900,11 +886,11 @@ msgstr "" "Czy na pewno chcesz usunąć zaznaczone transkrypcje? Tej operacji nie można " "cofnąć." -#: buzz/widgets/main_window.py:260 +#: buzz/widgets/main_window.py:247 msgid "Select audio file" msgstr "Wybierz plik audio" -#: buzz/widgets/main_window.py:296 +#: buzz/widgets/main_window.py:283 msgid "Unable to save OpenAI API key to keyring" msgstr "" @@ -1287,7 +1273,7 @@ msgstr "" msgid "Cantonese" msgstr "" -#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:572 +#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610 msgid "A connection error occurred" msgstr "" diff --git a/buzz/locale/pt_BR/LC_MESSAGES/buzz.po b/buzz/locale/pt_BR/LC_MESSAGES/buzz.po index 22fbb3e3..129dca1d 100644 --- a/buzz/locale/pt_BR/LC_MESSAGES/buzz.po +++ b/buzz/locale/pt_BR/LC_MESSAGES/buzz.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Buzz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-11 20:21+0200\n" +"POT-Creation-Date: 2025-12-13 10:51+0200\n" "PO-Revision-Date: 2025-11-01 17:43-0300\n" "Last-Translator: Paulo Schopf \n" "Language-Team: none\n" @@ -29,7 +29,7 @@ msgstr "https://exemplo.com/audio.mp3" #: buzz/widgets/preferences_dialog/preferences_dialog.py:69 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:251 #: buzz/widgets/transcriber/advanced_settings_dialog.py:97 -#: buzz/widgets/main_window.py:239 +#: buzz/widgets/main_window.py:226 msgid "Ok" msgstr "Ok" @@ -37,7 +37,7 @@ msgstr "Ok" #: buzz/widgets/preferences_dialog/preferences_dialog.py:70 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:252 #: buzz/widgets/model_download_progress_dialog.py:30 -#: buzz/widgets/main_window.py:240 +#: buzz/widgets/main_window.py:227 msgid "Cancel" msgstr "Cancelar" @@ -148,47 +148,52 @@ msgstr "Chave API da OpenAI" msgid "OpenAI base url" msgstr "URL base da OpenAI" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:135 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:138 +#, fuzzy +msgid "OpenAI API model" +msgstr "Chave API da OpenAI" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 msgid "Default export file name" msgstr "Nome padrão do arquivo de exportação" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:141 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:153 msgid "Enable live recording transcription export" msgstr "Habilitar exportação da transcrição ao vivo" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:159 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "Procurar" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:166 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:178 msgid "Export folder" msgstr "Pasta de exportação" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:177 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:189 msgid "Live recording mode" msgstr "Modo de gravação ao vivo" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:183 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195 msgid "Use only CPU and disable GPU acceleration" msgstr "Usar somente a CPU e desabilitar aceleração por GPU" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:186 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198 msgid "Set this if larger models do not fit your GPU memory and Buzz crashes" msgstr "" "Marque isso se modelos maiores não couberem na memória da GPU e o Buzz travar" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:188 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 msgid "Disable GPU" msgstr "Desabilitar GPU" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:213 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 msgid "OpenAI API Key Test" msgstr "Teste da Chave API OpenAI" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." @@ -196,11 +201,11 @@ msgstr "" "Sua chave API é válida. O Buzz usará esta chave para realizar transcrições " "API Whisper e traduções de IA." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:230 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242 msgid "Invalid API key" msgstr "Chave API inválida" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243 msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " "API key may cause errors." @@ -208,11 +213,11 @@ msgstr "" "A API suporta apenas caracteres base64 (A-Za-z0-9+/=_-). Outros caracteres " "na chave API podem causar erros." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:249 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264 msgid "Select Export Folder" msgstr "Selecionar Pasta de Exportação" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:319 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -307,11 +312,11 @@ msgid "Download failed" msgstr "Falha ao baixar" #: buzz/widgets/preferences_dialog/models_preferences_widget.py:275 -#: buzz/widgets/transcription_tasks_table_widget.py:665 -#: buzz/widgets/transcription_tasks_table_widget.py:735 -#: buzz/widgets/transcription_tasks_table_widget.py:766 -#: buzz/widgets/main_window.py:296 buzz/model_loader.py:539 -#: buzz/model_loader.py:553 +#: buzz/widgets/transcription_tasks_table_widget.py:704 +#: buzz/widgets/transcription_tasks_table_widget.py:774 +#: buzz/widgets/transcription_tasks_table_widget.py:805 +#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577 +#: buzz/model_loader.py:591 msgid "Error" msgstr "Erro" @@ -437,7 +442,7 @@ msgstr "Abrir Transcrição" msgid "Cancel Transcription" msgstr "Cancelar Transcrição" -#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:228 +#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:215 #: buzz/settings/shortcut.py:38 msgid "Clear History" msgstr "Limpar Histórico" @@ -487,7 +492,7 @@ msgid "Date Added" msgstr "Data de Adição" #: buzz/widgets/transcription_tasks_table_widget.py:156 -#: buzz/widgets/transcription_tasks_table_widget.py:624 +#: buzz/widgets/transcription_tasks_table_widget.py:663 msgid "Notes" msgstr "" @@ -495,53 +500,53 @@ msgstr "" msgid "Reset Column Order" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:301 +#: buzz/widgets/transcription_tasks_table_widget.py:304 #, fuzzy msgid "Restart Transcription" msgstr "Iniciando transcrição..." -#: buzz/widgets/transcription_tasks_table_widget.py:305 +#: buzz/widgets/transcription_tasks_table_widget.py:308 #, fuzzy msgid "Rename" msgstr "Vietnamita" -#: buzz/widgets/transcription_tasks_table_widget.py:308 +#: buzz/widgets/transcription_tasks_table_widget.py:311 msgid "Add/Edit Notes" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:597 +#: buzz/widgets/transcription_tasks_table_widget.py:636 #, fuzzy msgid "Rename Transcription" msgstr "Cancelar Transcrição" -#: buzz/widgets/transcription_tasks_table_widget.py:598 +#: buzz/widgets/transcription_tasks_table_widget.py:637 msgid "Enter new name:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:625 +#: buzz/widgets/transcription_tasks_table_widget.py:664 msgid "Enter some relevant notes for this transcription:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:652 +#: buzz/widgets/transcription_tasks_table_widget.py:691 msgid "Cannot Restart" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:653 +#: buzz/widgets/transcription_tasks_table_widget.py:692 msgid "Only failed or canceled transcriptions can be restarted." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:666 +#: buzz/widgets/transcription_tasks_table_widget.py:705 #, fuzzy msgid "Failed to restart transcription: {}" msgstr "Iniciando transcrição..." -#: buzz/widgets/transcription_tasks_table_widget.py:736 +#: buzz/widgets/transcription_tasks_table_widget.py:775 msgid "" "Could not restart transcription: model not available and could not be " "downloaded." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:767 +#: buzz/widgets/transcription_tasks_table_widget.py:806 msgid "Could not restart transcription: transcriber worker not found." msgstr "" @@ -692,36 +697,36 @@ msgstr "Rolar para o Atual" msgid "Scroll to the currently spoken text" msgstr "Role até o texto falado no momento" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892 msgid "1 of 100+ matches" msgstr "1 de 100+ encontros" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 msgid "1 of " msgstr "1 de " -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " matches" msgstr " encontros" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:903 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900 msgid "No matches found" msgstr "Nada encontrado" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973 msgid " of 100+ matches" msgstr " de 100+ encontros" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " of " msgstr " de " -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1375 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368 msgid "API Key Required" msgstr "Chave API Necessária" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1376 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369 msgid "Please enter OpenAI API Key in preferences" msgstr "Insira a chave API OpenAI nas preferências" @@ -832,29 +837,6 @@ msgstr "Salvar Arquivo" msgid "Text files" msgstr "Arquivos de texto" -#: buzz/widgets/snap_notice.py:9 -msgid "Snap permission notice" -msgstr "Aviso de permissão do Snap" - -#: buzz/widgets/snap_notice.py:13 -msgid "" -"Detected missing permissions, please check that snap permissions have been " -"granted" -msgstr "" -"Permissões ausentes detectadas, verifique se as permissões do Snap foram " -"concedidas" - -#: buzz/widgets/snap_notice.py:16 -msgid "" -"To enable necessary permissions run the following commands in the terminal" -msgstr "" -"Para habilitar as permissões necessárias, execute os seguintes comandos no " -"terminal" - -#: buzz/widgets/snap_notice.py:27 -msgid "Close" -msgstr "Fechar" - #: buzz/widgets/model_download_progress_dialog.py:37 msgid "Downloading model" msgstr "Baixando modelo" @@ -887,7 +869,7 @@ msgstr "Ajuda" msgid "File" msgstr "Arquivo" -#: buzz/widgets/main_window.py:232 +#: buzz/widgets/main_window.py:219 msgid "" "Are you sure you want to delete the selected transcription(s)? This action " "cannot be undone." @@ -895,11 +877,11 @@ msgstr "" "Tem certeza que deseja excluir a(s) transcrição(ões) selecionada(s)? Esta " "ação não pode ser desfeita." -#: buzz/widgets/main_window.py:260 +#: buzz/widgets/main_window.py:247 msgid "Select audio file" msgstr "Selecionar arquivo de áudio" -#: buzz/widgets/main_window.py:296 +#: buzz/widgets/main_window.py:283 msgid "Unable to save OpenAI API key to keyring" msgstr "Não foi possível salvar a chave da API OpenAI no cofre de chaves" @@ -1283,7 +1265,7 @@ msgstr "Sundanês" msgid "Cantonese" msgstr "Cantonês" -#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:572 +#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610 msgid "A connection error occurred" msgstr "Ocorreu um erro de conexão" @@ -1376,6 +1358,25 @@ msgstr "Acrescentar acima" msgid "Append and correct" msgstr "Acrescentar e corrigir" +#~ msgid "Snap permission notice" +#~ msgstr "Aviso de permissão do Snap" + +#~ msgid "" +#~ "Detected missing permissions, please check that snap permissions have " +#~ "been granted" +#~ msgstr "" +#~ "Permissões ausentes detectadas, verifique se as permissões do Snap foram " +#~ "concedidas" + +#~ msgid "" +#~ "To enable necessary permissions run the following commands in the terminal" +#~ msgstr "" +#~ "Para habilitar as permissões necessárias, execute os seguintes comandos " +#~ "no terminal" + +#~ msgid "Close" +#~ msgstr "Fechar" + #~ msgid "Enter instructions for AI on how to translate..." #~ msgstr "Instrua a IA sobre como traduzir..." diff --git a/buzz/locale/uk_UA/LC_MESSAGES/buzz.po b/buzz/locale/uk_UA/LC_MESSAGES/buzz.po index ba783992..3472eed8 100644 --- a/buzz/locale/uk_UA/LC_MESSAGES/buzz.po +++ b/buzz/locale/uk_UA/LC_MESSAGES/buzz.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-11 20:21+0200\n" +"POT-Creation-Date: 2025-12-13 10:51+0200\n" "PO-Revision-Date: \n" "Last-Translator: Yevhen Popok \n" "Language-Team: \n" @@ -26,7 +26,7 @@ msgstr "https://example.com/audio.mp3" #: buzz/widgets/preferences_dialog/preferences_dialog.py:69 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:251 #: buzz/widgets/transcriber/advanced_settings_dialog.py:97 -#: buzz/widgets/main_window.py:239 +#: buzz/widgets/main_window.py:226 msgid "Ok" msgstr "Гаразд" @@ -34,7 +34,7 @@ msgstr "Гаразд" #: buzz/widgets/preferences_dialog/preferences_dialog.py:70 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:252 #: buzz/widgets/model_download_progress_dialog.py:30 -#: buzz/widgets/main_window.py:240 +#: buzz/widgets/main_window.py:227 msgid "Cancel" msgstr "Скасувати" @@ -147,47 +147,52 @@ msgstr "API-ключ OpenAI" msgid "OpenAI base url" msgstr "Базова адреса OpenAI" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:135 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:138 +#, fuzzy +msgid "OpenAI API model" +msgstr "API-ключ OpenAI" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 msgid "Default export file name" msgstr "Типова назва файлу експорту" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:141 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:153 msgid "Enable live recording transcription export" msgstr "Увімкнути експорт транскрипції з живого запису" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:159 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "Огляд" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:166 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:178 msgid "Export folder" msgstr "Тека для експорту" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:177 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:189 #, fuzzy msgid "Live recording mode" msgstr "Живий запис" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:183 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195 msgid "Use only CPU and disable GPU acceleration" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:186 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198 msgid "Set this if larger models do not fit your GPU memory and Buzz crashes" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:188 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 msgid "Disable GPU" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:213 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 msgid "OpenAI API Key Test" msgstr "Тест API-ключа OpenAI" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." @@ -195,22 +200,22 @@ msgstr "" "Ваш API-ключ дійсний. Buzz використає цей ключ для транскрипції з Whisper " "API та перекладу ШІ." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:230 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242 #, fuzzy msgid "Invalid API key" msgstr "API-ключ OpenAI" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243 msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " "API key may cause errors." msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:249 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264 msgid "Select Export Folder" msgstr "Виберіть теку для експорту" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:319 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -305,11 +310,11 @@ msgid "Download failed" msgstr "Невдале завантаження" #: buzz/widgets/preferences_dialog/models_preferences_widget.py:275 -#: buzz/widgets/transcription_tasks_table_widget.py:665 -#: buzz/widgets/transcription_tasks_table_widget.py:735 -#: buzz/widgets/transcription_tasks_table_widget.py:766 -#: buzz/widgets/main_window.py:296 buzz/model_loader.py:539 -#: buzz/model_loader.py:553 +#: buzz/widgets/transcription_tasks_table_widget.py:704 +#: buzz/widgets/transcription_tasks_table_widget.py:774 +#: buzz/widgets/transcription_tasks_table_widget.py:805 +#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577 +#: buzz/model_loader.py:591 msgid "Error" msgstr "Помилка" @@ -435,7 +440,7 @@ msgstr "Відкрити транскрипцію" msgid "Cancel Transcription" msgstr "Скасувати транскрипцію" -#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:228 +#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:215 #: buzz/settings/shortcut.py:38 msgid "Clear History" msgstr "Очистити історію" @@ -485,7 +490,7 @@ msgid "Date Added" msgstr "Дата додавання" #: buzz/widgets/transcription_tasks_table_widget.py:156 -#: buzz/widgets/transcription_tasks_table_widget.py:624 +#: buzz/widgets/transcription_tasks_table_widget.py:663 msgid "Notes" msgstr "" @@ -493,52 +498,52 @@ msgstr "" msgid "Reset Column Order" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:301 +#: buzz/widgets/transcription_tasks_table_widget.py:304 #, fuzzy msgid "Restart Transcription" msgstr "Скасувати транскрипцію" -#: buzz/widgets/transcription_tasks_table_widget.py:305 +#: buzz/widgets/transcription_tasks_table_widget.py:308 msgid "Rename" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:308 +#: buzz/widgets/transcription_tasks_table_widget.py:311 msgid "Add/Edit Notes" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:597 +#: buzz/widgets/transcription_tasks_table_widget.py:636 #, fuzzy msgid "Rename Transcription" msgstr "Скасувати транскрипцію" -#: buzz/widgets/transcription_tasks_table_widget.py:598 +#: buzz/widgets/transcription_tasks_table_widget.py:637 msgid "Enter new name:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:625 +#: buzz/widgets/transcription_tasks_table_widget.py:664 msgid "Enter some relevant notes for this transcription:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:652 +#: buzz/widgets/transcription_tasks_table_widget.py:691 msgid "Cannot Restart" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:653 +#: buzz/widgets/transcription_tasks_table_widget.py:692 msgid "Only failed or canceled transcriptions can be restarted." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:666 +#: buzz/widgets/transcription_tasks_table_widget.py:705 #, fuzzy msgid "Failed to restart transcription: {}" msgstr "Скасувати транскрипцію" -#: buzz/widgets/transcription_tasks_table_widget.py:736 +#: buzz/widgets/transcription_tasks_table_widget.py:775 msgid "" "Could not restart transcription: model not available and could not be " "downloaded." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:767 +#: buzz/widgets/transcription_tasks_table_widget.py:806 msgid "Could not restart transcription: transcriber worker not found." msgstr "" @@ -686,36 +691,36 @@ msgstr "" msgid "Scroll to the currently spoken text" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892 msgid "1 of 100+ matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 msgid "1 of " msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:903 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900 msgid "No matches found" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973 msgid " of 100+ matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " of " msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1375 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368 msgid "API Key Required" msgstr "Потрібен API-ключ" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1376 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369 msgid "Please enter OpenAI API Key in preferences" msgstr "Будь ласка, введіть API-ключ OpenAI в налаштуваннях" @@ -826,28 +831,6 @@ msgstr "Зберегти файл" msgid "Text files" msgstr "Текстові файли" -#: buzz/widgets/snap_notice.py:9 -msgid "Snap permission notice" -msgstr "Попередження щодо дозволів Snap" - -#: buzz/widgets/snap_notice.py:13 -msgid "" -"Detected missing permissions, please check that snap permissions have been " -"granted" -msgstr "" -"Виявлено нестачу повноважень. Будь ласка, перевірте, чи були надані дозволи " -"для Snap" - -#: buzz/widgets/snap_notice.py:16 -msgid "" -"To enable necessary permissions run the following commands in the terminal" -msgstr "" -"Для активації необхідних дозволів, запустіть наступну команду в терміналі" - -#: buzz/widgets/snap_notice.py:27 -msgid "Close" -msgstr "Закрити" - #: buzz/widgets/model_download_progress_dialog.py:37 msgid "Downloading model" msgstr "Завантаження моделі" @@ -880,18 +863,18 @@ msgstr "Допомога" msgid "File" msgstr "Файл" -#: buzz/widgets/main_window.py:232 +#: buzz/widgets/main_window.py:219 msgid "" "Are you sure you want to delete the selected transcription(s)? This action " "cannot be undone." msgstr "" "Ви впевнені, що хочете видалити вибрані транскрипції? Це незворотна дія." -#: buzz/widgets/main_window.py:260 +#: buzz/widgets/main_window.py:247 msgid "Select audio file" msgstr "Вибрати аудіофайл" -#: buzz/widgets/main_window.py:296 +#: buzz/widgets/main_window.py:283 msgid "Unable to save OpenAI API key to keyring" msgstr "Не вдається додати до звʼязки ключів API-ключ OpenAI" @@ -1273,7 +1256,7 @@ msgstr "" msgid "Cantonese" msgstr "" -#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:572 +#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610 msgid "A connection error occurred" msgstr "Виникла помилка зʼєднання" @@ -1367,5 +1350,23 @@ msgstr "" msgid "Append and correct" msgstr "" +#~ msgid "Snap permission notice" +#~ msgstr "Попередження щодо дозволів Snap" + +#~ msgid "" +#~ "Detected missing permissions, please check that snap permissions have " +#~ "been granted" +#~ msgstr "" +#~ "Виявлено нестачу повноважень. Будь ласка, перевірте, чи були надані " +#~ "дозволи для Snap" + +#~ msgid "" +#~ "To enable necessary permissions run the following commands in the terminal" +#~ msgstr "" +#~ "Для активації необхідних дозволів, запустіть наступну команду в терміналі" + +#~ msgid "Close" +#~ msgstr "Закрити" + #~ msgid "Enter instructions for AI on how to translate..." #~ msgstr "Введіть інструкції для перекладу ШІ..." diff --git a/buzz/locale/zh_CN/LC_MESSAGES/buzz.po b/buzz/locale/zh_CN/LC_MESSAGES/buzz.po index 0beb6668..a416096c 100644 --- a/buzz/locale/zh_CN/LC_MESSAGES/buzz.po +++ b/buzz/locale/zh_CN/LC_MESSAGES/buzz.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-11 20:21+0200\n" +"POT-Creation-Date: 2025-12-13 10:51+0200\n" "PO-Revision-Date: 2023-05-01 15:45+0800\n" "Last-Translator: \n" "Language-Team: lamb \n" @@ -29,7 +29,7 @@ msgstr "https://example.com/audio.mp3" #: buzz/widgets/preferences_dialog/preferences_dialog.py:69 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:251 #: buzz/widgets/transcriber/advanced_settings_dialog.py:97 -#: buzz/widgets/main_window.py:239 +#: buzz/widgets/main_window.py:226 msgid "Ok" msgstr "Ok" @@ -37,7 +37,7 @@ msgstr "Ok" #: buzz/widgets/preferences_dialog/preferences_dialog.py:70 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:252 #: buzz/widgets/model_download_progress_dialog.py:30 -#: buzz/widgets/main_window.py:240 +#: buzz/widgets/main_window.py:227 msgid "Cancel" msgstr "取消" @@ -150,57 +150,62 @@ msgstr "OpenAI API key" msgid "OpenAI base url" msgstr "OpenAI 基于 url" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:135 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:138 +#, fuzzy +msgid "OpenAI API model" +msgstr "OpenAI API key" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 msgid "Default export file name" msgstr "默认输出文件名" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:141 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:153 msgid "Enable live recording transcription export" msgstr "启用实时录制转录导出" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:159 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "浏览" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:166 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:178 msgid "Export folder" msgstr "导出文件夹" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:177 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:189 #, fuzzy msgid "Live recording mode" msgstr "现场录制模式" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:183 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195 msgid "Use only CPU and disable GPU acceleration" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:186 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198 msgid "Set this if larger models do not fit your GPU memory and Buzz crashes" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:188 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 msgid "Disable GPU" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:213 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 msgid "OpenAI API Key Test" msgstr "测试OpenAI API Key" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." msgstr "您的API密钥有效。Buzz将使用此密钥执行 Whisper API 识别和 AI 翻译。" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:230 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242 msgid "Invalid API key" msgstr "无效的API key" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243 #, fuzzy msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " @@ -208,11 +213,11 @@ msgid "" msgstr "" "API只支持 base64字符(A-Za-z0-9+/=)。其他字符在API密钥中可能导致错误。" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:249 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264 msgid "Select Export Folder" msgstr "选择输出文件夹" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:319 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -313,11 +318,11 @@ msgid "Download failed" msgstr "下载模型失败" #: buzz/widgets/preferences_dialog/models_preferences_widget.py:275 -#: buzz/widgets/transcription_tasks_table_widget.py:665 -#: buzz/widgets/transcription_tasks_table_widget.py:735 -#: buzz/widgets/transcription_tasks_table_widget.py:766 -#: buzz/widgets/main_window.py:296 buzz/model_loader.py:539 -#: buzz/model_loader.py:553 +#: buzz/widgets/transcription_tasks_table_widget.py:704 +#: buzz/widgets/transcription_tasks_table_widget.py:774 +#: buzz/widgets/transcription_tasks_table_widget.py:805 +#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577 +#: buzz/model_loader.py:591 msgid "Error" msgstr "错误" @@ -444,7 +449,7 @@ msgstr "打开识别结果" msgid "Cancel Transcription" msgstr "取消识别" -#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:228 +#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:215 #: buzz/settings/shortcut.py:38 msgid "Clear History" msgstr "清除历史纪录" @@ -498,7 +503,7 @@ msgid "Date Added" msgstr "添加日期" #: buzz/widgets/transcription_tasks_table_widget.py:156 -#: buzz/widgets/transcription_tasks_table_widget.py:624 +#: buzz/widgets/transcription_tasks_table_widget.py:663 msgid "Notes" msgstr "" @@ -506,52 +511,52 @@ msgstr "" msgid "Reset Column Order" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:301 +#: buzz/widgets/transcription_tasks_table_widget.py:304 #, fuzzy msgid "Restart Transcription" msgstr "取消识别" -#: buzz/widgets/transcription_tasks_table_widget.py:305 +#: buzz/widgets/transcription_tasks_table_widget.py:308 msgid "Rename" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:308 +#: buzz/widgets/transcription_tasks_table_widget.py:311 msgid "Add/Edit Notes" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:597 +#: buzz/widgets/transcription_tasks_table_widget.py:636 #, fuzzy msgid "Rename Transcription" msgstr "取消识别" -#: buzz/widgets/transcription_tasks_table_widget.py:598 +#: buzz/widgets/transcription_tasks_table_widget.py:637 msgid "Enter new name:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:625 +#: buzz/widgets/transcription_tasks_table_widget.py:664 msgid "Enter some relevant notes for this transcription:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:652 +#: buzz/widgets/transcription_tasks_table_widget.py:691 msgid "Cannot Restart" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:653 +#: buzz/widgets/transcription_tasks_table_widget.py:692 msgid "Only failed or canceled transcriptions can be restarted." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:666 +#: buzz/widgets/transcription_tasks_table_widget.py:705 #, fuzzy msgid "Failed to restart transcription: {}" msgstr "取消识别" -#: buzz/widgets/transcription_tasks_table_widget.py:736 +#: buzz/widgets/transcription_tasks_table_widget.py:775 msgid "" "Could not restart transcription: model not available and could not be " "downloaded." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:767 +#: buzz/widgets/transcription_tasks_table_widget.py:806 msgid "Could not restart transcription: transcriber worker not found." msgstr "" @@ -698,36 +703,36 @@ msgstr "" msgid "Scroll to the currently spoken text" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892 msgid "1 of 100+ matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 msgid "1 of " msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:903 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900 msgid "No matches found" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973 msgid " of 100+ matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " of " msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1375 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368 msgid "API Key Required" msgstr "需要API Key" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1376 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369 msgid "Please enter OpenAI API Key in preferences" msgstr "请在偏好设置中输入OpenAI API Key" @@ -840,25 +845,6 @@ msgstr "保存文件" msgid "Text files" msgstr "文本文件" -#: buzz/widgets/snap_notice.py:9 -msgid "Snap permission notice" -msgstr "快照权限通知" - -#: buzz/widgets/snap_notice.py:13 -msgid "" -"Detected missing permissions, please check that snap permissions have been " -"granted" -msgstr "检测到缺少权限,请检查是否已获得快照权限" - -#: buzz/widgets/snap_notice.py:16 -msgid "" -"To enable necessary permissions run the following commands in the terminal" -msgstr "要启用必要的权限,请在终端中运行以下命令" - -#: buzz/widgets/snap_notice.py:27 -msgid "Close" -msgstr "关闭" - #: buzz/widgets/model_download_progress_dialog.py:37 #, fuzzy msgid "Downloading model" @@ -894,17 +880,17 @@ msgstr "帮助" msgid "File" msgstr "文件" -#: buzz/widgets/main_window.py:232 +#: buzz/widgets/main_window.py:219 msgid "" "Are you sure you want to delete the selected transcription(s)? This action " "cannot be undone." msgstr "您确定要删除所选录制吗?此操作无法撤消。" -#: buzz/widgets/main_window.py:260 +#: buzz/widgets/main_window.py:247 msgid "Select audio file" msgstr "选择音频文件" -#: buzz/widgets/main_window.py:296 +#: buzz/widgets/main_window.py:283 msgid "Unable to save OpenAI API key to keyring" msgstr "无法将OpenAI API密钥保存到密钥串" @@ -1287,7 +1273,7 @@ msgstr "" msgid "Cantonese" msgstr "" -#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:572 +#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610 msgid "A connection error occurred" msgstr "连接发生错误" @@ -1386,6 +1372,21 @@ msgstr "增加上方" msgid "Append and correct" msgstr "增加并纠正" +#~ msgid "Snap permission notice" +#~ msgstr "快照权限通知" + +#~ msgid "" +#~ "Detected missing permissions, please check that snap permissions have " +#~ "been granted" +#~ msgstr "检测到缺少权限,请检查是否已获得快照权限" + +#~ msgid "" +#~ "To enable necessary permissions run the following commands in the terminal" +#~ msgstr "要启用必要的权限,请在终端中运行以下命令" + +#~ msgid "Close" +#~ msgstr "关闭" + #~ msgid "Enter instructions for AI on how to translate..." #~ msgstr "输入AI如何翻译的说明..." diff --git a/buzz/locale/zh_TW/LC_MESSAGES/buzz.po b/buzz/locale/zh_TW/LC_MESSAGES/buzz.po index 508a94f1..a5a5d39d 100644 --- a/buzz/locale/zh_TW/LC_MESSAGES/buzz.po +++ b/buzz/locale/zh_TW/LC_MESSAGES/buzz.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-11 20:21+0200\n" +"POT-Creation-Date: 2025-12-13 10:51+0200\n" "PO-Revision-Date: 2023-05-01 15:45+0800\n" "Last-Translator: \n" "Language-Team: Lamb\n" @@ -29,7 +29,7 @@ msgstr "" #: buzz/widgets/preferences_dialog/preferences_dialog.py:69 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:251 #: buzz/widgets/transcriber/advanced_settings_dialog.py:97 -#: buzz/widgets/main_window.py:239 +#: buzz/widgets/main_window.py:226 msgid "Ok" msgstr "" @@ -37,7 +37,7 @@ msgstr "" #: buzz/widgets/preferences_dialog/preferences_dialog.py:70 #: buzz/widgets/preferences_dialog/models_preferences_widget.py:252 #: buzz/widgets/model_download_progress_dialog.py:30 -#: buzz/widgets/main_window.py:240 +#: buzz/widgets/main_window.py:227 msgid "Cancel" msgstr "取消" @@ -149,67 +149,72 @@ msgstr "" msgid "OpenAI base url" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:135 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:138 +#, fuzzy +msgid "OpenAI API model" +msgstr "模型:" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 msgid "Default export file name" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:141 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:153 msgid "Enable live recording transcription export" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:147 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:159 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:166 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:178 msgid "Export folder" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:177 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:189 #, fuzzy msgid "Live recording mode" msgstr "現場錄製" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:183 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:195 msgid "Use only CPU and disable GPU acceleration" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:186 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:198 msgid "Set this if larger models do not fit your GPU memory and Buzz crashes" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:188 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 msgid "Disable GPU" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:213 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:225 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 msgid "OpenAI API Key Test" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:214 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:226 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:230 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:242 msgid "Invalid API key" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:231 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243 msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " "API key may cause errors." msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:249 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:264 msgid "Select Export Folder" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:319 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:334 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -308,11 +313,11 @@ msgid "Download failed" msgstr "下載模型" #: buzz/widgets/preferences_dialog/models_preferences_widget.py:275 -#: buzz/widgets/transcription_tasks_table_widget.py:665 -#: buzz/widgets/transcription_tasks_table_widget.py:735 -#: buzz/widgets/transcription_tasks_table_widget.py:766 -#: buzz/widgets/main_window.py:296 buzz/model_loader.py:539 -#: buzz/model_loader.py:553 +#: buzz/widgets/transcription_tasks_table_widget.py:704 +#: buzz/widgets/transcription_tasks_table_widget.py:774 +#: buzz/widgets/transcription_tasks_table_widget.py:805 +#: buzz/widgets/main_window.py:283 buzz/model_loader.py:577 +#: buzz/model_loader.py:591 msgid "Error" msgstr "" @@ -439,7 +444,7 @@ msgstr "打開轉換結果" msgid "Cancel Transcription" msgstr "取消錄製" -#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:228 +#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:215 #: buzz/settings/shortcut.py:38 msgid "Clear History" msgstr "清除歷史紀錄" @@ -493,7 +498,7 @@ msgid "Date Added" msgstr "" #: buzz/widgets/transcription_tasks_table_widget.py:156 -#: buzz/widgets/transcription_tasks_table_widget.py:624 +#: buzz/widgets/transcription_tasks_table_widget.py:663 msgid "Notes" msgstr "" @@ -501,52 +506,52 @@ msgstr "" msgid "Reset Column Order" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:301 +#: buzz/widgets/transcription_tasks_table_widget.py:304 #, fuzzy msgid "Restart Transcription" msgstr "取消錄製" -#: buzz/widgets/transcription_tasks_table_widget.py:305 +#: buzz/widgets/transcription_tasks_table_widget.py:308 msgid "Rename" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:308 +#: buzz/widgets/transcription_tasks_table_widget.py:311 msgid "Add/Edit Notes" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:597 +#: buzz/widgets/transcription_tasks_table_widget.py:636 #, fuzzy msgid "Rename Transcription" msgstr "取消錄製" -#: buzz/widgets/transcription_tasks_table_widget.py:598 +#: buzz/widgets/transcription_tasks_table_widget.py:637 msgid "Enter new name:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:625 +#: buzz/widgets/transcription_tasks_table_widget.py:664 msgid "Enter some relevant notes for this transcription:" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:652 +#: buzz/widgets/transcription_tasks_table_widget.py:691 msgid "Cannot Restart" msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:653 +#: buzz/widgets/transcription_tasks_table_widget.py:692 msgid "Only failed or canceled transcriptions can be restarted." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:666 +#: buzz/widgets/transcription_tasks_table_widget.py:705 #, fuzzy msgid "Failed to restart transcription: {}" msgstr "取消錄製" -#: buzz/widgets/transcription_tasks_table_widget.py:736 +#: buzz/widgets/transcription_tasks_table_widget.py:775 msgid "" "Could not restart transcription: model not available and could not be " "downloaded." msgstr "" -#: buzz/widgets/transcription_tasks_table_widget.py:767 +#: buzz/widgets/transcription_tasks_table_widget.py:806 msgid "Could not restart transcription: transcriber worker not found." msgstr "" @@ -693,36 +698,36 @@ msgstr "" msgid "Scroll to the currently spoken text" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:892 msgid "1 of 100+ matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 msgid "1 of " msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:898 -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:895 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:903 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:900 msgid "No matches found" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:973 msgid " of 100+ matches" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:979 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:976 msgid " of " msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1375 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1368 msgid "API Key Required" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1376 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:1369 msgid "Please enter OpenAI API Key in preferences" msgstr "" @@ -834,25 +839,6 @@ msgstr "檔案" msgid "Text files" msgstr "" -#: buzz/widgets/snap_notice.py:9 -msgid "Snap permission notice" -msgstr "" - -#: buzz/widgets/snap_notice.py:13 -msgid "" -"Detected missing permissions, please check that snap permissions have been " -"granted" -msgstr "" - -#: buzz/widgets/snap_notice.py:16 -msgid "" -"To enable necessary permissions run the following commands in the terminal" -msgstr "" - -#: buzz/widgets/snap_notice.py:27 -msgid "Close" -msgstr "" - #: buzz/widgets/model_download_progress_dialog.py:37 #, fuzzy msgid "Downloading model" @@ -888,17 +874,17 @@ msgstr "幫助" msgid "File" msgstr "檔案" -#: buzz/widgets/main_window.py:232 +#: buzz/widgets/main_window.py:219 msgid "" "Are you sure you want to delete the selected transcription(s)? This action " "cannot be undone." msgstr "您確定要刪除所選錄製嗎?此操作無法撤消。" -#: buzz/widgets/main_window.py:260 +#: buzz/widgets/main_window.py:247 msgid "Select audio file" msgstr "選擇聲音檔案" -#: buzz/widgets/main_window.py:296 +#: buzz/widgets/main_window.py:283 msgid "Unable to save OpenAI API key to keyring" msgstr "" @@ -1281,7 +1267,7 @@ msgstr "" msgid "Cantonese" msgstr "" -#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:572 +#: buzz/transcriber/recording_transcriber.py:224 buzz/model_loader.py:610 msgid "A connection error occurred" msgstr "" diff --git a/buzz/model_loader.py b/buzz/model_loader.py index a89cfe21..24a0a5dc 100644 --- a/buzz/model_loader.py +++ b/buzz/model_loader.py @@ -195,8 +195,10 @@ class TranscriptionModel: def delete_local_file(self): model_path = self.get_local_model_path() - if (self.model_type == ModelType.HUGGING_FACE - or self.model_type == ModelType.FASTER_WHISPER): + if self.model_type in (ModelType.HUGGING_FACE, + ModelType.FASTER_WHISPER): + # Go up two directories to get the huggingface cache root for this model + # Structure: models--repo--name/snapshots/xxx/files model_path = os.path.dirname(os.path.dirname(model_path)) logging.debug("Deleting model directory: %s", model_path) @@ -204,6 +206,32 @@ class TranscriptionModel: shutil.rmtree(model_path, ignore_errors=True) return + if self.model_type == ModelType.WHISPER_CPP: + if self.whisper_model_size == WhisperModelSize.CUSTOM: + # Custom models are stored as a single .bin file directly in model_root_dir + logging.debug("Deleting model file: %s", model_path) + os.remove(model_path) + else: + # Non-custom models are downloaded via huggingface_hub. + # Multiple models share the same repo directory, so we only delete + # the specific model files, not the entire directory. + logging.debug("Deleting model file: %s", model_path) + os.remove(model_path) + + # Also delete CoreML files if they exist (.mlmodelc.zip and extracted directory) + model_dir = os.path.dirname(model_path) + model_name = self.whisper_model_size.to_whisper_cpp_model_size() + coreml_zip = os.path.join(model_dir, f"ggml-{model_name}-encoder.mlmodelc.zip") + coreml_dir = os.path.join(model_dir, f"ggml-{model_name}-encoder.mlmodelc") + + if os.path.exists(coreml_zip): + logging.debug("Deleting CoreML zip: %s", coreml_zip) + os.remove(coreml_zip) + if os.path.exists(coreml_dir): + logging.debug("Deleting CoreML directory: %s", coreml_dir) + shutil.rmtree(coreml_dir, ignore_errors=True) + return + logging.debug("Deleting model file: %s", model_path) os.remove(model_path) @@ -796,10 +824,3 @@ class ModelDownloader(QRunnable): def cancel(self): self.stopped = True - - -def get_custom_api_whisper_model(base_url: str): - if "api.groq.com" in base_url: - return "whisper-large-v3" - - return "whisper-1" diff --git a/buzz/settings/settings.py b/buzz/settings/settings.py index e76868dd..cd8923df 100644 --- a/buzz/settings/settings.py +++ b/buzz/settings/settings.py @@ -39,6 +39,7 @@ class Settings: DEFAULT_EXPORT_FILE_NAME = "transcriber/default-export-file-name" CUSTOM_OPENAI_BASE_URL = "transcriber/custom-openai-base-url" + OPENAI_API_MODEL = "transcriber/openai-api-model" CUSTOM_FASTER_WHISPER_ID = "transcriber/custom-faster-whisper-id" HUGGINGFACE_MODEL_ID = "transcriber/huggingface-model-id" diff --git a/buzz/store/keyring_store.py b/buzz/store/keyring_store.py index 329a264e..0915e018 100644 --- a/buzz/store/keyring_store.py +++ b/buzz/store/keyring_store.py @@ -1,5 +1,10 @@ +import base64 import enum +import hashlib +import json import logging +import os +import sys import keyring @@ -10,7 +15,202 @@ class Key(enum.Enum): OPENAI_API_KEY = "OpenAI API key" +def _is_linux() -> bool: + return sys.platform.startswith("linux") + + +def _get_secrets_file_path() -> str: + """Get the path to the local encrypted secrets file.""" + from platformdirs import user_data_dir + + data_dir = user_data_dir(APP_NAME) + os.makedirs(data_dir, exist_ok=True) + return os.path.join(data_dir, ".secrets.json") + + +def _get_portal_secret() -> bytes | None: + """Get the application secret from XDG Desktop Portal. + + The portal provides a per-application secret that can be used + for encrypting application-specific data. This works in sandboxed + environments (Snap/Flatpak) via the desktop plug. + """ + if not _is_linux(): + return None + + try: + from jeepney import DBusAddress, new_method_call + from jeepney.io.blocking import open_dbus_connection + import socket + + # Open connection with file descriptor support enabled + conn = open_dbus_connection(bus="SESSION", enable_fds=True) + + portal = DBusAddress( + "/org/freedesktop/portal/desktop", + bus_name="org.freedesktop.portal.Desktop", + interface="org.freedesktop.portal.Secret", + ) + + # Create a socket pair for receiving the secret + sock_read, sock_write = socket.socketpair(socket.AF_UNIX, socket.SOCK_STREAM) + + try: + # Build the method call with file descriptor + # RetrieveSecret(fd: h, options: a{sv}) -> (handle: o) + # Pass the socket object directly - jeepney handles fd passing + msg = new_method_call(portal, "RetrieveSecret", "ha{sv}", (sock_write, {})) + + # Send message and get reply + conn.send_and_get_reply(msg, timeout=10) + + # Close the write end - portal has it now + sock_write.close() + sock_write = None + + # Read the secret from the read end + # The portal writes the secret and closes its end + sock_read.settimeout(5.0) + secret_data = b"" + while True: + try: + chunk = sock_read.recv(4096) + if not chunk: + break + secret_data += chunk + except socket.timeout: + break + + if secret_data: + logging.debug( + "Successfully retrieved portal secret (%d bytes)", len(secret_data) + ) + return secret_data + + return None + + finally: + sock_read.close() + if sock_write is not None: + sock_write.close() + + except Exception as exc: + logging.debug("XDG Portal secret not available: %s", exc) + return None + + +def _derive_key(master_secret: bytes, key_name: str) -> bytes: + """Derive a key-specific encryption key from the master secret.""" + # Use PBKDF2 to derive a key for this specific secret + return hashlib.pbkdf2_hmac( + "sha256", + master_secret, + f"{APP_NAME}:{key_name}".encode(), + 100000, + dklen=32, + ) + + +def _encrypt_value(value: str, key: bytes) -> str: + """Encrypt a value using XOR with the derived key (simple encryption).""" + # For a more secure implementation, use cryptography library with AES + # This is a simple XOR-based encryption suitable for the use case + value_bytes = value.encode("utf-8") + key_extended = (key * ((len(value_bytes) // len(key)) + 1))[: len(value_bytes)] + encrypted = bytes(a ^ b for a, b in zip(value_bytes, key_extended)) + return base64.b64encode(encrypted).decode("ascii") + + +def _decrypt_value(encrypted: str, key: bytes) -> str: + """Decrypt a value using XOR with the derived key.""" + encrypted_bytes = base64.b64decode(encrypted.encode("ascii")) + key_extended = (key * ((len(encrypted_bytes) // len(key)) + 1))[: len(encrypted_bytes)] + decrypted = bytes(a ^ b for a, b in zip(encrypted_bytes, key_extended)) + return decrypted.decode("utf-8") + + +def _load_local_secrets() -> dict: + """Load the local secrets file.""" + secrets_file = _get_secrets_file_path() + if os.path.exists(secrets_file): + try: + with open(secrets_file, "r") as f: + return json.load(f) + except (json.JSONDecodeError, IOError) as exc: + logging.debug("Failed to load secrets file: %s", exc) + return {} + + +def _save_local_secrets(secrets: dict) -> None: + """Save secrets to the local file.""" + secrets_file = _get_secrets_file_path() + try: + with open(secrets_file, "w") as f: + json.dump(secrets, f) + # Set restrictive permissions + os.chmod(secrets_file, 0o600) + except IOError as exc: + logging.warning("Failed to save secrets file: %s", exc) + + +def _get_portal_password(key: Key) -> str | None: + """Get a password using the XDG Desktop Portal Secret.""" + portal_secret = _get_portal_secret() + if portal_secret is None: + return None + + secrets = _load_local_secrets() + encrypted_value = secrets.get(key.value) + if encrypted_value is None: + return None + + try: + derived_key = _derive_key(portal_secret, key.value) + return _decrypt_value(encrypted_value, derived_key) + except Exception as exc: + logging.debug("Failed to decrypt portal secret: %s", exc) + return None + + +def _set_portal_password(key: Key, password: str) -> bool: + """Set a password using the XDG Desktop Portal Secret.""" + portal_secret = _get_portal_secret() + if portal_secret is None: + return False + + try: + derived_key = _derive_key(portal_secret, key.value) + encrypted_value = _encrypt_value(password, derived_key) + + secrets = _load_local_secrets() + secrets[key.value] = encrypted_value + _save_local_secrets(secrets) + return True + except Exception as exc: + logging.debug("Failed to set portal secret: %s", exc) + return False + + +def _delete_portal_password(key: Key) -> bool: + """Delete a password from the portal-based local storage.""" + secrets = _load_local_secrets() + if key.value in secrets: + del secrets[key.value] + _save_local_secrets(secrets) + return True + return False + + def get_password(key: Key) -> str | None: + # On Linux, try XDG Desktop Portal first (works in sandboxed environments) + if _is_linux(): + result = _get_portal_password(key) + + + if result is not None: + return result + + # Fall back to keyring (cross-platform, uses Secret Service on Linux) try: password = keyring.get_password(APP_NAME, username=key.value) if password is None: @@ -22,4 +222,25 @@ def get_password(key: Key) -> str | None: def set_password(username: Key, password: str) -> None: + # On Linux, try XDG Desktop Portal first (works in sandboxed environments) + if _is_linux(): + if _set_portal_password(username, password): + return + + # Fall back to keyring (cross-platform, uses Secret Service on Linux) keyring.set_password(APP_NAME, username.value, password) + + +def delete_password(key: Key) -> None: + """Delete a password from the secret store.""" + # On Linux, also delete from portal storage + if _is_linux(): + _delete_portal_password(key) + + # Delete from keyring + try: + keyring.delete_password(APP_NAME, key.value) + except keyring.errors.PasswordDeleteError: + pass # Password doesn't exist, ignore + except Exception as exc: + logging.warning("Unable to delete from keyring: %s", exc) diff --git a/buzz/transcriber/openai_whisper_api_file_transcriber.py b/buzz/transcriber/openai_whisper_api_file_transcriber.py index b2f02898..0413f7e4 100644 --- a/buzz/transcriber/openai_whisper_api_file_transcriber.py +++ b/buzz/transcriber/openai_whisper_api_file_transcriber.py @@ -12,7 +12,6 @@ from PyQt6.QtCore import QObject from openai import OpenAI from buzz.settings.settings import Settings -from buzz.model_loader import get_custom_api_whisper_model from buzz.transcriber.file_transcriber import FileTranscriber, app_env from buzz.transcriber.transcriber import FileTranscriptionTask, Segment, Task @@ -49,7 +48,9 @@ class OpenAIWhisperAPIFileTranscriber(FileTranscriber): base_url=custom_openai_base_url if custom_openai_base_url else None, max_retries=0 ) - self.whisper_api_model = get_custom_api_whisper_model(custom_openai_base_url) + self.whisper_api_model = settings.value( + key=Settings.Key.OPENAI_API_MODEL, default_value="whisper-1" + ) self.word_level_timings = self.transcription_task.transcription_options.word_level_timings logging.debug("Will use whisper API on %s, %s", custom_openai_base_url, self.whisper_api_model) diff --git a/buzz/transcriber/recording_transcriber.py b/buzz/transcriber/recording_transcriber.py index 7867e50e..6800f006 100644 --- a/buzz/transcriber/recording_transcriber.py +++ b/buzz/transcriber/recording_transcriber.py @@ -21,10 +21,9 @@ from PyQt6.QtCore import QObject, pyqtSignal from buzz import whisper_audio from buzz.locale import _ from buzz.assets import APP_BASE_DIR -from buzz.model_loader import ModelType, get_custom_api_whisper_model +from buzz.model_loader import ModelType from buzz.settings.settings import Settings from buzz.transcriber.transcriber import TranscriptionOptions, Task -from buzz.transcriber.file_transcriber import app_env from buzz.transformers_whisper import TransformersWhisper from buzz.settings.recording_transcriber_mode import RecordingTranscriberMode @@ -68,7 +67,9 @@ class RecordingTranscriber(QObject): self.mutex = threading.Lock() self.sounddevice = sounddevice self.openai_client = None - self.whisper_api_model = get_custom_api_whisper_model("") + self.whisper_api_model = self.settings.value( + key=Settings.Key.OPENAI_API_MODEL, default_value="whisper-1" + ) self.process = None def start(self): @@ -123,7 +124,6 @@ class RecordingTranscriber(QObject): custom_openai_base_url = self.settings.value( key=Settings.Key.CUSTOM_OPENAI_BASE_URL, default_value="" ) - self.whisper_api_model = get_custom_api_whisper_model(custom_openai_base_url) self.openai_client = OpenAI( api_key=self.transcription_options.openai_access_token, base_url=custom_openai_base_url if custom_openai_base_url else None, diff --git a/buzz/widgets/main_window.py b/buzz/widgets/main_window.py index 384c8c71..4ddaf990 100644 --- a/buzz/widgets/main_window.py +++ b/buzz/widgets/main_window.py @@ -38,7 +38,6 @@ from buzz.widgets.icon import BUZZ_ICON_PATH from buzz.widgets.import_url_dialog import ImportURLDialog from buzz.widgets.main_window_toolbar import MainWindowToolbar from buzz.widgets.menu_bar import MenuBar -from buzz.widgets.snap_notice import SnapNotice from buzz.widgets.preferences_dialog.models.preferences import Preferences from buzz.widgets.transcriber.file_transcriber_widget import FileTranscriberWidget from buzz.widgets.transcription_task_folder_watcher import ( @@ -154,19 +153,6 @@ class MainWindow(QMainWindow): self.transcription_viewer_widget = None - # TODO Move this to the first user interaction with OpenAI api Key field - # that is the only place that needs access to password manager service - if os.environ.get('SNAP_NAME', '') == 'buzz': - logging.debug("Running in a snap environment") - self.check_linux_permissions() - - def check_linux_permissions(self): - try: - _ = keyring.get_password(APP_NAME, username="random") - except Exception: - snap_notice = SnapNotice(self) - snap_notice.show() - def on_preferences_changed(self, preferences: Preferences): self.preferences = preferences self.save_preferences(preferences) diff --git a/buzz/widgets/preferences_dialog/general_preferences_widget.py b/buzz/widgets/preferences_dialog/general_preferences_widget.py index b7bdfc74..8f29f5de 100644 --- a/buzz/widgets/preferences_dialog/general_preferences_widget.py +++ b/buzz/widgets/preferences_dialog/general_preferences_widget.py @@ -125,6 +125,18 @@ class GeneralPreferencesWidget(QWidget): self.custom_openai_base_url_line_edit.setPlaceholderText("https://api.openai.com/v1") layout.addRow(_("OpenAI base url"), self.custom_openai_base_url_line_edit) + self.openai_api_model = self.settings.value( + key=Settings.Key.OPENAI_API_MODEL, default_value="whisper-1" + ) + + self.openai_api_model_line_edit = LineEdit(self.openai_api_model, self) + self.openai_api_model_line_edit.textChanged.connect( + self.on_openai_api_model_changed + ) + self.openai_api_model_line_edit.setMinimumWidth(200) + self.openai_api_model_line_edit.setPlaceholderText("whisper-1") + layout.addRow(_("OpenAI API model"), self.openai_api_model_line_edit) + default_export_file_name = self.settings.get_default_export_file_template() default_export_file_name_line_edit = LineEdit(default_export_file_name, self) @@ -234,6 +246,9 @@ class GeneralPreferencesWidget(QWidget): def on_custom_openai_base_url_changed(self, text: str): self.settings.set_value(Settings.Key.CUSTOM_OPENAI_BASE_URL, text) + def on_openai_api_model_changed(self, text: str): + self.settings.set_value(Settings.Key.OPENAI_API_MODEL, text) + def on_recording_export_enable_changed(self, state: int): self.recording_export_enabled = state == 2 diff --git a/buzz/widgets/snap_notice.py b/buzz/widgets/snap_notice.py deleted file mode 100644 index ea9dc5c9..00000000 --- a/buzz/widgets/snap_notice.py +++ /dev/null @@ -1,29 +0,0 @@ -from PyQt6.QtWidgets import QDialog, QVBoxLayout, QTextEdit, QLabel, QPushButton -from buzz.locale import _ - - -class SnapNotice(QDialog): - def __init__(self, parent=None): - super().__init__(parent) - - self.setWindowTitle(_("Snap permission notice")) - - self.layout = QVBoxLayout(self) - - self.notice_label = QLabel(_("Detected missing permissions, please check that snap permissions have been granted")) - self.layout.addWidget(self.notice_label) - - self.instruction_label = QLabel(_("To enable necessary permissions run the following commands in the terminal")) - self.layout.addWidget(self.instruction_label) - - self.text_edit = QTextEdit(self) - self.text_edit.setPlainText( - "sudo snap connect buzz:password-manager-service\n" - ) - self.text_edit.setReadOnly(True) - self.text_edit.setFixedHeight(80) - self.layout.addWidget(self.text_edit) - - self.button = QPushButton(_("Close"), self) - self.button.clicked.connect(self.close) - self.layout.addWidget(self.button) \ No newline at end of file diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 47b96448..abb6a7cd 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -75,6 +75,7 @@ parts: - python3 - libgcc-s1 - libc6 + - libproxy1v5 # Audio - ffmpeg - libportaudio2 @@ -170,6 +171,7 @@ apps: - removable-media - audio-playback - audio-record + # Fallback for keyring support if secrets portal is missing, user has to connect this manually - password-manager-service layout: diff --git a/tests/store/__init__.py b/tests/store/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/store/keyring_store_test.py b/tests/store/keyring_store_test.py new file mode 100644 index 00000000..8486940f --- /dev/null +++ b/tests/store/keyring_store_test.py @@ -0,0 +1,457 @@ +import json +import os +import sys +import tempfile +from unittest.mock import Mock, patch, MagicMock + +import pytest + +from buzz.store.keyring_store import ( + Key, + _is_linux, + _derive_key, + _encrypt_value, + _decrypt_value, + _load_local_secrets, + _save_local_secrets, + _get_portal_password, + _set_portal_password, + _delete_portal_password, + get_password, + set_password, + delete_password, +) +from buzz.settings.settings import APP_NAME + + +class TestKey: + def test_openai_api_key_exists(self): + assert hasattr(Key, "OPENAI_API_KEY") + + def test_openai_api_key_value(self): + assert Key.OPENAI_API_KEY.value == "OpenAI API key" + + def test_key_is_enum(self): + assert isinstance(Key.OPENAI_API_KEY, Key) + + +class TestIsLinux: + @patch("buzz.store.keyring_store.sys.platform", "linux") + def test_returns_true_on_linux(self): + assert _is_linux() is True + + @patch("buzz.store.keyring_store.sys.platform", "linux2") + def test_returns_true_on_linux2(self): + assert _is_linux() is True + + @patch("buzz.store.keyring_store.sys.platform", "darwin") + def test_returns_false_on_macos(self): + assert _is_linux() is False + + @patch("buzz.store.keyring_store.sys.platform", "win32") + def test_returns_false_on_windows(self): + assert _is_linux() is False + + +class TestDeriveKey: + def test_derive_key_returns_32_bytes(self): + master_secret = b"test_secret" + key_name = "test_key" + derived = _derive_key(master_secret, key_name) + assert len(derived) == 32 + + def test_derive_key_is_deterministic(self): + master_secret = b"test_secret" + key_name = "test_key" + derived1 = _derive_key(master_secret, key_name) + derived2 = _derive_key(master_secret, key_name) + assert derived1 == derived2 + + def test_derive_key_different_for_different_names(self): + master_secret = b"test_secret" + derived1 = _derive_key(master_secret, "key1") + derived2 = _derive_key(master_secret, "key2") + assert derived1 != derived2 + + def test_derive_key_different_for_different_secrets(self): + key_name = "test_key" + derived1 = _derive_key(b"secret1", key_name) + derived2 = _derive_key(b"secret2", key_name) + assert derived1 != derived2 + + +class TestEncryptDecrypt: + def test_encrypt_decrypt_roundtrip(self): + key = b"0123456789abcdef0123456789abcdef" # 32 bytes + original = "test_password_123" + encrypted = _encrypt_value(original, key) + decrypted = _decrypt_value(encrypted, key) + assert decrypted == original + + def test_encrypt_decrypt_empty_string(self): + key = b"0123456789abcdef0123456789abcdef" + original = "" + encrypted = _encrypt_value(original, key) + decrypted = _decrypt_value(encrypted, key) + assert decrypted == original + + def test_encrypt_decrypt_unicode(self): + key = b"0123456789abcdef0123456789abcdef" + original = "test_password_\u4e2d\u6587_\U0001f600" + encrypted = _encrypt_value(original, key) + decrypted = _decrypt_value(encrypted, key) + assert decrypted == original + + def test_encrypt_decrypt_long_string(self): + key = b"0123456789abcdef0123456789abcdef" + original = "a" * 1000 + encrypted = _encrypt_value(original, key) + decrypted = _decrypt_value(encrypted, key) + assert decrypted == original + + def test_encrypted_is_base64(self): + key = b"0123456789abcdef0123456789abcdef" + original = "test" + encrypted = _encrypt_value(original, key) + # Should be valid base64 + import base64 + base64.b64decode(encrypted) # Should not raise + + def test_different_keys_produce_different_ciphertext(self): + key1 = b"0123456789abcdef0123456789abcdef" + key2 = b"fedcba9876543210fedcba9876543210" + original = "test_password" + encrypted1 = _encrypt_value(original, key1) + encrypted2 = _encrypt_value(original, key2) + assert encrypted1 != encrypted2 + + +class TestLocalSecrets: + def test_load_empty_file(self): + with tempfile.TemporaryDirectory() as tmpdir: + with patch( + "buzz.store.keyring_store._get_secrets_file_path", + return_value=os.path.join(tmpdir, ".secrets.json"), + ): + result = _load_local_secrets() + assert result == {} + + def test_save_and_load_secrets(self): + with tempfile.TemporaryDirectory() as tmpdir: + secrets_path = os.path.join(tmpdir, ".secrets.json") + with patch( + "buzz.store.keyring_store._get_secrets_file_path", + return_value=secrets_path, + ): + test_secrets = {"key1": "value1", "key2": "value2"} + _save_local_secrets(test_secrets) + loaded = _load_local_secrets() + assert loaded == test_secrets + + @pytest.mark.skipif(sys.platform == "win32", reason="Unix file permissions not applicable on Windows") + def test_save_sets_restrictive_permissions(self): + with tempfile.TemporaryDirectory() as tmpdir: + secrets_path = os.path.join(tmpdir, ".secrets.json") + with patch( + "buzz.store.keyring_store._get_secrets_file_path", + return_value=secrets_path, + ): + _save_local_secrets({"key": "value"}) + # Check file permissions (0o600 = owner read/write only) + mode = os.stat(secrets_path).st_mode & 0o777 + assert mode == 0o600 + + def test_load_handles_corrupted_json(self): + with tempfile.TemporaryDirectory() as tmpdir: + secrets_path = os.path.join(tmpdir, ".secrets.json") + with open(secrets_path, "w") as f: + f.write("not valid json {{{") + with patch( + "buzz.store.keyring_store._get_secrets_file_path", + return_value=secrets_path, + ): + result = _load_local_secrets() + assert result == {} + + +class TestPortalPassword: + @patch("buzz.store.keyring_store._get_portal_secret") + @patch("buzz.store.keyring_store._load_local_secrets") + def test_get_portal_password_returns_none_when_no_portal( + self, mock_load, mock_portal + ): + mock_portal.return_value = None + result = _get_portal_password(Key.OPENAI_API_KEY) + assert result is None + + @patch("buzz.store.keyring_store._get_portal_secret") + @patch("buzz.store.keyring_store._load_local_secrets") + def test_get_portal_password_returns_none_when_key_not_found( + self, mock_load, mock_portal + ): + mock_portal.return_value = b"test_secret_64_bytes_" + b"x" * 43 + mock_load.return_value = {} + result = _get_portal_password(Key.OPENAI_API_KEY) + assert result is None + + @patch("buzz.store.keyring_store._get_portal_secret") + @patch("buzz.store.keyring_store._load_local_secrets") + def test_get_portal_password_decrypts_stored_value(self, mock_load, mock_portal): + portal_secret = b"test_secret_64_bytes_" + b"x" * 43 + mock_portal.return_value = portal_secret + + # Pre-encrypt a value + derived_key = _derive_key(portal_secret, Key.OPENAI_API_KEY.value) + encrypted = _encrypt_value("my_api_key", derived_key) + + mock_load.return_value = {Key.OPENAI_API_KEY.value: encrypted} + + result = _get_portal_password(Key.OPENAI_API_KEY) + assert result == "my_api_key" + + @patch("buzz.store.keyring_store._get_portal_secret") + def test_set_portal_password_returns_false_when_no_portal(self, mock_portal): + mock_portal.return_value = None + result = _set_portal_password(Key.OPENAI_API_KEY, "test_password") + assert result is False + + @patch("buzz.store.keyring_store._get_portal_secret") + @patch("buzz.store.keyring_store._load_local_secrets") + @patch("buzz.store.keyring_store._save_local_secrets") + def test_set_portal_password_encrypts_and_saves( + self, mock_save, mock_load, mock_portal + ): + portal_secret = b"test_secret_64_bytes_" + b"x" * 43 + mock_portal.return_value = portal_secret + mock_load.return_value = {} + + result = _set_portal_password(Key.OPENAI_API_KEY, "test_password") + + assert result is True + mock_save.assert_called_once() + saved_secrets = mock_save.call_args[0][0] + assert Key.OPENAI_API_KEY.value in saved_secrets + + # Verify the saved value can be decrypted + derived_key = _derive_key(portal_secret, Key.OPENAI_API_KEY.value) + decrypted = _decrypt_value(saved_secrets[Key.OPENAI_API_KEY.value], derived_key) + assert decrypted == "test_password" + + +class TestDeletePortalPassword: + @patch("buzz.store.keyring_store._load_local_secrets") + @patch("buzz.store.keyring_store._save_local_secrets") + def test_delete_existing_key(self, mock_save, mock_load): + mock_load.return_value = {Key.OPENAI_API_KEY.value: "encrypted_value"} + + result = _delete_portal_password(Key.OPENAI_API_KEY) + + assert result is True + mock_save.assert_called_once() + saved_secrets = mock_save.call_args[0][0] + assert Key.OPENAI_API_KEY.value not in saved_secrets + + @patch("buzz.store.keyring_store._load_local_secrets") + @patch("buzz.store.keyring_store._save_local_secrets") + def test_delete_nonexistent_key(self, mock_save, mock_load): + mock_load.return_value = {} + + result = _delete_portal_password(Key.OPENAI_API_KEY) + + assert result is False + mock_save.assert_not_called() + + +class TestGetPassword: + @patch("buzz.store.keyring_store._is_linux") + @patch("buzz.store.keyring_store._get_portal_password") + @patch("buzz.store.keyring_store.keyring") + def test_returns_portal_password_on_linux( + self, mock_keyring, mock_portal, mock_is_linux + ): + mock_is_linux.return_value = True + mock_portal.return_value = "portal_password" + + result = get_password(Key.OPENAI_API_KEY) + + assert result == "portal_password" + mock_keyring.get_password.assert_not_called() + + @patch("buzz.store.keyring_store._is_linux") + @patch("buzz.store.keyring_store._get_portal_password") + @patch("buzz.store.keyring_store.keyring") + def test_falls_back_to_keyring_when_portal_returns_none( + self, mock_keyring, mock_portal, mock_is_linux + ): + mock_is_linux.return_value = True + mock_portal.return_value = None + mock_keyring.get_password.return_value = "keyring_password" + + result = get_password(Key.OPENAI_API_KEY) + + assert result == "keyring_password" + mock_keyring.get_password.assert_called_once_with( + APP_NAME, username=Key.OPENAI_API_KEY.value + ) + + @patch("buzz.store.keyring_store._is_linux") + @patch("buzz.store.keyring_store.keyring") + def test_uses_keyring_directly_on_non_linux(self, mock_keyring, mock_is_linux): + mock_is_linux.return_value = False + mock_keyring.get_password.return_value = "keyring_password" + + result = get_password(Key.OPENAI_API_KEY) + + assert result == "keyring_password" + + @patch("buzz.store.keyring_store._is_linux") + @patch("buzz.store.keyring_store.keyring") + def test_returns_empty_string_when_keyring_returns_none( + self, mock_keyring, mock_is_linux + ): + mock_is_linux.return_value = False + mock_keyring.get_password.return_value = None + + result = get_password(Key.OPENAI_API_KEY) + + assert result == "" + + @patch("buzz.store.keyring_store._is_linux") + @patch("buzz.store.keyring_store.keyring") + def test_returns_empty_string_on_keyring_exception( + self, mock_keyring, mock_is_linux + ): + mock_is_linux.return_value = False + mock_keyring.get_password.side_effect = Exception("Keyring error") + + result = get_password(Key.OPENAI_API_KEY) + + assert result == "" + + +class TestSetPassword: + @patch("buzz.store.keyring_store._is_linux") + @patch("buzz.store.keyring_store._set_portal_password") + @patch("buzz.store.keyring_store.keyring") + def test_uses_portal_on_linux_when_successful( + self, mock_keyring, mock_portal, mock_is_linux + ): + mock_is_linux.return_value = True + mock_portal.return_value = True + + set_password(Key.OPENAI_API_KEY, "test_password") + + mock_portal.assert_called_once_with(Key.OPENAI_API_KEY, "test_password") + mock_keyring.set_password.assert_not_called() + + @patch("buzz.store.keyring_store._is_linux") + @patch("buzz.store.keyring_store._set_portal_password") + @patch("buzz.store.keyring_store.keyring") + def test_falls_back_to_keyring_when_portal_fails( + self, mock_keyring, mock_portal, mock_is_linux + ): + mock_is_linux.return_value = True + mock_portal.return_value = False + + set_password(Key.OPENAI_API_KEY, "test_password") + + mock_keyring.set_password.assert_called_once_with( + APP_NAME, Key.OPENAI_API_KEY.value, "test_password" + ) + + @patch("buzz.store.keyring_store._is_linux") + @patch("buzz.store.keyring_store.keyring") + def test_uses_keyring_directly_on_non_linux(self, mock_keyring, mock_is_linux): + mock_is_linux.return_value = False + + set_password(Key.OPENAI_API_KEY, "test_password") + + mock_keyring.set_password.assert_called_once_with( + APP_NAME, Key.OPENAI_API_KEY.value, "test_password" + ) + + +class TestDeletePassword: + @patch("buzz.store.keyring_store._is_linux") + @patch("buzz.store.keyring_store._delete_portal_password") + @patch("buzz.store.keyring_store.keyring") + def test_deletes_from_both_on_linux( + self, mock_keyring, mock_delete_portal, mock_is_linux + ): + mock_is_linux.return_value = True + mock_delete_portal.return_value = True + + delete_password(Key.OPENAI_API_KEY) + + mock_delete_portal.assert_called_once_with(Key.OPENAI_API_KEY) + mock_keyring.delete_password.assert_called_once_with( + APP_NAME, Key.OPENAI_API_KEY.value + ) + + @patch("buzz.store.keyring_store._is_linux") + @patch("buzz.store.keyring_store.keyring") + def test_deletes_from_keyring_only_on_non_linux(self, mock_keyring, mock_is_linux): + mock_is_linux.return_value = False + + delete_password(Key.OPENAI_API_KEY) + + mock_keyring.delete_password.assert_called_once_with( + APP_NAME, Key.OPENAI_API_KEY.value + ) + + @patch("buzz.store.keyring_store._is_linux") + @patch("buzz.store.keyring_store.keyring") + def test_ignores_password_delete_error(self, mock_keyring, mock_is_linux): + mock_is_linux.return_value = False + mock_keyring.errors.PasswordDeleteError = Exception + mock_keyring.delete_password.side_effect = ( + mock_keyring.errors.PasswordDeleteError("Not found") + ) + + # Should not raise + delete_password(Key.OPENAI_API_KEY) + + @patch("buzz.store.keyring_store._is_linux") + @patch("buzz.store.keyring_store.keyring") + def test_handles_other_keyring_exceptions(self, mock_keyring, mock_is_linux): + mock_is_linux.return_value = False + mock_keyring.errors.PasswordDeleteError = KeyError # Different exception type + mock_keyring.delete_password.side_effect = RuntimeError("Some other error") + + # Should not raise + delete_password(Key.OPENAI_API_KEY) + + +class TestIntegration: + """Integration tests that test the full flow with mocked portal.""" + + @patch("buzz.store.keyring_store._get_portal_secret") + def test_full_roundtrip_with_portal(self, mock_portal): + """Test set -> get -> delete flow with portal.""" + portal_secret = b"integration_test_secret_" + b"y" * 40 + + with tempfile.TemporaryDirectory() as tmpdir: + secrets_path = os.path.join(tmpdir, ".secrets.json") + + with patch( + "buzz.store.keyring_store._get_secrets_file_path", + return_value=secrets_path, + ): + with patch("buzz.store.keyring_store._is_linux", return_value=True): + mock_portal.return_value = portal_secret + + # Set password + result = _set_portal_password(Key.OPENAI_API_KEY, "my_secret_key") + assert result is True + + # Get password + retrieved = _get_portal_password(Key.OPENAI_API_KEY) + assert retrieved == "my_secret_key" + + # Delete password + deleted = _delete_portal_password(Key.OPENAI_API_KEY) + assert deleted is True + + # Verify it's gone + retrieved_after_delete = _get_portal_password(Key.OPENAI_API_KEY) + assert retrieved_after_delete is None diff --git a/tests/widgets/main_window_test.py b/tests/widgets/main_window_test.py index 5bbb194a..3fc7b39e 100644 --- a/tests/widgets/main_window_test.py +++ b/tests/widgets/main_window_test.py @@ -19,7 +19,6 @@ from buzz.locale import _ from buzz.db.entity.transcription import Transcription from buzz.db.service.transcription_service import TranscriptionService from buzz.widgets.main_window import MainWindow -from buzz.widgets.snap_notice import SnapNotice from buzz.widgets.transcriber.file_transcriber_widget import FileTranscriberWidget mock_transcriptions: List[Transcription] = [ @@ -342,12 +341,3 @@ class TestMainWindow: def _get_toolbar_action(window: MainWindow, text: str): toolbar: QToolBar = window.findChild(QToolBar) return [action for action in toolbar.actions() if action.text() == text][0] - - def test_snap_notice_dialog(self, qtbot: QtBot): - snap_notice = SnapNotice() - snap_notice.show() - - qtbot.wait_until(lambda: snap_notice.isVisible(), timeout=1000) - - snap_notice.close() - assert not snap_notice.isVisible()