-
Notifications
You must be signed in to change notification settings - Fork 160
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* all translation keys * wrong word * changed some translation labels added some translations * updated pyinstaller instructions * included species labels and radio button labels * added machine translated german * added missing localizations and fixed a key * updated gradio width in browser * updated some translations * added settings to gui * ensure gui-settings.json exists, added to git-ignore * updated some german translations. removed the restart button label from translations file as it is not used anymore --------- Co-authored-by: Josef Haupt <[email protected]> Co-authored-by: Max Mauermann <[email protected]>
- Loading branch information
1 parent
27e3675
commit f25312f
Showing
8 changed files
with
754 additions
and
172 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -157,4 +157,6 @@ dmypy.json | |
|
||
train_data/ | ||
train_cache.npz | ||
autotune/ | ||
autotune/ | ||
|
||
gui-settings.json |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -22,4 +22,4 @@ footer { | |
border-radius: 50%; | ||
width: 1rem; | ||
height: 1rem; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,40 +1,54 @@ | ||
function checkForNewerVersion() { | ||
function sendGetRequest(url) { | ||
return new Promise((resolve, reject) => { | ||
const xhr = new XMLHttpRequest(); | ||
xhr.open("GET", url); | ||
xhr.onload = () => { | ||
if (xhr.status === 200) { | ||
resolve(xhr.responseText); | ||
} else { | ||
reject(new Error(`Request failed with status ${xhr.status}`)); | ||
} | ||
}; | ||
xhr.onerror = () => { | ||
reject(new Error("Request failed")); | ||
}; | ||
xhr.send(); | ||
}); | ||
} | ||
function init() { | ||
function checkForNewerVersion() { | ||
console.log("Checking for newer version..."); | ||
|
||
function sendGetRequest(url) { | ||
return new Promise((resolve, reject) => { | ||
const xhr = new XMLHttpRequest(); | ||
xhr.open("GET", url); | ||
xhr.onload = () => { | ||
if (xhr.status === 200) { | ||
resolve(xhr.responseText); | ||
} else { | ||
reject(new Error(`Request failed with status ${xhr.status}`)); | ||
} | ||
}; | ||
xhr.onerror = () => { | ||
reject(new Error("Request failed")); | ||
}; | ||
xhr.send(); | ||
}); | ||
} | ||
|
||
const apiUrl = "https://api.github.com/repos/kahst/BirdNET-Analyzer/releases/latest"; | ||
|
||
const apiUrl = "https://api.github.com/repos/kahst/BirdNET-Analyzer/releases/latest"; | ||
sendGetRequest(apiUrl) | ||
.then(response => { | ||
const current_version = "v" + document.getElementById("current-version").textContent; | ||
const response_object = JSON.parse(response); | ||
const latest_version = response_object.tag_name; | ||
|
||
sendGetRequest(apiUrl) | ||
.then(response => { | ||
const current_version = "v" + document.getElementById("current-version").textContent; | ||
const response_object = JSON.parse(response); | ||
const latest_version = response_object.tag_name; | ||
if (current_version !== latest_version) { | ||
const updateNotification = document.getElementById("update-available"); | ||
|
||
if (current_version !== latest_version) { | ||
const updateNotification = document.getElementById("update-available"); | ||
updateNotification.style.display = "block"; | ||
const linkElement = updateNotification.getElementsByTagName("a")[0] | ||
linkElement.href = response_object.html_url; | ||
linkElement.target = "_blank"; | ||
} | ||
}) | ||
.catch(error => { | ||
console.error(error); | ||
}); | ||
} | ||
|
||
function overwriteStyles() { | ||
console.log("Overwriting styles..."); | ||
const styles = document.createElement("style"); | ||
styles.innerHTML = "@media (width <= 1024px) { .app {max-width: initial !important;}}"; | ||
document.head.appendChild(styles); | ||
} | ||
|
||
updateNotification.style.display = "block"; | ||
const linkElement = updateNotification.getElementsByTagName("a")[0] | ||
linkElement.href = response_object.html_url; | ||
linkElement.target = "_blank"; | ||
} | ||
}) | ||
.catch(error => { | ||
console.error(error); | ||
}); | ||
checkForNewerVersion(); | ||
overwriteStyles(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,166 @@ | ||
{ | ||
"single-tab-title": "Einzelanalyse", | ||
"single-audio-label": "Datei", | ||
"single-tab-output-header-start": "Start (s)", | ||
"single-tab-output-header-end": "Ende (s)", | ||
"single-tab-output-header-sci-name": "Wissenschaftlicher Name", | ||
"single-tab-output-header-common-name": "Trivialname", | ||
"single-tab-output-header-confidence": "Konfidenz", | ||
"inference-settings-accordion-label": "Inferenzeinstellungen", | ||
"inference-settings-confidence-slider-label": "Konfidenz-Schwellenwert", | ||
"inference-settings-confidence-slider-info": "Passen Sie den Schwellenwert an, um Ergebnisse mit einem Wert unter diesem Niveau zu ignorieren.", | ||
"inference-settings-sensitivity-slider-label": "Sensitivität", | ||
"inference-settings-sensitivity-slider-info": "Passen Sie die Verteilung der Vorhersagewerte an. Höhere Werte führen zu höheren Scores.", | ||
"inference-settings-overlap-slider-label": "Überlappung (s)", | ||
"inference-settings-overlap-slider-info": "BirdNET verwendet 3s-Segmente. Bestimmt die Überlappung mit dem vorherigen Segment.", | ||
"inference-settings-fmin-number-label": "Minimale Frequenz des Bandpassfilters (Hz)", | ||
"inference-settings-fmin-number-info": "Beachten Sie, dass Frequenzgrenzen auch während des Trainings verwendet werden sollten, um hier wirksam zu sein.", | ||
"inference-settings-fmax-number-label": "Maximale Frequenz des Bandpassfilters (Hz)", | ||
"inference-settings-fmax-number-info": "Beachten Sie, dass Frequenzgrenzen auch während des Trainings verwendet werden sollten, um hier wirksam zu sein.", | ||
"species-list-accordion-label": "Artenauswahl", | ||
"species-list-radio-label": "Artenliste", | ||
"species-list-radio-info": "Filtern Sie Arten, die in der Ausgabe enthalten sind.", | ||
"species-list-radio-option-custom-list": "Benutzerdefinierte Artenliste", | ||
"species-list-radio-option-predict-list": "Arten nach Standort", | ||
"species-list-radio-option-custom-classifier": "Benutzerdefinierter Klassifikator", | ||
"species-list-radio-option-all": "Alle Arten", | ||
"species-list-custom-list-file-label": "Datei", | ||
"species-list-coordinates-lat-number-label": "Breitengrad", | ||
"species-list-coordinates-lat-number-info": "Breitengrad des Aufnahmestandorts.", | ||
"species-list-coordinates-lon-number-label": "Längengrad", | ||
"species-list-coordinates-lon-number-info": "Längengrad des Aufnahmestandorts.", | ||
"species-list-coordinates-yearlong-checkbox-label": "Ganzjährig", | ||
"species-list-coordinates-week-slider-label": "Woche", | ||
"species-list-coordinates-week-slider-info": "Geben Sie die Woche des Jahres an, in der die Aufnahme gemacht wurde. Jeder Monat ist dabei in vier Wochen unterteilt wird. Wählen Sie einen Wert von 1 bis 48.", | ||
"species-list-coordinates-threshold-slider-label": "Schwellenwert für Standortfilter", | ||
"species-list-coordinates-threshold-slider-info": "Mindestwahrscheinlichkeit für das Auftreten einer Art, um eingeschlossen zu werden.", | ||
"species-list-custom-classifier-selection-button-label": "Klassifikator auswählen", | ||
"analyze-locale-dropdown-label": "Lokalisierung", | ||
"analyze-locale-dropdown-info": "Lokalisierung für die übersetzten Trivialnamen der Arten in der Ausgabe", | ||
"analyze-start-button-label": "Analysieren", | ||
"multi-tab-title": "Batch-Analyse", | ||
"multi-tab-input-selection-button-label": "Eingabeverzeichnis auswählen (rekursiv)", | ||
"multi-tab-samples-dataframe-column-subpath-header": "Unterpfad", | ||
"multi-tab-samples-dataframe-column-duration-header": "Länge", | ||
"multi-tab-samples-dataframe-no-files-found": "Keine Dateien gefunden", | ||
"multi-tab-output-selection-button-label": "Ausgabeverzeichnis auswählen", | ||
"multi-tab-output-textbox-label": "Ausgabeverzeichnis", | ||
"multi-tab-output-textbox-placeholder": "Wenn nicht ausgewählt, wird das Eingabeverzeichnis verwendet.", | ||
"multi-tab-output-accordion-label": "Ausgabeeinstellungen", | ||
"multi-tab-output-radio-label": "Ergebnistyp", | ||
"multi-tab-output-radio-info": "Geben Sie das Ausgabeformat der Klassifikationen an.", | ||
"multi-tab-output-combine-tables-checkbox-label": "Auswahltabellen kombinieren", | ||
"multi-tab-output-combine-tables-checkbox-info": "Aktivieren Sie diese Option, um alle Auswahltabellen in eine einzige Tabelle zusammenzuführen.", | ||
"multi-tab-output-combined-table-name-textbox-label": "Dateiname der kombinierten Tabelle", | ||
"multi-tab-output-combined-table-name-textbox-info": "Name der kombinierten Auswahltabelle.", | ||
"multi-tab-skip-existing-checkbox-label": "Existierende Ergebnisse überspringen", | ||
"multi-tab-skip-existing-checkbox-info": "Dateien überspringen, die bereits ein Ergebnis haben.", | ||
"multi-tab-batchsize-number-label": "Batch-Größe", | ||
"multi-tab-batchsize-number-info": "Anzahl der gleichzeitig zu verarbeitenden Proben.", | ||
"multi-tab-threads-number-label": "Threads", | ||
"multi-tab-threads-number-info": "Anzahl der CPU-Threads.", | ||
"multi-tab-result-dataframe-column-file-header": "Datei", | ||
"multi-tab-result-dataframe-column-execution-header": "Ausführung", | ||
"training-tab-title": "Trainieren", | ||
"training-tab-input-selection-button-label": "Trainingsdaten auswählen", | ||
"training-tab-classes-dataframe-column-classes-header": "Klassen", | ||
"training-tab-select-output-button-label": "Ausgabeverzeichnis für Klassifikator auswählen", | ||
"training-tab-classifier-textbox-info": "Der Name des neuen Klassifikators.", | ||
"training-tab-output-format-radio-label": "Modellausgabeformat", | ||
"training-tab-output-format-radio-info": "Format des trainierten Klassifikators.", | ||
"training-tab-output-format-both": "beide", | ||
"training-tab-autotune-checkbox-label": "Autotune verwenden", | ||
"training-tab-autotune-checkbox-info": "Sucht nach den besten Hyperparametern, benötigt jedoch mehr Zeit.", | ||
"training-tab-autotune-trials-number-label": "Versuche", | ||
"training-tab-autotune-trials-number-info": "Anzahl der Trainingsläufe für die Hyperparametersuche.", | ||
"training-tab-autotune-executions-number-label": "Ausführungen pro Versuch", | ||
"training-tab-autotune-executions-number-info": "Die Anzahl der Wiederholungen für den Trainingslauf mit einem Satz von Hyperparametern (dies reduziert die Varianz).", | ||
"training-tab-epochs-number-label": "Epochen", | ||
"training-tab-epochs-number-info": "Anzahl der Trainingsepochen.", | ||
"training-tab-batchsize-number-label": "Batch-Größe", | ||
"training-tab-batchsize-number-info": "Anzahl der Samples, die in einem Batch verarbeitet werden.", | ||
"training-tab-learningrate-number-label": "Lernrate", | ||
"training-tab-learningrate-number-info": "Lernrate für den Optimizer.", | ||
"training-tab-upsampling-radio-label": "Upsampling-Modus", | ||
"training-tab-upsampling-radio-info": "Balancieren Sie die Trainingsdaten durch Upsampling von Minderheitenklassen aus.", | ||
"training-tab-upsampling-radio-option-repeat": "wiederholen", | ||
"training-tab-upsampling-radio-option-mean": "Durchschnitt", | ||
"training-tab-upsampling-ratio-slider-label": "Upsampling-Verhältnis", | ||
"training-tab-upsampling-ratio-slider-info": "Das Mindestverhältnis für eine Minderheitenklasse im Vergleich zur Mehrheitsklasse nach dem Upsampling.", | ||
"training-tab-hiddenunits-number-label": "Versteckte Einheiten", | ||
"training-tab-hiddenunits-number-info": "Anzahl der versteckten Einheiten. Wenn auf >0 gesetzt, wird ein Klassifikator mit zwei Schichten verwendet.", | ||
"training-tab-use-mixup-checkbox-label": "Mixup verwenden", | ||
"training-tab-use-mixup-checkbox-info": "Mixup ist eine Technik zur Datenvermehrung, die neue Daten durch Mischen zweier Beispiele und ihrer Label erzeugt.", | ||
"training-tab-crop-mode-radio-label": "Zuschneidemodus", | ||
"training-tab-crop-mode-radio-info": "Anpassen, wie Audiodaten zugeschnitten werden, die länger als der Modellinput sind.", | ||
"training-tab-crop-mode-radio-option-center": "Mitte", | ||
"training-tab-crop-mode-radio-option-first": "Erster", | ||
"training-tab-crop-mode-radio-option-segments": "Segmente", | ||
"training-tab-crop-overlap-number-label": "Überlappung des Zuschnittsegments (s)", | ||
"training-tab-crop-overlap-number-info": "Stellen Sie die Überlappung der Trainingssamples ein.", | ||
"training-tab-model-save-mode-radio-label": "Modellspeichermodus", | ||
"training-tab-model-save-mode-radio-info": "'Ersetzen' wird die ursprüngliche Klassifikationsschicht überschreiben, so dass nur die trainierten Klassen bleiben, 'Anhängen' wird die ursprüngliche Klassifikationsschicht mit der neuen kombinieren.", | ||
"training-tab-model-save-mode-radio-option-replace": "ersetzen", | ||
"training-tab-model-save-mode-radio-option-append": "anhängen", | ||
"training-tab-cache-mode-radio-label": "Cache-Modus für Trainingsdaten", | ||
"training-tab-cache-mode-radio-info": "Passen Sie an, wie Trainingsdaten zwischengespeichert werden. Wählen Sie 'keine' für kein Caching, 'laden' zum Laden aus einer Datei und 'speichern' zum Speichern der komprimierten Trainingsdaten.", | ||
"training-tab-cache-mode-radio-option-none": "keine", | ||
"training-tab-cache-mode-radio-option-load": "laden", | ||
"training-tab-cache-mode-radio-option-save": "speichern", | ||
"training-tab-cache-select-directory-button-label": "Wählen Sie das Verzeichnis der Cache-Datei", | ||
"training-tab-cache-file-name-textbox-info": "Der Name der Cache-Datei.", | ||
"training-tab-cache-select-file-button-label": "Wählen Sie den Speicherort der Cache-Datei", | ||
"training-tab-start-training-button-label": "Training starten", | ||
"training-tab-early-stoppage-msg": "Frühzeitig gestoppt - Validierungsmetrik verbessert sich nicht.", | ||
"segments-tab-title": "Segmente", | ||
"segments-tab-select-audio-input-directory-button-label": "Wählen Sie das Audioverzeichnis (rekursiv)", | ||
"segments-tab-select-results-input-directory-button-label": "Wählen Sie das Ergebnisverzeichnis", | ||
"segments-tab-results-input-textbox-placeholder": "Gleich wie das Audioverzeichnis, wenn nicht ausgewählt", | ||
"segments-tab-output-selection-button-label": "Wählen Sie das Ausgabeverzeichnis", | ||
"segments-tab-output-selection-textbox-placeholder": "Gleich wie das Audioverzeichnis, wenn nicht ausgewählt", | ||
"segments-tab-min-confidence-slider-label": "Konfidenz-Schwellenwert", | ||
"segments-tab-min-confidence-slider-info": "Wählt nur Segmente mit einem Wert über diesem Schwellenwert aus.", | ||
"segments-tab-max-seq-number-label": "Maximale Anzahl von Segmenten", | ||
"segments-tab-max-seq-number-info": "Maximale Anzahl von zufällig extrahierten Segmenten pro Art.", | ||
"segments-tab-seq-length-number-label": "Sequenzlänge (s)", | ||
"segments-tab-seq-length-number-info": "Länge der extrahierten Segmente in Sekunden.", | ||
"segments-tab-threads-number-label": "Threads", | ||
"segments-tab-threads-number-info": "Anzahl der CPU-Threads.", | ||
"segments-tab-extract-button-label": "Segmente extrahieren", | ||
"segments-tab-result-dataframe-column-file-header": "Datei", | ||
"segments-tab-result-dataframe-column-execution-header": "Ausführung", | ||
"species-tab-title": "Arten", | ||
"species-tab-select-output-directory-button-label": "Wählen Sie das Ausgabeverzeichnis", | ||
"species-tab-filename-textbox-label": "Name der Datei, wenn nicht angegeben, wird 'species_list.txt' verwendet.", | ||
"species-tab-sort-radio-label": "Sortieren nach", | ||
"species-tab-sort-radio-info": "Sortiert die Arten nach Häufigkeit des Vorkommens oder alphabetisch.", | ||
"species-tab-sort-radio-option-frequency": "Häufigkeit", | ||
"species-tab-sort-radio-option-alphabetically": "alphabetisch", | ||
"species-tab-finish-info": "Artenliste gespeichert unter", | ||
"species-tab-start-button-label": "Artenliste erstellen", | ||
"settings-tab-title": "Einstellungen", | ||
"settings-tab-language-dropdown-label": "GUI Sprache", | ||
"settings-tab-language-dropdown-info": "Wird erst nach Neustart der Anwendung aktiv.", | ||
"validation-no-file-selected": "Bitte wählen Sie eine Datei aus.", | ||
"validation-no-directory-selected": "Bitte wählen Sie ein Verzeichnis.", | ||
"validation-no-species-list-selected": "Bitte wählen Sie eine Artenliste.", | ||
"validation-no-custom-classifier-selected": "Kein benutzerdefinierter Klassifikator ausgewählt.", | ||
"validation-no-audio-files-found": "Keine Audiodateien gefunden.", | ||
"validation-no-training-data-selected": "Bitte wählen Sie Ihre Trainingsdaten.", | ||
"validation-no-directory-for-classifier-selected": "Bitte wählen Sie ein Verzeichnis für den Klassifikator.", | ||
"validation-no-valid-classifier-name": "Bitte geben Sie einen gültigen Namen für den Klassifikator an.", | ||
"validation-no-valid-epoch-number": "Bitte geben Sie eine gültige Anzahl von Epochen an.", | ||
"validation-no-valid-batch-size": "Bitte geben Sie eine gültige Batch-Größe an.", | ||
"validation-no-valid-learning-rate": "Bitte geben Sie eine gültige Lernrate an.", | ||
"validation-no-valid-frequency": "Bitte geben Sie eine gültige Frequenz an", | ||
"validation-no-audio-directory-selected": "Kein Audioverzeichnis ausgewählt", | ||
"progress-preparing": "Vorbereiten", | ||
"progress-starting": "Starten", | ||
"progress-build-classifier": "Daten laden & Klassifikator erstellen", | ||
"progress-loading-data": "Daten für", | ||
"progress-saving": "Gespeichert unter", | ||
"progress-training": "Modell trainieren", | ||
"progress-autotune": "Autotune läuft", | ||
"progress-search": "Dateien suchen", | ||
"footer-help": "Dokumentation und Support finden Sie unter" | ||
} |
Oops, something went wrong.