1518 add already transcribed detection (#1528)

This commit is contained in:
Raivis Dejus 2026-06-27 17:48:30 +03:00 • committed by GitHub
parent 570e03510d
commit 6139e36d5b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
46 changed files with 1691 additions and 476 deletions

View file

@ -82,6 +82,8 @@ def main():
logging.getLogger("nemo_logger").setLevel(logging.ERROR)
logging.getLogger("nemo_logging").setLevel(logging.ERROR)
logging.getLogger("numba").setLevel(logging.WARNING)
logging.getLogger("ssa").setLevel(logging.WARNING)
logging.getLogger("byteflow").setLevel(logging.WARNING)
logging.getLogger("torio._extension.utils").setLevel(logging.WARNING)
logging.getLogger("export_config_manager").setLevel(logging.WARNING)
logging.getLogger("training_telemetry_provider").setLevel(logging.ERROR)

View file

@ -317,6 +317,39 @@ class TranscriptionDAO(DAO[Transcription]):
if query.numRowsAffected() == 0:
raise Exception("Transcription not found")
def update_transcription_as_skipped(self, id: UUID):
query = self._create_query()
query.prepare(
"""
UPDATE transcription
SET status = :status, time_ended = :time_ended
WHERE id = :id
"""
)
query.bindValue(":id", str(id))
query.bindValue(":status", FileTranscriptionTask.Status.SKIPPED.value)
query.bindValue(":time_ended", datetime.now().isoformat())
if not query.exec():
raise Exception(query.lastError().text())
def find_completed_transcription_by_filename(self, filename: str):
query = self._create_query()
query.prepare(
"""
SELECT id FROM transcription
WHERE (file LIKE :pattern OR file = :exact) AND status = 'completed'
ORDER BY time_ended DESC LIMIT 1
"""
)
query.bindValue(":pattern", f"%/{filename}")
query.bindValue(":exact", filename)
if not query.exec():
raise Exception(query.lastError().text())
if query.next():
return query.value("id")
return None
def reset_transcription_for_restart(self, id: UUID):
"""Reset a transcription to queued status for restart"""
query = self._create_query()

View file

@ -59,6 +59,22 @@ class TranscriptionService:
def update_transcription_language(self, id: UUID, language: str):
self.transcription_dao.update_transcription_language(id, language)
def update_transcription_as_skipped(self, id: UUID, segments: List[Segment]):
self.transcription_dao.update_transcription_as_skipped(id)
for segment in segments:
self.transcription_segment_dao.insert(
TranscriptionSegment(
start_time=segment.start,
end_time=segment.end,
text=segment.text,
translation='',
transcription_id=str(id),
)
)
def find_completed_transcription_by_filename(self, filename: str):
return self.transcription_dao.find_completed_transcription_by_filename(filename)
def reset_transcription_for_restart(self, id: UUID):
self.transcription_dao.reset_transcription_for_restart(id)

View file

@ -149,7 +149,8 @@ class FileTranscriberQueueWorker(QObject):
self.is_running = False
return
self._run_plugins()
if not self._run_plugins():
return
logging.debug("Starting next transcription task")
self.task_progress.emit(self.current_task, 0)
@ -199,13 +200,29 @@ class FileTranscriberQueueWorker(QObject):
return status
def _run_plugins(self):
def _run_plugins(self) -> bool:
"""Run before_transcription and check_skip hooks.
Returns False if a plugin signaled that the task should be skipped,
True to continue with normal transcription.
"""
if self.plugin_manager is not None:
try:
self.plugin_manager.run_before_transcription(self.current_task)
except Exception as e:
logging.error(f"Plugin before_transcription failed: {e}", exc_info=True)
should_skip, skip_segments = self.plugin_manager.run_check_skip(self.current_task)
if should_skip:
logging.debug("Skipping transcription task (plugin signaled skip)")
self.current_task.status = FileTranscriptionTask.Status.SKIPPED
self.on_task_completed(skip_segments)
self.is_running = False
self._on_task_finished()
return False
return True
def _create_transcriber(self):
model_type = self.current_task.transcription_options.model.model_type
if model_type == ModelType.OPEN_AI_WHISPER_API:

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: buzz\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-06-14 16:54+0300\n"
"POT-Creation-Date: 2026-06-27 15:05+0300\n"
"PO-Revision-Date: 2025-10-17 07:59+0200\n"
"Last-Translator: Éric Duarte <contacto@ericdq.com>\n"
"Language-Team: Catalan <jmas@softcatala.org>\n"
@ -193,8 +193,8 @@ msgid ""
"Note: Live recording export settings will be moved to the Advanced Settings "
"in the Live Recording screen in a future version."
msgstr ""
"Nota: La configuració d'exportació d'enregistrament en directe es mourà a la"
" Configuració avançada a la pantalla d'enregistrament en directe en una "
"Nota: La configuració d'exportació d'enregistrament en directe es mourà a la "
"Configuració avançada a la pantalla d'enregistrament en directe en una "
"versió futura."
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
@ -206,8 +206,8 @@ msgid ""
"Applies to Huggingface and Faster Whisper models. Reduces GPU memory usage "
"but may slightly decrease transcription quality."
msgstr ""
"S'aplica als models Huggingface i Faster Whisper. Redueix l'ús de memòria de"
" la GPU, però pot reduir lleugerament la qualitat de la transcripció."
"S'aplica als models Huggingface i Faster Whisper. Redueix l'ús de memòria de "
"la GPU, però pot reduir lleugerament la qualitat de la transcripció."
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
msgid "Reduce GPU RAM"
@ -219,7 +219,7 @@ msgstr "Utilitza només la CPU i desactiveu l'acceleració de la GPU"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
msgstr "Establiu-ho si els models més grans no caben a la memòria de la GPU i Buzz falla"
"Establiu això si els models més grans no s'ajusten a la memòria de la GPU i "
"Buzz es bloqueja"
@ -259,8 +259,8 @@ msgstr "Selecciona la carpeta d'exportació"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
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"
" validation."
"Transcription and translation may still work if the API does not support key "
"validation."
msgstr ""
"L'API d'OpenAI ha retornat una resposta no vàlida. Comproveu l'URL de l'API "
"o la vostra clau. La transcripció i la traducció encara poden funcionar si "
@ -404,7 +404,7 @@ msgstr "Model:"
#: buzz/widgets/transcriber/transcription_options_group_box.py
#: buzz/transcriber/recording_transcriber.py
msgid "First time use of a model may take up to several minutest to load."
msgstr ""
msgstr "El primer ús d'un model pot trigar uns quants minuts en carregar-se."
"L'ús per primera vegada d'un model pot trigar diversos minuts a carregar-se."
#: buzz/widgets/transcriber/transcription_options_group_box.py
@ -458,8 +458,8 @@ msgid ""
"notes, just the translation."
msgstr ""
"Si us plau, traduïu cada text que us enviï de l'anglès al castellà. La "
"traducció s'utilitzarà en un sistema automatitzat; si us plau, no afegiu cap"
" comentari ni nota, només la traducció."
"traducció s'utilitzarà en un sistema automatitzat; si us plau, no afegiu cap "
"comentari ni nota, només la traducció."
#: buzz/widgets/transcriber/advanced_settings_dialog.py
msgid "Instructions for AI:"
@ -582,6 +582,10 @@ msgstr "Cancel·lat"
msgid "Queued"
msgstr "A la cua"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Skipped"
msgstr "Omès"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "File Name / URL"
msgstr "Nom del fitxer / URL"
@ -644,8 +648,8 @@ msgid "Cannot Restart"
msgstr "No es pot reiniciar"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Only failed or canceled transcriptions can be restarted."
msgstr "Només es poden reiniciar les transcripcions fallides o cancel·lades."
msgid "Only failed, canceled, or skipped transcriptions can be restarted."
msgstr "Només es poden reiniciar les transcripcions fallides, cancel·lades o omeses."
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Failed to restart transcription: {}"
@ -661,7 +665,7 @@ msgstr ""
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Could not restart transcription: transcriber worker not found."
msgstr ""
msgstr "No s'ha pogut reiniciar la transcripció: treballador de transcripció no trobat."
"No s'ha pogut reiniciar la transcripció: no s'ha trobat el treballador del "
"transcriptor."
@ -754,8 +758,8 @@ msgid ""
"Please check your audio devices or check the application logs for more "
"information."
msgstr ""
"Comproveu els vostres dispositius d'àudio o els registres de l'aplicació per"
" a més informació."
"Comproveu els vostres dispositius d'àudio o els registres de l'aplicació per "
"a més informació."
#: buzz/widgets/plugins_dialog/plugins_dialog.py
msgid "Plugins"
@ -1063,11 +1067,10 @@ msgid "Desired subtitle length"
msgstr "Longitud desitjada dels subtítols"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid ""
"Available only if word level timings were disabled during transcription"
msgstr ""
"Disponible només si els temps a nivell de paraula estaven desactivats durant"
" la transcripció"
msgid "Available only if word level timings were disabled during transcription"
msgstr "Disponible només si els temps de paraula estaven desactivats durant la transcripció"
"Disponible només si els temps a nivell de paraula estaven desactivats durant "
"la transcripció"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid "Merge Options"
@ -1094,16 +1097,16 @@ msgstr "Fusiona"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid "Available only if word level timings were enabled during transcription"
msgstr ""
"Disponible només si els temps a nivell de paraula estaven activats durant la"
" transcripció"
msgstr "Disponible només si els temps de paraula estaven activats durant la transcripció"
"Disponible només si els temps a nivell de paraula estaven activats durant la "
"transcripció"
#: buzz/widgets/transcription_viewer/speaker_identification_widget.py
msgid ""
"Speaker identification is not available: failed to load required libraries."
msgstr ""
"La identificació de parlants no està disponible: no s'han pogut carregar les"
" biblioteques necessàries."
"La identificació de parlants no està disponible: no s'han pogut carregar les "
"biblioteques necessàries."
#: buzz/widgets/transcription_viewer/speaker_identification_widget.py
msgid "1/8 Collecting transcripts"
@ -1119,9 +1122,8 @@ msgstr "3/8 Carregant el model d'alineació"
#: buzz/widgets/transcription_viewer/speaker_identification_widget.py
msgid "3/8 Loading alignment model (retrying with cache...)"
msgstr ""
"3/8 Carregant el model d'alineació (tornant a intentar amb la memòria "
"cau...)"
msgstr "3/8 Carregant el model d'alineació (reintentant amb la memòria cau...)"
"3/8 Carregant el model d'alineació (tornant a intentar amb la memòria cau...)"
#: buzz/widgets/transcription_viewer/speaker_identification_widget.py
msgid ""
@ -1266,7 +1268,7 @@ msgstr "No s'ha pogut desar la clau OpenAI API a l'anell de claus"
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py
#: buzz/transcriber/recording_transcriber.py
msgid "Whisper server failed to start. Check logs for details."
msgstr ""
msgstr "El servidor Whisper no ha pogut iniciar-se. Comproveu els registres per obtenir detalls."
"El servidor Whisper no s'ha pogut iniciar. Consulteu els registres per "
"obtenir més informació."
@ -1277,8 +1279,8 @@ msgid ""
"with a smaller model. To force CPU mode use BUZZ_FORCE_CPU=TRUE environment "
"variable."
msgstr ""
"El servidor Whisper no s'ha pogut iniciar a causa de la memòria insuficient."
" Si us plau, torneu-ho a provar amb un model més petit. Per forçar el mode "
"El servidor Whisper no s'ha pogut iniciar a causa de la memòria insuficient. "
"Si us plau, torneu-ho a provar amb un model més petit. Per forçar el mode "
"CPU, utilitzeu la variable d'entorn BUZZ_FORCE_CPU=TRUE."
#: buzz/transcriber/transcriber.py
@ -1741,8 +1743,8 @@ msgstr "Detecció de llengua millorada"
msgid ""
"Detect the spoken language with whisper.cpp before transcription (using the "
"largest downloaded model, or the tiny model otherwise) and use it for the "
"transcription and exported file names. Only runs when the language is set to"
" auto-detect."
"transcription and exported file names. Only runs when the language is set to "
"auto-detect."
msgstr ""
"Detecta la llengua parlada amb whisper.cpp abans de la transcripció "
"(utilitzant el model més gran baixat o, si no, el model tiny) i l'utilitza "
@ -1787,8 +1789,8 @@ msgstr "Redimensionador automàtic de transcripcions"
#: buzz/plugins/transcript_resizer/plugin.py
msgid ""
"When a transcription has word-level timings, automatically regroup the words"
" into properly sized subtitles and replace the result. Mirrors the Merge "
"When a transcription has word-level timings, automatically regroup the words "
"into properly sized subtitles and replace the result. Mirrors the Merge "
"options of the transcript resizer."
msgstr ""
"Quan una transcripció té marques de temps per paraula, reagrupa "
@ -1808,6 +1810,34 @@ msgstr "Puntuació"
msgid "Maximum subtitle length"
msgstr "Longitud màxima del subtítol"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip Already Transcribed"
msgstr "Omet els ja transcrits"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip transcription if results already exist on disk or in the database"
msgstr "Omet la transcripció si els resultats ja existeixen al disc o a la base de dades"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check for existing result files"
msgstr "Comprova si hi ha fitxers de resultats existents"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next "
"to it"
msgstr ""
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check in transcription database"
msgstr "Comprovar a la base de dades de transcripcions"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if this file has already been transcribed and the record exists in the "
"database"
msgstr ""
#: buzz/plugins/ai_summary/plugin.py
msgid "AI Summary"
msgstr "Resum amb IA"
@ -1846,8 +1876,8 @@ msgstr "Carpeta de sortida (per al fitxer)"
#: buzz/file_transcriber_queue_worker.py
msgid ""
"Speech extraction failed! Check your internet connection — a model may need "
"to be downloaded."
"Speech extraction failed! Check your internet connection \\u2014 a model may "
"need to be downloaded."
msgstr ""
"Ha fallat l'extracció de veu! Comproveu la vostra connexió a Internet — pot "
"ser que s'hagi de descarregar un model."
@ -1871,11 +1901,11 @@ msgstr ""
#~ msgstr "Avís de permís d'ajust"
#~ msgid ""
#~ "Detected missing permissions, please check that snap permissions have been "
#~ "granted"
#~ "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"
#~ "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"

View file

@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-06-14 16:54+0300\n"
"POT-Creation-Date: 2026-06-27 15:05+0300\n"
"PO-Revision-Date: \n"
"Last-Translator: Ole Guldberg2 <xalt7x.service@gmail.com>\n"
"Language-Team: \n"
@ -11,7 +11,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : "
"n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
# "X-Generator: Poedit 3.4.4\n"
#: buzz/widgets/import_url_dialog.py buzz/settings/shortcut.py
@ -215,7 +216,7 @@ msgstr "Brug kun CPU og deaktiver GPU-acceleration"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
msgstr "Indstil dette, hvis større modeller ikke passer i din GPU-hukommelse og Buzz crasher"
"Aktivér dette hvis større modeller ikke passer i GPU-hukommelsen og Buzz "
"crasher"
@ -255,8 +256,8 @@ msgstr "Vælg eksport-mappe"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
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"
" validation."
"Transcription and translation may still work if the API does not support key "
"validation."
msgstr ""
"OpenAI API returnerede et ugyldigt svar. Tjek venligst API-URL og nøgle. "
"Transkription og oversættelse virker måske stadig, selvom API'et ikke "
@ -577,6 +578,10 @@ msgstr "Afbrudt"
msgid "Queued"
msgstr "Sat i kø"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Skipped"
msgstr "Sprunget over"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "File Name / URL"
msgstr "Filnavn / URL"
@ -639,8 +644,8 @@ msgid "Cannot Restart"
msgstr "Kan ikke genstarte"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Only failed or canceled transcriptions can be restarted."
msgstr "Kun mislykkede eller annullerede transkriptioner kan genstartes."
msgid "Only failed, canceled, or skipped transcriptions can be restarted."
msgstr "Kun mislykkede, annullerede eller sprunget-over transkriptioner kan genstartes."
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Failed to restart transcription: {}"
@ -656,9 +661,8 @@ msgstr ""
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Could not restart transcription: transcriber worker not found."
msgstr ""
"Kunne ikke genstarte transkription: transkriptionsprocessen blev ikke "
"fundet."
msgstr "Kunne ikke genstarte transskription: transskriptionsarbejder ikke fundet."
"Kunne ikke genstarte transkription: transkriptionsprocessen blev ikke fundet."
#: buzz/widgets/recording_transcriber_widget.py
msgid "Live Recording"
@ -761,8 +765,8 @@ msgid ""
"Plugins run with full access to your system. Only install plugins from "
"sources you trust."
msgstr ""
"Plugins har fuld adgang til dit system. Installér kun plugins fra kilder, du"
" har tillid til."
"Plugins har fuld adgang til dit system. Installér kun plugins fra kilder, du "
"har tillid til."
#: buzz/widgets/plugins_dialog/plugins_dialog.py
msgid "Add by URL..."
@ -1058,9 +1062,8 @@ msgid "Desired subtitle length"
msgstr "Ønskede undertekst længde"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid ""
"Available only if word level timings were disabled during transcription"
msgstr ""
msgid "Available only if word level timings were disabled during transcription"
msgstr "Kun tilgængeligt hvis ordniveau-tider var deaktiveret under transskriptionen"
"Kun tilgængeligt hvis ordniveau-tidsstempler var deaktiveret under "
"transkription"
@ -1089,7 +1092,7 @@ msgstr "Sammenflet"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid "Available only if word level timings were enabled during transcription"
msgstr ""
msgstr "Kun tilgængeligt hvis ordniveau-tider var aktiveret under transskriptionen"
"Kun tilgængeligt hvis ordniveau-tidsstempler var aktiveret under "
"transkription"
@ -1121,8 +1124,8 @@ msgid ""
"Failed to load alignment model. Please check your internet connection and "
"try again."
msgstr ""
"Kunne ikke indlæse justeringsmodel. Tjek venligst din internetforbindelse og"
" prøv igen."
"Kunne ikke indlæse justeringsmodel. Tjek venligst din internetforbindelse og "
"prøv igen."
#: buzz/widgets/transcription_viewer/speaker_identification_widget.py
msgid "4/8 Processing audio"
@ -1732,12 +1735,12 @@ msgstr "Forbedret sprogregistrering"
msgid ""
"Detect the spoken language with whisper.cpp before transcription (using the "
"largest downloaded model, or the tiny model otherwise) and use it for the "
"transcription and exported file names. Only runs when the language is set to"
" auto-detect."
"transcription and exported file names. Only runs when the language is set to "
"auto-detect."
msgstr ""
"Registrerer det talte sprog med whisper.cpp før transskription (ved hjælp af"
" den største downloadede model eller ellers tiny-modellen) og bruger det til"
" transskriptionen og de eksporterede filnavne. Kører kun, når sproget er "
"Registrerer det talte sprog med whisper.cpp før transskription (ved hjælp af "
"den største downloadede model eller ellers tiny-modellen) og bruger det til "
"transskriptionen og de eksporterede filnavne. Kører kun, når sproget er "
"indstillet til automatisk registrering."
#: buzz/plugins/enhanced_language_detection/plugin.py
@ -1778,8 +1781,8 @@ msgstr "Automatisk tilpasning af transskription"
#: buzz/plugins/transcript_resizer/plugin.py
msgid ""
"When a transcription has word-level timings, automatically regroup the words"
" into properly sized subtitles and replace the result. Mirrors the Merge "
"When a transcription has word-level timings, automatically regroup the words "
"into properly sized subtitles and replace the result. Mirrors the Merge "
"options of the transcript resizer."
msgstr ""
"Når en transskription har tidsmarkeringer på ordniveau, grupperes ordene "
@ -1798,6 +1801,34 @@ msgstr "Tegnsætning"
msgid "Maximum subtitle length"
msgstr "Maksimal undertekstlængde"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip Already Transcribed"
msgstr "Spring allerede transkriberede over"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip transcription if results already exist on disk or in the database"
msgstr "Spring transskription over, hvis resultater allerede findes på disk eller i databasen"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check for existing result files"
msgstr "Tjek for eksisterende resultatfiler"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next "
"to it"
msgstr ""
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check in transcription database"
msgstr "Tjek i transskriptionsdatabasen"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if this file has already been transcribed and the record exists in the "
"database"
msgstr ""
#: buzz/plugins/ai_summary/plugin.py
msgid "AI Summary"
msgstr "AI-resumé"
@ -1836,8 +1867,8 @@ msgstr "Outputmappe (til fil)"
#: buzz/file_transcriber_queue_worker.py
msgid ""
"Speech extraction failed! Check your internet connection — a model may need "
"to be downloaded."
"Speech extraction failed! Check your internet connection \\u2014 a model may "
"need to be downloaded."
msgstr ""
"Taleoprydning mislykkedes! Kontroller din internetforbindelse — en model "
"skal muligvis hentes ned."

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-06-14 16:54+0300\n"
"POT-Creation-Date: 2026-06-27 15:05+0300\n"
"PO-Revision-Date: 2025-03-05 14:41+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
@ -218,7 +218,7 @@ msgstr "Nur CPU verwenden und GPU-Beschleunigung deaktivieren"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
msgstr "Aktivieren, wenn größere Modelle nicht in den GPU-Speicher passen und Buzz abstürzt"
"Diese Option aktivieren, wenn größere Modelle nicht in den GPU-Speicher "
"passen und Buzz abstürzt"
@ -258,8 +258,8 @@ msgstr "Exportordner auswählen"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
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"
" validation."
"Transcription and translation may still work if the API does not support key "
"validation."
msgstr ""
"Die OpenAI-API hat eine ungültige Antwort zurückgegeben. Bitte überprüfen "
"Sie die API-URL oder Ihren Schlüssel. Transkription und Übersetzung "
@ -404,7 +404,7 @@ msgstr "Modell:"
#: buzz/widgets/transcriber/transcription_options_group_box.py
#: buzz/transcriber/recording_transcriber.py
msgid "First time use of a model may take up to several minutest to load."
msgstr ""
msgstr "Das erste Laden eines Modells kann mehrere Minuten dauern."
"Bei der ersten Verwendung eines Modells kann das Laden mehrere Minuten "
"dauern."
@ -458,10 +458,9 @@ msgid ""
"will be used in an automated system, please do not add any comments or "
"notes, just the translation."
msgstr ""
"Bitte übersetzen Sie jeden Text, der Ihnen gesendet wird, vom Englischen ins"
" Spanische. Die Übersetzung wird in einem automatisierten System verwendet. "
"Bitte fügen Sie keine Kommentare oder Anmerkungen hinzu, nur die "
"Übersetzung."
"Bitte übersetzen Sie jeden Text, der Ihnen gesendet wird, vom Englischen ins "
"Spanische. Die Übersetzung wird in einem automatisierten System verwendet. "
"Bitte fügen Sie keine Kommentare oder Anmerkungen hinzu, nur die Übersetzung."
#: buzz/widgets/transcriber/advanced_settings_dialog.py
msgid "Instructions for AI:"
@ -584,6 +583,10 @@ msgstr "Abgebrochen"
msgid "Queued"
msgstr "In der Warteschlange"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Skipped"
msgstr "Übersprungen"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "File Name / URL"
msgstr "Dateiname/URL"
@ -646,10 +649,8 @@ msgid "Cannot Restart"
msgstr "Neustart nicht möglich"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Only failed or canceled transcriptions can be restarted."
msgstr ""
"Nur fehlgeschlagene oder abgebrochene Transkriptionen können neu gestartet "
"werden."
msgid "Only failed, canceled, or skipped transcriptions can be restarted."
msgstr "Nur fehlgeschlagene, abgebrochene oder übersprungene Transkriptionen können neu gestartet werden."
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Failed to restart transcription: {}"
@ -665,9 +666,9 @@ msgstr ""
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Could not restart transcription: transcriber worker not found."
msgstr ""
"Transkription konnte nicht neu gestartet werden: Transkriptions-Worker nicht"
" gefunden."
msgstr "Transkription konnte nicht neu gestartet werden: Transcriber-Worker nicht gefunden."
"Transkription konnte nicht neu gestartet werden: Transkriptions-Worker nicht "
"gefunden."
#: buzz/widgets/recording_transcriber_widget.py
msgid "Live Recording"
@ -984,7 +985,7 @@ msgstr "Segment wiederholen"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py
msgid "Enable/disable looping when clicking on transcript segments"
msgstr ""
msgstr "Schleife beim Klicken auf Transkriptsegmente aktivieren/deaktivieren"
"Wiederholen beim Klicken auf Transkript-Segmente aktivieren/deaktivieren"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py
@ -1068,9 +1069,8 @@ msgid "Desired subtitle length"
msgstr "Gewünschte Untertitellänge"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid ""
"Available only if word level timings were disabled during transcription"
msgstr ""
msgid "Available only if word level timings were disabled during transcription"
msgstr "Nur verfügbar, wenn Wort-Zeitstempel während der Transkription deaktiviert waren"
"Nur verfügbar, wenn Zeitangaben auf Wortebene bei der Transkription "
"deaktiviert waren"
@ -1099,7 +1099,7 @@ msgstr "Vereinigen"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid "Available only if word level timings were enabled during transcription"
msgstr ""
msgstr "Nur verfügbar, wenn Wort-Zeitstempel während der Transkription aktiviert waren"
"Nur verfügbar, wenn Zeitangaben auf Wortebene bei der Transkription "
"aktiviert waren"
@ -1264,13 +1264,13 @@ msgstr "Eingabeordner auswählen"
#: buzz/widgets/main_window.py
msgid "Unable to save OpenAI API key to keyring"
msgstr ""
msgstr "OpenAI-API-Schlüssel konnte nicht im Schlüsselbund gespeichert werden"
"Der OpenAI-API-Schlüssel kann nicht im Schlüsselbund gespeichert werden"
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py
#: buzz/transcriber/recording_transcriber.py
msgid "Whisper server failed to start. Check logs for details."
msgstr ""
msgstr "Whisper-Server konnte nicht gestartet werden. Protokolle für Details prüfen."
"Whisper-Server konnte nicht gestartet werden. Details in den Protokollen "
"prüfen."
@ -1746,14 +1746,14 @@ msgstr "Erweiterte Spracherkennung"
msgid ""
"Detect the spoken language with whisper.cpp before transcription (using the "
"largest downloaded model, or the tiny model otherwise) and use it for the "
"transcription and exported file names. Only runs when the language is set to"
" auto-detect."
"transcription and exported file names. Only runs when the language is set to "
"auto-detect."
msgstr ""
"Erkennt die gesprochene Sprache mit whisper.cpp vor der Transkription (unter"
" Verwendung des größten heruntergeladenen Modells oder andernfalls des Tiny-"
"Erkennt die gesprochene Sprache mit whisper.cpp vor der Transkription (unter "
"Verwendung des größten heruntergeladenen Modells oder andernfalls des Tiny-"
"Modells) und verwendet sie für die Transkription und die exportierten "
"Dateinamen. Wird nur ausgeführt, wenn die Sprache auf automatische Erkennung"
" eingestellt ist."
"Dateinamen. Wird nur ausgeführt, wenn die Sprache auf automatische Erkennung "
"eingestellt ist."
#: buzz/plugins/enhanced_language_detection/plugin.py
msgid "Download tiny model if none available"
@ -1793,8 +1793,8 @@ msgstr "Automatische Transkript-Anpassung"
#: buzz/plugins/transcript_resizer/plugin.py
msgid ""
"When a transcription has word-level timings, automatically regroup the words"
" into properly sized subtitles and replace the result. Mirrors the Merge "
"When a transcription has word-level timings, automatically regroup the words "
"into properly sized subtitles and replace the result. Mirrors the Merge "
"options of the transcript resizer."
msgstr ""
"Wenn ein Transkript Zeitangaben auf Wortebene hat, werden die Wörter "
@ -1813,6 +1813,34 @@ msgstr "Satzzeichen"
msgid "Maximum subtitle length"
msgstr "Maximale Untertitellänge"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip Already Transcribed"
msgstr "Bereits Transkribierte überspringen"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip transcription if results already exist on disk or in the database"
msgstr "Transkription überspringen, wenn Ergebnisse bereits auf der Festplatte oder in der Datenbank vorhanden sind"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check for existing result files"
msgstr "Nach vorhandenen Ergebnisdateien suchen"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next "
"to it"
msgstr ""
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check in transcription database"
msgstr "In der Transkriptionsdatenbank prüfen"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if this file has already been transcribed and the record exists in the "
"database"
msgstr ""
#: buzz/plugins/ai_summary/plugin.py
msgid "AI Summary"
msgstr "KI-Zusammenfassung"
@ -1822,8 +1850,8 @@ msgid ""
"Generate an AI summary of the transcript via an OpenAI-compatible API and "
"save it to the Notes field and/or a file."
msgstr ""
"Erstellt eine KI-Zusammenfassung des Transkripts über eine OpenAI-kompatible"
" API und speichert sie im Notizfeld und/oder in einer Datei."
"Erstellt eine KI-Zusammenfassung des Transkripts über eine OpenAI-kompatible "
"API und speichert sie im Notizfeld und/oder in einer Datei."
#: buzz/plugins/ai_summary/plugin.py
msgid "API base URL"
@ -1851,8 +1879,8 @@ msgstr "Ausgabeordner (für Datei)"
#: buzz/file_transcriber_queue_worker.py
msgid ""
"Speech extraction failed! Check your internet connection — a model may need "
"to be downloaded."
"Speech extraction failed! Check your internet connection \\u2014 a model may "
"need to be downloaded."
msgstr ""
"Sprachextraktion fehlgeschlagen! Bitte Internetverbindung prüfen — ein "
"Modell muss möglicherweise heruntergeladen werden."
@ -1878,8 +1906,8 @@ msgstr ""
#~ msgstr "Snap-Berechtigungsmitteilung"
#~ msgid ""
#~ "Detected missing permissions, please check that snap permissions have been "
#~ "granted"
#~ "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"
@ -1887,8 +1915,8 @@ msgstr ""
#~ 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"
#~ "Um die erforderlichen Berechtigungen zu aktivieren, führen Sie die "
#~ "folgenden Befehle im Terminal aus"
#~ msgid "Close"
#~ msgstr "Schließen"

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-06-14 16:54+0300\n"
"POT-Creation-Date: 2026-06-27 15:05+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -559,6 +559,10 @@ msgstr ""
msgid "Queued"
msgstr ""
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Skipped"
msgstr ""
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "File Name / URL"
msgstr ""
@ -621,7 +625,7 @@ msgid "Cannot Restart"
msgstr ""
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Only failed or canceled transcriptions can be restarted."
msgid "Only failed, canceled, or skipped transcriptions can be restarted."
msgstr ""
#: buzz/widgets/transcription_tasks_table_widget.py
@ -1743,6 +1747,34 @@ msgstr ""
msgid "Maximum subtitle length"
msgstr ""
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip Already Transcribed"
msgstr ""
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip transcription if results already exist on disk or in the database"
msgstr ""
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check for existing result files"
msgstr ""
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next "
"to it"
msgstr ""
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check in transcription database"
msgstr ""
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if this file has already been transcribed and the record exists in the "
"database"
msgstr ""
#: buzz/plugins/ai_summary/plugin.py
msgid "AI Summary"
msgstr ""
@ -1779,6 +1811,6 @@ msgstr ""
#: buzz/file_transcriber_queue_worker.py
msgid ""
"Speech extraction failed! Check your internet connection — a model may need "
"to be downloaded."
"Speech extraction failed! Check your internet connection \\u2014 a model may "
"need to be downloaded."
msgstr ""

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-06-14 16:54+0300\n"
"POT-Creation-Date: 2026-06-27 15:05+0300\n"
"PO-Revision-Date: 2025-09-08 12:43+0200\n"
"Last-Translator: Éric Duarte <contacto@ericdq.com>\n"
"Language-Team: \n"
@ -223,7 +223,7 @@ msgstr "Usa solo CPU y desactiva la aceleración de GPU"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
msgstr "Actívalo si los modelos más grandes no caben en la memoria de tu GPU y Buzz falla"
"Configure esto si los modelos más grandes no se ajustan a la memoria de su "
"GPU y Buzz se bloquea"
@ -263,8 +263,8 @@ msgstr "Seleccione Exportar carpeta"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
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"
" validation."
"Transcription and translation may still work if the API does not support key "
"validation."
msgstr ""
"La API de OpenAI devolvió una respuesta no válida. Compruebe la URL de la "
"API o su clave. Es posible que la transcripción y la traducción sigan "
@ -417,7 +417,7 @@ msgstr "Modelo:"
#: buzz/widgets/transcriber/transcription_options_group_box.py
#: buzz/transcriber/recording_transcriber.py
msgid "First time use of a model may take up to several minutest to load."
msgstr ""
msgstr "El primer uso de un modelo puede tardar varios minutos en cargarse."
"El uso por primera vez de un modelo puede tardar varios minutos en cargarse."
#: buzz/widgets/transcriber/transcription_options_group_box.py
@ -607,6 +607,10 @@ msgstr "Cancelado"
msgid "Queued"
msgstr "En cola"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Skipped"
msgstr "Omitido"
# automatic translation
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "File Name / URL"
@ -672,8 +676,8 @@ msgid "Cannot Restart"
msgstr "No se puede reiniciar"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Only failed or canceled transcriptions can be restarted."
msgstr "Solo se pueden reiniciar las transcripciones fallidas o canceladas."
msgid "Only failed, canceled, or skipped transcriptions can be restarted."
msgstr "Solo se pueden reiniciar las transcripciones fallidas, canceladas u omitidas."
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Failed to restart transcription: {}"
@ -689,7 +693,7 @@ msgstr ""
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Could not restart transcription: transcriber worker not found."
msgstr ""
msgstr "No se pudo reiniciar la transcripción: trabajador de transcripción no encontrado."
"No se pudo reiniciar la transcripción: no se encontró el trabajador del "
"transcriptor."
@ -1017,9 +1021,9 @@ msgstr "Segmento de bucle"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py
msgid "Enable/disable looping when clicking on transcript segments"
msgstr ""
"Activar/desactivar la reproducción en bucle al hacer clic en segmentos de la"
" transcripción"
msgstr "Activar/desactivar el bucle al hacer clic en los segmentos de transcripción"
"Activar/desactivar la reproducción en bucle al hacer clic en segmentos de la "
"transcripción"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py
msgid "Follow Audio"
@ -1105,9 +1109,8 @@ msgid "Desired subtitle length"
msgstr "Longitud deseada de los subtítulos"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid ""
"Available only if word level timings were disabled during transcription"
msgstr ""
msgid "Available only if word level timings were disabled during transcription"
msgstr "Solo disponible si los tiempos por palabra estaban desactivados durante la transcripción"
"Disponible solo si los tiempos a nivel de palabra estaban desactivados "
"durante la transcripción"
@ -1136,7 +1139,7 @@ msgstr "Fusión"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid "Available only if word level timings were enabled during transcription"
msgstr ""
msgstr "Solo disponible si los tiempos por palabra estaban activados durante la transcripción"
"Disponible solo si los tiempos a nivel de palabra estaban activados durante "
"la transcripción"
@ -1144,8 +1147,8 @@ msgstr ""
msgid ""
"Speaker identification is not available: failed to load required libraries."
msgstr ""
"La identificación de hablantes no está disponible: no se pudieron cargar las"
" bibliotecas requeridas."
"La identificación de hablantes no está disponible: no se pudieron cargar las "
"bibliotecas requeridas."
#: buzz/widgets/transcription_viewer/speaker_identification_widget.py
msgid "1/8 Collecting transcripts"
@ -1296,8 +1299,8 @@ msgid ""
"Are you sure you want to delete the selected transcription(s)? This action "
"cannot be undone."
msgstr ""
"¿Confirma que quiere eliminar las transcripciones seleccionadas? Esta acción"
" no se puede deshacer."
"¿Confirma que quiere eliminar las transcripciones seleccionadas? Esta acción "
"no se puede deshacer."
# automatic translation
#: buzz/widgets/main_window.py
@ -1316,7 +1319,7 @@ msgstr "No se puede guardar la clave de la API de OpenAI en el llavero"
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py
#: buzz/transcriber/recording_transcriber.py
msgid "Whisper server failed to start. Check logs for details."
msgstr ""
msgstr "El servidor Whisper no pudo iniciarse. Consulte los registros para obtener detalles."
"El servidor Whisper no se pudo iniciar. Consulta los registros para obtener "
"más detalles."
@ -1798,8 +1801,8 @@ msgstr "Detección de idioma mejorada"
msgid ""
"Detect the spoken language with whisper.cpp before transcription (using the "
"largest downloaded model, or the tiny model otherwise) and use it for the "
"transcription and exported file names. Only runs when the language is set to"
" auto-detect."
"transcription and exported file names. Only runs when the language is set to "
"auto-detect."
msgstr ""
"Detecta el idioma hablado con whisper.cpp antes de la transcripción "
"(utilizando el modelo más grande descargado o, en su defecto, el modelo "
@ -1845,13 +1848,13 @@ msgstr "Redimensionador automático de transcripciones"
#: buzz/plugins/transcript_resizer/plugin.py
msgid ""
"When a transcription has word-level timings, automatically regroup the words"
" into properly sized subtitles and replace the result. Mirrors the Merge "
"When a transcription has word-level timings, automatically regroup the words "
"into properly sized subtitles and replace the result. Mirrors the Merge "
"options of the transcript resizer."
msgstr ""
"Cuando una transcripción tiene marcas de tiempo por palabra, reagrupa "
"automáticamente las palabras en subtítulos de tamaño adecuado y reemplaza el"
" resultado. Reproduce las opciones de fusión del redimensionador de "
"automáticamente las palabras en subtítulos de tamaño adecuado y reemplaza el "
"resultado. Reproduce las opciones de fusión del redimensionador de "
"transcripciones."
#: buzz/plugins/transcript_resizer/plugin.py
@ -1866,6 +1869,34 @@ msgstr "Puntuación"
msgid "Maximum subtitle length"
msgstr "Longitud máxima del subtítulo"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip Already Transcribed"
msgstr "Omitir ya transcritos"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip transcription if results already exist on disk or in the database"
msgstr "Omitir la transcripción si los resultados ya existen en el disco o en la base de datos"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check for existing result files"
msgstr "Buscar archivos de resultado existentes"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next "
"to it"
msgstr ""
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check in transcription database"
msgstr "Comprobar en la base de datos de transcripciones"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if this file has already been transcribed and the record exists in the "
"database"
msgstr ""
#: buzz/plugins/ai_summary/plugin.py
msgid "AI Summary"
msgstr "Resumen con IA"
@ -1875,8 +1906,8 @@ msgid ""
"Generate an AI summary of the transcript via an OpenAI-compatible API and "
"save it to the Notes field and/or a file."
msgstr ""
"Genera un resumen con IA de la transcripción mediante una API compatible con"
" OpenAI y lo guarda en el campo de notas o en un archivo."
"Genera un resumen con IA de la transcripción mediante una API compatible con "
"OpenAI y lo guarda en el campo de notas o en un archivo."
#: buzz/plugins/ai_summary/plugin.py
msgid "API base URL"
@ -1904,8 +1935,8 @@ msgstr "Carpeta de salida (para el archivo)"
#: buzz/file_transcriber_queue_worker.py
msgid ""
"Speech extraction failed! Check your internet connection — a model may need "
"to be downloaded."
"Speech extraction failed! Check your internet connection \\u2014 a model may "
"need to be downloaded."
msgstr ""
"¡Extracción de voz fallida! Compruebe su conexión a internet — es posible "
"que sea necesario descargar un modelo."
@ -1923,7 +1954,8 @@ msgstr ""
#~ msgstr "Temperatura:"
#~ msgid "Please translate each text sent to you from English to Spanish."
#~ msgstr "Por favor, traduzca cada texto que se le envíe del inglés al español."
#~ msgstr ""
#~ "Por favor, traduzca cada texto que se le envíe del inglés al español."
#~ msgid "Translation error, see logs!"
#~ msgstr "¡Error de traducción, consulte los registros!"
@ -1932,8 +1964,8 @@ msgstr ""
#~ msgstr "Aviso de permiso Snap"
#~ msgid ""
#~ "Detected missing permissions, please check that snap permissions have been "
#~ "granted"
#~ "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"
@ -1941,8 +1973,8 @@ msgstr ""
#~ 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"
#~ "Para habilitar los permisos necesarios ejecute los siguientes comandos en "
#~ "el terminal"
#~ msgid "Close"
#~ msgstr "Cerrar"

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: buzz\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-06-14 16:54+0300\n"
"POT-Creation-Date: 2026-06-27 15:05+0300\n"
"PO-Revision-Date: 2026-04-12 21:42+0200\n"
"Language-Team: (Italiano) Albano Battistella <albanobattistella@gmail.com>\n"
"Language: it_IT\n"
@ -198,7 +198,7 @@ msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
msgid "Use 8-bit quantization to reduce memory usage"
msgstr ""
msgstr "Utilizza la quantizzazione a 8 bit per ridurre l'utilizzo della memoria"
"Utilizzare la quantizzazione a 8 bit per ridurre l'utilizzo della memoria"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
@ -219,7 +219,7 @@ msgstr "Utilizza solo la CPU e disattiva l'accelerazione GPU"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
msgstr "Imposta questo se i modelli più grandi non rientrano nella memoria GPU e Buzz si blocca"
"Imposta questa opzione se i modelli più grandi non si adattano alla memoria "
"della tua GPU e Buzz si blocca"
@ -259,11 +259,11 @@ msgstr "Seleziona la cartella di esportazione"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
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"
" validation."
"Transcription and translation may still work if the API does not support key "
"validation."
msgstr ""
"L'API OpenAI ha restituito una risposta non valida. Controlla l'URL dell'API"
" o la tua chiave.La trascrizione e la traduzione potrebbero comunque "
"L'API OpenAI ha restituito una risposta non valida. Controlla l'URL dell'API "
"o la tua chiave.La trascrizione e la traduzione potrebbero comunque "
"funzionare se l'API non supporta la convalida della chiave."
#: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py
@ -404,7 +404,7 @@ msgstr "Modello:"
#: buzz/widgets/transcriber/transcription_options_group_box.py
#: buzz/transcriber/recording_transcriber.py
msgid "First time use of a model may take up to several minutest to load."
msgstr ""
msgstr "Il primo utilizzo di un modello potrebbe richiedere diversi minuti per il caricamento."
"Il caricamento di un modello al primo utilizzo potrebbe richiedere diversi "
"minuti."
@ -583,6 +583,10 @@ msgstr "Annullato"
msgid "Queued"
msgstr "In coda"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Skipped"
msgstr "Saltato"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "File Name / URL"
msgstr "Nome file / URL"
@ -645,8 +649,8 @@ msgid "Cannot Restart"
msgstr "Impossibile riavviare"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Only failed or canceled transcriptions can be restarted."
msgstr "È possibile riavviare solo le trascrizioni non riuscite o annullate."
msgid "Only failed, canceled, or skipped transcriptions can be restarted."
msgstr "È possibile riavviare solo le trascrizioni non riuscite, annullate o saltate."
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Failed to restart transcription: {}"
@ -979,7 +983,7 @@ msgstr "Ciclo di segmento"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py
msgid "Enable/disable looping when clicking on transcript segments"
msgstr ""
msgstr "Abilita/disabilita il ciclo quando si fa clic sui segmenti di trascrizione"
"Abilita/disabilita il loop quando si fa clic sui segmenti della trascrizione"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py
@ -1064,9 +1068,8 @@ msgid "Desired subtitle length"
msgstr "Lunghezza desiderata dei sottotitoli"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid ""
"Available only if word level timings were disabled during transcription"
msgstr ""
msgid "Available only if word level timings were disabled during transcription"
msgstr "Disponibile solo se i tempi a livello di parola erano disabilitati durante la trascrizione"
"Disponibile solo se i tempi a livello di parola sono stati disabilitati "
"durante la trascrizione"
@ -1095,9 +1098,9 @@ msgstr "Unione"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid "Available only if word level timings were enabled during transcription"
msgstr ""
"Disponibile solo se i tempi a livello di parola sono stati abilitati durante"
" la trascrizione"
msgstr "Disponibile solo se i tempi a livello di parola erano abilitati durante la trascrizione"
"Disponibile solo se i tempi a livello di parola sono stati abilitati durante "
"la trascrizione"
#: buzz/widgets/transcription_viewer/speaker_identification_widget.py
msgid ""
@ -1120,9 +1123,8 @@ msgstr "3/8 Modello di allineamento del carico"
#: buzz/widgets/transcription_viewer/speaker_identification_widget.py
msgid "3/8 Loading alignment model (retrying with cache...)"
msgstr ""
"3/8 Caricamento del modello di allineamento (nuovo tentativo con la "
"cache...)"
msgstr "3/8 Caricamento del modello di allineamento (nuovo tentativo con cache...)"
"3/8 Caricamento del modello di allineamento (nuovo tentativo con la cache...)"
#: buzz/widgets/transcription_viewer/speaker_identification_widget.py
msgid ""
@ -1267,7 +1269,7 @@ msgstr "Impossibile salvare la chiave API OpenAI nel portachiavi"
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py
#: buzz/transcriber/recording_transcriber.py
msgid "Whisper server failed to start. Check logs for details."
msgstr ""
msgstr "Il server Whisper non è riuscito ad avviarsi. Controlla i log per i dettagli."
"Impossibile avviare il server Whisper. Controllare i log per i dettagli."
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py
@ -1741,8 +1743,8 @@ msgstr "Rilevamento lingua avanzato"
msgid ""
"Detect the spoken language with whisper.cpp before transcription (using the "
"largest downloaded model, or the tiny model otherwise) and use it for the "
"transcription and exported file names. Only runs when the language is set to"
" auto-detect."
"transcription and exported file names. Only runs when the language is set to "
"auto-detect."
msgstr ""
"Rileva la lingua parlata con whisper.cpp prima della trascrizione "
"(utilizzando il modello più grande scaricato o, in alternativa, il modello "
@ -1787,8 +1789,8 @@ msgstr "Ridimensionamento automatico della trascrizione"
#: buzz/plugins/transcript_resizer/plugin.py
msgid ""
"When a transcription has word-level timings, automatically regroup the words"
" into properly sized subtitles and replace the result. Mirrors the Merge "
"When a transcription has word-level timings, automatically regroup the words "
"into properly sized subtitles and replace the result. Mirrors the Merge "
"options of the transcript resizer."
msgstr ""
"Quando una trascrizione ha tempi a livello di parola, raggruppa "
@ -1808,6 +1810,34 @@ msgstr "Punteggiatura"
msgid "Maximum subtitle length"
msgstr "Lunghezza massima del sottotitolo"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip Already Transcribed"
msgstr "Salta i già trascritti"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip transcription if results already exist on disk or in the database"
msgstr "Salta la trascrizione se i risultati esistono già sul disco o nel database"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check for existing result files"
msgstr "Cerca file di risultato esistenti"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next "
"to it"
msgstr ""
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check in transcription database"
msgstr "Controlla nel database delle trascrizioni"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if this file has already been transcribed and the record exists in the "
"database"
msgstr ""
#: buzz/plugins/ai_summary/plugin.py
msgid "AI Summary"
msgstr "Riepilogo IA"
@ -1817,8 +1847,8 @@ msgid ""
"Generate an AI summary of the transcript via an OpenAI-compatible API and "
"save it to the Notes field and/or a file."
msgstr ""
"Genera un riassunto con IA della trascrizione tramite un'API compatibile con"
" OpenAI e lo salva nel campo Note e/o in un file."
"Genera un riassunto con IA della trascrizione tramite un'API compatibile con "
"OpenAI e lo salva nel campo Note e/o in un file."
#: buzz/plugins/ai_summary/plugin.py
msgid "API base URL"
@ -1846,11 +1876,11 @@ msgstr "Cartella di output (per il file)"
#: buzz/file_transcriber_queue_worker.py
msgid ""
"Speech extraction failed! Check your internet connection — a model may need "
"to be downloaded."
"Speech extraction failed! Check your internet connection \\u2014 a model may "
"need to be downloaded."
msgstr ""
"Estrazione del parlato non riuscita! Controlla la tua connessione Internet —"
" potrebbe essere necessario scaricare un modello."
"Estrazione del parlato non riuscita! Controlla la tua connessione Internet — "
"potrebbe essere necessario scaricare un modello."
#~ msgid "Live recording mode:"
#~ msgstr "Modalità di registrazione in diretta:"
@ -1873,8 +1903,8 @@ msgstr ""
#~ msgstr "Avviso di autorizzazione Snap"
#~ msgid ""
#~ "Detected missing permissions, please check that snap permissions have been "
#~ "granted"
#~ "Detected missing permissions, please check that snap permissions have "
#~ "been granted"
#~ msgstr ""
#~ "Rilevate autorizzazioni mancanti, verificare che le autorizzazioni snap "
#~ "siano state concesse"
@ -1882,8 +1912,8 @@ msgstr ""
#~ msgid ""
#~ "To enable necessary permissions run the following commands in the terminal"
#~ msgstr ""
#~ "Per abilitare le autorizzazioni necessarie, eseguire i seguenti comandi nel "
#~ "terminale"
#~ "Per abilitare le autorizzazioni necessarie, eseguire i seguenti comandi "
#~ "nel terminale"
#~ msgid "Close"
#~ msgstr "Chiudi"

View file

@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-06-14 16:54+0300\n"
"POT-Creation-Date: 2026-06-27 15:05+0300\n"
"PO-Revision-Date: \n"
"Last-Translator: nunawa <71294849+nunawa@users.noreply.github.com>\n"
"Language-Team: \n"
@ -188,7 +188,9 @@ msgstr "ライブ録音モード"
msgid ""
"Note: Live recording export settings will be moved to the Advanced Settings "
"in the Live Recording screen in a future version."
msgstr "注意:ライブ録音の出力設定は、将来のバージョンでライブ録音画面の詳細設定に移動されます。"
msgstr ""
"注意:ライブ録音の出力設定は、将来のバージョンでライブ録音画面の詳細設定に移"
"動されます。"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
msgid "Use 8-bit quantization to reduce memory usage"
@ -199,8 +201,8 @@ msgid ""
"Applies to Huggingface and Faster Whisper models. Reduces GPU memory usage "
"but may slightly decrease transcription quality."
msgstr ""
"HuggingfaceおよびFaster "
"Whisperモデルに適用されます。GPUメモリ使用量を削減しますが、文字起こしの品質がわずかに低下する場合があります。"
"HuggingfaceおよびFaster Whisperモデルに適用されます。GPUメモリ使用量を削減し"
"ますが、文字起こしの品質がわずかに低下する場合があります。"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
msgid "Reduce GPU RAM"
@ -212,7 +214,8 @@ msgstr "CPUのみを使用してGPUアクセラレーションを無効にする
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr "大きなモデルがGPUメモリに収まらずBuzzがクラッシュする場合に設定してください"
msgstr "大きなモデルがGPUメモリに収まらずBuzzがクラッシュする場合に設定"
"大きなモデルがGPUメモリに収まらずBuzzがクラッシュする場合に設定してください"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
msgid "Disable GPU"
@ -226,7 +229,9 @@ msgstr "OpenAI APIキー テスト"
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翻訳を行います。"
msgstr ""
"あなたのAPIキーは有効です。Buzzはこのキーを使ってWhisper APIの書き起こしとAI"
"翻訳を行います。"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
msgid "Invalid API key"
@ -237,7 +242,8 @@ msgid ""
"API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in "
"API key may cause errors."
msgstr ""
"APIはbase64文字(A-Za-z0-9+/=_-)のみをサポートしています。APIキーにその他の文字が含まれているとエラーが発生する場合があります。"
"APIはbase64文字(A-Za-z0-9+/=_-)のみをサポートしています。APIキーにその他の"
"文字が含まれているとエラーが発生する場合があります。"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
#: buzz/widgets/transcriber/advanced_settings_dialog.py
@ -247,11 +253,12 @@ msgstr "出力フォルダを選択"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
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"
" validation."
"Transcription and translation may still work if the API does not support key "
"validation."
msgstr ""
"OpenAI "
"APIが無効な応答を返しました。APIのURLまたはキーを確認してください。APIがキーの検証をサポートしていない場合でも、文字起こしや翻訳は動作する場合があります。"
"OpenAI APIが無効な応答を返しました。APIのURLまたはキーを確認してください。API"
"がキーの検証をサポートしていない場合でも、文字起こしや翻訳は動作する場合があ"
"ります。"
#: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py
msgid "Enable folder watch"
@ -443,7 +450,9 @@ msgid ""
"will be used in an automated system, please do not add any comments or "
"notes, just the translation."
msgstr ""
"送信された各テキストを英語からスペイン語に翻訳してください。翻訳は自動化されたシステムで使用されます。コメントやメモは追加せず、翻訳のみを提供してください。"
"送信された各テキストを英語からスペイン語に翻訳してください。翻訳は自動化され"
"たシステムで使用されます。コメントやメモは追加せず、翻訳のみを提供してくださ"
"い。"
#: buzz/widgets/transcriber/advanced_settings_dialog.py
msgid "Instructions for AI:"
@ -566,6 +575,10 @@ msgstr "キャンセル済み"
msgid "Queued"
msgstr "キュー済み"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Skipped"
msgstr "スキップ済み"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "File Name / URL"
msgstr "ファイル名 / URL"
@ -628,8 +641,8 @@ msgid "Cannot Restart"
msgstr "再開できません"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Only failed or canceled transcriptions can be restarted."
msgstr "再開できるのは失敗またはキャンセルされた文字起こしのみです。"
msgid "Only failed, canceled, or skipped transcriptions can be restarted."
msgstr "再開できるのは失敗、キャンセル、またはスキップされた文字起こしのみです。"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Failed to restart transcription: {}"
@ -639,7 +652,9 @@ msgstr "文字起こしの再開に失敗しました: {}"
msgid ""
"Could not restart transcription: model not available and could not be "
"downloaded."
msgstr "文字起こしを再開できませんでした: モデルが利用できず、ダウンロードもできませんでした。"
msgstr ""
"文字起こしを再開できませんでした: モデルが利用できず、ダウンロードもできませ"
"んでした。"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Could not restart transcription: transcriber worker not found."
@ -745,7 +760,9 @@ msgstr "プラグイン"
msgid ""
"Plugins run with full access to your system. Only install plugins from "
"sources you trust."
msgstr "プラグインはシステムへのフルアクセス権を持ちます。信頼できるソースのプラグインのみをインストールしてください。"
msgstr ""
"プラグインはシステムへのフルアクセス権を持ちます。信頼できるソースのプラグイ"
"ンのみをインストールしてください。"
#: buzz/widgets/plugins_dialog/plugins_dialog.py
msgid "Add by URL..."
@ -968,7 +985,9 @@ msgstr "音声に追従"
msgid ""
"Enable/disable following the current audio position in the transcript. When "
"enabled, automatically scrolls to current text."
msgstr "文字起こし内で現在の音声位置への追従を有効・無効にします。有効にすると、現在のテキストに自動的にスクロールします。"
msgstr ""
"文字起こし内で現在の音声位置への追従を有効・無効にします。有効にすると、現在"
"のテキストに自動的にスクロールします。"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py
msgid "Scroll to Current"
@ -1039,8 +1058,7 @@ msgid "Desired subtitle length"
msgstr "希望する字幕の長さ"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid ""
"Available only if word level timings were disabled during transcription"
msgid "Available only if word level timings were disabled during transcription"
msgstr "文字起こし時に単語レベルのタイミングが無効だった場合のみ使用可能"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
@ -1095,7 +1113,9 @@ msgstr "3/8 アライメントモデルを読み込み中(キャッシュで
msgid ""
"Failed to load alignment model. Please check your internet connection and "
"try again."
msgstr "アライメントモデルの読み込みに失敗しました。インターネット接続を確認して再度お試しください。"
msgstr ""
"アライメントモデルの読み込みに失敗しました。インターネット接続を確認して再度"
"お試しください。"
#: buzz/widgets/transcription_viewer/speaker_identification_widget.py
msgid "4/8 Processing audio"
@ -1239,7 +1259,9 @@ msgid ""
"with a smaller model. To force CPU mode use BUZZ_FORCE_CPU=TRUE environment "
"variable."
msgstr ""
"メモリ不足のためWhisperサーバーの起動に失敗しました。より小さいモデルで再試行してください。CPUモードを強制するには環境変数BUZZ_FORCE_CPU=TRUEを使用してください。"
"メモリ不足のためWhisperサーバーの起動に失敗しました。より小さいモデルで再試行"
"してください。CPUモードを強制するには環境変数BUZZ_FORCE_CPU=TRUEを使用してく"
"ださい。"
#: buzz/transcriber/transcriber.py
msgid "Translate to English"
@ -1701,11 +1723,12 @@ msgstr "強化された言語検出"
msgid ""
"Detect the spoken language with whisper.cpp before transcription (using the "
"largest downloaded model, or the tiny model otherwise) and use it for the "
"transcription and exported file names. Only runs when the language is set to"
" auto-detect."
"transcription and exported file names. Only runs when the language is set to "
"auto-detect."
msgstr ""
"文字起こしの前に whisper.cpp で話されている言語を検出し(ダウンロード済みの最大のモデル、なければ tiny "
"モデルを使用)、文字起こしとエクスポートされるファイル名に使用します。言語が自動検出に設定されている場合にのみ実行されます。"
"文字起こしの前に whisper.cpp で話されている言語を検出し(ダウンロード済みの最"
"大のモデル、なければ tiny モデルを使用)、文字起こしとエクスポートされるファ"
"イル名に使用します。言語が自動検出に設定されている場合にのみ実行されます。"
#: buzz/plugins/enhanced_language_detection/plugin.py
msgid "Download tiny model if none available"
@ -1715,7 +1738,9 @@ msgstr "利用できるモデルがない場合は tiny モデルをダウンロ
msgid ""
"If no whisper.cpp model is downloaded, download the tiny model to use for "
"language detection."
msgstr "whisper.cpp モデルがダウンロードされていない場合、言語検出に使用する tiny モデルをダウンロードします。"
msgstr ""
"whisper.cpp モデルがダウンロードされていない場合、言語検出に使用する tiny モ"
"デルをダウンロードします。"
#: buzz/plugins/export_docx/plugin.py
msgid "Export to DOCX"
@ -1726,7 +1751,8 @@ msgid ""
"Export the transcript to a Microsoft Word (.docx) file after transcription, "
"optionally including timestamps."
msgstr ""
"文字起こし後、トランスクリプトをMicrosoft Word(.docx)ファイルにエクスポートします。オプションでタイムスタンプを含めます。"
"文字起こし後、トランスクリプトをMicrosoft Word(.docx)ファイルにエクスポート"
"します。オプションでタイムスタンプを含めます。"
#: buzz/plugins/export_docx/plugin.py buzz/plugins/ai_summary/plugin.py
msgid "Leave empty to save next to the source file."
@ -1742,11 +1768,13 @@ msgstr "自動文字起こしリサイズ"
#: buzz/plugins/transcript_resizer/plugin.py
msgid ""
"When a transcription has word-level timings, automatically regroup the words"
" into properly sized subtitles and replace the result. Mirrors the Merge "
"When a transcription has word-level timings, automatically regroup the words "
"into properly sized subtitles and replace the result. Mirrors the Merge "
"options of the transcript resizer."
msgstr ""
"文字起こしに単語レベルのタイミングがある場合、単語を適切なサイズの字幕に自動的に再グループ化し、結果を置き換えます。文字起こしリサイザーの結合オプションを再現します。"
"文字起こしに単語レベルのタイミングがある場合、単語を適切なサイズの字幕に自動"
"的に再グループ化し、結果を置き換えます。文字起こしリサイザーの結合オプション"
"を再現します。"
#: buzz/plugins/transcript_resizer/plugin.py
msgid "Merge gap (seconds)"
@ -1760,6 +1788,34 @@ msgstr "句読点"
msgid "Maximum subtitle length"
msgstr "字幕の最大長"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip Already Transcribed"
msgstr "転写済みをスキップ"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip transcription if results already exist on disk or in the database"
msgstr "ディスクまたはデータベースに結果が既に存在する場合は転写をスキップ"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check for existing result files"
msgstr "既存の結果ファイルを確認"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next "
"to it"
msgstr ""
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check in transcription database"
msgstr "転写データベースを確認"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if this file has already been transcribed and the record exists in the "
"database"
msgstr ""
#: buzz/plugins/ai_summary/plugin.py
msgid "AI Summary"
msgstr "AI要約"
@ -1768,7 +1824,9 @@ msgstr "AI要約"
msgid ""
"Generate an AI summary of the transcript via an OpenAI-compatible API and "
"save it to the Notes field and/or a file."
msgstr "OpenAI互換APIを使用して文字起こしのAI要約を生成し、メモ欄やファイルに保存します。"
msgstr ""
"OpenAI互換APIを使用して文字起こしのAI要約を生成し、メモ欄やファイルに保存しま"
"す。"
#: buzz/plugins/ai_summary/plugin.py
msgid "API base URL"
@ -1796,9 +1854,11 @@ msgstr "出力フォルダ(ファイル用)"
#: buzz/file_transcriber_queue_worker.py
msgid ""
"Speech extraction failed! Check your internet connection — a model may need "
"to be downloaded."
msgstr "音声抽出に失敗しました!インターネット接続を確認してください。モデルのダウンロードが必要な場合があります。"
"Speech extraction failed! Check your internet connection \\u2014 a model may "
"need to be downloaded."
msgstr ""
"音声抽出に失敗しました!インターネット接続を確認してください。モデルのダウン"
"ロードが必要な場合があります。"
#~ msgid "Live recording mode:"
#~ msgstr "ライブ録音モード:"
@ -1819,13 +1879,17 @@ msgstr "音声抽出に失敗しました!インターネット接続を確認
#~ msgstr "Snap権限通知"
#~ msgid ""
#~ "Detected missing permissions, please check that snap permissions have been "
#~ "granted"
#~ msgstr "不足している権限が検出されました。Snapパッケージに権限が付与されていることを確認してください"
#~ "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 "必要なパーミッションを有効にするには、ターミナルで以下のコマンドを実行してください"
#~ msgstr ""
#~ "必要なパーミッションを有効にするには、ターミナルで以下のコマンドを実行して"
#~ "ください"
#~ msgid "Close"
#~ msgstr "閉じる"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-06-14 16:54+0300\n"
"POT-Creation-Date: 2026-06-27 15:05+0300\n"
"PO-Revision-Date: 2026-03-06 13:23+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
@ -218,7 +218,7 @@ msgstr "Izmantot tikai CPU un deaktivēt GPU paātrināšanu"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
msgstr "Iestatiet, ja lielāki modeļi neietilpst GPU atmiņā un Buzz avarē"
"Aktivizējiet šo, ja lielāki modeļi neietilpst jūsu video kartes atmiņā un "
"Buzz avarē"
@ -258,11 +258,11 @@ msgstr "Izvēlieties mapi kurā eksportēt"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
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"
" validation."
"Transcription and translation may still work if the API does not support key "
"validation."
msgstr ""
"OpenAI API atbilde ir nederīga. Lūdzu pārbaudiet API Adresi un savu atslēgu."
" Atpazīšana un tulkošana joprojām var strādāt, ja API neatbalsta atslēgu "
"OpenAI API atbilde ir nederīga. Lūdzu pārbaudiet API Adresi un savu atslēgu. "
"Atpazīšana un tulkošana joprojām var strādāt, ja API neatbalsta atslēgu "
"pārbaudi."
#: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py
@ -431,7 +431,7 @@ msgstr "Runas atpazīšanas iestatījumi"
#: buzz/widgets/transcriber/advanced_settings_dialog.py
msgid "Initial Prompt:"
msgstr ""
msgstr "Sākotnējais uzaicinājums:"
"Sākotnējais\n"
"vaicājums:"
@ -582,6 +582,10 @@ msgstr "Atcelts"
msgid "Queued"
msgstr "Ierindots"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Skipped"
msgstr "Izlaists"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "File Name / URL"
msgstr "Fails / URL"
@ -644,8 +648,8 @@ msgid "Cannot Restart"
msgstr "Neizdodas sākt"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Only failed or canceled transcriptions can be restarted."
msgstr "Atkārtoti sākt var tikai kļūdainus vai atceltus ierakstus."
msgid "Only failed, canceled, or skipped transcriptions can be restarted."
msgstr "Atkārtoti sākt var tikai kļūdainus, atceltus vai izlaistus ierakstus."
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Failed to restart transcription: {}"
@ -1060,8 +1064,7 @@ msgid "Desired subtitle length"
msgstr "Vēlamais teksta garums"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid ""
"Available only if word level timings were disabled during transcription"
msgid "Available only if word level timings were disabled during transcription"
msgstr "Pieejami tikai, ierakstiem, kas atpazīti bez dalīšanas pa vārdiem"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
@ -1257,7 +1260,7 @@ msgstr "Neizdevās saglabāt OpenAI API atslēgu atslēgu saišķī"
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py
#: buzz/transcriber/recording_transcriber.py
msgid "Whisper server failed to start. Check logs for details."
msgstr ""
msgstr "Whisper serveris neizdevās palaist. Sīkāk skatīt žurnālos."
"Whisper serverim neizdevās ieslēgties. Lūdzu pārbaudiet lietotnes žurnāla "
"ierakstus."
@ -1732,12 +1735,12 @@ msgstr "Uzlabota valodas noteikšana"
msgid ""
"Detect the spoken language with whisper.cpp before transcription (using the "
"largest downloaded model, or the tiny model otherwise) and use it for the "
"transcription and exported file names. Only runs when the language is set to"
" auto-detect."
"transcription and exported file names. Only runs when the language is set to "
"auto-detect."
msgstr ""
"Uzlabo valodas noteikšanu visiem modeļu veidiem, izmantojot whisper.cpp "
"(lieto lielāko lejupielādēto modeli vai tiny modeli). Ļauj izmantot noteikto"
" valodu eksportēto failu nosaukumiem. Darbojas tikai tad, ja valoda ir "
"(lieto lielāko lejupielādēto modeli vai tiny modeli). Ļauj izmantot noteikto "
"valodu eksportēto failu nosaukumiem. Darbojas tikai tad, ja valoda ir "
"iestatīta uz automātisku noteikšanu."
#: buzz/plugins/enhanced_language_detection/plugin.py
@ -1761,8 +1764,8 @@ msgid ""
"Export the transcript to a Microsoft Word (.docx) file after transcription, "
"optionally including timestamps."
msgstr ""
"Pēc transkripcijas eksportē transkriptu uz Microsoft Word (.docx) failu, pēc"
" izvēles iekļaujot laika atzīmes."
"Pēc transkripcijas eksportē transkriptu uz Microsoft Word (.docx) failu, pēc "
"izvēles iekļaujot laika atzīmes."
#: buzz/plugins/export_docx/plugin.py buzz/plugins/ai_summary/plugin.py
msgid "Leave empty to save next to the source file."
@ -1778,8 +1781,8 @@ msgstr "Automātiska garuma maiņa"
#: buzz/plugins/transcript_resizer/plugin.py
msgid ""
"When a transcription has word-level timings, automatically regroup the words"
" into properly sized subtitles and replace the result. Mirrors the Merge "
"When a transcription has word-level timings, automatically regroup the words "
"into properly sized subtitles and replace the result. Mirrors the Merge "
"options of the transcript resizer."
msgstr ""
"Ierakstus, kas ir dalīti pa vārdiem, automātiski pārgrupē pareiza izmēra "
@ -1797,6 +1800,34 @@ msgstr "Pieturzīmes"
msgid "Maximum subtitle length"
msgstr "Maksimālais subtitru garums"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip Already Transcribed"
msgstr "Izlaist jau transkribētos"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip transcription if results already exist on disk or in the database"
msgstr "Izlaist transkripciju, ja rezultāti jau pastāv diskā vai datubāzē"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check for existing result files"
msgstr "Pārbaudīt esošos rezultātu failus"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next "
"to it"
msgstr ""
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check in transcription database"
msgstr "Pārbaudīt transkripciju datubāzē"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if this file has already been transcribed and the record exists in the "
"database"
msgstr ""
#: buzz/plugins/ai_summary/plugin.py
msgid "AI Summary"
msgstr "MI kopsavilkums"
@ -1835,8 +1866,8 @@ msgstr "Izvades mape"
#: buzz/file_transcriber_queue_worker.py
msgid ""
"Speech extraction failed! Check your internet connection — a model may need "
"to be downloaded."
"Speech extraction failed! Check your internet connection \\u2014 a model may "
"need to be downloaded."
msgstr ""
"Runas atdalīšana neizdevās! Pārbaudiet interneta savienojumu, iespējams "
"jālejupielādē modelis."
@ -1860,11 +1891,11 @@ msgstr ""
#~ msgstr "Snap atļauju piezīme"
#~ msgid ""
#~ "Detected missing permissions, please check that snap permissions have been "
#~ "granted"
#~ "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"
#~ "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"

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-06-14 16:54+0300\n"
"POT-Creation-Date: 2026-06-27 15:05+0300\n"
"PO-Revision-Date: 2025-03-20 18:30+0100\n"
"Last-Translator: Heimen Stoffels <vistausss@fastmail.com>\n"
"Language-Team: none\n"
@ -195,8 +195,8 @@ msgid ""
"Note: Live recording export settings will be moved to the Advanced Settings "
"in the Live Recording screen in a future version."
msgstr ""
"Opmerking: de exportinstellingen voor live-opnames worden in een toekomstige"
" versie verplaatst naar de geavanceerde instellingen in het scherm Live-"
"Opmerking: de exportinstellingen voor live-opnames worden in een toekomstige "
"versie verplaatst naar de geavanceerde instellingen in het scherm Live-"
"opname."
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
@ -221,7 +221,7 @@ msgstr "Alleen CPU gebruiken en GPU-versnelling uitschakelen"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
msgstr "Stel dit in als grotere modellen niet passen in uw GPU-geheugen en Buzz crasht"
"Gebruik dit als grotere modellen niet in het GPU-geheugen passen en Buzz "
"crasht"
@ -261,8 +261,8 @@ msgstr "Kies een exportmap"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
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"
" validation."
"Transcription and translation may still work if the API does not support key "
"validation."
msgstr ""
"De api gaf een ongeldig antwoord terug. Controleer de url of sleutel. "
"Transcriptie en vertaling werkt mogelijk nog steeds als de api niet om "
@ -406,7 +406,7 @@ msgstr "Model:"
#: buzz/widgets/transcriber/transcription_options_group_box.py
#: buzz/transcriber/recording_transcriber.py
msgid "First time use of a model may take up to several minutest to load."
msgstr ""
msgstr "Eerste gebruik van een model kan enkele minuten duren om te laden."
"Let op: de eerste keer kan het enkele minuten duren voordat het model "
"geladen is."
@ -460,8 +460,8 @@ msgid ""
"will be used in an automated system, please do not add any comments or "
"notes, just the translation."
msgstr ""
"Vertaal elke tekst die naar u wordt gestuurd van het Engels naar het Spaans."
" De vertaling wordt gebruikt in een geautomatiseerd systeem. Voeg geen "
"Vertaal elke tekst die naar u wordt gestuurd van het Engels naar het Spaans. "
"De vertaling wordt gebruikt in een geautomatiseerd systeem. Voeg geen "
"opmerkingen of notities toe, alleen de vertaling."
#: buzz/widgets/transcriber/advanced_settings_dialog.py
@ -585,6 +585,10 @@ msgstr "Afgebroken"
msgid "Queued"
msgstr "In wachtrij"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Skipped"
msgstr "Overgeslagen"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "File Name / URL"
msgstr "Bestandsnaam/Url"
@ -647,9 +651,8 @@ msgid "Cannot Restart"
msgstr "Kan niet opnieuw starten"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Only failed or canceled transcriptions can be restarted."
msgstr ""
"Alleen mislukte of afgebroken transcripties kunnen opnieuw worden gestart."
msgid "Only failed, canceled, or skipped transcriptions can be restarted."
msgstr "Alleen mislukte, geannuleerde of overgeslagen transcripties kunnen opnieuw worden gestart."
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Failed to restart transcription: {}"
@ -665,7 +668,7 @@ msgstr ""
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Could not restart transcription: transcriber worker not found."
msgstr ""
msgstr "Kon transcriptie niet opnieuw starten: transcribeerder niet gevonden."
"Transcriptie kon niet opnieuw worden gestart: transcriptieproces niet "
"gevonden."
@ -768,8 +771,8 @@ msgid ""
"Plugins run with full access to your system. Only install plugins from "
"sources you trust."
msgstr ""
"Plug-ins hebben volledige toegang tot je systeem. Installeer alleen plug-ins"
" van bronnen die je vertrouwt."
"Plug-ins hebben volledige toegang tot je systeem. Installeer alleen plug-ins "
"van bronnen die je vertrouwt."
#: buzz/widgets/plugins_dialog/plugins_dialog.py
msgid "Add by URL..."
@ -1065,9 +1068,8 @@ msgid "Desired subtitle length"
msgstr "Voorkeurslengte van ondertiteling"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid ""
"Available only if word level timings were disabled during transcription"
msgstr ""
msgid "Available only if word level timings were disabled during transcription"
msgstr "Alleen beschikbaar als woordniveautijden waren uitgeschakeld tijdens de transcriptie"
"Alleen beschikbaar als timings op woordniveau zijn uitgeschakeld tijdens "
"transcriptie"
@ -1096,7 +1098,7 @@ msgstr "Samenvoegen"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid "Available only if word level timings were enabled during transcription"
msgstr ""
msgstr "Alleen beschikbaar als woordniveautijden waren ingeschakeld tijdens de transcriptie"
"Alleen beschikbaar als timings op woordniveau zijn ingeschakeld tijdens "
"transcriptie"
@ -1266,7 +1268,7 @@ msgstr "De OpenAI-api-sleutel kan niet worden bewaard in de sleutelbos"
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py
#: buzz/transcriber/recording_transcriber.py
msgid "Whisper server failed to start. Check logs for details."
msgstr ""
msgstr "Whisper-server kon niet starten. Controleer de logboeken voor details."
"De Whisper-server kon niet worden gestart. Raadpleeg de logboeken voor meer "
"informatie."
@ -1741,12 +1743,12 @@ msgstr "Verbeterde taaldetectie"
msgid ""
"Detect the spoken language with whisper.cpp before transcription (using the "
"largest downloaded model, or the tiny model otherwise) and use it for the "
"transcription and exported file names. Only runs when the language is set to"
" auto-detect."
"transcription and exported file names. Only runs when the language is set to "
"auto-detect."
msgstr ""
"Detecteert de gesproken taal met whisper.cpp vóór het transcriberen (met het"
" grootste gedownloade model, of anders het tiny-model) en gebruikt deze voor"
" de transcriptie en de geëxporteerde bestandsnamen. Wordt alleen uitgevoerd "
"Detecteert de gesproken taal met whisper.cpp vóór het transcriberen (met het "
"grootste gedownloade model, of anders het tiny-model) en gebruikt deze voor "
"de transcriptie en de geëxporteerde bestandsnamen. Wordt alleen uitgevoerd "
"wanneer de taal is ingesteld op automatische detectie."
#: buzz/plugins/enhanced_language_detection/plugin.py
@ -1758,8 +1760,8 @@ msgid ""
"If no whisper.cpp model is downloaded, download the tiny model to use for "
"language detection."
msgstr ""
"Als er geen whisper.cpp-model is gedownload, wordt het tiny-model gedownload"
" voor taaldetectie."
"Als er geen whisper.cpp-model is gedownload, wordt het tiny-model gedownload "
"voor taaldetectie."
#: buzz/plugins/export_docx/plugin.py
msgid "Export to DOCX"
@ -1787,14 +1789,14 @@ msgstr "Automatisch transcriptie aanpassen"
#: buzz/plugins/transcript_resizer/plugin.py
msgid ""
"When a transcription has word-level timings, automatically regroup the words"
" into properly sized subtitles and replace the result. Mirrors the Merge "
"When a transcription has word-level timings, automatically regroup the words "
"into properly sized subtitles and replace the result. Mirrors the Merge "
"options of the transcript resizer."
msgstr ""
"Wanneer een transcriptie tijdsmarkeringen op woordniveau heeft, worden de "
"woorden automatisch hergroepeerd in passend grote ondertitels en wordt het "
"resultaat vervangen. Komt overeen met de samenvoegopties van de "
"transcriptie-aanpasser."
"resultaat vervangen. Komt overeen met de samenvoegopties van de transcriptie-"
"aanpasser."
#: buzz/plugins/transcript_resizer/plugin.py
msgid "Merge gap (seconds)"
@ -1808,6 +1810,34 @@ msgstr "Interpunctie"
msgid "Maximum subtitle length"
msgstr "Maximale ondertitellengte"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip Already Transcribed"
msgstr "Reeds getranscribeerde overslaan"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip transcription if results already exist on disk or in the database"
msgstr "Transcriptie overslaan als resultaten al bestaan op schijf of in de database"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check for existing result files"
msgstr "Controleren op bestaande resultaatbestanden"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next "
"to it"
msgstr ""
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check in transcription database"
msgstr "Controleren in de transcriptiedatabase"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if this file has already been transcribed and the record exists in the "
"database"
msgstr ""
#: buzz/plugins/ai_summary/plugin.py
msgid "AI Summary"
msgstr "AI-samenvatting"
@ -1817,8 +1847,8 @@ msgid ""
"Generate an AI summary of the transcript via an OpenAI-compatible API and "
"save it to the Notes field and/or a file."
msgstr ""
"Genereert een AI-samenvatting van de transcriptie via een OpenAI-compatibele"
" API en slaat deze op in het notitieveld en/of een bestand."
"Genereert een AI-samenvatting van de transcriptie via een OpenAI-compatibele "
"API en slaat deze op in het notitieveld en/of een bestand."
#: buzz/plugins/ai_summary/plugin.py
msgid "API base URL"
@ -1846,11 +1876,11 @@ msgstr "Uitvoermap (voor bestand)"
#: buzz/file_transcriber_queue_worker.py
msgid ""
"Speech extraction failed! Check your internet connection — a model may need "
"to be downloaded."
"Speech extraction failed! Check your internet connection \\u2014 a model may "
"need to be downloaded."
msgstr ""
"Spraakextractie mislukt! Controleer uw internetverbinding — mogelijk moet er"
" een model worden gedownload."
"Spraakextractie mislukt! Controleer uw internetverbinding — mogelijk moet er "
"een model worden gedownload."
#~ msgid "Live recording mode:"
#~ msgstr "Live-opnamemodus:"
@ -1873,11 +1903,11 @@ msgstr ""
#~ msgstr "Snap-rechten"
#~ msgid ""
#~ "Detected missing permissions, please check that snap permissions have been "
#~ "granted"
#~ "Detected missing permissions, please check that snap permissions have "
#~ "been granted"
#~ msgstr ""
#~ "Er ontbreken toegangsrechten - controleer of ze daadwerkelijk allemaal zijn "
#~ "toegekend"
#~ "Er ontbreken toegangsrechten - controleer of ze daadwerkelijk allemaal "
#~ "zijn toegekend"
#~ msgid ""
#~ "To enable necessary permissions run the following commands in the terminal"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-06-14 16:54+0300\n"
"POT-Creation-Date: 2026-06-27 15:05+0300\n"
"PO-Revision-Date: 2024-03-17 20:50+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
@ -218,7 +218,7 @@ msgstr "Używaj tylko CPU i wyłącz akcelerację GPU"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
msgstr "Ustaw to, jeśli większe modele nie mieszczą się w pamięci GPU i Buzz się zawiesza"
"Ustaw to, jeśli większe modele nie mieszczą się w pamięci GPU i Buzz się "
"zawiesza"
@ -258,8 +258,8 @@ msgstr "Wybierz folder eksportu"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
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"
" validation."
"Transcription and translation may still work if the API does not support key "
"validation."
msgstr ""
"OpenAI API zwróciło nieprawidłową odpowiedź. Sprawdź adres URL API lub swój "
"klucz. Transkrypcja i tłumaczenie mogą nadal działać, jeśli API nie "
@ -580,6 +580,10 @@ msgstr "Anulowano"
msgid "Queued"
msgstr "Kolejka"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Skipped"
msgstr "Pominięto"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "File Name / URL"
msgstr "Nazwa pliku / URL"
@ -642,9 +646,8 @@ msgid "Cannot Restart"
msgstr "Nie można ponownie uruchomić"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Only failed or canceled transcriptions can be restarted."
msgstr ""
"Tylko nieudane lub anulowane transkrypcje mogą być uruchomione ponownie."
msgid "Only failed, canceled, or skipped transcriptions can be restarted."
msgstr "Można ponownie uruchomić tylko transkrypcje zakończone niepowodzeniem, anulowane lub pominięte."
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Failed to restart transcription: {}"
@ -660,7 +663,7 @@ msgstr ""
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Could not restart transcription: transcriber worker not found."
msgstr ""
msgstr "Nie można ponownie uruchomić transkrypcji: nie znaleziono pracownika transkrypcji."
"Nie można uruchomić ponownie transkrypcji: nie znaleziono procesu "
"transkrypcji."
@ -1062,9 +1065,8 @@ msgid "Desired subtitle length"
msgstr "Żądana długość napisów"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid ""
"Available only if word level timings were disabled during transcription"
msgstr ""
msgid "Available only if word level timings were disabled during transcription"
msgstr "Dostępne tylko jeśli znaczniki czasu na poziomie słów były wyłączone podczas transkrypcji"
"Dostępne tylko jeśli znaczniki dla słów były wyłączone podczas transkrypcji"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
@ -1092,7 +1094,7 @@ msgstr "Scal"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid "Available only if word level timings were enabled during transcription"
msgstr ""
msgstr "Dostępne tylko jeśli znaczniki czasu na poziomie słów były włączone podczas transkrypcji"
"Dostępne tylko jeśli znaczniki dla słów były włączone podczas transkrypcji"
#: buzz/widgets/transcription_viewer/speaker_identification_widget.py
@ -1116,7 +1118,7 @@ msgstr "3/8 Ładowanie modelu wyrównania"
#: buzz/widgets/transcription_viewer/speaker_identification_widget.py
msgid "3/8 Loading alignment model (retrying with cache...)"
msgstr ""
msgstr "3/8 Wczytywanie modelu wyrównania (ponowna próba z pamięcią podręczną...)"
"3/8 Ładowanie modelu wyrównania (ponowna próba z pamięcią podręczną...)"
#: buzz/widgets/transcription_viewer/speaker_identification_widget.py
@ -1262,8 +1264,7 @@ msgstr "Nie można zapisać klucza API OpenAI w breloku kluczy"
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py
#: buzz/transcriber/recording_transcriber.py
msgid "Whisper server failed to start. Check logs for details."
msgstr ""
"Serwer Whisper nie uruchomił się. Sprawdź logi, aby uzyskać szczegóły."
msgstr "Serwer Whisper nie uruchomił się. Sprawdź logi, aby uzyskać szczegóły."
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py
#: buzz/transcriber/recording_transcriber.py
@ -1272,8 +1273,8 @@ msgid ""
"with a smaller model. To force CPU mode use BUZZ_FORCE_CPU=TRUE environment "
"variable."
msgstr ""
"Serwer Whisper nie uruchomił się z powodu niewystarczającej pamięci. Spróbuj"
" ponownie z mniejszym modelem. Aby wymusić tryb CPU, użyj zmiennej "
"Serwer Whisper nie uruchomił się z powodu niewystarczającej pamięci. Spróbuj "
"ponownie z mniejszym modelem. Aby wymusić tryb CPU, użyj zmiennej "
"środowiskowej BUZZ_FORCE_CPU=TRUE."
#: buzz/transcriber/transcriber.py
@ -1736,12 +1737,12 @@ msgstr "Ulepszone wykrywanie języka"
msgid ""
"Detect the spoken language with whisper.cpp before transcription (using the "
"largest downloaded model, or the tiny model otherwise) and use it for the "
"transcription and exported file names. Only runs when the language is set to"
" auto-detect."
"transcription and exported file names. Only runs when the language is set to "
"auto-detect."
msgstr ""
"Wykrywa język mówiony za pomocą whisper.cpp przed transkrypcją (przy użyciu "
"największego pobranego modelu lub modelu tiny w przeciwnym razie) i używa go"
" do transkrypcji oraz nazw eksportowanych plików. Działa tylko wtedy, gdy "
"największego pobranego modelu lub modelu tiny w przeciwnym razie) i używa go "
"do transkrypcji oraz nazw eksportowanych plików. Działa tylko wtedy, gdy "
"język jest ustawiony na automatyczne wykrywanie."
#: buzz/plugins/enhanced_language_detection/plugin.py
@ -1782,8 +1783,8 @@ msgstr "Automatyczna zmiana rozmiaru transkrypcji"
#: buzz/plugins/transcript_resizer/plugin.py
msgid ""
"When a transcription has word-level timings, automatically regroup the words"
" into properly sized subtitles and replace the result. Mirrors the Merge "
"When a transcription has word-level timings, automatically regroup the words "
"into properly sized subtitles and replace the result. Mirrors the Merge "
"options of the transcript resizer."
msgstr ""
"Gdy transkrypcja ma znaczniki czasu na poziomie słów, automatycznie grupuje "
@ -1802,6 +1803,34 @@ msgstr "Interpunkcja"
msgid "Maximum subtitle length"
msgstr "Maksymalna długość napisu"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip Already Transcribed"
msgstr "Pomijaj już transkrybowane"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip transcription if results already exist on disk or in the database"
msgstr "Pomiń transkrypcję, jeśli wyniki już istnieją na dysku lub w bazie danych"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check for existing result files"
msgstr "Sprawdź istniejące pliki wyników"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next "
"to it"
msgstr ""
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check in transcription database"
msgstr "Sprawdź w bazie danych transkrypcji"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if this file has already been transcribed and the record exists in the "
"database"
msgstr ""
#: buzz/plugins/ai_summary/plugin.py
msgid "AI Summary"
msgstr "Podsumowanie AI"
@ -1840,8 +1869,8 @@ msgstr "Folder wyjściowy (dla pliku)"
#: buzz/file_transcriber_queue_worker.py
msgid ""
"Speech extraction failed! Check your internet connection — a model may need "
"to be downloaded."
"Speech extraction failed! Check your internet connection \\u2014 a model may "
"need to be downloaded."
msgstr ""
"Wyodrębnianie mowy nie powiodło się! Sprawdź połączenie internetowe — może "
"być konieczne pobranie modelu."

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Buzz\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-06-14 16:54+0300\n"
"POT-Creation-Date: 2026-06-27 15:05+0300\n"
"PO-Revision-Date: 2025-11-01 17:43-0300\n"
"Last-Translator: Paulo Schopf <pschopf@gmail.com>\n"
"Language-Team: none\n"
@ -218,9 +218,8 @@ msgstr "Usar somente a CPU e desabilitar aceleração por GPU"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
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"
msgstr "Ative isso se modelos maiores não couberem na memória da GPU e o Buzz travar"
"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
msgid "Disable GPU"
@ -258,8 +257,8 @@ msgstr "Selecionar Pasta de Exportação"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
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"
" validation."
"Transcription and translation may still work if the API does not support key "
"validation."
msgstr ""
"A API OpenAI retornou uma resposta inválida. Verifique a URL da API ou sua "
"chave. A transcrição e tradução ainda podem funcionar se a API não suportar "
@ -580,6 +579,10 @@ msgstr "Cancelado"
msgid "Queued"
msgstr "Na fila"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Skipped"
msgstr "Ignorado"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "File Name / URL"
msgstr "Nome do Arquivo / URL"
@ -642,8 +645,8 @@ msgid "Cannot Restart"
msgstr "Não é possível reiniciar"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Only failed or canceled transcriptions can be restarted."
msgstr "Somente transcrições com falha ou canceladas podem ser reiniciadas."
msgid "Only failed, canceled, or skipped transcriptions can be restarted."
msgstr "Somente transcrições com falha, canceladas ou ignoradas podem ser reiniciadas."
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Failed to restart transcription: {}"
@ -654,12 +657,12 @@ msgid ""
"Could not restart transcription: model not available and could not be "
"downloaded."
msgstr ""
"Não foi possível reiniciar a transcrição: o modelo não está disponível e não"
" pôde ser baixado."
"Não foi possível reiniciar a transcrição: o modelo não está disponível e não "
"pôde ser baixado."
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Could not restart transcription: transcriber worker not found."
msgstr ""
msgstr "Não foi possível reiniciar a transcrição: trabalhador de transcrição não encontrado."
"Não foi possível reiniciar a transcrição: trabalhador de transcrição não "
"encontrado."
@ -764,8 +767,8 @@ msgid ""
"Plugins run with full access to your system. Only install plugins from "
"sources you trust."
msgstr ""
"Os plugins têm acesso total ao seu sistema. Instale apenas plugins de fontes"
" confiáveis."
"Os plugins têm acesso total ao seu sistema. Instale apenas plugins de fontes "
"confiáveis."
#: buzz/widgets/plugins_dialog/plugins_dialog.py
msgid "Add by URL..."
@ -1061,9 +1064,8 @@ msgid "Desired subtitle length"
msgstr "Duração desejada da legenda"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid ""
"Available only if word level timings were disabled during transcription"
msgstr ""
msgid "Available only if word level timings were disabled during transcription"
msgstr "Disponível apenas se os tempos de nível de palavra estavam desativados durante a transcrição"
"Disponível apenas se os tempos em nível de palavra foram desabilitados "
"durante a transcrição"
@ -1092,9 +1094,9 @@ msgstr "Mesclar"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid "Available only if word level timings were enabled during transcription"
msgstr ""
"Disponível apenas se os tempos em nível de palavra foram habilitados durante"
" a transcrição"
msgstr "Disponível apenas se os tempos de nível de palavra estavam ativados durante a transcrição"
"Disponível apenas se os tempos em nível de palavra foram habilitados durante "
"a transcrição"
#: buzz/widgets/transcription_viewer/speaker_identification_widget.py
msgid ""
@ -1117,8 +1119,7 @@ msgstr "3/8 Carregando modelo de alinhamento"
#: buzz/widgets/transcription_viewer/speaker_identification_widget.py
msgid "3/8 Loading alignment model (retrying with cache...)"
msgstr ""
"3/8 Carregando modelo de alinhamento (tentando novamente com cache...)"
msgstr "3/8 Carregando modelo de alinhamento (tentando novamente com cache...)"
#: buzz/widgets/transcription_viewer/speaker_identification_widget.py
msgid ""
@ -1736,13 +1737,13 @@ msgstr "Detecção de idioma aprimorada"
msgid ""
"Detect the spoken language with whisper.cpp before transcription (using the "
"largest downloaded model, or the tiny model otherwise) and use it for the "
"transcription and exported file names. Only runs when the language is set to"
" auto-detect."
"transcription and exported file names. Only runs when the language is set to "
"auto-detect."
msgstr ""
"Detecta o idioma falado com whisper.cpp antes da transcrição (usando o maior"
" modelo baixado ou, caso contrário, o modelo tiny) e o usa para a "
"transcrição e os nomes dos arquivos exportados. Só é executado quando o "
"idioma está definido como detecção automática."
"Detecta o idioma falado com whisper.cpp antes da transcrição (usando o maior "
"modelo baixado ou, caso contrário, o modelo tiny) e o usa para a transcrição "
"e os nomes dos arquivos exportados. Só é executado quando o idioma está "
"definido como detecção automática."
#: buzz/plugins/enhanced_language_detection/plugin.py
msgid "Download tiny model if none available"
@ -1782,14 +1783,13 @@ msgstr "Redimensionador automático de transcrição"
#: buzz/plugins/transcript_resizer/plugin.py
msgid ""
"When a transcription has word-level timings, automatically regroup the words"
" into properly sized subtitles and replace the result. Mirrors the Merge "
"When a transcription has word-level timings, automatically regroup the words "
"into properly sized subtitles and replace the result. Mirrors the Merge "
"options of the transcript resizer."
msgstr ""
"Quando uma transcrição tem marcação de tempo por palavra, reagrupa "
"automaticamente as palavras em legendas de tamanho adequado e substitui o "
"resultado. Reproduz as opções de mesclagem do redimensionador de "
"transcrição."
"resultado. Reproduz as opções de mesclagem do redimensionador de transcrição."
#: buzz/plugins/transcript_resizer/plugin.py
msgid "Merge gap (seconds)"
@ -1803,6 +1803,34 @@ msgstr "Pontuação"
msgid "Maximum subtitle length"
msgstr "Comprimento máximo da legenda"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip Already Transcribed"
msgstr "Pular já transcritos"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip transcription if results already exist on disk or in the database"
msgstr "Pular a transcrição se os resultados já existirem no disco ou no banco de dados"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check for existing result files"
msgstr "Verificar arquivos de resultado existentes"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next "
"to it"
msgstr ""
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check in transcription database"
msgstr "Verificar no banco de dados de transcrições"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if this file has already been transcribed and the record exists in the "
"database"
msgstr ""
#: buzz/plugins/ai_summary/plugin.py
msgid "AI Summary"
msgstr "Resumo com IA"
@ -1841,8 +1869,8 @@ msgstr "Pasta de saída (para o arquivo)"
#: buzz/file_transcriber_queue_worker.py
msgid ""
"Speech extraction failed! Check your internet connection — a model may need "
"to be downloaded."
"Speech extraction failed! Check your internet connection \\u2014 a model may "
"need to be downloaded."
msgstr ""
"Falha na extração de fala! Verifique sua conexão com a internet — pode ser "
"necessário baixar um modelo."
@ -1867,8 +1895,8 @@ msgstr ""
#~ msgstr "Aviso de permissão do Snap"
#~ msgid ""
#~ "Detected missing permissions, please check that snap permissions have been "
#~ "granted"
#~ "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"
@ -1876,8 +1904,8 @@ msgstr ""
#~ 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"
#~ "Para habilitar as permissões necessárias, execute os seguintes comandos "
#~ "no terminal"
#~ msgid "Close"
#~ msgstr "Fechar"

View file

@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-06-14 16:54+0300\n"
"POT-Creation-Date: 2026-06-27 15:05+0300\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"
@ -11,7 +11,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Poedit 3.4.4\n"
#: buzz/widgets/import_url_dialog.py buzz/settings/shortcut.py
@ -215,7 +216,7 @@ msgstr "Использовать только CPU и отключить уско
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
msgstr "Установите это, если большие модели не помещаются в память GPU и Buzz вылетает"
"Включите это, если большие модели не помещаются в память GPU и Buzz вылетает"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
@ -254,8 +255,8 @@ msgstr "Выберите папку для экспорта"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
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"
" validation."
"Transcription and translation may still work if the API does not support key "
"validation."
msgstr ""
"OpenAI API вернул недопустимый ответ. Пожалуйста, проверьте адрес API или "
"ваш ключ. Транскрипция и перевод могут работать, если API не поддерживает "
@ -399,8 +400,7 @@ msgstr "Модель:"
#: buzz/widgets/transcriber/transcription_options_group_box.py
#: buzz/transcriber/recording_transcriber.py
msgid "First time use of a model may take up to several minutest to load."
msgstr ""
"Первое использование модели может занять несколько минут для загрузки."
msgstr "Первое использование модели может занять несколько минут для загрузки."
#: buzz/widgets/transcriber/transcription_options_group_box.py
msgid "Api Key:"
@ -577,6 +577,10 @@ msgstr "Отменено"
msgid "Queued"
msgstr "В очереди"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Skipped"
msgstr "Пропущено"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "File Name / URL"
msgstr "Имя файла / Ссылка"
@ -639,8 +643,8 @@ msgid "Cannot Restart"
msgstr "Невозможно перезапустить"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Only failed or canceled transcriptions can be restarted."
msgstr "Перезапустить можно только неудачные или отменённые транскрипции."
msgid "Only failed, canceled, or skipped transcriptions can be restarted."
msgstr "Перезапустить можно только неудачные, отменённые или пропущенные транскрипции."
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Failed to restart transcription: {}"
@ -656,7 +660,7 @@ msgstr ""
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Could not restart transcription: transcriber worker not found."
msgstr ""
msgstr "Не удалось перезапустить транскрипцию: рабочий процесс транскрибатора не найден."
"Не удалось перезапустить транскрипцию: обработчик транскрипции не найден."
#: buzz/widgets/recording_transcriber_widget.py
@ -748,8 +752,8 @@ msgid ""
"Please check your audio devices or check the application logs for more "
"information."
msgstr ""
"Пожалуйста, проверьте ваши аудиоустройства или посмотрите журналы приложения"
" для получения дополнительной информации."
"Пожалуйста, проверьте ваши аудиоустройства или посмотрите журналы приложения "
"для получения дополнительной информации."
#: buzz/widgets/plugins_dialog/plugins_dialog.py
msgid "Plugins"
@ -1057,9 +1061,8 @@ msgid "Desired subtitle length"
msgstr "Желаемая длина субтитров"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid ""
"Available only if word level timings were disabled during transcription"
msgstr ""
msgid "Available only if word level timings were disabled during transcription"
msgstr "Доступно только если временны́е метки на уровне слов были отключены при транскрипции"
"Доступно только если тайминги на уровне слов были отключены во время "
"транскрипции"
@ -1088,7 +1091,7 @@ msgstr "Объединить"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid "Available only if word level timings were enabled during transcription"
msgstr ""
msgstr "Доступно только если временны́е метки на уровне слов были включены при транскрипции"
"Доступно только если тайминги на уровне слов были включены во время "
"транскрипции"
@ -1258,9 +1261,8 @@ msgstr "Не удалось сохранить API-ключ OpenAI в связк
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py
#: buzz/transcriber/recording_transcriber.py
msgid "Whisper server failed to start. Check logs for details."
msgstr ""
"Не удалось запустить сервер Whisper. Проверьте журналы для получения "
"деталей."
msgstr "Сервер Whisper не смог запуститься. Проверьте журналы для получения подробностей."
"Не удалось запустить сервер Whisper. Проверьте журналы для получения деталей."
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py
#: buzz/transcriber/recording_transcriber.py
@ -1733,8 +1735,8 @@ msgstr "Улучшенное определение языка"
msgid ""
"Detect the spoken language with whisper.cpp before transcription (using the "
"largest downloaded model, or the tiny model otherwise) and use it for the "
"transcription and exported file names. Only runs when the language is set to"
" auto-detect."
"transcription and exported file names. Only runs when the language is set to "
"auto-detect."
msgstr ""
"Определяет язык речи с помощью whisper.cpp перед расшифровкой (используя "
"самую большую загруженную модель или, в противном случае, модель tiny) и "
@ -1779,14 +1781,13 @@ msgstr "Автоматическое изменение размера тран
#: buzz/plugins/transcript_resizer/plugin.py
msgid ""
"When a transcription has word-level timings, automatically regroup the words"
" into properly sized subtitles and replace the result. Mirrors the Merge "
"When a transcription has word-level timings, automatically regroup the words "
"into properly sized subtitles and replace the result. Mirrors the Merge "
"options of the transcript resizer."
msgstr ""
"Если у транскрипции есть тайминги на уровне слов, слова автоматически "
"перегруппируются в субтитры подходящего размера, а результат заменяется. "
"Повторяет параметры объединения в инструменте изменения размера "
"транскрипции."
"Повторяет параметры объединения в инструменте изменения размера транскрипции."
#: buzz/plugins/transcript_resizer/plugin.py
msgid "Merge gap (seconds)"
@ -1800,6 +1801,34 @@ msgstr "Пунктуация"
msgid "Maximum subtitle length"
msgstr "Максимальная длина субтитра"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip Already Transcribed"
msgstr "Пропустить уже транскрибированные"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip transcription if results already exist on disk or in the database"
msgstr "Пропустить транскрипцию, если результаты уже существуют на диске или в базе данных"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check for existing result files"
msgstr "Проверить наличие файлов результатов"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next "
"to it"
msgstr ""
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check in transcription database"
msgstr "Проверить в базе данных транскрипций"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if this file has already been transcribed and the record exists in the "
"database"
msgstr ""
#: buzz/plugins/ai_summary/plugin.py
msgid "AI Summary"
msgstr "ИИ-резюме"
@ -1838,17 +1867,18 @@ msgstr "Папка вывода (для файла)"
#: buzz/file_transcriber_queue_worker.py
msgid ""
"Speech extraction failed! Check your internet connection — a model may need "
"to be downloaded."
"Speech extraction failed! Check your internet connection \\u2014 a model may "
"need to be downloaded."
msgstr ""
"Не удалось извлечь речь! Проверьте подключение к интернету — возможно, нужно"
" скачать модель."
"Не удалось извлечь речь! Проверьте подключение к интернету — возможно, нужно "
"скачать модель."
#~ msgid "Live recording mode:"
#~ msgstr "Режим живой записи:"
#~ msgid "Comma-separated, e.g. \"0.0, 0.2, 0.4, 0.6, 0.8, 1.0\""
#~ msgstr "Значения, разделённые запятыми, напр., \"0.0, 0.2, 0.4, 0.6, 0.8, 1.0\""
#~ msgstr ""
#~ "Значения, разделённые запятыми, напр., \"0.0, 0.2, 0.4, 0.6, 0.8, 1.0\""
#~ msgid "Temperature:"
#~ msgstr "Температура:"
@ -1865,8 +1895,8 @@ msgstr ""
#~ msgstr "Уведомление о разрешениях Snap"
#~ msgid ""
#~ "Detected missing permissions, please check that snap permissions have been "
#~ "granted"
#~ "Detected missing permissions, please check that snap permissions have "
#~ "been granted"
#~ msgstr ""
#~ "Обнаружена нехватка разрешений. Пожалуйста, проверьте, были ли выданы "
#~ "разрешения для Snap"
@ -1874,7 +1904,8 @@ msgstr ""
#~ msgid ""
#~ "To enable necessary permissions run the following commands in the terminal"
#~ msgstr ""
#~ "Для включения необходимых разрешений выполните следующие команды в терминале"
#~ "Для включения необходимых разрешений выполните следующие команды в "
#~ "терминале"
#~ msgid "Close"
#~ msgstr "Закрыть"

View file

@ -3,7 +3,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-06-14 16:54+0300\n"
"POT-Creation-Date: 2026-06-27 15:05+0300\n"
"PO-Revision-Date: \n"
"Last-Translator: Yevhen Popok <xalt7x.service@gmail.com>\n"
"Language-Team: \n"
@ -11,7 +11,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : "
"n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Poedit 3.4.4\n"
#: buzz/widgets/import_url_dialog.py buzz/settings/shortcut.py
@ -195,8 +196,7 @@ msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
msgid "Use 8-bit quantization to reduce memory usage"
msgstr ""
"Використовувати 8-бітне квантування для зменшення використання пам'яті"
msgstr "Використовувати 8-бітне квантування для зменшення використання пам'яті"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
msgid ""
@ -216,7 +216,7 @@ msgstr "Використовувати лише CPU та вимкнути при
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
msgid "Set this if larger models do not fit your GPU memory and Buzz crashes"
msgstr ""
msgstr "Встановіть це, якщо великі моделі не поміщаються в пам'ять GPU і Buzz зависає"
"Увімкніть це, якщо великі моделі не поміщаються в пам'ять GPU і Buzz падає"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
@ -244,8 +244,8 @@ msgid ""
"API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in "
"API key may cause errors."
msgstr ""
"API підтримує лише символи base64 (A-Za-z0-9+/=_-). Інші символи в API-ключі"
" можуть спричиняти помилки."
"API підтримує лише символи base64 (A-Za-z0-9+/=_-). Інші символи в API-ключі "
"можуть спричиняти помилки."
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
#: buzz/widgets/transcriber/advanced_settings_dialog.py
@ -255,12 +255,12 @@ msgstr "Виберіть теку для експорту"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
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"
" validation."
"Transcription and translation may still work if the API does not support key "
"validation."
msgstr ""
"OpenAI API повернув недійсну відповідь. Будь ласка, перевірте адресу вашого "
"API-ключа. Транскрипція та переклад можуть продовжити працювати, якщо API не"
" підтримує перевірку ключа."
"API-ключа. Транскрипція та переклад можуть продовжити працювати, якщо API не "
"підтримує перевірку ключа."
#: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py
msgid "Enable folder watch"
@ -400,8 +400,7 @@ msgstr "Модель:"
#: buzz/widgets/transcriber/transcription_options_group_box.py
#: buzz/transcriber/recording_transcriber.py
msgid "First time use of a model may take up to several minutest to load."
msgstr ""
"Перше використання моделі може тривати кілька хвилин для завантаження."
msgstr "Перше використання моделі може тривати кілька хвилин для завантаження."
#: buzz/widgets/transcriber/transcription_options_group_box.py
msgid "Api Key:"
@ -578,6 +577,10 @@ msgstr "Скасовано"
msgid "Queued"
msgstr "У черзі"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Skipped"
msgstr "Пропущено"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "File Name / URL"
msgstr "Назва файлу / посилання"
@ -640,8 +643,8 @@ msgid "Cannot Restart"
msgstr "Неможливо перезапустити"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Only failed or canceled transcriptions can be restarted."
msgstr "Перезапустити можна лише невдалі або скасовані транскрипції."
msgid "Only failed, canceled, or skipped transcriptions can be restarted."
msgstr "Перезапустити можна лише невдалі, скасовані або пропущені транскрипції."
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Failed to restart transcription: {}"
@ -657,7 +660,7 @@ msgstr ""
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Could not restart transcription: transcriber worker not found."
msgstr ""
msgstr "Не вдалося перезапустити транскрипцію: робочий процес транскрибатора не знайдено."
"Не вдалося перезапустити транскрипцію: обробник транскрипції не знайдено."
#: buzz/widgets/recording_transcriber_widget.py
@ -975,8 +978,7 @@ msgstr "Повторювати фрагмент"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py
msgid "Enable/disable looping when clicking on transcript segments"
msgstr ""
"Увімкнути/вимкнути повторення при натисканні на фрагменти транскрипції"
msgstr "Увімкнути/вимкнути повторення при натисканні на фрагменти транскрипції"
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py
msgid "Follow Audio"
@ -1059,9 +1061,8 @@ msgid "Desired subtitle length"
msgstr "Бажана довжина субтитрів"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid ""
"Available only if word level timings were disabled during transcription"
msgstr ""
msgid "Available only if word level timings were disabled during transcription"
msgstr "Доступно лише якщо часові позначки на рівні слів були вимкнені під час транскрипції"
"Доступно лише якщо хронометраж на рівні слів був вимкнений під час "
"транскрипції"
@ -1090,7 +1091,7 @@ msgstr "Об'єднати"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid "Available only if word level timings were enabled during transcription"
msgstr ""
msgstr "Доступно лише якщо часові позначки на рівні слів були ввімкнені під час транскрипції"
"Доступно лише якщо хронометраж на рівні слів був увімкнений під час "
"транскрипції"
@ -1258,9 +1259,8 @@ msgstr "Не вдається додати до звʼязки ключів API-
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py
#: buzz/transcriber/recording_transcriber.py
msgid "Whisper server failed to start. Check logs for details."
msgstr ""
"Не вдалося запустити сервер Whisper. Перевірте журнали для отримання "
"деталей."
msgstr "Сервер Whisper не зміг запуститись. Перевірте журнали для отримання деталей."
"Не вдалося запустити сервер Whisper. Перевірте журнали для отримання деталей."
#: buzz/transcriber/local_whisper_cpp_server_transcriber.py
#: buzz/transcriber/recording_transcriber.py
@ -1733,8 +1733,8 @@ msgstr "Покращене визначення мови"
msgid ""
"Detect the spoken language with whisper.cpp before transcription (using the "
"largest downloaded model, or the tiny model otherwise) and use it for the "
"transcription and exported file names. Only runs when the language is set to"
" auto-detect."
"transcription and exported file names. Only runs when the language is set to "
"auto-detect."
msgstr ""
"Визначає мову мовлення за допомогою whisper.cpp перед розпізнаванням "
"(використовуючи найбільшу завантажену модель або, в іншому разі, модель "
@ -1762,8 +1762,8 @@ msgid ""
"Export the transcript to a Microsoft Word (.docx) file after transcription, "
"optionally including timestamps."
msgstr ""
"Експортує транскрипцію у файл Microsoft Word (.docx) після розпізнавання, за"
" бажанням із часовими позначками."
"Експортує транскрипцію у файл Microsoft Word (.docx) після розпізнавання, за "
"бажанням із часовими позначками."
#: buzz/plugins/export_docx/plugin.py buzz/plugins/ai_summary/plugin.py
msgid "Leave empty to save next to the source file."
@ -1779,8 +1779,8 @@ msgstr "Автоматична зміна розміру транскрипці
#: buzz/plugins/transcript_resizer/plugin.py
msgid ""
"When a transcription has word-level timings, automatically regroup the words"
" into properly sized subtitles and replace the result. Mirrors the Merge "
"When a transcription has word-level timings, automatically regroup the words "
"into properly sized subtitles and replace the result. Mirrors the Merge "
"options of the transcript resizer."
msgstr ""
"Якщо транскрипція має таймінги на рівні слів, слова автоматично "
@ -1799,6 +1799,34 @@ msgstr "Пунктуація"
msgid "Maximum subtitle length"
msgstr "Максимальна довжина субтитра"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip Already Transcribed"
msgstr "Пропустити вже транскрибовані"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip transcription if results already exist on disk or in the database"
msgstr "Пропустити транскрипцію, якщо результати вже існують на диску або в базі даних"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check for existing result files"
msgstr "Перевірити наявність файлів результатів"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next "
"to it"
msgstr ""
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check in transcription database"
msgstr "Перевірити в базі даних транскрипцій"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if this file has already been transcribed and the record exists in the "
"database"
msgstr ""
#: buzz/plugins/ai_summary/plugin.py
msgid "AI Summary"
msgstr "ШІ-резюме"
@ -1837,8 +1865,8 @@ msgstr "Папка виводу (для файлу)"
#: buzz/file_transcriber_queue_worker.py
msgid ""
"Speech extraction failed! Check your internet connection — a model may need "
"to be downloaded."
"Speech extraction failed! Check your internet connection \\u2014 a model may "
"need to be downloaded."
msgstr ""
"Не вдалося витягти мовлення! Перевірте підключення до інтернету — можливо, "
"потрібно завантажити модель."
@ -1864,11 +1892,11 @@ msgstr ""
#~ msgstr "Попередження щодо дозволів Snap"
#~ msgid ""
#~ "Detected missing permissions, please check that snap permissions have been "
#~ "granted"
#~ "Detected missing permissions, please check that snap permissions have "
#~ "been granted"
#~ msgstr ""
#~ "Виявлено нестачу повноважень. Будь ласка, перевірте, чи були надані дозволи "
#~ "для Snap"
#~ "Виявлено нестачу повноважень. Будь ласка, перевірте, чи були надані "
#~ "дозволи для Snap"
#~ msgid ""
#~ "To enable necessary permissions run the following commands in the terminal"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-06-14 16:54+0300\n"
"POT-Creation-Date: 2026-06-27 15:05+0300\n"
"PO-Revision-Date: 2023-05-01 15:45+0800\n"
"Last-Translator: \n"
"Language-Team: lamb\n"
@ -202,7 +202,9 @@ msgstr "使用8位量化以减少内存占用"
msgid ""
"Applies to Huggingface and Faster Whisper models. Reduces GPU memory usage "
"but may slightly decrease transcription quality."
msgstr "适用于 Huggingface 和 Faster Whisper 模型。可减少 GPU 内存占用,但可能略微降低转录质量。"
msgstr ""
"适用于 Huggingface 和 Faster Whisper 模型。可减少 GPU 内存占用,但可能略微降"
"低转录质量。"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
msgid "Reduce GPU RAM"
@ -238,7 +240,8 @@ msgstr "无效的API key"
msgid ""
"API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in "
"API key may cause errors."
msgstr "API只支持 base64字符(A-Za-z0-9+/=_-)。其他字符在API密钥中可能导致错误。"
msgstr ""
"API只支持 base64字符(A-Za-z0-9+/=_-)。其他字符在API密钥中可能导致错误。"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
#: buzz/widgets/transcriber/advanced_settings_dialog.py
@ -248,9 +251,11 @@ msgstr "选择输出文件夹"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
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"
" validation."
msgstr "OpenAI API返回无效响应。请检查API网址或您的密钥。如果API不支持密钥验证,转录和翻译可能仍然有效翻"
"Transcription and translation may still work if the API does not support key "
"validation."
msgstr ""
"OpenAI API返回无效响应。请检查API网址或您的密钥。如果API不支持密钥验证,转录"
"和翻译可能仍然有效翻"
#: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py
msgid "Enable folder watch"
@ -441,7 +446,9 @@ msgid ""
"Please translate each text sent to you from English to Spanish. Translation "
"will be used in an automated system, please do not add any comments or "
"notes, just the translation."
msgstr "请将发送给您的每段文本从英语翻译成西班牙语。翻译将用于自动化系统,请不要添加任何评论或备注,只需提供翻译即可。"
msgstr ""
"请将发送给您的每段文本从英语翻译成西班牙语。翻译将用于自动化系统,请不要添加"
"任何评论或备注,只需提供翻译即可。"
#: buzz/widgets/transcriber/advanced_settings_dialog.py
msgid "Instructions for AI:"
@ -564,6 +571,10 @@ msgstr "取消"
msgid "Queued"
msgstr "队列中"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Skipped"
msgstr "已跳过"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "File Name / URL"
msgstr "文件名称/URL"
@ -626,8 +637,8 @@ msgid "Cannot Restart"
msgstr "无法重新开始"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Only failed or canceled transcriptions can be restarted."
msgstr "只有失败或已取消的识别才能重新开始。"
msgid "Only failed, canceled, or skipped transcriptions can be restarted."
msgstr "只有失败、已取消或已跳过的识别才能重新开始。"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Failed to restart transcription: {}"
@ -1035,8 +1046,7 @@ msgid "Desired subtitle length"
msgstr "所需字幕长度"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid ""
"Available only if word level timings were disabled during transcription"
msgid "Available only if word level timings were disabled during transcription"
msgstr "仅在转录时禁用逐词时间戳时可用"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
@ -1235,7 +1245,8 @@ msgid ""
"with a smaller model. To force CPU mode use BUZZ_FORCE_CPU=TRUE environment "
"variable."
msgstr ""
"Whisper 服务器因内存不足而启动失败。请尝试使用较小的模型。如需强制使用 CPU 模式,请设置环境变量 BUZZ_FORCE_CPU=TRUE。"
"Whisper 服务器因内存不足而启动失败。请尝试使用较小的模型。如需强制使用 CPU 模"
"式,请设置环境变量 BUZZ_FORCE_CPU=TRUE。"
#: buzz/transcriber/transcriber.py
msgid "Translate to English"
@ -1697,8 +1708,8 @@ msgstr "增强语言检测"
msgid ""
"Detect the spoken language with whisper.cpp before transcription (using the "
"largest downloaded model, or the tiny model otherwise) and use it for the "
"transcription and exported file names. Only runs when the language is set to"
" auto-detect."
"transcription and exported file names. Only runs when the language is set to "
"auto-detect."
msgstr ""
"在转录前使用 whisper.cpp 检测所说的语言(使用已下载的最大模型,否则使用 tiny "
"模型),并将其用于转录和导出的文件名。仅在语言设置为自动检测时运行。"
@ -1721,7 +1732,8 @@ msgstr "导出为 DOCX"
msgid ""
"Export the transcript to a Microsoft Word (.docx) file after transcription, "
"optionally including timestamps."
msgstr "转录完成后将转录文本导出为 Microsoft Word (.docx) 文件,可选择包含时间戳。"
msgstr ""
"转录完成后将转录文本导出为 Microsoft Word (.docx) 文件,可选择包含时间戳。"
#: buzz/plugins/export_docx/plugin.py buzz/plugins/ai_summary/plugin.py
msgid "Leave empty to save next to the source file."
@ -1737,10 +1749,12 @@ msgstr "自动转录文本调整"
#: buzz/plugins/transcript_resizer/plugin.py
msgid ""
"When a transcription has word-level timings, automatically regroup the words"
" into properly sized subtitles and replace the result. Mirrors the Merge "
"When a transcription has word-level timings, automatically regroup the words "
"into properly sized subtitles and replace the result. Mirrors the Merge "
"options of the transcript resizer."
msgstr "当转录具有单词级时间戳时,自动将单词重新分组为大小合适的字幕并替换结果。与转录调整器的合并选项相同。"
msgstr ""
"当转录具有单词级时间戳时,自动将单词重新分组为大小合适的字幕并替换结果。与转"
"录调整器的合并选项相同。"
#: buzz/plugins/transcript_resizer/plugin.py
msgid "Merge gap (seconds)"
@ -1754,6 +1768,34 @@ msgstr "标点符号"
msgid "Maximum subtitle length"
msgstr "字幕最大长度"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip Already Transcribed"
msgstr "跳过已转录文件"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip transcription if results already exist on disk or in the database"
msgstr "如果磁盘或数据库中已存在结果,则跳过转录"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check for existing result files"
msgstr "检查现有结果文件"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next "
"to it"
msgstr ""
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check in transcription database"
msgstr "在转录数据库中检查"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if this file has already been transcribed and the record exists in the "
"database"
msgstr ""
#: buzz/plugins/ai_summary/plugin.py
msgid "AI Summary"
msgstr "AI 摘要"
@ -1762,7 +1804,9 @@ msgstr "AI 摘要"
msgid ""
"Generate an AI summary of the transcript via an OpenAI-compatible API and "
"save it to the Notes field and/or a file."
msgstr "通过兼容 OpenAI 的 API 生成转录文本的 AI 摘要,并将其保存到备注字段和/或文件中。"
msgstr ""
"通过兼容 OpenAI 的 API 生成转录文本的 AI 摘要,并将其保存到备注字段和/或文件"
"中。"
#: buzz/plugins/ai_summary/plugin.py
msgid "API base URL"
@ -1790,8 +1834,8 @@ msgstr "输出文件夹(用于文件)"
#: buzz/file_transcriber_queue_worker.py
msgid ""
"Speech extraction failed! Check your internet connection — a model may need "
"to be downloaded."
"Speech extraction failed! Check your internet connection \\u2014 a model may "
"need to be downloaded."
msgstr "语音提取失败!请检查您的网络连接——可能需要下载模型。"
#~ msgid "Live recording mode:"
@ -1813,8 +1857,8 @@ msgstr "语音提取失败!请检查您的网络连接——可能需要下载
#~ msgstr "快照权限通知"
#~ msgid ""
#~ "Detected missing permissions, please check that snap permissions have been "
#~ "granted"
#~ "Detected missing permissions, please check that snap permissions have "
#~ "been granted"
#~ msgstr "检测到缺少权限,请检查是否已获得快照权限"
#~ msgid ""

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-06-14 16:54+0300\n"
"POT-Creation-Date: 2026-06-27 15:05+0300\n"
"PO-Revision-Date: 2023-05-01 15:45+0800\n"
"Last-Translator: \n"
"Language-Team: Lamb\n"
@ -202,7 +202,9 @@ msgstr "使用 8 位元量化以降低記憶體使用量"
msgid ""
"Applies to Huggingface and Faster Whisper models. Reduces GPU memory usage "
"but may slightly decrease transcription quality."
msgstr "適用於 Huggingface 和 Faster Whisper 模型。可降低 GPU 記憶體使用量,但可能略微降低轉錄品質。"
msgstr ""
"適用於 Huggingface 和 Faster Whisper 模型。可降低 GPU 記憶體使用量,但可能略"
"微降低轉錄品質。"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
msgid "Reduce GPU RAM"
@ -238,7 +240,9 @@ msgstr "無效的 API 金鑰"
msgid ""
"API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in "
"API key may cause errors."
msgstr "API 僅支援 base64 字元(A-Za-z0-9+/=_-)。API 金鑰中的其他字元可能會導致錯誤。"
msgstr ""
"API 僅支援 base64 字元(A-Za-z0-9+/=_-)。API 金鑰中的其他字元可能會導致錯"
"誤。"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
#: buzz/widgets/transcriber/advanced_settings_dialog.py
@ -248,9 +252,11 @@ msgstr "選擇匯出資料夾"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py
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"
" validation."
msgstr "OpenAI API 傳回無效回應。請檢查 API 網址或您的金鑰。若 API 不支援金鑰驗證,轉錄和翻譯仍可能正常運作。"
"Transcription and translation may still work if the API does not support key "
"validation."
msgstr ""
"OpenAI API 傳回無效回應。請檢查 API 網址或您的金鑰。若 API 不支援金鑰驗證,轉"
"錄和翻譯仍可能正常運作。"
#: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py
msgid "Enable folder watch"
@ -441,7 +447,9 @@ msgid ""
"Please translate each text sent to you from English to Spanish. Translation "
"will be used in an automated system, please do not add any comments or "
"notes, just the translation."
msgstr "請將傳送給您的每段文字從英文翻譯成西班牙文。翻譯將用於自動化系統,請勿添加任何評論或備註,僅提供翻譯即可。"
msgstr ""
"請將傳送給您的每段文字從英文翻譯成西班牙文。翻譯將用於自動化系統,請勿添加任"
"何評論或備註,僅提供翻譯即可。"
#: buzz/widgets/transcriber/advanced_settings_dialog.py
msgid "Instructions for AI:"
@ -564,6 +572,10 @@ msgstr "取消"
msgid "Queued"
msgstr "排隊中"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Skipped"
msgstr "已跳過"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "File Name / URL"
msgstr "檔案名稱 / 網址"
@ -626,8 +638,8 @@ msgid "Cannot Restart"
msgstr "無法重新開始"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Only failed or canceled transcriptions can be restarted."
msgstr "只有失敗或已取消的轉錄才能重新開始。"
msgid "Only failed, canceled, or skipped transcriptions can be restarted."
msgstr "只有失敗、已取消或已跳過的轉錄才能重新開始。"
#: buzz/widgets/transcription_tasks_table_widget.py
msgid "Failed to restart transcription: {}"
@ -1035,8 +1047,7 @@ msgid "Desired subtitle length"
msgstr "理想字幕長度"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
msgid ""
"Available only if word level timings were disabled during transcription"
msgid "Available only if word level timings were disabled during transcription"
msgstr "僅在轉錄時停用單字級別時間戳記時可用"
#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py
@ -1235,7 +1246,8 @@ msgid ""
"with a smaller model. To force CPU mode use BUZZ_FORCE_CPU=TRUE environment "
"variable."
msgstr ""
"Whisper 伺服器因記憶體不足而啟動失敗。請改用較小的模型重試。若要強制使用 CPU 模式,請設定環境變數 BUZZ_FORCE_CPU=TRUE。"
"Whisper 伺服器因記憶體不足而啟動失敗。請改用較小的模型重試。若要強制使用 CPU "
"模式,請設定環境變數 BUZZ_FORCE_CPU=TRUE。"
#: buzz/transcriber/transcriber.py
msgid "Translate to English"
@ -1697,8 +1709,8 @@ msgstr "增強語言偵測"
msgid ""
"Detect the spoken language with whisper.cpp before transcription (using the "
"largest downloaded model, or the tiny model otherwise) and use it for the "
"transcription and exported file names. Only runs when the language is set to"
" auto-detect."
"transcription and exported file names. Only runs when the language is set to "
"auto-detect."
msgstr ""
"在轉錄前使用 whisper.cpp 偵測所說的語言(使用已下載的最大模型,否則使用 tiny "
"模型),並將其用於轉錄和匯出的檔案名稱。僅在語言設定為自動偵測時執行。"
@ -1721,7 +1733,8 @@ msgstr "匯出為 DOCX"
msgid ""
"Export the transcript to a Microsoft Word (.docx) file after transcription, "
"optionally including timestamps."
msgstr "轉錄完成後將轉錄文字匯出為 Microsoft Word (.docx) 檔案,可選擇包含時間戳。"
msgstr ""
"轉錄完成後將轉錄文字匯出為 Microsoft Word (.docx) 檔案,可選擇包含時間戳。"
#: buzz/plugins/export_docx/plugin.py buzz/plugins/ai_summary/plugin.py
msgid "Leave empty to save next to the source file."
@ -1737,10 +1750,12 @@ msgstr "自動轉錄文字調整"
#: buzz/plugins/transcript_resizer/plugin.py
msgid ""
"When a transcription has word-level timings, automatically regroup the words"
" into properly sized subtitles and replace the result. Mirrors the Merge "
"When a transcription has word-level timings, automatically regroup the words "
"into properly sized subtitles and replace the result. Mirrors the Merge "
"options of the transcript resizer."
msgstr "當轉錄具有單字層級時間戳時,自動將單字重新分組為大小適當的字幕並取代結果。與轉錄調整器的合併選項相同。"
msgstr ""
"當轉錄具有單字層級時間戳時,自動將單字重新分組為大小適當的字幕並取代結果。與"
"轉錄調整器的合併選項相同。"
#: buzz/plugins/transcript_resizer/plugin.py
msgid "Merge gap (seconds)"
@ -1754,6 +1769,34 @@ msgstr "標點符號"
msgid "Maximum subtitle length"
msgstr "字幕最大長度"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip Already Transcribed"
msgstr "跳過已轉錄檔案"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Skip transcription if results already exist on disk or in the database"
msgstr "如果磁碟或資料庫中已存在結果,則跳過轉錄"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check for existing result files"
msgstr "檢查現有結果檔案"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next "
"to it"
msgstr ""
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid "Check in transcription database"
msgstr "在轉錄資料庫中檢查"
#: buzz/plugins/skip_already_transcribed/plugin.py
msgid ""
"Skip if this file has already been transcribed and the record exists in the "
"database"
msgstr ""
#: buzz/plugins/ai_summary/plugin.py
msgid "AI Summary"
msgstr "AI 摘要"
@ -1762,7 +1805,9 @@ msgstr "AI 摘要"
msgid ""
"Generate an AI summary of the transcript via an OpenAI-compatible API and "
"save it to the Notes field and/or a file."
msgstr "透過相容 OpenAI 的 API 產生轉錄文字的 AI 摘要,並將其儲存到備註欄位和/或檔案中。"
msgstr ""
"透過相容 OpenAI 的 API 產生轉錄文字的 AI 摘要,並將其儲存到備註欄位和/或檔案"
"中。"
#: buzz/plugins/ai_summary/plugin.py
msgid "API base URL"
@ -1790,8 +1835,8 @@ msgstr "輸出資料夾(用於檔案)"
#: buzz/file_transcriber_queue_worker.py
msgid ""
"Speech extraction failed! Check your internet connection — a model may need "
"to be downloaded."
"Speech extraction failed! Check your internet connection \\u2014 a model may "
"need to be downloaded."
msgstr "語音提取失敗!請檢查您的網路連線——可能需要下載模型。"
#~ msgid "Live recording mode:"

View file

@ -90,6 +90,7 @@ class MyPlugin(BuzzPlugin):
| Hook | Thread | Purpose |
|------------------------|--------------|----------------------------------------------------|
| `check_skip` | worker | Return `list[Segment]` to skip transcription entirely, or `None` to proceed. Runs after `before_transcription`. DB access via `context.transcription_service` is safe (marshaled to main thread). |
| `before_transcription` | worker | Process/replace source audio; return new file path |
| `after_transcription` | background | Modify/replace result `Segment`s before save |
| `on_complete` | background | Post-save side effects (notes, file export, upload)|
@ -168,6 +169,12 @@ line breaks. Strings without a translation (or when no file matches the active
locale) fall through unchanged, so a plugin works with no locale files at all.
The active locale comes from Buzz's `UI_LOCALE` setting.
> **Critical:** Never use an empty string `""` as a translation value. The
> translator treats an empty value as "no translation" and falls back to the
> English source string, but only if the value is falsy. A locale file with
> `"My Plugin": ""` will cause the plugin name to appear blank in the UI.
> Either provide a real translation or omit the key entirely.
Bundled plugins ship a translation file for **every locale Buzz supports**. The
current set (keep it in sync across all bundled plugins) is:
@ -181,6 +188,11 @@ in **all** of these files. See `ai_summary/locale/` or
`enhanced_language_detection/locale/` for a complete worked example, and copy the
file set from an existing plugin so the locale list stays consistent.
> **Cache note:** Bundled plugins are copied to `~/.cache/Buzz/plugins/` only
> once (if the folder does not already exist). When updating a bundled plugin's
> locale files during development, you must also sync them into the cache
> manually: `cp -r buzz/plugins/<id>/. ~/.cache/Buzz/plugins/<id>/`.
## Packaging & distribution
A distributable plugin is a `.zip` whose contents are the plugin folder. The

View file

@ -79,7 +79,8 @@ def plugin_gettext(plugin_file: str) -> Callable[[str], str]:
logger.warning("Failed to load plugin locale %s: %s", path, exc)
def translate(text: str) -> str:
return translations.get(text, text)
value = translations.get(text)
return value if value else text
return translate
@ -162,6 +163,16 @@ class BuzzPlugin:
"""
return segments
def check_skip(
self, task: "FileTranscriptionTask", context: PluginContext
) -> Optional[List["Segment"]]:
"""Return a list of segments to skip transcription (may be empty), or None to proceed.
Runs on the worker thread. DB access via context.transcription_service is
marshaled to the main thread by the host.
"""
return None
def on_complete(
self,
transcription_id,

View file

@ -34,6 +34,7 @@ BUNDLED_PLUGIN_IDS = [
"transcript_resizer",
"export_docx",
"enhanced_language_detection",
"skip_already_transcribed",
]
ENTRY_MODULE = "plugin.py"

View file

@ -85,6 +85,25 @@ class PluginManager:
return [self.plugins[pid] for pid in self.order if pid in self.plugins]
# --- hook dispatch ---------------------------------------------------
def run_check_skip(self, task) -> tuple:
"""Call check_skip on each enabled plugin; first non-None return wins.
Returns (should_skip: bool, segments: list).
"""
for plugin in self.enabled_plugins_in_order():
try:
result = plugin.check_skip(task, self._context(plugin))
if result is not None:
return True, result
except Exception as exc:
logger.error(
"Plugin '%s' check_skip failed: %s",
plugin.metadata.id,
exc,
exc_info=True,
)
return False, []
def run_before_transcription(self, task) -> None:
for plugin in self.enabled_plugins_in_order():
try:

View file

@ -0,0 +1,8 @@
{
"Skip Already Transcribed": "Omet els ja transcrits",
"Skip transcription if results already exist on disk or in the database": "Omet la transcripció si els resultats ja existeixen al disc o a la base de dades",
"Check for existing result files": "Comprova si hi ha fitxers de resultats existents",
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next to it": "Omet si es troba un fitxer .txt, .srt o .vtt amb el mateix nom d'àudio al costat",
"Check in transcription database": "Comprova a la base de dades de transcripcions",
"Skip if this file has already been transcribed and the record exists in the database": "Omet si aquest fitxer ja ha estat transcrit i el registre existeix a la base de dades"
}

View file

@ -0,0 +1,8 @@
{
"Skip Already Transcribed": "Spring allerede transkriberede over",
"Skip transcription if results already exist on disk or in the database": "Spring transskription over, hvis resultater allerede findes på disk eller i databasen",
"Check for existing result files": "Tjek for eksisterende resultatfiler",
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next to it": "Spring over, hvis en .txt-, .srt- eller .vtt-fil med samme lydfilnavn findes ved siden af",
"Check in transcription database": "Tjek i transskriptionsdatabasen",
"Skip if this file has already been transcribed and the record exists in the database": "Spring over, hvis denne fil allerede er transkriberet og posten findes i databasen"
}

View file

@ -0,0 +1,8 @@
{
"Skip Already Transcribed": "Bereits Transkribierte überspringen",
"Skip transcription if results already exist on disk or in the database": "Transkription überspringen, wenn Ergebnisse bereits auf der Festplatte oder in der Datenbank vorhanden sind",
"Check for existing result files": "Nach vorhandenen Ergebnisdateien suchen",
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next to it": "Überspringen, wenn eine .txt-, .srt- oder .vtt-Datei mit demselben Audiodateinamen daneben gefunden wird",
"Check in transcription database": "In der Transkriptionsdatenbank prüfen",
"Skip if this file has already been transcribed and the record exists in the database": "Überspringen, wenn diese Datei bereits transkribiert wurde und der Eintrag in der Datenbank vorhanden ist"
}

View file

@ -0,0 +1,8 @@
{
"Skip Already Transcribed": "Omitir ya transcritos",
"Skip transcription if results already exist on disk or in the database": "Omitir la transcripción si los resultados ya existen en el disco o en la base de datos",
"Check for existing result files": "Buscar archivos de resultado existentes",
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next to it": "Omitir si se encuentra un archivo .txt, .srt o .vtt con el mismo nombre de audio junto a él",
"Check in transcription database": "Comprobar en la base de datos de transcripciones",
"Skip if this file has already been transcribed and the record exists in the database": "Omitir si este archivo ya ha sido transcrito y el registro existe en la base de datos"
}

View file

@ -0,0 +1,8 @@
{
"Skip Already Transcribed": "Salta i già trascritti",
"Skip transcription if results already exist on disk or in the database": "Salta la trascrizione se i risultati esistono già sul disco o nel database",
"Check for existing result files": "Cerca file di risultato esistenti",
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next to it": "Salta se viene trovato un file .txt, .srt o .vtt con lo stesso nome audio accanto ad esso",
"Check in transcription database": "Controlla nel database delle trascrizioni",
"Skip if this file has already been transcribed and the record exists in the database": "Salta se questo file è già stato trascritto e il record esiste nel database"
}

View file

@ -0,0 +1,8 @@
{
"Skip Already Transcribed": "転写済みをスキップ",
"Skip transcription if results already exist on disk or in the database": "ディスクまたはデータベースに結果が既に存在する場合は転写をスキップ",
"Check for existing result files": "既存の結果ファイルを確認",
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next to it": "同じ音声ファイル名の .txt、.srt、または .vtt ファイルが隣にある場合はスキップ",
"Check in transcription database": "転写データベースを確認",
"Skip if this file has already been transcribed and the record exists in the database": "このファイルが既に転写済みでデータベースにレコードが存在する場合はスキップ"
}

View file

@ -0,0 +1,8 @@
{
"Skip Already Transcribed": "Izlaist jau transkribētos",
"Skip transcription if results already exist on disk or in the database": "Izlaist transkripciju, ja rezultāti jau ir mapē vai datubāzē",
"Check for existing result files": "Pārbaudīt esošos rezultātu failus",
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next to it": "Izlaist, ja blakus atrodams .txt, .srt vai .vtt fails ar tādu pašu audio faila nosaukumu",
"Check in transcription database": "Pārbaudīt transkripciju datubāzē",
"Skip if this file has already been transcribed and the record exists in the database": "Izlaist, ja šis fails jau ir transkribēts un ieraksts pastāv datubāzē"
}

View file

@ -0,0 +1,8 @@
{
"Skip Already Transcribed": "Reeds getranscribeerde overslaan",
"Skip transcription if results already exist on disk or in the database": "Transcriptie overslaan als resultaten al bestaan op schijf of in de database",
"Check for existing result files": "Controleren op bestaande resultaatbestanden",
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next to it": "Overslaan als een .txt-, .srt- of .vtt-bestand met dezelfde audionaam ernaast wordt gevonden",
"Check in transcription database": "Controleren in de transcriptiedatabase",
"Skip if this file has already been transcribed and the record exists in the database": "Overslaan als dit bestand al is getranscribeerd en de record in de database bestaat"
}

View file

@ -0,0 +1,8 @@
{
"Skip Already Transcribed": "Pomijaj już transkrybowane",
"Skip transcription if results already exist on disk or in the database": "Pomiń transkrypcję, jeśli wyniki już istnieją na dysku lub w bazie danych",
"Check for existing result files": "Sprawdź istniejące pliki wyników",
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next to it": "Pomiń, jeśli obok zostanie znaleziony plik .txt, .srt lub .vtt o tej samej nazwie",
"Check in transcription database": "Sprawdź w bazie danych transkrypcji",
"Skip if this file has already been transcribed and the record exists in the database": "Pomiń, jeśli ten plik został już transkrybowany i rekord istnieje w bazie danych"
}

View file

@ -0,0 +1,8 @@
{
"Skip Already Transcribed": "Pular já transcritos",
"Skip transcription if results already exist on disk or in the database": "Pular a transcrição se os resultados já existirem no disco ou no banco de dados",
"Check for existing result files": "Verificar arquivos de resultado existentes",
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next to it": "Pular se um arquivo .txt, .srt ou .vtt com o mesmo nome de áudio for encontrado ao lado",
"Check in transcription database": "Verificar no banco de dados de transcrições",
"Skip if this file has already been transcribed and the record exists in the database": "Pular se este arquivo já foi transcrito e o registro existe no banco de dados"
}

View file

@ -0,0 +1,8 @@
{
"Skip Already Transcribed": "Пропустить уже транскрибированные",
"Skip transcription if results already exist on disk or in the database": "Пропустить транскрипцию, если результаты уже существуют на диске или в базе данных",
"Check for existing result files": "Проверить наличие файлов результатов",
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next to it": "Пропустить, если рядом найден файл .txt, .srt или .vtt с тем же именем",
"Check in transcription database": "Проверить в базе данных транскрипций",
"Skip if this file has already been transcribed and the record exists in the database": "Пропустить, если файл уже транскрибирован и запись существует в базе данных"
}

View file

@ -0,0 +1,8 @@
{
"Skip Already Transcribed": "Пропустити вже транскрибовані",
"Skip transcription if results already exist on disk or in the database": "Пропустити транскрипцію, якщо результати вже існують на диску або в базі даних",
"Check for existing result files": "Перевірити наявність файлів результатів",
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next to it": "Пропустити, якщо поруч знайдено файл .txt, .srt або .vtt з тією ж назвою",
"Check in transcription database": "Перевірити в базі даних транскрипцій",
"Skip if this file has already been transcribed and the record exists in the database": "Пропустити, якщо файл вже транскрибовано і запис існує в базі даних"
}

View file

@ -0,0 +1,8 @@
{
"Skip Already Transcribed": "跳过已转录文件",
"Skip transcription if results already exist on disk or in the database": "如果磁盘或数据库中已存在结果,则跳过转录",
"Check for existing result files": "检查现有结果文件",
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next to it": "如果在同目录下找到与音频文件名匹配的 .txt、.srt 或 .vtt 文件,则跳过",
"Check in transcription database": "在转录数据库中检查",
"Skip if this file has already been transcribed and the record exists in the database": "如果此文件已被转录且记录存在于数据库中,则跳过"
}

View file

@ -0,0 +1,8 @@
{
"Skip Already Transcribed": "跳過已轉錄檔案",
"Skip transcription if results already exist on disk or in the database": "如果磁碟或資料庫中已存在結果,則跳過轉錄",
"Check for existing result files": "檢查現有結果檔案",
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next to it": "如果在同目錄下找到與音訊檔名相符的 .txt、.srt 或 .vtt 檔案,則跳過",
"Check in transcription database": "在轉錄資料庫中檢查",
"Skip if this file has already been transcribed and the record exists in the database": "如果此檔案已被轉錄且記錄存在於資料庫中,則跳過"
}

View file

@ -0,0 +1,177 @@
import logging
import os
import re
from pathlib import Path
from typing import List, Optional
from buzz.plugins.base import (
BuzzPlugin,
ConfigField,
ConfigFieldType,
PluginContext,
PluginMetadata,
plugin_gettext,
)
_ = plugin_gettext(__file__)
logger = logging.getLogger(__name__)
class SkipAlreadyTranscribedPlugin(BuzzPlugin):
metadata = PluginMetadata(
id="skip_already_transcribed",
name=_("Skip Already Transcribed"),
description=_(
"Skip transcription if results already exist on disk or in the database"
),
config_fields=[
ConfigField(
key="check_result_files",
label=_("Check for existing result files"),
type=ConfigFieldType.BOOL,
default=True,
description=_(
"Skip if a .txt, .srt, or .vtt file matching the audio filename is found next to it"
),
),
ConfigField(
key="check_database",
label=_("Check in transcription database"),
type=ConfigFieldType.BOOL,
default=False,
description=_(
"Skip if this file has already been transcribed and the record exists in the database"
),
),
],
)
def check_skip(
self, task, context: PluginContext
) -> Optional[List]:
file_path = task.original_file_path or task.file_path
if not file_path:
return None
if context.config.get("check_result_files"):
segments = self._find_result_file_segments(file_path, task, context)
if segments is not None:
context.log.info(
"Skipping transcription: found existing result file for %s",
os.path.basename(file_path),
)
return segments
if context.config.get("check_database"):
segments = self._find_db_segments(file_path, context)
if segments is not None:
context.log.info(
"Skipping transcription: found prior DB record for %s",
os.path.basename(file_path),
)
return segments
return None
def _find_result_file_segments(self, file_path: str, task, context: PluginContext):
from buzz.transcriber.transcriber import OutputFormat
stem = Path(file_path).stem
if stem.endswith("_speech"):
stem = stem[:-7]
search_dirs = [Path(file_path).parent]
if task.output_directory:
search_dirs.append(Path(task.output_directory))
for search_dir in search_dirs:
if not search_dir.is_dir():
continue
for fmt in OutputFormat:
for candidate in search_dir.glob(f"{stem}*.{fmt.value}"):
segments = self._parse_result_file(candidate, fmt, context)
if segments is not None:
return segments
return None
def _parse_result_file(self, path: Path, fmt, context: PluginContext):
from buzz.transcriber.transcriber import OutputFormat, Segment
try:
text = path.read_text(encoding="utf-8")
if fmt == OutputFormat.TXT:
if not text.strip():
return None
return [Segment(start=0, end=0, text=text.strip())]
elif fmt == OutputFormat.SRT:
return self._parse_srt(text) or None
elif fmt == OutputFormat.VTT:
return self._parse_vtt(text) or None
except Exception as exc:
context.log.warning("Failed to parse result file %s: %s", path, exc)
return None
def _parse_srt(self, text: str) -> List:
from buzz.transcriber.transcriber import Segment
segments = []
blocks = re.split(r"\n\n+", text.strip())
for block in blocks:
lines = block.strip().splitlines()
if len(lines) < 3:
continue
m = re.match(
r"(\d+:\d+:\d+,\d+) --> (\d+:\d+:\d+,\d+)", lines[1]
)
if not m:
continue
start = self._ts_to_ms(m.group(1).replace(",", "."))
end = self._ts_to_ms(m.group(2).replace(",", "."))
body = "\n".join(lines[2:])
segments.append(Segment(start=start, end=end, text=body))
return segments
def _parse_vtt(self, text: str) -> List:
from buzz.transcriber.transcriber import Segment
segments = []
blocks = re.split(r"\n\n+", text.strip())
for block in blocks:
lines = block.strip().splitlines()
if len(lines) < 2:
continue
m = re.match(
r"(\d+:\d+:\d+\.\d+) --> (\d+:\d+:\d+\.\d+)", lines[0]
)
if not m:
continue
start = self._ts_to_ms(m.group(1))
end = self._ts_to_ms(m.group(2))
body = "\n".join(lines[1:])
segments.append(Segment(start=start, end=end, text=body))
return segments
def _ts_to_ms(self, ts: str) -> int:
parts = ts.split(":")
h, m, s = int(parts[0]), int(parts[1]), float(parts[2])
return int((h * 3600 + m * 60 + s) * 1000)
def _find_db_segments(self, file_path: str, context: PluginContext):
from buzz.transcriber.transcriber import Segment
filename = os.path.basename(file_path)
try:
tid = context.transcription_service.find_completed_transcription_by_filename(
filename
)
if tid is None:
return None
raw = context.transcription_service.get_transcription_segments(tid)
return [
Segment(start=s.start_time, end=s.end_time, text=s.text)
for s in raw
]
except Exception as exc:
context.log.warning("DB check failed: %s", exc)
return None

View file

@ -180,6 +180,7 @@ class FileTranscriptionTask:
COMPLETED = "completed"
FAILED = "failed"
CANCELED = "canceled"
SKIPPED = "skipped"
class Source(enum.Enum):
FILE_IMPORT = "file_import"

View file

@ -358,9 +358,9 @@ class MainWindow(QMainWindow):
@staticmethod
def can_open_transcript(transcription: Transcription) -> bool:
return (
FileTranscriptionTask.Status(transcription.status)
== FileTranscriptionTask.Status.COMPLETED
return FileTranscriptionTask.Status(transcription.status) in (
FileTranscriptionTask.Status.COMPLETED,
FileTranscriptionTask.Status.SKIPPED,
)
def should_enable_stop_transcription_action(self):
@ -377,6 +377,7 @@ class MainWindow(QMainWindow):
FileTranscriptionTask.Status.COMPLETED,
FileTranscriptionTask.Status.FAILED,
FileTranscriptionTask.Status.CANCELED,
FileTranscriptionTask.Status.SKIPPED,
]
)
@ -432,6 +433,15 @@ class MainWindow(QMainWindow):
pass
def on_task_completed(self, task: FileTranscriptionTask, segments: List[Segment]):
# Handle skipped tasks (e.g. plugin detected file already transcribed)
if task.status == FileTranscriptionTask.Status.SKIPPED:
self.transcription_service.update_transcription_as_skipped(task.uid, segments)
self.table_widget.refresh_row(task.uid)
if self.quit_on_complete:
self.close()
QApplication.quit()
return
# Update file path in database only for URL imports where file is downloaded
if task.source == FileTranscriptionTask.Source.URL_IMPORT and task.file_path:
logging.debug(f"Updating transcription file path: {task.file_path}")

View file

@ -84,6 +84,8 @@ def format_record_status_text(record: QSqlRecord) -> str:
return _("Canceled")
case FileTranscriptionTask.Status.QUEUED:
return _("Queued")
case FileTranscriptionTask.Status.SKIPPED:
return _("Skipped")
case _: # Case to handle UNKNOWN status
return ""
@ -299,8 +301,8 @@ class TranscriptionTasksTableWidget(QTableView):
if selected_rows:
transcription = self.transcription(selected_rows[0])
# Add restart/continue action for failed/canceled tasks
if transcription.status in ["failed", "canceled"]:
# Add restart/continue action for failed/canceled/skipped tasks
if transcription.status in ["failed", "canceled", "skipped"]:
restart_action = menu.addAction(_("Restart Transcription"))
restart_action.triggered.connect(self.on_restart_transcription_action)
menu.addSeparator()
@ -684,12 +686,12 @@ class TranscriptionTasksTableWidget(QTableView):
transcription = self.transcription(selected_rows[0])
# Check if the task can be restarted
if transcription.status not in ["failed", "canceled"]:
if transcription.status not in ["failed", "canceled", "skipped"]:
from PyQt6.QtWidgets import QMessageBox
QMessageBox.information(
self,
_("Cannot Restart"),
_("Only failed or canceled transcriptions can be restarted.")
self,
_("Cannot Restart"),
_("Only failed, canceled, or skipped transcriptions can be restarted.")
)
return

View file

@ -0,0 +1,48 @@
---
title: Plugins
---
Plugins are available since Buzz version **1.4.5**.
Plugins extend Buzz's transcription pipeline without requiring changes to the core application. They can process audio before transcription, modify transcription results, and run custom actions after a transcription is saved (such as exporting to additional formats or generating summaries).
**To manage plugins:**
- Open **Help → Plugins**.
- Enable or disable individual plugins using the toggle next to each one.
- Drag plugins to change the order they run in.
- Click the settings icon next to a plugin to configure its options.
- Add a community plugin by clicking **Add by URL** and pasting a link to a `.zip` file.
## Built-in plugins
### AI Summary
Generates a summary of the transcript using an OpenAI-compatible API (e.g. OpenAI, Ollama) and saves it to the transcript's Notes field and/or a text file next to the source audio. Requires an API key and base URL.
### Enhanced Language Detection
Automatically detects the spoken language before transcription begins using a local Whisper model. Useful when transcribing files with unknown languages. Can optionally download the tiny Whisper model if no local model is available.
### Export to DOCX
Exports the completed transcript to a Microsoft Word `.docx` file. Timestamps can optionally be included. No extra dependencies required.
### Resize Transcript
Automatically regroups word-level transcript segments into subtitle-sized chunks after transcription. Supports merging by silence gaps, splitting on punctuation, and enforcing a maximum subtitle length. Requires word-level timings to be enabled on the transcription.
### Skip Already Transcribed
Skips transcription if results for the imported file have already been produced. Supports two detection methods (both can be enabled at the same time):
- **Check for existing result files** *(enabled by default)* — looks for a `.txt`, `.srt`, or `.vtt` file matching the audio filename in the same folder. If found, the existing transcript is imported and the file is marked as **Skipped** without re-running the model.
- **Check in transcription database** — checks whether this filename already has a completed transcription in Buzz's database. If found, the prior transcript segments are copied to the new entry and the file is marked as **Skipped**.
This is useful when re-importing a folder of files where some have already been transcribed, or when watching a folder automatically.
## Building your own plugin
The built-in plugins are a good starting point for writing a custom plugin. Browse the source code in [buzz/plugins](https://github.com/chidiwilliams/buzz/tree/main/buzz/plugins) to see how they are structured and which hooks they use. Alternatively point your AI coding agent to this folder and ask to crete the plugin you need.
If you build something useful, please share it with the Buzz community! Open a [GitHub Discussion](https://github.com/chidiwilliams/buzz/discussions) or submit a pull request to have your plugin considered for inclusion as a built-in.

View file

@ -663,3 +663,243 @@ def test_before_and_after_hooks(qtbot, isolated_plugins, transcription_service,
assert result[-1].text == "added"
manager.remove("my_plugin")
# ---------------------------------------------------------------------------
# skip_already_transcribed plugin tests
# ---------------------------------------------------------------------------
def _sat_plugin():
from buzz.plugins.skip_already_transcribed import plugin as sat
return sat.SkipAlreadyTranscribedPlugin()
def _sat_context(config=None, db_records=None):
import logging
from buzz.plugins.base import PluginContext
# db_records: {filename: [db_segment, ...]} where db_segment has .start_time/.end_time/.text
records = db_records or {}
class _DBSeg:
def __init__(self, text, start, end):
self.text = text
self.start_time = start
self.end_time = end
class _Service:
def find_completed_transcription_by_filename(self, filename):
return filename if filename in records else None
def get_transcription_segments(self, tid):
return records.get(tid, [])
ctx = PluginContext(
config=config or {"check_result_files": True, "check_database": False},
transcription_service=_Service(),
settings=None,
logger=logging.getLogger("test"),
)
return ctx
class _SatTask:
def __init__(self, file_path="/tmp/audio.mp3", output_directory=None):
self.file_path = file_path
self.original_file_path = file_path
self.output_directory = output_directory
def test_skip_already_transcribed_loads():
from buzz.plugins.loader import load_plugin_from_dir
plugin = load_plugin_from_dir("buzz/plugins/skip_already_transcribed")
assert plugin.metadata.id == "skip_already_transcribed"
keys = [f.key for f in plugin.metadata.config_fields]
assert "check_result_files" in keys
assert "check_database" in keys
def test_sat_returns_none_when_no_files_and_db_disabled(tmp_path):
plugin = _sat_plugin()
audio = tmp_path / "audio.mp3"
audio.write_bytes(b"")
ctx = _sat_context(config={"check_result_files": True, "check_database": False})
result = plugin.check_skip(_SatTask(file_path=str(audio)), ctx)
assert result is None
def test_sat_skips_on_txt_file(tmp_path):
plugin = _sat_plugin()
audio = tmp_path / "audio.mp3"
audio.write_bytes(b"")
txt = tmp_path / "audio (transcribed on 01-Jan-2024 12-00-00).txt"
txt.write_text("Hello world.", encoding="utf-8")
ctx = _sat_context(config={"check_result_files": True, "check_database": False})
result = plugin.check_skip(_SatTask(file_path=str(audio)), ctx)
assert result is not None
assert len(result) == 1
assert result[0].text == "Hello world."
assert result[0].start == 0
assert result[0].end == 0
def test_sat_skips_on_srt_file(tmp_path):
plugin = _sat_plugin()
audio = tmp_path / "lecture.mp3"
audio.write_bytes(b"")
srt = tmp_path / "lecture (transcribed on 01-Jan-2024 12-00-00).srt"
srt.write_text(
"1\n00:00:01,000 --> 00:00:03,500\nHello there.\n\n"
"2\n00:00:04,000 --> 00:00:06,000\nGeneral Kenobi.\n\n",
encoding="utf-8",
)
ctx = _sat_context(config={"check_result_files": True, "check_database": False})
result = plugin.check_skip(_SatTask(file_path=str(audio)), ctx)
assert result is not None
assert len(result) == 2
assert result[0].text == "Hello there."
assert result[0].start == 1000
assert result[0].end == 3500
assert result[1].text == "General Kenobi."
assert result[1].start == 4000
def test_sat_skips_on_vtt_file(tmp_path):
plugin = _sat_plugin()
audio = tmp_path / "talk.mp3"
audio.write_bytes(b"")
vtt = tmp_path / "talk (transcribed on 01-Jan-2024 12-00-00).vtt"
vtt.write_text(
"WEBVTT\n\n"
"00:00:00.500 --> 00:00:02.000\nFirst line.\n\n"
"00:00:03.000 --> 00:00:05.000\nSecond line.\n\n",
encoding="utf-8",
)
ctx = _sat_context(config={"check_result_files": True, "check_database": False})
result = plugin.check_skip(_SatTask(file_path=str(audio)), ctx)
assert result is not None
assert len(result) == 2
assert result[0].text == "First line."
assert result[0].start == 500
assert result[1].text == "Second line."
assert result[1].start == 3000
def test_sat_returns_none_when_result_files_disabled(tmp_path):
plugin = _sat_plugin()
audio = tmp_path / "audio.mp3"
audio.write_bytes(b"")
(tmp_path / "audio.txt").write_text("Hello world.", encoding="utf-8")
ctx = _sat_context(config={"check_result_files": False, "check_database": False})
result = plugin.check_skip(_SatTask(file_path=str(audio)), ctx)
assert result is None
def test_sat_skips_on_db_record(tmp_path):
plugin = _sat_plugin()
audio = tmp_path / "audio.mp3"
audio.write_bytes(b"")
class _DBSeg:
def __init__(self, text, start, end):
self.text = text
self.start_time = start
self.end_time = end
ctx = _sat_context(
config={"check_result_files": False, "check_database": True},
db_records={"audio.mp3": [_DBSeg("From DB.", 0, 2000)]},
)
result = plugin.check_skip(_SatTask(file_path=str(audio)), ctx)
assert result is not None
assert len(result) == 1
assert result[0].text == "From DB."
assert result[0].start == 0
assert result[0].end == 2000
def test_sat_no_skip_when_db_returns_none(tmp_path):
plugin = _sat_plugin()
audio = tmp_path / "audio.mp3"
audio.write_bytes(b"")
ctx = _sat_context(
config={"check_result_files": False, "check_database": True},
db_records={},
)
result = plugin.check_skip(_SatTask(file_path=str(audio)), ctx)
assert result is None
def test_sat_result_files_checked_before_db(tmp_path):
"""Result file check wins if both options are enabled."""
plugin = _sat_plugin()
audio = tmp_path / "audio.mp3"
audio.write_bytes(b"")
(tmp_path / "audio (transcribed on 01-Jan-2024 12-00-00).txt").write_text(
"From file.", encoding="utf-8"
)
class _DBSeg:
text = "From DB."
start_time = 0
end_time = 1000
ctx = _sat_context(
config={"check_result_files": True, "check_database": True},
db_records={"audio.mp3": [_DBSeg()]},
)
result = plugin.check_skip(_SatTask(file_path=str(audio)), ctx)
assert result is not None
assert result[0].text == "From file."
def test_sat_strips_speech_suffix(tmp_path):
"""Files with _speech suffix (post speech-extraction) match by original stem."""
plugin = _sat_plugin()
audio = tmp_path / "audio_speech.mp3"
audio.write_bytes(b"")
(tmp_path / "audio (transcribed on 01-Jan-2024 12-00-00).txt").write_text(
"From file.", encoding="utf-8"
)
ctx = _sat_context(config={"check_result_files": True, "check_database": False})
result = plugin.check_skip(_SatTask(file_path=str(audio)), ctx)
assert result is not None
assert result[0].text == "From file."
def test_sat_run_check_skip_integration(qtbot, isolated_plugins, transcription_service, plugin_settings, tmp_path):
"""Manager.run_check_skip calls through to the plugin."""
from buzz.plugins.manager import PluginManager
from buzz.plugins import loader
plugins_dir, _deps, _secrets = isolated_plugins
import shutil
sat_src = "buzz/plugins/skip_already_transcribed"
shutil.copytree(sat_src, str(plugins_dir / "skip_already_transcribed"))
audio = tmp_path / "audio.mp3"
audio.write_bytes(b"")
(tmp_path / "audio (transcribed on 01-Jan-2024 12-00-00).txt").write_text(
"Existing transcript.", encoding="utf-8"
)
manager = PluginManager(transcription_service, plugin_settings)
manager.initialize()
manager.set_enabled("skip_already_transcribed", True)
manager.set_config("skip_already_transcribed", {"check_result_files": True, "check_database": False})
task = _SatTask(file_path=str(audio))
should_skip, segments = manager.run_check_skip(task)
assert should_skip is True
assert len(segments) == 1
assert segments[0].text == "Existing transcript."
manager.remove("skip_already_transcribed")

View file

@ -88,7 +88,8 @@ class TestSpeakerIdentificationWidget:
assert len(result) == 1
assert isinstance(result[0], list)
assert (result == [[{'end_time': 8904, 'speaker': 'Speaker 0', 'start_time': 140, 'text': 'Bien venue dans. '}]]
or result == [[{'end_time': 8904, 'speaker': 'Speaker 0', 'start_time': 140, 'text': 'Bienvenue dans. '}]])
or result == [[{'end_time': 8904, 'speaker': 'Speaker 0', 'start_time': 140, 'text': 'Bienvenue dans. '}]]
or result == [[{'end_time': 8904, 'speaker': 'Speaker 0', 'start_time': 140, 'text': 'Bien venue dans '}]])
def test_identify_button_toggles_visibility(self, qtbot: QtBot, transcription, transcription_service):
widget = SpeakerIdentificationWidget(